[gthumb] started porting of the context menus to GMenu



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]