[gthumb] started porting of the context menus to GMenu
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] started porting of the context menus to GMenu
- Date: Sat, 9 Nov 2013 20:06:10 +0000 (UTC)
commit 6056b620ffd07975dc43d11e93e7b50e2d684779
Author: Paolo Bacchilega <paobac src gnome org>
Date: Wed Oct 23 23:16:21 2013 +0200
started porting of the context menus to GMenu
extensions/catalogs/callbacks.c | 12 +-
extensions/desktop_background/actions.c | 14 +-
extensions/desktop_background/actions.h | 5 +-
extensions/desktop_background/callbacks.c | 83 +---
extensions/edit_metadata/callbacks.c | 112 +-----
extensions/file_manager/actions.c | 535 ++++++++++++++------------
extensions/file_manager/actions.h | 46 ++--
extensions/file_manager/callbacks.c | 596 +++++++++++------------------
extensions/find_duplicates/actions.c | 7 +-
extensions/find_duplicates/actions.h | 6 +-
extensions/find_duplicates/callbacks.c | 65 +---
extensions/search/callbacks.c | 6 +-
extensions/search/gth-search-task.c | 8 +-
gthumb/Makefile.am | 3 -
gthumb/gedit-message-area.c | 587 ----------------------------
gthumb/gedit-message-area.h | 129 -------
gthumb/gth-browser-actions-callbacks.c | 20 +
gthumb/gth-browser-actions-callbacks.h | 2 +-
gthumb/gth-browser-actions-entries.h | 1 +
gthumb/gth-browser.c | 91 ++++-
gthumb/gth-browser.h | 26 ++-
gthumb/gth-embedded-dialog.c | 25 +-
gthumb/gth-embedded-dialog.h | 5 +-
gthumb/gth-grid-view.c | 15 +
gthumb/gth-info-bar.h | 1 -
gthumb/gth-menu-manager.c | 2 +
gthumb/gthumb.gresource.xml | 3 +
gthumb/resources/Makefile.am | 3 +
gthumb/resources/file-list-menu.ui | 22 +
gthumb/resources/file-menu.ui | 22 +
gthumb/resources/folder-menu.ui | 20 +
31 files changed, 834 insertions(+), 1638 deletions(-)
---
diff --git a/extensions/catalogs/callbacks.c b/extensions/catalogs/callbacks.c
index cf37e86..d4cba05 100644
--- a/extensions/catalogs/callbacks.c
+++ b/extensions/catalogs/callbacks.c
@@ -699,9 +699,9 @@ catalogs__gth_browser_update_extra_widget_cb (GthBrowser *browser)
gtk_button_set_relief (GTK_BUTTON (data->properties_button), GTK_RELIEF_NONE);
gtk_widget_set_tooltip_text (data->properties_button, _("Catalog Properties"));
gtk_widget_show_all (data->properties_button);
- gedit_message_area_add_action_widget (GEDIT_MESSAGE_AREA
(gth_browser_get_list_extra_widget (browser)),
- data->properties_button,
- _RESPONSE_PROPERTIES);
+ gtk_info_bar_add_action_widget (GTK_INFO_BAR (gth_browser_get_list_extra_widget
(browser)),
+ data->properties_button,
+ _RESPONSE_PROPERTIES);
g_signal_connect (data->properties_button,
"clicked",
G_CALLBACK (properties_button_clicked_cb),
@@ -716,9 +716,9 @@ catalogs__gth_browser_update_extra_widget_cb (GthBrowser *browser)
g_object_add_weak_pointer (G_OBJECT (data->organize_button), (gpointer
*)&data->organize_button);
gtk_button_set_relief (GTK_BUTTON (data->organize_button), GTK_RELIEF_NONE);
gtk_widget_show_all (data->organize_button);
- gedit_message_area_add_action_widget (GEDIT_MESSAGE_AREA
(gth_browser_get_list_extra_widget (browser)),
- data->organize_button,
- _RESPONSE_ORGANIZE);
+ gtk_info_bar_add_action_widget (GTK_INFO_BAR (gth_browser_get_list_extra_widget
(browser)),
+ data->organize_button,
+ _RESPONSE_ORGANIZE);
g_signal_connect (data->organize_button,
"clicked",
G_CALLBACK (organize_button_clicked_cb),
diff --git a/extensions/desktop_background/actions.c b/extensions/desktop_background/actions.c
index 6e63bae..d4151bb 100644
--- a/extensions/desktop_background/actions.c
+++ b/extensions/desktop_background/actions.c
@@ -289,9 +289,11 @@ copy_wallpaper_ready_cb (GObject *source_object,
void
-gth_browser_activate_action_tool_desktop_background (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_set_desktop_background (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ GthBrowser *browser = GTH_BROWSER (user_data);
WallpaperData *wdata;
gboolean saving_wallpaper = FALSE;
GList *items;
@@ -359,3 +361,11 @@ gth_browser_activate_action_tool_desktop_background (GtkAction *action,
_g_object_list_unref (file_list);
_gtk_tree_path_list_free (items);
}
+
+
+void
+gth_browser_activate_action_tool_desktop_background (GtkAction *action,
+ GthBrowser *browser)
+{
+ gth_browser_activate_set_desktop_background (NULL, NULL, browser);
+}
diff --git a/extensions/desktop_background/actions.h b/extensions/desktop_background/actions.h
index db86321..9e58298 100644
--- a/extensions/desktop_background/actions.h
+++ b/extensions/desktop_background/actions.h
@@ -22,10 +22,11 @@
#ifndef ACTIONS_H
#define ACTIONS_H
-#include <gtk/gtk.h>
+#include <gthumb.h>
#define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
-DEFINE_ACTION(gth_browser_activate_action_tool_desktop_background)
+DEFINE_ACTION (gth_browser_activate_action_tool_desktop_background)
+DEF_ACTION_CALLBACK (gth_browser_activate_set_desktop_background)
#endif /* ACTIONS_H */
diff --git a/extensions/desktop_background/callbacks.c b/extensions/desktop_background/callbacks.c
index 7c3bf6a..8141cd4 100644
--- a/extensions/desktop_background/callbacks.c
+++ b/extensions/desktop_background/callbacks.c
@@ -26,84 +26,41 @@
#include <gthumb.h>
#include "actions.h"
-#define BROWSER_DATA_KEY "desktop-background-browser-data"
-
-static const char *fixed_ui_info =
-"<ui>"
-" <popup name='FileListPopup'>"
-" <placeholder name='Screen_Actions'>"
-" <menuitem name='DesktopBackground' action='Tool_DesktopBackground'/>"
-" </placeholder>"
-" </popup>"
-" <popup name='FilePopup'>"
-" <placeholder name='Screen_Actions'>"
-" <menuitem name='DesktopBackground' action='Tool_DesktopBackground'/>"
-" </placeholder>"
-" </popup>"
-"</ui>";
-
-
-static GtkActionEntry action_entries[] = {
- { "Tool_DesktopBackground", "desktop",
- N_("Set as Desktop Background"), NULL,
- N_("Set the image as desktop background"),
- G_CALLBACK (gth_browser_activate_action_tool_desktop_background) },
+static const GActionEntry actions[] = {
+ { "set-desktop-background", gth_browser_activate_set_desktop_background }
};
-typedef struct {
- GtkActionGroup *action_group;
-} BrowserData;
-
-
-static void
-browser_data_free (BrowserData *data)
-{
- g_free (data);
-}
-
-
void
db__gth_browser_construct_cb (GthBrowser *browser)
{
- BrowserData *data;
- GError *error = NULL;
-
g_return_if_fail (GTH_IS_BROWSER (browser));
- data = g_new0 (BrowserData, 1);
- data->action_group = gtk_action_group_new ("Desktop Background Actions");
- gtk_action_group_set_translation_domain (data->action_group, NULL);
- gtk_action_group_add_actions (data->action_group,
- action_entries,
- G_N_ELEMENTS (action_entries),
- browser);
- gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), data->action_group, 0);
-
- if (! gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (browser), fixed_ui_info, -1,
&error)) {
- g_message ("building menus failed: %s", error->message);
- g_clear_error (&error);
- }
-
- g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify)
browser_data_free);
+ g_action_map_add_action_entries (G_ACTION_MAP (browser),
+ actions,
+ G_N_ELEMENTS (actions),
+ browser);
+ gth_menu_manager_append_entry (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FILE_SCREEN_ACTIONS),
+ GTH_MENU_MANAGER_NEW_MERGE_ID,
+ _("Set as Desktop Background"),
+ "win.set-desktop-background",
+ NULL,
+ NULL);
+ gth_menu_manager_append_entry (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_SCREEN_ACTIONS),
+ GTH_MENU_MANAGER_NEW_MERGE_ID,
+ _("Set as Desktop Background"),
+ "win.set-desktop-background",
+ NULL,
+ NULL);
}
void
db__gth_browser_update_sensitivity_cb (GthBrowser *browser)
{
- BrowserData *data;
- GtkAction *action;
- int n_selected;
- gboolean sensitive;
-
- data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
- g_return_if_fail (data != NULL);
+ int n_selected;
n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view
(browser)));
- sensitive = n_selected == 1;
-
- action = gtk_action_group_get_action (data->action_group, "Tool_DesktopBackground");
- g_object_set (action, "sensitive", sensitive, NULL);
+ g_object_set (g_action_map_lookup_action (G_ACTION_MAP (browser), "set-desktop-background"),
"enabled", n_selected == 1, NULL);
}
diff --git a/extensions/edit_metadata/callbacks.c b/extensions/edit_metadata/callbacks.c
index 4ba293c..30f5cde 100644
--- a/extensions/edit_metadata/callbacks.c
+++ b/extensions/edit_metadata/callbacks.c
@@ -45,107 +45,21 @@ static const GthMenuEntry action_entries[] = {
};
-static const char *fixed_ui_info =
-"<ui>"
-" <menubar name='MenuBar'>"
-" <menu name='Edit' action='EditMenu'>"
-" <placeholder name='Edit_Actions'>"
-" <menuitem action='Edit_Metadata'/>"
-" </placeholder>"
-" </menu>"
-" </menubar>"
-" <toolbar name='Fullscreen_ToolBar'>"
-" <placeholder name='Edit_Actions'>"
-" <toolitem action='Edit_Metadata'/>"
-" </placeholder>"
-" </toolbar>"
-" <popup name='FileListPopup'>"
-" <placeholder name='File_LastActions'>"
-" <menuitem action='Edit_Tags'/>"
-" <menuitem action='Edit_Metadata'/>"
-" </placeholder>"
-" </popup>"
-" <popup name='FilePopup'>"
-" <placeholder name='File_LastActions'>"
-" <menuitem action='Edit_Tags'/>"
-" <menuitem action='Edit_Metadata'/>"
-" </placeholder>"
-" </popup>"
-"</ui>";
-
-
-static GthActionEntryExt edit_metadata_action_entries[] = {
- { "Edit_QuickTag", "tag", N_("T_ags") },
-
- { "Edit_Metadata", GTK_STOCK_EDIT,
- N_("Comment"), "<control>M",
- N_("Edit the comment and other information of the selected files"),
- GTH_ACTION_FLAG_IS_IMPORTANT,
- G_CALLBACK (gth_browser_activate_action_edit_comment) },
-
- { "Edit_Tags", "tag",
- N_("Tags"), NULL,
- N_("Set the tags of the selected files"),
- GTH_ACTION_FLAG_NONE,
- G_CALLBACK (gth_browser_activate_action_edit_tags) }
-};
-
-
-typedef struct {
- GthBrowser *browser;
- GtkActionGroup *actions;
- guint viewer_ui_merge_id;
-} BrowserData;
-
-
-static void
-browser_data_free (BrowserData *data)
-{
- g_free (data);
-}
-
-
void
edit_metadata__gth_browser_construct_cb (GthBrowser *browser)
{
- BrowserData *data;
- GError *error = NULL;
-
g_return_if_fail (GTH_IS_BROWSER (browser));
- if (gth_main_extension_is_active ("list_tools")) {
- g_action_map_add_action_entries (G_ACTION_MAP (browser),
- actions,
- G_N_ELEMENTS (actions),
- browser);
- gth_menu_manager_append_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_TOOLS2),
- action_entries,
- G_N_ELEMENTS (action_entries));
- }
-
- data = g_new0 (BrowserData, 1);
- data->browser = browser;
-
- data->actions = gtk_action_group_new ("Edit Metadata Actions");
- gtk_action_group_set_translation_domain (data->actions, NULL);
- _gtk_action_group_add_actions_with_flags (data->actions,
- edit_metadata_action_entries,
- G_N_ELEMENTS (edit_metadata_action_entries),
- browser);
- gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), data->actions, 0);
-
- if (! gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (browser), fixed_ui_info, -1,
&error)) {
- g_message ("building menus failed: %s", error->message);
- g_error_free (error);
- }
-
- g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify)
browser_data_free);
-
g_action_map_add_action_entries (G_ACTION_MAP (browser),
actions,
G_N_ELEMENTS (actions),
browser);
+ if (gth_main_extension_is_active ("list_tools"))
+ gth_menu_manager_append_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_TOOLS2),
+ action_entries,
+ G_N_ELEMENTS (action_entries));
+
gth_browser_add_header_bar_button (browser,
GTH_BROWSER_HEADER_SECTION_BROWSER_EDIT,
"comment-symbolic",
@@ -176,21 +90,15 @@ edit_metadata__gth_browser_construct_cb (GthBrowser *browser)
void
edit_metadata__gth_browser_update_sensitivity_cb (GthBrowser *browser)
{
- BrowserData *data;
- int n_selected;
- gboolean sensitive;
-
- data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
- g_return_if_fail (data != NULL);
+ int n_selected;
+ gboolean sensitive;
n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view
(browser)));
-
sensitive = (n_selected > 0);
- g_object_set (gtk_action_group_get_action (data->actions, "Edit_Metadata"), "sensitive", sensitive,
NULL);
- g_object_set (g_action_map_lookup_action (G_ACTION_MAP (data->browser), "edit-metadata"), "enabled",
sensitive, NULL);
- g_object_set (g_action_map_lookup_action (G_ACTION_MAP (data->browser), "edit-tags"), "enabled",
sensitive, NULL);
- g_object_set (g_action_map_lookup_action (G_ACTION_MAP (data->browser), "delete-metadata"),
"enabled", sensitive, NULL);
+ g_object_set (g_action_map_lookup_action (G_ACTION_MAP (browser), "edit-metadata"), "enabled",
sensitive, NULL);
+ g_object_set (g_action_map_lookup_action (G_ACTION_MAP (browser), "edit-tags"), "enabled", sensitive,
NULL);
+ g_object_set (g_action_map_lookup_action (G_ACTION_MAP (browser), "delete-metadata"), "enabled",
sensitive, NULL);
}
diff --git a/extensions/file_manager/actions.c b/extensions/file_manager/actions.c
index 6516b72..1182a96 100644
--- a/extensions/file_manager/actions.c
+++ b/extensions/file_manager/actions.c
@@ -32,6 +32,9 @@
#define MAX_HISTORY_LENGTH 10
+/* -- gth_browser_activate_create_folder -- */
+
+
typedef struct {
GthBrowser *browser;
GFile *parent;
@@ -144,10 +147,12 @@ _gth_browser_create_new_folder (GthBrowser *browser,
void
-gth_browser_action_new_folder (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_create_folder (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GFile *parent;
+ GthBrowser *browser = GTH_BROWSER (user_data);
+ GFile *parent;
parent = g_object_ref (gth_browser_get_location (browser));
_gth_browser_create_new_folder (browser, parent);
@@ -155,7 +160,7 @@ gth_browser_action_new_folder (GtkAction *action,
}
-/* -- gth_browser_clipboard_copy / gth_browser_clipboard_cut -- */
+/* -- gth_browser_activate_edit_cut / gth_browser_activate_edit_copy -- */
typedef struct {
@@ -291,12 +296,14 @@ _gth_browser_clipboard_copy_or_cut (GthBrowser *browser,
void
-gth_browser_activate_action_edit_cut_files (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_edit_cut (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GtkWidget *focused_widget;
- GList *items;
- GList *file_list;
+ GthBrowser *browser = GTH_BROWSER (user_data);
+ GtkWidget *focused_widget;
+ GList *items;
+ GList *file_list;
focused_widget = gtk_window_get_focus (GTK_WINDOW (browser));
if ((focused_widget != NULL) && GTK_IS_EDITABLE (focused_widget))
@@ -312,12 +319,14 @@ gth_browser_activate_action_edit_cut_files (GtkAction *action,
void
-gth_browser_activate_action_edit_copy_files (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_edit_copy (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GtkWidget *focused_widget;
- GList *items;
- GList *file_list;
+ GthBrowser *browser = GTH_BROWSER (user_data);
+ GtkWidget *focused_widget;
+ GList *items;
+ GList *file_list;
focused_widget = gtk_window_get_focus (GTK_WINDOW (browser));
if ((focused_widget != NULL) && GTK_IS_EDITABLE (focused_widget))
@@ -332,7 +341,7 @@ gth_browser_activate_action_edit_copy_files (GtkAction *action,
}
-/* -- gth_browser_clipboard_paste -- */
+/* -- gth_browser_activate_edit_paste -- */
typedef struct {
@@ -437,11 +446,13 @@ clipboard_received_cb (GtkClipboard *clipboard,
void
-gth_browser_activate_action_edit_paste (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_edit_paste (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GtkWidget *focused_widget;
- PasteData *paste_data;
+ GthBrowser *browser = GTH_BROWSER (user_data);
+ GtkWidget *focused_widget;
+ PasteData *paste_data;
focused_widget = gtk_window_get_focus (GTK_WINDOW (browser));
if ((focused_widget != NULL) && GTK_IS_EDITABLE (focused_widget))
@@ -459,12 +470,14 @@ gth_browser_activate_action_edit_paste (GtkAction *action,
void
-gth_browser_activate_action_edit_duplicate (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_duplicate (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GList *items;
- GList *file_list;
- GthTask *task;
+ GthBrowser *browser = GTH_BROWSER (user_data);
+ GList *items;
+ GList *file_list;
+ GthTask *task;
items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view
(browser)));
file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
@@ -478,11 +491,13 @@ gth_browser_activate_action_edit_duplicate (GtkAction *action,
void
-gth_browser_activate_action_edit_trash (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_trash (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GList *items;
- GList *file_list;
+ GthBrowser *browser = GTH_BROWSER (user_data);
+ GList *items;
+ GList *file_list;
items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view
(browser)));
file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
@@ -494,11 +509,13 @@ gth_browser_activate_action_edit_trash (GtkAction *action,
void
-gth_browser_activate_action_edit_delete (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_delete (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GList *items;
- GList *file_list;
+ GthBrowser *browser = GTH_BROWSER (user_data);
+ GList *items;
+ GList *file_list;
items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view
(browser)));
file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
@@ -506,15 +523,18 @@ gth_browser_activate_action_edit_delete (GtkAction *action,
_g_object_list_unref (file_list);
_gtk_tree_path_list_free (items);
+
}
void
-gth_browser_activate_action_edit_rename (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_rename (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GtkWidget *folder_tree;
- GtkWidget *file_list;
+ GthBrowser *browser = GTH_BROWSER (user_data);
+ GtkWidget *folder_tree;
+ GtkWidget *file_list;
folder_tree = gth_browser_get_folder_tree (browser);
if (gtk_widget_has_focus (folder_tree)) {
@@ -542,10 +562,203 @@ gth_browser_activate_action_edit_rename (GtkAction *action,
}
+/* -- gth_browser_activate_copy_to_folder / gth_browser_activate_move_to_folder -- */
+
+
+typedef struct {
+ GthBrowser *browser;
+ gboolean move;
+ GFile *destination;
+ gboolean view_destination;
+} CopyToFolderData;
+
+
+static void
+copy_to_folder_data_free (CopyToFolderData *data)
+{
+ g_object_unref (data->destination);
+ g_object_unref (data->browser);
+ g_free (data);
+}
+
+
+static void
+copy_complete_cb (GthTask *task,
+ GError *error,
+ gpointer user_data)
+{
+ CopyToFolderData *data = user_data;
+
+ if ((error == NULL) && (data->view_destination))
+ gth_browser_load_location (data->browser, data->destination);
+
+ g_object_unref (task);
+ copy_to_folder_data_free (data);
+}
+
+
+static void
+copy_files_to_folder (GthBrowser *browser,
+ GList *files,
+ gboolean move,
+ char *destination_uri,
+ gboolean view_destination)
+{
+ GthFileData *destination_data;
+ GthFileSource *file_source;
+ CopyToFolderData *data;
+ GthTask *task;
+
+ destination_data = gth_file_data_new_for_uri (destination_uri, NULL);
+ file_source = gth_main_get_file_source (destination_data->file);
+
+ data = g_new0 (CopyToFolderData, 1);
+ data->browser = g_object_ref (browser);
+ data->move = move;
+ data->destination = g_file_dup (destination_data->file);
+ data->view_destination = view_destination;
+
+ task = gth_copy_task_new (file_source, destination_data, move, files, -1);
+ g_signal_connect (task,
+ "completed",
+ G_CALLBACK (copy_complete_cb),
+ data);
+ gth_browser_exec_task (browser, task, FALSE);
+
+ g_object_unref (file_source);
+}
+
+
+static void
+copy_to_folder_dialog (GthBrowser *browser,
+ GList *files,
+ gboolean move)
+{
+ GSettings *settings;
+ GtkWidget *dialog;
+ char *start_uri;
+ GList *history;
+ GList *scan;
+ GtkWidget *box;
+ GtkWidget *view_destination_button;
+
+ settings = g_settings_new (GTHUMB_FILE_MANAGER_SCHEMA);
+
+ dialog = gtk_file_chooser_dialog_new (move ? _("Move To") : _("Copy To"),
+ GTK_WINDOW (browser),
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ (move ? _("Move") : _("Copy")), GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ start_uri = g_settings_get_string (settings, PREF_FILE_MANAGER_COPY_LAST_FOLDER);
+ if ((start_uri == NULL) || (strcmp (start_uri, "") == 0)) {
+ g_free (start_uri);
+ start_uri = g_strdup (get_home_uri ());
+ }
+ gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (dialog), start_uri);
+ g_free(start_uri);
+
+ history = _g_settings_get_string_list (settings, PREF_FILE_MANAGER_COPY_HISTORY);
+ for (scan = history; scan; scan = scan->next) {
+ char *uri = scan->data;
+ gtk_file_chooser_add_shortcut_folder_uri (GTK_FILE_CHOOSER (dialog), uri, NULL);
+ }
+
+ box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (box), 6);
+ gtk_widget_show (box);
+
+ view_destination_button = gtk_check_button_new_with_mnemonic (_("_View the destination"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view_destination_button),
+ g_settings_get_boolean (settings,
PREF_FILE_MANAGER_COPY_VIEW_DESTINATION));
+ gtk_widget_show (view_destination_button);
+ gtk_box_pack_start (GTK_BOX (box), view_destination_button, FALSE, FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), box, FALSE, FALSE,
0);
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
+ char *destination_uri;
+
+ destination_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
+ if (destination_uri != NULL) {
+ gboolean view_destination;
+
+ /* save the options */
+
+ view_destination = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(view_destination_button));
+ g_settings_set_boolean (settings, PREF_FILE_MANAGER_COPY_VIEW_DESTINATION,
view_destination);
+ g_settings_set_string (settings, PREF_FILE_MANAGER_COPY_LAST_FOLDER, destination_uri);
+
+ /* save the destination in the history list, prevent
+ * the list from growing without limit. */
+
+ history = g_list_prepend (history, g_strdup (destination_uri));
+ while (g_list_length (history) > MAX_HISTORY_LENGTH) {
+ GList *link = g_list_last (history);
+ history = g_list_remove_link (history, link);
+ _g_string_list_free (link);
+ }
+ _g_settings_set_string_list (settings, PREF_FILE_MANAGER_COPY_HISTORY, history);
+
+ /* copy / move the files */
+
+ copy_files_to_folder (browser, files, move, destination_uri, view_destination);
+ }
+
+ g_free (destination_uri);
+ }
+
+ _g_string_list_free (history);
+ gtk_widget_destroy (dialog);
+ g_object_unref (settings);
+}
+
+
+static void
+copy_selected_files_to_folder (GthBrowser *browser,
+ gboolean move)
+{
+ GList *items;
+ GList *file_list;
+ GList *files;
+
+ items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view
(browser)));
+ file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
+ files = gth_file_data_list_to_file_list (file_list);
+
+ copy_to_folder_dialog (browser, files, move);
+
+ _g_object_list_unref (files);
+ _g_object_list_unref (file_list);
+ _gtk_tree_path_list_free (items);
+}
+
+
+void
+gth_browser_activate_copy_to_folder (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ copy_selected_files_to_folder (GTH_BROWSER (user_data), FALSE);
+}
+
+
void
-gth_browser_activate_action_folder_open_in_file_manager (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_move_to_folder (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ copy_selected_files_to_folder (GTH_BROWSER (user_data), FALSE);
+}
+
+
+void
+gth_browser_activate_folder_context_open_in_file_manager (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GthBrowser *browser = GTH_BROWSER (user_data);
GthFileData *file_data;
char *uri;
GError *error = NULL;
@@ -570,9 +783,11 @@ gth_browser_activate_action_folder_open_in_file_manager (GtkAction *action,
void
-gth_browser_activate_action_folder_create (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_folder_context_create (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ GthBrowser *browser = GTH_BROWSER (user_data);
GthFileData *parent;
parent = gth_browser_get_folder_popup_file_data (browser);
@@ -584,9 +799,11 @@ gth_browser_activate_action_folder_create (GtkAction *action,
void
-gth_browser_activate_action_folder_rename (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_folder_context_rename (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ GthBrowser *browser = GTH_BROWSER (user_data);
GthFileData *file_data;
file_data = gth_browser_get_folder_popup_file_data (browser);
@@ -600,9 +817,11 @@ gth_browser_activate_action_folder_rename (GtkAction *action,
void
-gth_browser_activate_action_folder_cut (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_folder_context_cut (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ GthBrowser *browser = GTH_BROWSER (user_data);
GthFileData *file_data;
GList *file_list;
@@ -618,9 +837,11 @@ gth_browser_activate_action_folder_cut (GtkAction *action,
void
-gth_browser_activate_action_folder_copy (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_folder_context_copy (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ GthBrowser *browser = GTH_BROWSER (user_data);
GthFileData *file_data;
GList *file_list;
@@ -636,9 +857,11 @@ gth_browser_activate_action_folder_copy (GtkAction *action,
void
-gth_browser_activate_action_folder_paste (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_folder_context_paste_into_folder (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ GthBrowser *browser = GTH_BROWSER (user_data);
GthFileData *file_data;
PasteData *paste_data;
@@ -659,7 +882,7 @@ gth_browser_activate_action_folder_paste (GtkAction *action,
}
-/* -- gth_browser_activate_action_folder_trash -- */
+/* -- gth_browser_activate_folder_context_trash -- */
typedef struct {
@@ -747,9 +970,11 @@ delete_folder_permanently_response_cb (GtkDialog *dialog,
void
-gth_browser_activate_action_folder_trash (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_folder_context_trash (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ GthBrowser *browser = GTH_BROWSER (user_data);
GthFileData *file_data;
GError *error = NULL;
@@ -801,9 +1026,11 @@ gth_browser_activate_action_folder_trash (GtkAction *action,
void
-gth_browser_activate_action_folder_delete (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_folder_context_delete (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
+ GthBrowser *browser = GTH_BROWSER (user_data);
GthFileData *file_data;
char *prompt;
DeleteFolderData *delete_data;
@@ -834,193 +1061,7 @@ gth_browser_activate_action_folder_delete (GtkAction *action,
}
-/* Copy/Move to folder */
-
-
-typedef struct {
- GthBrowser *browser;
- gboolean move;
- GFile *destination;
- gboolean view_destination;
-} CopyToFolderData;
-
-
-static void
-copy_to_folder_data_free (CopyToFolderData *data)
-{
- g_object_unref (data->destination);
- g_object_unref (data->browser);
- g_free (data);
-}
-
-
-static void
-copy_complete_cb (GthTask *task,
- GError *error,
- gpointer user_data)
-{
- CopyToFolderData *data = user_data;
-
- if ((error == NULL) && (data->view_destination))
- gth_browser_load_location (data->browser, data->destination);
-
- g_object_unref (task);
- copy_to_folder_data_free (data);
-}
-
-
-static void
-copy_files_to_folder (GthBrowser *browser,
- GList *files,
- gboolean move,
- char *destination_uri,
- gboolean view_destination)
-{
- GthFileData *destination_data;
- GthFileSource *file_source;
- CopyToFolderData *data;
- GthTask *task;
-
- destination_data = gth_file_data_new_for_uri (destination_uri, NULL);
- file_source = gth_main_get_file_source (destination_data->file);
-
- data = g_new0 (CopyToFolderData, 1);
- data->browser = g_object_ref (browser);
- data->move = move;
- data->destination = g_file_dup (destination_data->file);
- data->view_destination = view_destination;
-
- task = gth_copy_task_new (file_source, destination_data, move, files, -1);
- g_signal_connect (task,
- "completed",
- G_CALLBACK (copy_complete_cb),
- data);
- gth_browser_exec_task (browser, task, FALSE);
-
- g_object_unref (file_source);
-}
-
-
-static void
-copy_to_folder_dialog (GthBrowser *browser,
- GList *files,
- gboolean move)
-{
- GSettings *settings;
- GtkWidget *dialog;
- char *start_uri;
- GList *history;
- GList *scan;
- GtkWidget *box;
- GtkWidget *view_destination_button;
-
- settings = g_settings_new (GTHUMB_FILE_MANAGER_SCHEMA);
-
- dialog = gtk_file_chooser_dialog_new (move ? _("Move To") : _("Copy To"),
- GTK_WINDOW (browser),
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- (move ? _("Move") : _("Copy")), GTK_RESPONSE_ACCEPT,
- NULL);
-
- start_uri = g_settings_get_string (settings, PREF_FILE_MANAGER_COPY_LAST_FOLDER);
- if ((start_uri == NULL) || (strcmp (start_uri, "") == 0)) {
- g_free (start_uri);
- start_uri = g_strdup (get_home_uri ());
- }
- gtk_file_chooser_set_uri (GTK_FILE_CHOOSER (dialog), start_uri);
- g_free(start_uri);
-
- history = _g_settings_get_string_list (settings, PREF_FILE_MANAGER_COPY_HISTORY);
- for (scan = history; scan; scan = scan->next) {
- char *uri = scan->data;
- gtk_file_chooser_add_shortcut_folder_uri (GTK_FILE_CHOOSER (dialog), uri, NULL);
- }
-
- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (box), 6);
- gtk_widget_show (box);
-
- view_destination_button = gtk_check_button_new_with_mnemonic (_("_View the destination"));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view_destination_button),
- g_settings_get_boolean (settings,
PREF_FILE_MANAGER_COPY_VIEW_DESTINATION));
- gtk_widget_show (view_destination_button);
- gtk_box_pack_start (GTK_BOX (box), view_destination_button, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), box, FALSE, FALSE,
0);
-
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
- char *destination_uri;
-
- destination_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
- if (destination_uri != NULL) {
- gboolean view_destination;
-
- /* save the options */
-
- view_destination = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(view_destination_button));
- g_settings_set_boolean (settings, PREF_FILE_MANAGER_COPY_VIEW_DESTINATION,
view_destination);
- g_settings_set_string (settings, PREF_FILE_MANAGER_COPY_LAST_FOLDER, destination_uri);
-
- /* save the destination in the history list, prevent
- * the list from growing without limit. */
-
- history = g_list_prepend (history, g_strdup (destination_uri));
- while (g_list_length (history) > MAX_HISTORY_LENGTH) {
- GList *link = g_list_last (history);
- history = g_list_remove_link (history, link);
- _g_string_list_free (link);
- }
- _g_settings_set_string_list (settings, PREF_FILE_MANAGER_COPY_HISTORY, history);
-
- /* copy / move the files */
-
- copy_files_to_folder (browser, files, move, destination_uri, view_destination);
- }
-
- g_free (destination_uri);
- }
-
- _g_string_list_free (history);
- gtk_widget_destroy (dialog);
- g_object_unref (settings);
-}
-
-
-static void
-copy_selected_files_to_folder (GthBrowser *browser,
- gboolean move)
-{
- GList *items;
- GList *file_list;
- GList *files;
-
- items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view
(browser)));
- file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
- files = gth_file_data_list_to_file_list (file_list);
-
- copy_to_folder_dialog (browser, files, move);
-
- _g_object_list_unref (files);
- _g_object_list_unref (file_list);
- _gtk_tree_path_list_free (items);
-}
-
-
-void
-gth_browser_activate_action_tool_copy_to_folder (GtkAction *action,
- GthBrowser *browser)
-{
- copy_selected_files_to_folder (browser, FALSE);
-}
-
-
-void
-gth_browser_activate_action_tool_move_to_folder (GtkAction *action,
- GthBrowser *browser)
-{
- copy_selected_files_to_folder (browser, TRUE);
-}
+/* gth_browser_activate_folder_context_copy_to / gth_browser_activate_folder_context_move_to */
static void
@@ -1042,16 +1083,18 @@ copy_folder_to_folder (GthBrowser *browser,
void
-gth_browser_activate_action_folder_copy_to_folder (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_folder_context_copy_to (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- copy_folder_to_folder (browser, FALSE);
+ copy_folder_to_folder (GTH_BROWSER (user_data), FALSE);
}
void
-gth_browser_activate_action_folder_move_to_folder (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_folder_context_move_to (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- copy_folder_to_folder (browser, TRUE);
+ copy_folder_to_folder (GTH_BROWSER (user_data), TRUE);
}
diff --git a/extensions/file_manager/actions.h b/extensions/file_manager/actions.h
index 85f9462..d750775 100644
--- a/extensions/file_manager/actions.h
+++ b/extensions/file_manager/actions.h
@@ -22,30 +22,30 @@
#ifndef ACTIONS_H
#define ACTIONS_H
-#include <gtk/gtk.h>
+#include <gthumb.h>
-#define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
+DEF_ACTION_CALLBACK (gth_browser_activate_create_folder)
+DEF_ACTION_CALLBACK (gth_browser_activate_edit_cut)
+DEF_ACTION_CALLBACK (gth_browser_activate_edit_copy)
+DEF_ACTION_CALLBACK (gth_browser_activate_edit_paste)
+DEF_ACTION_CALLBACK (gth_browser_activate_duplicate)
+DEF_ACTION_CALLBACK (gth_browser_activate_trash)
+DEF_ACTION_CALLBACK (gth_browser_activate_delete)
+DEF_ACTION_CALLBACK (gth_browser_activate_rename)
+DEF_ACTION_CALLBACK (gth_browser_activate_copy_to_folder)
+DEF_ACTION_CALLBACK (gth_browser_activate_move_to_folder)
-DEFINE_ACTION(gth_browser_action_new_folder)
-DEFINE_ACTION(gth_browser_action_rename_folder)
-DEFINE_ACTION(gth_browser_activate_action_edit_cut_files)
-DEFINE_ACTION(gth_browser_activate_action_edit_copy_files)
-DEFINE_ACTION(gth_browser_activate_action_edit_paste)
-DEFINE_ACTION(gth_browser_activate_action_edit_duplicate)
-DEFINE_ACTION(gth_browser_activate_action_edit_trash)
-DEFINE_ACTION(gth_browser_activate_action_edit_delete)
-DEFINE_ACTION(gth_browser_activate_action_edit_rename)
-DEFINE_ACTION(gth_browser_activate_action_folder_open_in_file_manager)
-DEFINE_ACTION(gth_browser_activate_action_folder_create)
-DEFINE_ACTION(gth_browser_activate_action_folder_rename)
-DEFINE_ACTION(gth_browser_activate_action_folder_cut)
-DEFINE_ACTION(gth_browser_activate_action_folder_copy)
-DEFINE_ACTION(gth_browser_activate_action_folder_paste)
-DEFINE_ACTION(gth_browser_activate_action_folder_trash)
-DEFINE_ACTION(gth_browser_activate_action_folder_delete)
-DEFINE_ACTION(gth_browser_activate_action_folder_copy_to_folder)
-DEFINE_ACTION(gth_browser_activate_action_folder_move_to_folder)
-DEFINE_ACTION(gth_browser_activate_action_tool_copy_to_folder)
-DEFINE_ACTION(gth_browser_activate_action_tool_move_to_folder)
+DEF_ACTION_CALLBACK (gth_browser_activate_folder_context_open_in_file_manager)
+DEF_ACTION_CALLBACK (gth_browser_activate_folder_context_create)
+DEF_ACTION_CALLBACK (gth_browser_activate_folder_context_rename)
+DEF_ACTION_CALLBACK (gth_browser_activate_folder_context_cut)
+DEF_ACTION_CALLBACK (gth_browser_activate_folder_context_copy)
+DEF_ACTION_CALLBACK (gth_browser_activate_folder_context_paste_into_folder)
+DEF_ACTION_CALLBACK (gth_browser_activate_folder_context_trash)
+DEF_ACTION_CALLBACK (gth_browser_activate_folder_context_delete)
+DEF_ACTION_CALLBACK (gth_browser_activate_folder_context_copy_to)
+DEF_ACTION_CALLBACK (gth_browser_activate_folder_context_move_to)
+
+DEF_ACTION_CALLBACK (gth_browser_activate_open_with_application)
#endif /* ACTIONS_H */
diff --git a/extensions/file_manager/callbacks.c b/extensions/file_manager/callbacks.c
index 9ede6b0..e8eb20c 100644
--- a/extensions/file_manager/callbacks.c
+++ b/extensions/file_manager/callbacks.c
@@ -38,105 +38,81 @@
#define SCROLL_TIMEOUT 30 /* autoscroll timeout in milliseconds */
-static const char *fixed_ui_info =
-"<ui>"
-" <menubar name='MenuBar'>"
-" <menu name='Edit' action='EditMenu'>"
-" <placeholder name='Folder_Actions'>"
-" <menuitem action='Edit_Rename'/>"
-" </placeholder>"
-" <placeholder name='Folder_Actions_2'>"
-" <menuitem action='Edit_Trash'/>"
-" <menuitem action='Edit_Delete'/>"
-" </placeholder>"
-" </menu>"
-" </menubar>"
-" <popup name='FileListPopup'>"
-" <placeholder name='File_Actions'>"
-" <menuitem action='Edit_CutFiles'/>"
-" <menuitem action='Edit_CopyFiles'/>"
-" <menuitem action='Edit_PasteInFolder'/>"
-" </placeholder>"
-" <placeholder name='Folder_Actions'>"
-" <menuitem action='Tool_CopyToFolder'/>"
-" <menuitem action='Tool_MoveToFolder'/>"
-" </placeholder>"
-" </popup>"
-" <popup name='FilePopup'>"
-" <placeholder name='File_Actions'>"
-" <menuitem action='Edit_CutFiles'/>"
-" <menuitem action='Edit_CopyFiles'/>"
-" <menuitem action='Edit_PasteInFolder'/>"
-" </placeholder>"
-" <placeholder name='Folder_Actions'>"
-" <menuitem action='Tool_CopyToFolder'/>"
-" <menuitem action='Tool_MoveToFolder'/>"
-" <menuitem action='Edit_Trash'/>"
-" <menuitem action='Edit_Delete'/>"
-" </placeholder>"
-" </popup>"
-"</ui>";
-
-
-static const char *vfs_ui_info =
-"<ui>"
-" <menubar name='MenuBar'>"
-" <menu name='Edit' action='EditMenu'>"
-" <placeholder name='Folder_Actions'>"
-" <menuitem action='Edit_Duplicate'/>"
-" </placeholder>"
-" </menu>"
-" </menubar>"
-"</ui>";
-
-
-static const char *browser_ui_info =
-"<ui>"
-" <menubar name='MenuBar'>"
-" <menu name='Edit' action='EditMenu'>"
-" <placeholder name='File_Actions_1'>"
-" <menuitem action='Edit_CutFiles'/>"
-" <menuitem action='Edit_CopyFiles'/>"
-" <menuitem action='Edit_PasteInFolder'/>"
-" </placeholder>"
-" </menu>"
-" </menubar>"
-" <popup name='FileListPopup'>"
-" <placeholder name='Folder_Actions'>"
-" <menuitem action='Edit_Trash'/>"
-" <menuitem action='Edit_Delete'/>"
-" </placeholder>"
-" </popup>"
-"</ui>";
-
-
-static const GthMenuEntry browser_vfs_entries[] = {
- { N_("Create _Folder"), "win.create-folder", "<Ctrl><Shift>N" }
+static const GActionEntry actions[] = {
+ { "edit-cut", gth_browser_activate_edit_cut },
+ { "edit-copy", gth_browser_activate_edit_copy },
+ { "edit-paste", gth_browser_activate_edit_paste },
+ { "trash", gth_browser_activate_trash },
+ { "delete", gth_browser_activate_delete },
+ { "rename", gth_browser_activate_rename },
+ { "duplicate", gth_browser_activate_duplicate },
+ { "copy-to-folder", gth_browser_activate_copy_to_folder },
+ { "move-to-folder", gth_browser_activate_move_to_folder },
+ { "create-folder", gth_browser_activate_create_folder },
+ { "folder-context-open-with-fm", gth_browser_activate_folder_context_open_in_file_manager },
+ { "folder-context-create", gth_browser_activate_folder_context_create },
+ { "folder-context-rename", gth_browser_activate_folder_context_rename },
+ { "folder-context-cut", gth_browser_activate_folder_context_cut },
+ { "folder-context-copy", gth_browser_activate_folder_context_copy },
+ { "folder-context-paste-into-folder", gth_browser_activate_folder_context_paste_into_folder },
+ { "folder-context-copy-to", gth_browser_activate_folder_context_copy_to },
+ { "folder-context-move-to", gth_browser_activate_folder_context_move_to },
+ { "folder-context-trash", gth_browser_activate_folder_context_trash },
+ { "folder-context-delete", gth_browser_activate_folder_context_delete },
+ { "open-with-application", gth_browser_activate_open_with_application, "i" }
};
-static const char *folder_popup_ui_info =
-"<ui>"
-" <popup name='FolderListPopup'>"
-" <placeholder name='OpenCommands'>"
-" <menuitem action='Folder_OpenInFileManager'/>"
-" </placeholder>"
-" <placeholder name='SourceCommands'>"
-" <menuitem action='Folder_Create'/>"
-" <separator />"
-" <menuitem action='Folder_Cut'/>"
-" <menuitem action='Folder_Copy'/>"
-" <menuitem action='Folder_Paste'/>"
-" <separator />"
-" <menuitem action='Folder_Rename'/>"
-" <separator />"
-" <menuitem action='Folder_CopyToFolder'/>"
-" <menuitem action='Folder_MoveToFolder'/>"
-" <menuitem action='Folder_Trash'/>"
-" <menuitem action='Folder_Delete'/>"
-" </placeholder>"
-" </popup>"
-"</ui>";
+static const GthMenuEntry fixed_menu_entries_edit[] = {
+ { N_("Cut"), "win.edit-cut", "<Control>x" },
+ { N_("Copy"), "win.edit-copy", "<Control>c" },
+ { N_("Paste"), "win.edit-paste", "<Control>v" },
+};
+
+
+static const GthMenuEntry fixed_menu_entries_file[] = {
+ { N_("Copy to..."), "win.copy-to-folder" },
+ { N_("Move to..."), "win.move-to-folder" },
+ { N_("Rename"), "win.rename", "F2" },
+ { N_("Move to Trash"), "win.trash" },
+ { N_("Delete"), "win.delete" },
+};
+
+
+static const GthMenuEntry folder_context_open_entries[] = {
+ { N_("Open with the File Manager"), "win.folder-context-open-with-fm" }
+};
+
+
+static const GthMenuEntry folder_context_create_entries[] = {
+ { N_("Create Folder"), "win.folder-context-create" }
+};
+
+
+static const GthMenuEntry folder_context_edit_entries[] = {
+ { N_("Cut"), "win.folder-context-cut" },
+ { N_("Copy"), "win.folder-context-copy" },
+ { N_("Paste Into Folder"), "win.folder-context-paste-into-folder" }
+};
+
+
+static const GthMenuEntry folder_context_folder_entries[] = {
+ { N_("Rename"), "win.folder-context-rename" },
+ { N_("Copy to..."), "win.folder-context-copy-to" },
+ { N_("Move to..."), "win.folder-context-move-to" },
+ { N_("Move to Trash"), "win.folder-context-trash" },
+ { N_("Delete"), "win.folder-context-delete" }
+};
+
+
+static const GthMenuEntry create_folder_entries[] = {
+ { N_("Create Folder"), "win.create-folder", "<Control><Shift>n" }
+};
+
+
+static const GthMenuEntry vfs_entries[] = {
+ { N_("Duplicate"), "win.duplicate", "<Control><Shift>d" }
+};
static GtkTargetEntry reorderable_drag_dest_targets[] = {
@@ -151,125 +127,32 @@ static GtkTargetEntry non_reorderable_drag_dest_targets[] = {
};
-static GtkActionEntry action_entries[] = {
- { "File_NewFolder", "folder-new",
- N_("Create _Folder"), "<control><shift>N",
- N_("Create a new empty folder inside this folder"),
- G_CALLBACK (gth_browser_action_new_folder) },
- { "Edit_CutFiles", GTK_STOCK_CUT,
- NULL, NULL,
- NULL,
- G_CALLBACK (gth_browser_activate_action_edit_cut_files) },
- { "Edit_CopyFiles", GTK_STOCK_COPY,
- NULL, NULL,
- NULL,
- G_CALLBACK (gth_browser_activate_action_edit_copy_files) },
- { "Edit_PasteInFolder", GTK_STOCK_PASTE,
- NULL, NULL,
- NULL,
- G_CALLBACK (gth_browser_activate_action_edit_paste) },
- { "Edit_Duplicate", NULL,
- N_("D_uplicate"), "<control><shift>D",
- N_("Duplicate the selected files"),
- G_CALLBACK (gth_browser_activate_action_edit_duplicate) },
- { "Edit_Trash", "user-trash",
- N_("Mo_ve to Trash"), NULL,
- N_("Move the selected files to the Trash"),
- G_CALLBACK (gth_browser_activate_action_edit_trash) },
- { "Edit_Delete", "edit-delete",
- N_("_Delete"), NULL,
- N_("Delete the selected files"),
- G_CALLBACK (gth_browser_activate_action_edit_delete) },
- { "Edit_Rename", NULL,
- N_("_Rename"), "F2",
- N_("Rename the selected files"),
- G_CALLBACK (gth_browser_activate_action_edit_rename) },
- { "Folder_OpenInFileManager", NULL,
- N_("Open with the _File Manager"), "",
- NULL,
- G_CALLBACK (gth_browser_activate_action_folder_open_in_file_manager) },
- { "Folder_Create", NULL,
- N_("Create _Folder"), NULL,
- N_("Create a new empty folder inside this folder"),
- G_CALLBACK (gth_browser_activate_action_folder_create) },
- { "Folder_Rename", NULL,
- N_("_Rename"), NULL,
- NULL,
- G_CALLBACK (gth_browser_activate_action_folder_rename) },
- { "Folder_Cut", GTK_STOCK_CUT,
- NULL, NULL,
- NULL,
- G_CALLBACK (gth_browser_activate_action_folder_cut) },
- { "Folder_Copy", GTK_STOCK_COPY,
- NULL, NULL,
- NULL,
- G_CALLBACK (gth_browser_activate_action_folder_copy) },
- { "Folder_Paste", GTK_STOCK_PASTE,
- N_("_Paste Into Folder"), NULL,
- NULL,
- G_CALLBACK (gth_browser_activate_action_folder_paste) },
- { "Folder_Trash", "user-trash",
- N_("Mo_ve to Trash"), NULL,
- NULL,
- G_CALLBACK (gth_browser_activate_action_folder_trash) },
- { "Folder_Delete", "edit-delete",
- N_("_Delete"), NULL,
- NULL,
- G_CALLBACK (gth_browser_activate_action_folder_delete) },
- { "Folder_CopyToFolder", NULL,
- N_("Copy to..."), NULL,
- N_("Copy the selected folder to another folder"),
- G_CALLBACK (gth_browser_activate_action_folder_copy_to_folder) },
- { "Folder_MoveToFolder", NULL,
- N_("Move to..."), NULL,
- N_("Move the selected folder to another folder"),
- G_CALLBACK (gth_browser_activate_action_folder_move_to_folder) },
-
- { "Tool_CopyToFolder", NULL,
- N_("Copy to..."), NULL,
- N_("Copy the selected files to another folder"),
- G_CALLBACK (gth_browser_activate_action_tool_copy_to_folder) },
- { "Tool_MoveToFolder", NULL,
- N_("Move to..."), NULL,
- N_("Move the selected files to another folder"),
- G_CALLBACK (gth_browser_activate_action_tool_move_to_folder) }
-};
-
-
typedef struct {
- GtkActionGroup *action_group;
- guint fixed_merge_id;
- guint vfs_merge_id;
- guint browser_merge_id;
- guint browser_vfs_merge_id;
- guint folder_popup_merge_id;
- gboolean can_paste;
- int drop_pos;
- int scroll_diff;
- guint scroll_event;
+ guint vfs_merge_id;
+ guint browser_vfs_merge_id;
+ guint folder_context_open_id;
+ guint folder_context_create_id;
+ guint folder_context_edit_id;
+ guint folder_context_folder_id;
+ GMenu *open_with_menu;
+ GList *applications;
+ gboolean can_paste;
+ int drop_pos;
+ int scroll_diff;
+ guint scroll_event;
} BrowserData;
static void
browser_data_free (BrowserData *data)
{
+ _g_object_unref (data->open_with_menu);
+ _g_object_list_unref (data->applications);
g_free (data);
}
static void
-set_action_sensitive (BrowserData *data,
- const char *action_name,
- gboolean sensitive)
-{
- GtkAction *action;
-
- action = gtk_action_group_get_action (data->action_group, action_name);
- g_object_set (action, "sensitive", sensitive, NULL);
-}
-
-
-static void
gth_file_list_drag_data_received (GtkWidget *file_view,
GdkDragContext *context,
int x,
@@ -588,27 +471,33 @@ void
fm__gth_browser_construct_cb (GthBrowser *browser)
{
BrowserData *data;
- GError *error = NULL;
GtkWidget *file_view;
+ GMenu *open_actions;
g_return_if_fail (GTH_IS_BROWSER (browser));
data = g_new0 (BrowserData, 1);
- data->action_group = gtk_action_group_new ("File Manager Actions");
- gtk_action_group_set_translation_domain (data->action_group, NULL);
- gtk_action_group_add_actions (data->action_group,
- action_entries,
- G_N_ELEMENTS (action_entries),
- browser);
- gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), data->action_group, 0);
- set_action_sensitive (data, "Edit_PasteInFolder", FALSE);
-
- data->fixed_merge_id = gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (browser),
fixed_ui_info, -1, &error);
- if (data->fixed_merge_id == 0) {
- g_warning ("building ui failed: %s", error->message);
- g_error_free (error);
- }
+ g_action_map_add_action_entries (G_ACTION_MAP (browser),
+ actions,
+ G_N_ELEMENTS (actions),
+ browser);
+ gth_menu_manager_append_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_EDIT_ACTIONS),
+ fixed_menu_entries_edit,
+ G_N_ELEMENTS (fixed_menu_entries_edit));
+ gth_menu_manager_append_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_FILE_ACTIONS),
+ fixed_menu_entries_file,
+ G_N_ELEMENTS (fixed_menu_entries_file));
+
+ data->open_with_menu = g_menu_new ();
+
+ open_actions = gth_menu_manager_get_menu (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_OPEN_ACTIONS));
+ g_menu_append_submenu (open_actions, _("Open _With"), G_MENU_MODEL (data->open_with_menu));
+
+ open_actions = gth_menu_manager_get_menu (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FILE_OPEN_ACTIONS));
+ g_menu_append_submenu (open_actions, _("Open _With"), G_MENU_MODEL (data->open_with_menu));
+
+ gth_window_enable_action (GTH_WINDOW (browser), "edit-paste", FALSE);
file_view = gth_file_list_get_view (GTH_FILE_LIST (gth_browser_get_file_list (browser)));
g_signal_connect (file_view,
@@ -663,67 +552,27 @@ file_manager_update_ui (BrowserData *data,
GthBrowser *browser)
{
if (GTH_IS_FILE_SOURCE_VFS (gth_browser_get_location_source (browser))) {
- if (data->vfs_merge_id == 0) {
- GError *local_error = NULL;
-
- data->vfs_merge_id = gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager
(browser), vfs_ui_info, -1, &local_error);
- if (data->vfs_merge_id == 0) {
- g_warning ("building ui failed: %s", local_error->message);
- g_error_free (local_error);
- }
- }
- }
- else if (data->vfs_merge_id != 0) {
- gtk_ui_manager_remove_ui (gth_browser_get_ui_manager (browser), data->vfs_merge_id);
- data->vfs_merge_id = 0;
- }
-
- if (gth_window_get_current_page (GTH_WINDOW (browser)) == GTH_BROWSER_PAGE_BROWSER) {
- if (data->browser_merge_id == 0) {
- GError *local_error = NULL;
-
- data->browser_merge_id = gtk_ui_manager_add_ui_from_string
(gth_browser_get_ui_manager (browser), browser_ui_info, -1, &local_error);
- if (data->browser_merge_id == 0) {
- g_warning ("building ui failed: %s", local_error->message);
- g_error_free (local_error);
- }
- }
+ if (data->vfs_merge_id == 0)
+ data->vfs_merge_id =
+ gth_menu_manager_append_entries (gth_browser_get_menu_manager
(browser, GTH_BROWSER_MENU_MANAGER_FILE_LIST_FILE_ACTIONS),
+ vfs_entries,
+ G_N_ELEMENTS (vfs_entries));
}
- else if (data->browser_merge_id != 0) {
- gtk_ui_manager_remove_ui (gth_browser_get_ui_manager (browser), data->browser_merge_id);
- data->browser_merge_id = 0;
- }
-
-#if 0
- if (GTH_IS_FILE_SOURCE_VFS (gth_browser_get_location_source (browser))
- && (gth_window_get_current_page (GTH_WINDOW (browser)) == GTH_BROWSER_PAGE_BROWSER))
- {
- if (data->browser_vfs_merge_id == 0) {
- GError *local_error = NULL;
-
- data->browser_vfs_merge_id = gtk_ui_manager_add_ui_from_string
(gth_browser_get_ui_manager (browser), browser_vfs_ui_info, -1, &local_error);
- if (data->browser_vfs_merge_id == 0) {
- g_warning ("building ui failed: %s", local_error->message);
- g_error_free (local_error);
- }
- }
- }
- else if (data->browser_vfs_merge_id != 0) {
- gtk_ui_manager_remove_ui (gth_browser_get_ui_manager (browser), data->browser_vfs_merge_id);
- data->browser_vfs_merge_id = 0;
+ else {
+ gth_menu_manager_remove_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_FILE_ACTIONS), data->vfs_merge_id);
+ data->vfs_merge_id = 0;
}
-#endif
if (GTH_IS_FILE_SOURCE_VFS (gth_browser_get_location_source (browser))
&& (gth_window_get_current_page (GTH_WINDOW (browser)) == GTH_BROWSER_PAGE_BROWSER))
{
- if (data->browser_vfs_merge_id == 0) {
- data->browser_vfs_merge_id = gth_menu_manager_append_entries
(gth_browser_get_menu_manager (browser, GTH_BROWSER_MENU_MANAGER_GEARS_FOLDER_ACTIONS),
- browser_vfs_entries,
- G_N_ELEMENTS
(browser_vfs_entries));
- }
+ if (data->browser_vfs_merge_id == 0)
+ data->browser_vfs_merge_id =
+ gth_menu_manager_append_entries (gth_browser_get_menu_manager
(browser, GTH_BROWSER_MENU_MANAGER_GEARS_FOLDER_ACTIONS),
+ create_folder_entries,
+ G_N_ELEMENTS
(create_folder_entries));
}
- else if (data->browser_vfs_merge_id != 0) {
+ else {
gth_menu_manager_remove_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_GEARS_FOLDER_ACTIONS), data->browser_vfs_merge_id);
data->browser_vfs_merge_id = 0;
}
@@ -800,23 +649,42 @@ fm__gth_browser_folder_tree_popup_before_cb (GthBrowser *browser,
g_return_if_fail (data != NULL);
if (GTH_IS_FILE_SOURCE_VFS (file_source)) {
- if (data->folder_popup_merge_id == 0) {
- GError *error = NULL;
-
- data->folder_popup_merge_id = gtk_ui_manager_add_ui_from_string
(gth_browser_get_ui_manager (browser), folder_popup_ui_info, -1, &error);
- if (data->folder_popup_merge_id == 0) {
- g_message ("building menus failed: %s", error->message);
- g_error_free (error);
- }
- }
+ if (data->folder_context_open_id == 0)
+ data->folder_context_open_id =
+ gth_menu_manager_append_entries (gth_browser_get_menu_manager
(browser, GTH_BROWSER_MENU_MANAGER_FOLDER_OPEN_ACTIONS),
+ folder_context_open_entries,
+ G_N_ELEMENTS
(folder_context_open_entries));
+ if (data->folder_context_create_id == 0)
+ data->folder_context_create_id =
+ gth_menu_manager_append_entries (gth_browser_get_menu_manager
(browser, GTH_BROWSER_MENU_MANAGER_FOLDER_CREATE_ACTIONS),
+ folder_context_create_entries,
+ G_N_ELEMENTS
(folder_context_create_entries));
+ if (data->folder_context_edit_id == 0)
+ data->folder_context_edit_id =
+ gth_menu_manager_append_entries (gth_browser_get_menu_manager
(browser, GTH_BROWSER_MENU_MANAGER_FOLDER_EDIT_ACTIONS),
+ folder_context_edit_entries,
+ G_N_ELEMENTS
(folder_context_edit_entries));
+ if (data->folder_context_folder_id == 0)
+ data->folder_context_folder_id =
+ gth_menu_manager_append_entries (gth_browser_get_menu_manager
(browser, GTH_BROWSER_MENU_MANAGER_FOLDER_FOLDER_ACTIONS),
+ folder_context_folder_entries,
+ G_N_ELEMENTS
(folder_context_folder_entries));
fm__gth_browser_update_sensitivity_cb (browser);
}
else {
- if (data->folder_popup_merge_id != 0) {
- gtk_ui_manager_remove_ui (gth_browser_get_ui_manager (browser),
data->folder_popup_merge_id);
- data->folder_popup_merge_id = 0;
- }
+ if (data->folder_context_open_id != 0)
+ gth_menu_manager_remove_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FOLDER_OPEN_ACTIONS), data->folder_context_open_id);
+ if (data->folder_context_create_id != 0)
+ gth_menu_manager_remove_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FOLDER_CREATE_ACTIONS), data->folder_context_create_id);
+ if (data->folder_context_edit_id != 0)
+ gth_menu_manager_remove_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FOLDER_EDIT_ACTIONS), data->folder_context_edit_id);
+ if (data->folder_context_folder_id != 0)
+ gth_menu_manager_remove_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_FOLDER_FOLDER_ACTIONS), data->folder_context_folder_id);
+ data->folder_context_open_id = 0;
+ data->folder_context_create_id = 0;
+ data->folder_context_edit_id = 0;
+ data->folder_context_folder_id = 0;
}
}
@@ -895,10 +763,10 @@ clipboard_targets_received_cb (GtkClipboard *clipboard,
if (atoms[i] == GNOME_COPIED_FILES)
data->can_paste = TRUE;
- set_action_sensitive (data, "Edit_PasteInFolder", data->can_paste);
+ gth_window_enable_action (GTH_WINDOW (browser), "edit-paste", data->can_paste);
folder = gth_browser_get_folder_popup_file_data (browser);
- set_action_sensitive (data, "Folder_Paste", (folder != NULL) && data->can_paste &&
g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE));
+ gth_window_enable_action (GTH_WINDOW (browser), "folder-context-paste-into-folder", (folder != NULL)
&& data->can_paste && g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE));
_g_object_unref (folder);
g_object_unref (browser);
@@ -915,7 +783,7 @@ _gth_browser_update_paste_command_sensitivity (GthBrowser *browser,
g_return_if_fail (data != NULL);
data->can_paste = FALSE;
- set_action_sensitive (data, "Edit_PasteInFolder", FALSE);
+ gth_window_enable_action (GTH_WINDOW (browser), "edit-paste", data->can_paste);
if (clipboard == NULL)
clipboard = gtk_widget_get_clipboard (GTK_WIDGET (browser), GDK_SELECTION_CLIPBOARD);
@@ -943,28 +811,22 @@ fm__gth_browser_update_sensitivity_cb (GthBrowser *browser)
location_data = gth_browser_get_location_data (browser);
sensitive = (n_selected > 0) && (file_source != NULL) && (location_data != NULL) &&
gth_file_source_can_cut (file_source, location_data->file);
- set_action_sensitive (data, "Edit_CutFiles", sensitive);
+ gth_window_enable_action (GTH_WINDOW (browser), "edit-cut", sensitive);
sensitive = (n_selected > 0) && (file_source != NULL);
- set_action_sensitive (data, "Edit_CopyFiles", sensitive);
- set_action_sensitive (data, "Edit_Trash", sensitive);
- set_action_sensitive (data, "Edit_Delete", sensitive);
- set_action_sensitive (data, "Edit_Duplicate", sensitive);
- set_action_sensitive (data, "Tool_MoveToFolder", sensitive);
- set_action_sensitive (data, "Tool_CopyToFolder", sensitive);
+ gth_window_enable_action (GTH_WINDOW (browser), "edit-copy", sensitive);
+ gth_window_enable_action (GTH_WINDOW (browser), "trash", sensitive);
+ gth_window_enable_action (GTH_WINDOW (browser), "delete", sensitive);
+ gth_window_enable_action (GTH_WINDOW (browser), "duplicate", sensitive);
+ gth_window_enable_action (GTH_WINDOW (browser), "move-to-folder", sensitive);
+ gth_window_enable_action (GTH_WINDOW (browser), "copy-to-folder", sensitive);
folder = gth_browser_get_folder_popup_file_data (browser);
- set_action_sensitive (data, "Folder_Create", (folder != NULL) && g_file_info_get_attribute_boolean
(folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE));
- set_action_sensitive (data, "Folder_Rename", (folder != NULL) && g_file_info_get_attribute_boolean
(folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME));
- set_action_sensitive (data, "Folder_Delete", (folder != NULL) && g_file_info_get_attribute_boolean
(folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE));
- set_action_sensitive (data, "Folder_Trash", (folder != NULL) && g_file_info_get_attribute_boolean
(folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH));
- set_action_sensitive (data, "Folder_Cut", (folder != NULL) && g_file_info_get_attribute_boolean
(folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE));
-
- /*
- folder = gth_browser_get_location_data (browser);
- set_action_sensitive (data, "File_NewFolder", (folder != NULL) && g_file_info_get_attribute_boolean
(folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE));
- */
-
+ gth_window_enable_action (GTH_WINDOW (browser), "folder-context-create", (folder != NULL) &&
g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE));
+ gth_window_enable_action (GTH_WINDOW (browser), "folder-context-rename", (folder != NULL) &&
g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME));
+ gth_window_enable_action (GTH_WINDOW (browser), "folder-context-delete", (folder != NULL) &&
g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE));
+ gth_window_enable_action (GTH_WINDOW (browser), "folder-context-trash", (folder != NULL) &&
g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH));
+ gth_window_enable_action (GTH_WINDOW (browser), "folder-context-cut", (folder != NULL) &&
g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE));
_g_object_unref (folder);
_gth_browser_update_paste_command_sensitivity (browser, NULL);
@@ -974,19 +836,31 @@ fm__gth_browser_update_sensitivity_cb (GthBrowser *browser)
/* -- selection_changed -- */
-static void
-activate_open_with_application_item (GtkMenuItem *menuitem,
- gpointer data)
+void
+gth_browser_activate_open_with_application (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- GthBrowser *browser = data;
+ GthBrowser *browser = user_data;
+ BrowserData *data;
+ GList *appinfo_link;
+ GAppInfo *appinfo;
GList *items;
GList *file_list;
GList *uris;
GList *scan;
- GAppInfo *appinfo;
GdkAppLaunchContext *context;
GError *error = NULL;
+ data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
+ g_return_if_fail (data != NULL);
+
+ appinfo_link = g_list_nth (data->applications, g_variant_get_int32 (parameter));
+ g_return_if_fail (appinfo_link != NULL);
+
+ appinfo = appinfo_link->data;
+ g_return_if_fail (G_IS_APP_INFO (appinfo));
+
items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view
(browser)));
file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
@@ -997,9 +871,6 @@ activate_open_with_application_item (GtkMenuItem *menuitem,
}
uris = g_list_reverse (uris);
- appinfo = g_object_get_data (G_OBJECT (menuitem), "appinfo");
- g_return_if_fail (G_IS_APP_INFO (appinfo));
-
context = gdk_display_get_app_launch_context (gtk_widget_get_display (GTK_WIDGET (browser)));
gdk_app_launch_context_set_timestamp (context, 0);
gdk_app_launch_context_set_icon (context, g_app_info_get_icon (appinfo));
@@ -1017,28 +888,40 @@ activate_open_with_application_item (GtkMenuItem *menuitem,
}
+static int
+sort_app_info_by_display_name (gconstpointer a,
+ gconstpointer b)
+{
+ GAppInfo *app_info_a = G_APP_INFO (a);
+ GAppInfo *app_info_b = G_APP_INFO (b);
+
+ return g_utf8_collate (g_app_info_get_display_name (app_info_a),
+ g_app_info_get_display_name (app_info_b));
+}
+
+
static void
-_gth_browser_update_open_menu (GthBrowser *browser,
- const char *path)
+_gth_browser_update_open_menu (GthBrowser *browser)
{
- GtkWidget *openwith_item;
- GtkWidget *menu;
+ BrowserData *data;
GList *items;
GList *file_list;
GList *scan;
- GList *appinfo_list;
+ int n;
GHashTable *used_mime_types;
- GthIconCache *icon_cache;
GHashTable *used_apps;
- openwith_item = gtk_ui_manager_get_widget (gth_browser_get_ui_manager (browser), path);
- menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (openwith_item));
- _gtk_container_remove_children (GTK_CONTAINER (menu), NULL, NULL);
+ data = g_object_get_data (G_OBJECT (browser), BROWSER_DATA_KEY);
+ g_return_if_fail (data != NULL);
+
+ g_menu_remove_all (data->open_with_menu);
+ _g_object_list_unref (data->applications);
+ data->applications = NULL;
items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view
(browser)));
file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
- appinfo_list = NULL;
+ data->applications = NULL;
used_mime_types = g_hash_table_new (g_str_hash, g_str_equal);
for (scan = file_list; scan; scan = scan->next) {
GthFileData *file_data = scan->data;
@@ -1050,70 +933,44 @@ _gth_browser_update_open_menu (GthBrowser *browser,
if (g_hash_table_lookup (used_mime_types, mime_type) != NULL)
continue;
- appinfo_list = g_list_concat (appinfo_list, g_app_info_get_all_for_type (mime_type));
+ data->applications = g_list_concat (data->applications, g_app_info_get_all_for_type
(mime_type));
g_hash_table_insert (used_mime_types, (gpointer) mime_type, GINT_TO_POINTER (1));
}
g_hash_table_destroy (used_mime_types);
- icon_cache = gth_browser_get_menu_icon_cache (browser);
+ data->applications = g_list_sort (data->applications, sort_app_info_by_display_name);
+
used_apps = g_hash_table_new (g_str_hash, g_str_equal);
- for (scan = appinfo_list; scan; scan = scan->next) {
+ for (scan = data->applications, n = 0; scan; scan = scan->next, n++) {
GAppInfo *appinfo = scan->data;
- char *label;
- GtkWidget *menu_item;
GIcon *icon;
+ GMenuItem *item;
- if (strcmp (g_app_info_get_executable (appinfo), "gthumb") == 0)
+ if (strstr (g_app_info_get_executable (appinfo), "gthumb") != NULL)
continue;
if (g_hash_table_lookup (used_apps, g_app_info_get_id (appinfo)) != NULL)
continue;
g_hash_table_insert (used_apps, (gpointer) g_app_info_get_id (appinfo), GINT_TO_POINTER (1));
- label = g_strdup_printf ("%s", g_app_info_get_name (appinfo));
- menu_item = gtk_image_menu_item_new_with_label (label);
-
+ item = g_menu_item_new (g_app_info_get_display_name (appinfo), NULL);
+ g_menu_item_set_action_and_target (item, "win.open-with-application", "i", n);
icon = g_app_info_get_icon (appinfo);
- if (icon != NULL) {
- GdkPixbuf *pixbuf;
-
- pixbuf = gth_icon_cache_get_pixbuf (icon_cache, icon);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item),
gtk_image_new_from_pixbuf (pixbuf));
- gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menu_item), TRUE);
-
- g_object_unref (pixbuf);
+ if (icon == NULL) {
+ icon = g_themed_icon_new ("application-x-executable");
+ if (icon != NULL) {
+ g_menu_item_set_icon (item, icon);
+ g_object_unref (icon);
+ }
}
-
- gtk_widget_show (menu_item);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
-
- g_object_set_data_full (G_OBJECT (menu_item),
- "appinfo",
- g_object_ref (appinfo),
- g_object_unref);
- g_signal_connect (menu_item,
- "activate",
- G_CALLBACK (activate_open_with_application_item),
- browser);
-
- g_free (label);
+ else
+ g_menu_item_set_icon (item, icon);
+ g_menu_append_item (data->open_with_menu, item);
}
- /*
- if (appinfo_list == NULL) {
- GtkWidget *menu_item;
-
- menu_item = gtk_image_menu_item_new_with_label (_("No application available"));
- gtk_widget_set_sensitive (menu_item, FALSE);
- gtk_widget_show (menu_item);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
- }*/
-
- gtk_widget_set_sensitive (openwith_item, appinfo_list != NULL);
- gtk_widget_show (openwith_item);
+ gth_window_enable_action (GTH_WINDOW (browser), "open-with-application", data->applications != NULL);
g_hash_table_destroy (used_apps);
- _g_object_list_unref (appinfo_list);
_g_object_list_unref (file_list);
_gtk_tree_path_list_free (items);
}
@@ -1122,8 +979,7 @@ _gth_browser_update_open_menu (GthBrowser *browser,
void
fm__gth_browser_selection_changed_cb (GthBrowser *browser)
{
- _gth_browser_update_open_menu (browser, "/FileListPopup/OpenWith");
- _gth_browser_update_open_menu (browser, "/FilePopup/OpenWith");
+ _gth_browser_update_open_menu (browser);
}
diff --git a/extensions/find_duplicates/actions.c b/extensions/find_duplicates/actions.c
index 68ef434..d55c779 100644
--- a/extensions/find_duplicates/actions.c
+++ b/extensions/find_duplicates/actions.c
@@ -27,8 +27,9 @@
void
-gth_browser_activate_action_edit_find_duplicates (GtkAction *action,
- GthBrowser *browser)
+gth_browser_activate_find_duplicates (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
- dlg_find_duplicates (browser);
+ dlg_find_duplicates (GTH_BROWSER (user_data));
}
diff --git a/extensions/find_duplicates/actions.h b/extensions/find_duplicates/actions.h
index cce9215..e5e2da3 100644
--- a/extensions/find_duplicates/actions.h
+++ b/extensions/find_duplicates/actions.h
@@ -22,10 +22,8 @@
#ifndef ACTIONS_H
#define ACTIONS_H
-#include <gtk/gtk.h>
+#include <gthumb.h>
-#define DEFINE_ACTION(x) void x (GtkAction *action, gpointer data);
-
-DEFINE_ACTION(gth_browser_activate_action_edit_find_duplicates)
+DEF_ACTION_CALLBACK (gth_browser_activate_find_duplicates)
#endif /* ACTIONS_H */
diff --git a/extensions/find_duplicates/callbacks.c b/extensions/find_duplicates/callbacks.c
index 61d2c4e..e2b967c 100644
--- a/extensions/find_duplicates/callbacks.c
+++ b/extensions/find_duplicates/callbacks.c
@@ -28,67 +28,26 @@
#include "callbacks.h"
-#define BROWSER_DATA_KEY "find-duplicates-browser-data"
-
-
-static const char *find_ui_info =
-"<ui>"
-" <menubar name='MenuBar'>"
-" <menu name='Edit' action='EditMenu'>"
-" <placeholder name='Edit_Actions'>"
-" <menuitem action='Edit_Find_Duplicates'/>"
-" </placeholder>"
-" </menu>"
-" </menubar>"
-"</ui>";
-
-
-static GtkActionEntry find_action_entries[] = {
- { "Edit_Find_Duplicates", NULL,
- N_("Find _Duplicates..."), NULL,
- N_("Find duplicated files in the current location"),
- G_CALLBACK (gth_browser_activate_action_edit_find_duplicates) }
+static const GActionEntry actions[] = {
+ { "find-duplicates", gth_browser_activate_find_duplicates }
};
-static guint find_action_entries_size = G_N_ELEMENTS (find_action_entries);
-typedef struct {
- GtkActionGroup *find_action;
- guint find_merge_id;
- GtkWidget *refresh_button;
-} BrowserData;
-
-
-static void
-browser_data_free (BrowserData *data)
-{
- g_free (data);
-}
+static const GthMenuEntry action_entries[] = {
+ { N_("Find _Duplicates..."), "win.find-duplicates" }
+};
void
find_dup__gth_browser_construct_cb (GthBrowser *browser)
{
- BrowserData *data;
- GError *error = NULL;
-
g_return_if_fail (GTH_IS_BROWSER (browser));
- data = g_new0 (BrowserData, 1);
-
- data->find_action = gtk_action_group_new ("Find Duplicates Action");
- gtk_action_group_set_translation_domain (data->find_action, NULL);
- gtk_action_group_add_actions (data->find_action,
- find_action_entries,
- find_action_entries_size,
- browser);
- gtk_ui_manager_insert_action_group (gth_browser_get_ui_manager (browser), data->find_action, 0);
-
- data->find_merge_id = gtk_ui_manager_add_ui_from_string (gth_browser_get_ui_manager (browser),
find_ui_info, -1, &error);
- if (data->find_merge_id == 0) {
- g_warning ("building menus failed: %s", error->message);
- g_error_free (error);
- }
-
- g_object_set_data_full (G_OBJECT (browser), BROWSER_DATA_KEY, data, (GDestroyNotify)
browser_data_free);
+ g_action_map_add_action_entries (G_ACTION_MAP (browser),
+ actions,
+ G_N_ELEMENTS (actions),
+ browser);
+ gth_menu_manager_append_entries (gth_browser_get_menu_manager (browser,
GTH_BROWSER_MENU_MANAGER_GEARS_FOLDER_ACTIONS),
+ action_entries,
+ G_N_ELEMENTS (action_entries));
}
diff --git a/extensions/search/callbacks.c b/extensions/search/callbacks.c
index fa51037..e2c2407 100644
--- a/extensions/search/callbacks.c
+++ b/extensions/search/callbacks.c
@@ -103,9 +103,9 @@ search__gth_browser_update_extra_widget_cb (GthBrowser *browser)
gtk_button_set_relief (GTK_BUTTON (data->refresh_button), GTK_RELIEF_NONE);
gtk_widget_set_tooltip_text (data->refresh_button, _("Search again"));
gtk_widget_show_all (data->refresh_button);
- gedit_message_area_add_action_widget (GEDIT_MESSAGE_AREA (gth_browser_get_list_extra_widget
(browser)),
- data->refresh_button,
- _RESPONSE_REFRESH);
+ gtk_info_bar_add_action_widget (GTK_INFO_BAR (gth_browser_get_list_extra_widget (browser)),
+ data->refresh_button,
+ _RESPONSE_REFRESH);
g_signal_connect (data->refresh_button,
"clicked",
G_CALLBACK (refresh_button_clicked_cb),
diff --git a/extensions/search/gth-search-task.c b/extensions/search/gth-search-task.c
index 16f37ce..7773ffe 100644
--- a/extensions/search/gth-search-task.c
+++ b/extensions/search/gth-search-task.c
@@ -270,15 +270,15 @@ browser_location_ready_cb (GthBrowser *browser,
gth_embedded_dialog_set_icon (GTH_EMBEDDED_DIALOG (task->priv->dialog), GTK_STOCK_FIND,
GTK_ICON_SIZE_DIALOG);
gth_embedded_dialog_set_primary_text (GTH_EMBEDDED_DIALOG (task->priv->dialog), _("Searching..."));
update_secondary_text (task);
- gedit_message_area_clear_action_area (GEDIT_MESSAGE_AREA (task->priv->dialog));
+ _gtk_info_bar_clear_action_area (GTK_INFO_BAR (task->priv->dialog));
button = gtk_button_new ();
gtk_container_add (GTK_CONTAINER (button), gtk_image_new_from_stock (GTK_STOCK_STOP,
GTK_ICON_SIZE_BUTTON));
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
gtk_widget_set_tooltip_text (button, _("Cancel the operation"));
gtk_widget_show_all (button);
- gedit_message_area_add_action_widget (GEDIT_MESSAGE_AREA (task->priv->dialog),
- button,
- GTK_RESPONSE_CANCEL);
+ gtk_info_bar_add_action_widget (GTK_INFO_BAR (task->priv->dialog),
+ button,
+ GTK_RESPONSE_CANCEL);
dialog_data = g_new0 (EmbeddedDialogData, 1);
dialog_data->browser = task->priv->browser;
diff --git a/gthumb/Makefile.am b/gthumb/Makefile.am
index 614ffe3..4051fb6 100644
--- a/gthumb/Makefile.am
+++ b/gthumb/Makefile.am
@@ -11,8 +11,6 @@ MARSHALLERS = \
gth-marshal.h
EXTERNAL = \
- gedit-message-area.c \
- gedit-message-area.h \
gnome-desktop-thumbnail.c \
gnome-desktop-thumbnail.h \
gnome-thumbnail-pixbuf-utils.c
@@ -27,7 +25,6 @@ PUBLIC_HEADER_FILES = \
cairo-utils.h \
color-utils.h \
dom.h \
- gedit-message-area.h \
gfixed.h \
gio-utils.h \
glib-utils.h \
diff --git a/gthumb/gth-browser-actions-callbacks.c b/gthumb/gth-browser-actions-callbacks.c
index 1c285bc..427fa1a 100644
--- a/gthumb/gth-browser-actions-callbacks.c
+++ b/gthumb/gth-browser-actions-callbacks.c
@@ -581,3 +581,23 @@ gth_browser_activate_unfullscreen (GSimpleAction *action,
{
gth_browser_unfullscreen (GTH_BROWSER (user_data));
}
+
+
+void
+gth_browser_activate_open_folder_in_new_window (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ GthBrowser *browser = GTH_BROWSER (user_data);
+ GthFileData *file_data;
+ GtkWidget *new_browser;
+
+ file_data = gth_browser_get_folder_popup_file_data (browser);
+ if (file_data == NULL)
+ return;
+
+ new_browser = gth_browser_new (file_data->file, NULL);
+ gtk_window_present (GTK_WINDOW (new_browser));
+
+ g_object_unref (file_data);
+}
diff --git a/gthumb/gth-browser-actions-callbacks.h b/gthumb/gth-browser-actions-callbacks.h
index 3859cc9..835137f 100644
--- a/gthumb/gth-browser-actions-callbacks.h
+++ b/gthumb/gth-browser-actions-callbacks.h
@@ -29,7 +29,6 @@
DEFINE_ACTION(gth_browser_activate_action_edit_select_all)
DEFINE_ACTION(gth_browser_activate_action_folder_open)
DEFINE_ACTION(gth_browser_activate_action_folder_open_in_new_window)
-DEFINE_ACTION(gth_browser_activate_action_folder_open_in_file_manager)
DEFINE_ACTION(gth_browser_activate_action_view_sort_by)
DEFINE_ACTION(gth_browser_activate_action_view_filter)
DEFINE_ACTION(gth_browser_activate_action_view_filterbar)
@@ -68,5 +67,6 @@ DEF_ACTION_CALLBACK (gth_browser_activate_save_as)
DEF_ACTION_CALLBACK (gth_browser_activate_viewer_edit_file)
DEF_ACTION_CALLBACK (gth_browser_activate_viewer_properties)
DEF_ACTION_CALLBACK (gth_browser_activate_unfullscreen)
+DEF_ACTION_CALLBACK (gth_browser_activate_open_folder_in_new_window)
#endif /* GTH_BROWSER_ACTIONS_CALLBACK_H */
diff --git a/gthumb/gth-browser-actions-entries.h b/gthumb/gth-browser-actions-entries.h
index 60eac1a..11a9290 100644
--- a/gthumb/gth-browser-actions-entries.h
+++ b/gthumb/gth-browser-actions-entries.h
@@ -47,6 +47,7 @@ static const GActionEntry gth_browser_actions[] = {
{ "viewer-edit-file", toggle_action_activated, NULL, "false", gth_browser_activate_viewer_edit_file },
{ "viewer-properties", toggle_action_activated, NULL, "false", gth_browser_activate_viewer_properties
},
{ "unfullscreen", gth_browser_activate_unfullscreen },
+ { "open-folder-in-new-window", gth_browser_activate_open_folder_in_new_window },
};
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 68efed8..0fd36c9 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -106,7 +106,6 @@ struct _GthBrowserPrivate {
GtkWidget *browser_left_container;
GtkWidget *browser_sidebar;
GtkWidget *folder_tree;
- GtkWidget *history_list_popup_menu;
GtkWidget *folder_popup;
GtkWidget *file_list_popup;
GtkWidget *file_popup;
@@ -394,6 +393,7 @@ gth_browser_update_sensitivity (GthBrowser *browser)
gboolean parent_available;
gboolean viewer_can_save;
gboolean modified;
+ int n_selected;
if (browser->priv->location != NULL)
parent = g_file_get_parent (browser->priv->location->file);
@@ -404,6 +404,7 @@ gth_browser_update_sensitivity (GthBrowser *browser)
viewer_can_save = (browser->priv->location != NULL) && (browser->priv->viewer_page != NULL) &&
gth_viewer_page_can_save (GTH_VIEWER_PAGE (browser->priv->viewer_page));
modified = gth_browser_get_file_modified (browser);
+ n_selected = gth_file_selection_get_n_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view
(browser)));
_gth_browser_set_action_sensitive (browser, "View_Stop", browser->priv->fullscreen ||
(browser->priv->activity_ref > 0));
_gth_browser_set_action_sensitive (browser, "View_Thumbnail_List", gth_window_get_current_page
(GTH_WINDOW (browser)) == GTH_BROWSER_PAGE_VIEWER);
@@ -415,6 +416,7 @@ gth_browser_update_sensitivity (GthBrowser *browser)
gth_window_enable_action (GTH_WINDOW (browser), "revert-to-saved", viewer_can_save && modified);
gth_window_enable_action (GTH_WINDOW (browser), "clear-history", browser->priv->history != NULL);
gth_window_enable_action (GTH_WINDOW (browser), "go-up", parent_available);
+ gth_window_enable_action (GTH_WINDOW (browser), "browser-edit-file", n_selected == 1);
gth_sidebar_update_sensitivity (GTH_SIDEBAR (browser->priv->file_properties));
@@ -428,7 +430,7 @@ gth_browser_update_sensitivity (GthBrowser *browser)
void
gth_browser_update_extra_widget (GthBrowser *browser)
{
- gedit_message_area_clear_action_area (GEDIT_MESSAGE_AREA (browser->priv->list_extra_widget));
+ _gtk_info_bar_clear_action_area (GTK_INFO_BAR (browser->priv->list_extra_widget));
gth_embedded_dialog_set_from_file (GTH_EMBEDDED_DIALOG (browser->priv->list_extra_widget),
browser->priv->location->file);
gth_hook_invoke ("gth-browser-update-extra-widget", browser);
}
@@ -2043,13 +2045,6 @@ _gth_browser_close_final_step (gpointer user_data)
gtk_widget_destroy (browser->priv->progress_dialog);
}
- if (browser->priv->folder_popup != NULL)
- gtk_widget_destroy (browser->priv->folder_popup);
- if (browser->priv->file_list_popup != NULL)
- gtk_widget_destroy (browser->priv->file_list_popup);
- if (browser->priv->file_popup != NULL)
- gtk_widget_destroy (browser->priv->file_popup);
-
gtk_widget_destroy (GTK_WIDGET (browser));
}
@@ -2639,12 +2634,9 @@ folder_tree_folder_popup_cb (GthFolderTree *folder_tree,
gpointer user_data)
{
GthBrowser *browser = user_data;
- gboolean sensitive;
GthFileSource *file_source;
- sensitive = (file_data != NULL);
- _gth_browser_set_action_sensitive (browser, "Folder_Open", sensitive);
- _gth_browser_set_action_sensitive (browser, "Folder_OpenInNewWindow", sensitive);
+ gth_window_enable_action (GTH_WINDOW (browser), "open-folder-in-new-window", (file_data != NULL));
_g_object_unref (browser->priv->folder_popup_file_data);
browser->priv->folder_popup_file_data = _g_object_ref (file_data);
@@ -4089,11 +4081,6 @@ gth_browser_init (GthBrowser *browser)
}
#endif
gth_window_attach (GTH_WINDOW (browser), menubar, GTH_WINDOW_MENUBAR);
- browser->priv->folder_popup = gtk_ui_manager_get_widget (browser->priv->ui, "/FolderListPopup");
- g_signal_connect (browser->priv->folder_popup,
- "hide",
- G_CALLBACK (folder_popup_hide_cb),
- browser);
/* headerbar */
@@ -4432,8 +4419,6 @@ gth_browser_init (GthBrowser *browser)
G_CALLBACK (gth_file_list_key_press_cb),
browser);
- browser->priv->file_list_popup = gtk_ui_manager_get_widget (browser->priv->ui, "/FileListPopup");
-
/* the filter bar */
general_filter = g_settings_get_string (browser->priv->browser_settings, PREF_BROWSER_GENERAL_FILTER);
@@ -4492,7 +4477,71 @@ gth_browser_init (GthBrowser *browser)
/* init browser data */
- browser->priv->file_popup = gtk_ui_manager_get_widget (browser->priv->ui, "/FilePopup");
+ /* file popup menu */
+ {
+ GtkBuilder *builder;
+ GMenuModel *menu;
+
+ builder = _gtk_builder_new_from_resource ("file-menu.ui");
+ menu = G_MENU_MODEL (gtk_builder_get_object (builder, "menu"));
+ browser->priv->file_popup = gtk_menu_new_from_model (menu);
+ gtk_menu_attach_to_widget (GTK_MENU (browser->priv->file_popup), GTK_WIDGET (browser), NULL);
+
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FILE, G_MENU (menu));
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FILE_SCREEN_ACTIONS,
G_MENU (gtk_builder_get_object (builder, "screen-actions")));
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FILE_OPEN_ACTIONS,
G_MENU (gtk_builder_get_object (builder, "open-actions")));
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FILE_EDIT_ACTIONS,
G_MENU (gtk_builder_get_object (builder, "edit-actions")));
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FILE_FILE_ACTIONS,
G_MENU (gtk_builder_get_object (builder, "file-actions")));
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FILE_FOLDER_ACTIONS,
G_MENU (gtk_builder_get_object (builder, "folder-actions")));
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FILE_OTHER_ACTIONS,
G_MENU (gtk_builder_get_object (builder, "other-actions")));
+
+ g_object_unref (builder);
+ }
+
+ /* file list popup menu */
+ {
+ GtkBuilder *builder;
+ GMenuModel *menu;
+
+ builder = _gtk_builder_new_from_resource ("file-list-menu.ui");
+ menu = G_MENU_MODEL (gtk_builder_get_object (builder, "menu"));
+ browser->priv->file_list_popup = gtk_menu_new_from_model (menu);
+ gtk_menu_attach_to_widget (GTK_MENU (browser->priv->file_list_popup), GTK_WIDGET (browser),
NULL);
+
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FILE_LIST, G_MENU
(menu));
+ gth_browser_add_menu_manager_for_menu (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_SCREEN_ACTIONS, G_MENU (gtk_builder_get_object (builder,
"screen-actions")));
+ gth_browser_add_menu_manager_for_menu (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_OPEN_ACTIONS, G_MENU (gtk_builder_get_object (builder, "open-actions")));
+ gth_browser_add_menu_manager_for_menu (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_EDIT_ACTIONS, G_MENU (gtk_builder_get_object (builder, "edit-actions")));
+ gth_browser_add_menu_manager_for_menu (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_FILE_ACTIONS, G_MENU (gtk_builder_get_object (builder, "file-actions")));
+ gth_browser_add_menu_manager_for_menu (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_FOLDER_ACTIONS, G_MENU (gtk_builder_get_object (builder,
"folder-actions")));
+ gth_browser_add_menu_manager_for_menu (browser,
GTH_BROWSER_MENU_MANAGER_FILE_LIST_OTHER_ACTIONS, G_MENU (gtk_builder_get_object (builder, "other-actions")));
+
+ g_object_unref (builder);
+ }
+
+ /* folder popup menu */
+ {
+ GtkBuilder *builder;
+ GMenuModel *menu;
+
+ builder = _gtk_builder_new_from_resource ("folder-menu.ui");
+ menu = G_MENU_MODEL (gtk_builder_get_object (builder, "menu"));
+ browser->priv->folder_popup = gtk_menu_new_from_model (menu);
+ gtk_menu_attach_to_widget (GTK_MENU (browser->priv->folder_popup), GTK_WIDGET (browser),
NULL);
+ g_signal_connect (browser->priv->folder_popup,
+ "hide",
+ G_CALLBACK (folder_popup_hide_cb),
+ browser);
+
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FOLDER, G_MENU
(menu));
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FOLDER_OPEN_ACTIONS,
G_MENU (gtk_builder_get_object (builder, "open-actions")));
+ gth_browser_add_menu_manager_for_menu (browser,
GTH_BROWSER_MENU_MANAGER_FOLDER_CREATE_ACTIONS, G_MENU (gtk_builder_get_object (builder, "create-actions")));
+ gth_browser_add_menu_manager_for_menu (browser, GTH_BROWSER_MENU_MANAGER_FOLDER_EDIT_ACTIONS,
G_MENU (gtk_builder_get_object (builder, "edit-actions")));
+ gth_browser_add_menu_manager_for_menu (browser,
GTH_BROWSER_MENU_MANAGER_FOLDER_FOLDER_ACTIONS, G_MENU (gtk_builder_get_object (builder, "folder-actions")));
+ gth_browser_add_menu_manager_for_menu (browser,
GTH_BROWSER_MENU_MANAGER_FOLDER_OTHER_ACTIONS, G_MENU (gtk_builder_get_object (builder, "other-actions")));
+
+ g_object_unref (builder);
+ }
_gth_browser_set_sidebar_visibility (browser, g_settings_get_boolean
(browser->priv->browser_settings, PREF_BROWSER_SIDEBAR_VISIBLE));
diff --git a/gthumb/gth-browser.h b/gthumb/gth-browser.h
index 55ef5a2..f02ff46 100644
--- a/gthumb/gth-browser.h
+++ b/gthumb/gth-browser.h
@@ -32,9 +32,29 @@
G_BEGIN_DECLS
-#define GTH_BROWSER_MENU_MANAGER_GEARS "gears"
-#define GTH_BROWSER_MENU_MANAGER_GEARS_FOLDER_ACTIONS "gears.folder-actions"
-#define GTH_BROWSER_MENU_MANAGER_GEARS_OTHER_ACTIONS "gears.other-actions"
+#define GTH_BROWSER_MENU_MANAGER_GEARS "gears"
+#define GTH_BROWSER_MENU_MANAGER_GEARS_FOLDER_ACTIONS "gears.folder-actions"
+#define GTH_BROWSER_MENU_MANAGER_GEARS_OTHER_ACTIONS "gears.other-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE "file"
+#define GTH_BROWSER_MENU_MANAGER_FILE_SCREEN_ACTIONS "file.screen-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_OPEN_ACTIONS "file.open-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_EDIT_ACTIONS "file.edit-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_FILE_ACTIONS "file.file-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_FOLDER_ACTIONS "file.folder-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_OTHER_ACTIONS "file.other-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_LIST "file-list"
+#define GTH_BROWSER_MENU_MANAGER_FILE_LIST_SCREEN_ACTIONS "file-list.screen-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_LIST_OPEN_ACTIONS "file-list.open-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_LIST_EDIT_ACTIONS "file-list.edit-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_LIST_FILE_ACTIONS "file-list.file-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_LIST_FOLDER_ACTIONS "file-list.folder-actions"
+#define GTH_BROWSER_MENU_MANAGER_FILE_LIST_OTHER_ACTIONS "file-list.other-actions"
+#define GTH_BROWSER_MENU_MANAGER_FOLDER "folder"
+#define GTH_BROWSER_MENU_MANAGER_FOLDER_OPEN_ACTIONS "folder.open-actions"
+#define GTH_BROWSER_MENU_MANAGER_FOLDER_CREATE_ACTIONS "folder.create-actions"
+#define GTH_BROWSER_MENU_MANAGER_FOLDER_EDIT_ACTIONS "folder.edit-actions"
+#define GTH_BROWSER_MENU_MANAGER_FOLDER_FOLDER_ACTIONS "folder.folder-actions"
+#define GTH_BROWSER_MENU_MANAGER_FOLDER_OTHER_ACTIONS "folder.other-actions"
#define GTH_TYPE_BROWSER (gth_browser_get_type ())
#define GTH_BROWSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTH_TYPE_BROWSER, GthBrowser))
diff --git a/gthumb/gth-embedded-dialog.c b/gthumb/gth-embedded-dialog.c
index a25e135..840fcd8 100644
--- a/gthumb/gth-embedded-dialog.c
+++ b/gthumb/gth-embedded-dialog.c
@@ -34,7 +34,7 @@ struct _GthEmbeddedDialogPrivate {
};
-G_DEFINE_TYPE (GthEmbeddedDialog, gth_embedded_dialog, GEDIT_TYPE_MESSAGE_AREA)
+G_DEFINE_TYPE (GthEmbeddedDialog, gth_embedded_dialog, GTK_TYPE_INFO_BAR)
static void
@@ -53,7 +53,7 @@ gth_embedded_dialog_init (GthEmbeddedDialog *self)
GtkWidget *label_box;
GtkWidget *primary_label;
GtkWidget *secondary_label;
-
+
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_EMBEDDED_DIALOG, GthEmbeddedDialogPrivate);
hbox_content = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
@@ -82,7 +82,7 @@ gth_embedded_dialog_init (GthEmbeddedDialog *self)
gtk_misc_set_alignment (GTK_MISC (primary_label), 0, 0.5);
gtk_widget_set_can_focus (primary_label, TRUE);
gtk_label_set_selectable (GTK_LABEL (primary_label), TRUE);
-
+
self->priv->secondary_text_label = secondary_label = gtk_label_new (NULL);
gtk_box_pack_start (GTK_BOX (label_box), secondary_label, FALSE, FALSE, 0);
gtk_widget_set_can_focus (secondary_label, TRUE);
@@ -91,14 +91,14 @@ gth_embedded_dialog_init (GthEmbeddedDialog *self)
gtk_label_set_selectable (GTK_LABEL (secondary_label), TRUE);
gtk_label_set_ellipsize (GTK_LABEL (secondary_label), PANGO_ELLIPSIZE_END);
gtk_misc_set_alignment (GTK_MISC (secondary_label), 0, 0.5);
-
+
self->priv->location_chooser = g_object_new (GTH_TYPE_LOCATION_CHOOSER,
"show-entry-points", FALSE,
"relief", GTK_RELIEF_NONE,
NULL);
gtk_box_pack_start (GTK_BOX (hbox_content), self->priv->location_chooser, FALSE, FALSE, 0);
- gedit_message_area_set_contents (GEDIT_MESSAGE_AREA (self), hbox_content);
+ gtk_container_add (GTK_CONTAINER (gtk_info_bar_get_content_area (GTK_INFO_BAR (self))), hbox_content);
}
@@ -148,17 +148,20 @@ gth_embedded_dialog_set_primary_text (GthEmbeddedDialog *self,
gtk_widget_hide (self->priv->location_chooser);
gtk_widget_show (self->priv->info_box);
+ gtk_style_context_remove_class (gtk_widget_get_style_context (GTK_WIDGET (self)),
GTK_STYLE_CLASS_TOOLBAR);
+ gtk_style_context_remove_class (gtk_widget_get_style_context (GTK_WIDGET (self)),
GTK_STYLE_CLASS_PRIMARY_TOOLBAR);
+ gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (self)), GTK_STYLE_CLASS_INFO);
if (text == NULL) {
gtk_widget_hide (self->priv->primary_text_label);
return;
}
-
+
escaped = g_markup_escape_text (text, -1);
markup = g_strdup_printf ("<b>%s</b>", escaped);
gtk_label_set_markup (GTK_LABEL (self->priv->primary_text_label), markup);
gtk_widget_show (self->priv->primary_text_label);
-
+
g_free (markup);
g_free (escaped);
}
@@ -175,12 +178,12 @@ gth_embedded_dialog_set_secondary_text (GthEmbeddedDialog *self,
gtk_widget_hide (self->priv->secondary_text_label);
return;
}
-
+
escaped = g_markup_escape_text (text, -1);
markup = g_strdup_printf ("<small>%s</small>", escaped);
gtk_label_set_markup (GTK_LABEL (self->priv->secondary_text_label), markup);
gtk_widget_show (self->priv->secondary_text_label);
-
+
g_free (markup);
g_free (escaped);
}
@@ -192,6 +195,10 @@ gth_embedded_dialog_set_from_file (GthEmbeddedDialog *self,
{
gtk_widget_hide (self->priv->info_box);
gtk_widget_show (self->priv->location_chooser);
+ gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (self)),
GTK_STYLE_CLASS_TOOLBAR);
+ gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (self)),
GTK_STYLE_CLASS_PRIMARY_TOOLBAR);
+ gtk_style_context_remove_class (gtk_widget_get_style_context (GTK_WIDGET (self)),
GTK_STYLE_CLASS_INFO);
+
gth_location_chooser_set_current (GTH_LOCATION_CHOOSER (self->priv->location_chooser), file);
}
diff --git a/gthumb/gth-embedded-dialog.h b/gthumb/gth-embedded-dialog.h
index b11de85..86b0ca2 100644
--- a/gthumb/gth-embedded-dialog.h
+++ b/gthumb/gth-embedded-dialog.h
@@ -23,7 +23,6 @@
#define GTH_EMBEDDED_DIALOG_H
#include <gtk/gtk.h>
-#include "gedit-message-area.h"
G_BEGIN_DECLS
@@ -40,13 +39,13 @@ typedef struct _GthEmbeddedDialogClass GthEmbeddedDialogClass;
struct _GthEmbeddedDialog
{
- GeditMessageArea __parent;
+ GtkInfoBar __parent;
GthEmbeddedDialogPrivate *priv;
};
struct _GthEmbeddedDialogClass
{
- GeditMessageAreaClass __parent_class;
+ GtkInfoBarClass __parent_class;
};
GType gth_embedded_dialog_get_type (void) G_GNUC_CONST;
diff --git a/gthumb/gth-grid-view.c b/gthumb/gth-grid-view.c
index 939d212..8209b4c 100644
--- a/gthumb/gth-grid-view.c
+++ b/gthumb/gth-grid-view.c
@@ -149,6 +149,9 @@ struct _GthGridViewPrivate {
guint needs_relayout : 1;
guint needs_relayout_after_size_allocate : 1;
+ gboolean activate_on_single_click;
+ guint activate_pending : 1; /* postpone activation on button release */
+
guint layout_timeout;
int relayout_from_line;
guint update_caption_height : 1;
@@ -2692,6 +2695,9 @@ _gth_grid_view_select_single (GthGridView *self,
_gth_grid_view_set_item_selected_and_emit_signal (self, TRUE, pos);
self->priv->last_selected_pos = pos;
self->priv->last_selected_item = item;
+
+ if (self->priv->activate_on_single_click)
+ self->priv->activate_pending = TRUE;
}
gth_file_view_set_cursor (GTH_FILE_VIEW (self), pos);
@@ -3026,6 +3032,7 @@ gth_grid_view_button_release (GtkWidget *widget,
if (self->priv->dragging) {
self->priv->select_pending = self->priv->select_pending && ! self->priv->drag_started;
+ self->priv->activate_pending = self->priv->activate_pending && ! self->priv->drag_started;
_gth_grid_view_stop_dragging (self);
}
@@ -3040,6 +3047,12 @@ gth_grid_view_button_release (GtkWidget *widget,
_gth_grid_view_set_item_selected_and_emit_signal (self, TRUE, self->priv->select_pending_pos);
self->priv->last_selected_pos = self->priv->select_pending_pos;
self->priv->last_selected_item = self->priv->select_pending_item;
+ gth_file_view_activated (GTH_FILE_VIEW (self), self->priv->last_selected_pos);
+ }
+
+ if (self->priv->activate_pending) {
+ self->priv->activate_pending = FALSE;
+ gth_file_view_activated (GTH_FILE_VIEW (self), self->priv->last_selected_pos);
}
return FALSE;
@@ -3838,6 +3851,8 @@ gth_grid_view_init (GthGridView *self)
self->priv->selecting = FALSE;
self->priv->select_pending = FALSE;
+ self->priv->activate_pending = FALSE;
+ self->priv->activate_on_single_click = TRUE;
self->priv->select_pending_pos = -1;
self->priv->select_pending_item = NULL;
gth_grid_view_set_selection_mode (GTH_FILE_SELECTION (self), GTK_SELECTION_MULTIPLE);
diff --git a/gthumb/gth-info-bar.h b/gthumb/gth-info-bar.h
index 70abf8f..a17825f 100644
--- a/gthumb/gth-info-bar.h
+++ b/gthumb/gth-info-bar.h
@@ -23,7 +23,6 @@
#define GTH_INFO_BAR_H
#include <gtk/gtk.h>
-#include "gedit-message-area.h"
G_BEGIN_DECLS
diff --git a/gthumb/gth-menu-manager.c b/gthumb/gth-menu-manager.c
index d294ba4..c42dd2a 100644
--- a/gthumb/gth-menu-manager.c
+++ b/gthumb/gth-menu-manager.c
@@ -246,6 +246,8 @@ gth_menu_manager_remove_entries (GthMenuManager *menu_manager,
GList *scan;
g_return_if_fail (menu_manager != NULL);
+ if (merge_id == 0)
+ return;
items = g_hash_table_lookup (menu_manager->priv->items, GINT_TO_POINTER (merge_id));
g_return_if_fail (items != NULL);
diff --git a/gthumb/gthumb.gresource.xml b/gthumb/gthumb.gresource.xml
index 505e673..5b315be 100644
--- a/gthumb/gthumb.gresource.xml
+++ b/gthumb/gthumb.gresource.xml
@@ -2,6 +2,9 @@
<gresources>
<gresource prefix="/org/gnome/gThumb">
<file compressed="true">resources/app-menu.ui</file>
+ <file compressed="true">resources/file-list-menu.ui</file>
+ <file compressed="true">resources/file-menu.ui</file>
+ <file compressed="true">resources/folder-menu.ui</file>
<file compressed="true">resources/gears-menu.ui</file>
<file compressed="true">resources/gthumb.css</file>
<file compressed="true">resources/history-menu.ui</file>
diff --git a/gthumb/resources/Makefile.am b/gthumb/resources/Makefile.am
index d632d5b..0465be8 100644
--- a/gthumb/resources/Makefile.am
+++ b/gthumb/resources/Makefile.am
@@ -1,5 +1,8 @@
EXTRA_DIST = \
app-menu.ui \
+ file-list-menu.ui \
+ file-menu.ui \
+ folder-menu.ui \
gears-menu.ui \
gthumb.css \
history-menu.ui \
diff --git a/gthumb/resources/file-list-menu.ui b/gthumb/resources/file-list-menu.ui
new file mode 100644
index 0000000..7530bbb
--- /dev/null
+++ b/gthumb/resources/file-list-menu.ui
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <menu id="menu">
+ <section id="screen-actions">
+ <item>
+ <attribute name="label" translatable="yes">Fullscreen</attribute>
+ <attribute name="action">win.fullscreen</attribute>
+ </item>
+ </section>
+ <section id="open-actions">
+ </section>
+ <section id="edit-actions">
+ </section>
+ <section id="file-actions">
+ </section>
+ <section id="folder-actions">
+ </section>
+ <section id="other-actions">
+ </section>
+ </menu>
+</interface>
diff --git a/gthumb/resources/file-menu.ui b/gthumb/resources/file-menu.ui
new file mode 100644
index 0000000..7530bbb
--- /dev/null
+++ b/gthumb/resources/file-menu.ui
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <menu id="menu">
+ <section id="screen-actions">
+ <item>
+ <attribute name="label" translatable="yes">Fullscreen</attribute>
+ <attribute name="action">win.fullscreen</attribute>
+ </item>
+ </section>
+ <section id="open-actions">
+ </section>
+ <section id="edit-actions">
+ </section>
+ <section id="file-actions">
+ </section>
+ <section id="folder-actions">
+ </section>
+ <section id="other-actions">
+ </section>
+ </menu>
+</interface>
diff --git a/gthumb/resources/folder-menu.ui b/gthumb/resources/folder-menu.ui
new file mode 100644
index 0000000..b4593c5
--- /dev/null
+++ b/gthumb/resources/folder-menu.ui
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <menu id="menu">
+ <section id="open-actions">
+ <item>
+ <attribute name="label" translatable="yes">Open in New Window</attribute>
+ <attribute name="action">win.open-folder-in-new-window</attribute>
+ </item>
+ </section>
+ <section id="create-actions">
+ </section>
+ <section id="edit-actions">
+ </section>
+ <section id="folder-actions">
+ </section>
+ <section id="other-actions">
+ </section>
+ </menu>
+</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]