[nautilus/wip/gaction] 28-11-2014



commit e68ac2281d65546af9da3dade218014f32807587
Author: Carlos Soriano <carlos sorian89 gmail com>
Date:   Fri Nov 28 16:35:06 2014 +0100

    28-11-2014

 libnautilus-private/nautilus-ui-utilities.c |   52 +-
 libnautilus-private/nautilus-ui-utilities.h |    2 +-
 src/nautilus-canvas-view.c                  |    5 +-
 src/nautilus-desktop-canvas-view.c          |    7 -
 src/nautilus-list-view.c                    |   11 +-
 src/nautilus-main-menus.xml                 |    9 +-
 src/nautilus-toolbar.c                      |   43 +
 src/nautilus-toolbar.h                      |    4 +-
 src/nautilus-view-right-click-menus.xml     |   56 +-
 src/nautilus-view.c                         | 2494 +++------------------------
 src/nautilus-view.h                         |    9 +-
 11 files changed, 358 insertions(+), 2334 deletions(-)
---
diff --git a/libnautilus-private/nautilus-ui-utilities.c b/libnautilus-private/nautilus-ui-utilities.c
index fa62d4e..3f2281e 100644
--- a/libnautilus-private/nautilus-ui-utilities.c
+++ b/libnautilus-private/nautilus-ui-utilities.c
@@ -41,43 +41,52 @@ add_accelerator (GApplication *app,
                NULL
        };
 
-       gtk_application_set_accels_for_action (app, action_name, vaccels);
+       gtk_application_set_accels_for_action (GTK_APPLICATION (app), action_name, vaccels);
 }
 
 static GMenuModel *
 find_gmenu_model (GMenuModel  *model,
-                   const gchar *section_id)
+                 const gchar *insertion_id)
 {
        gint i, n_items;
-       GMenuModel *section = NULL;
+       GMenuModel *insertion_model = NULL;
 
        n_items = g_menu_model_get_n_items (model);
 
-       for (i = 0; i < n_items && !section; i++)
+       for (i = 0; i < n_items && !insertion_model; i++)
        {
                gchar *id = NULL;
-
                if (g_menu_model_get_item_attribute (model, i, "id", "s", &id) &&
-                       strcmp (id, section_id) == 0)
+                       strcmp (id, insertion_id) == 0)
                {
-                       section = g_menu_model_get_item_link (model, i, G_MENU_LINK_SECTION);
+                       insertion_model = g_menu_model_get_item_link (model, i, G_MENU_LINK_SECTION);
+                       if (!insertion_model)
+                       {
+                               insertion_model = g_menu_model_get_item_link (model, i, G_MENU_LINK_SUBMENU);
+                       }
                }
                else
                {
-                       GMenuModel *subsection;
+                       GMenuModel *submodel;
                        GMenuModel *submenu;
                        gint j, j_items;
 
-                       subsection = g_menu_model_get_item_link (model, i, G_MENU_LINK_SECTION);
+                       submodel = g_menu_model_get_item_link (model, i, G_MENU_LINK_SECTION);
 
-                       j_items = g_menu_model_get_n_items (subsection);
+                       if (!submodel)
+                       {
+                               submodel = g_menu_model_get_item_link (model, i, G_MENU_LINK_SUBMENU);
+                               if (!submodel)
+                                       continue;
+                       }
 
-                       for (j = 0; j < j_items && !section; j++)
+                       j_items = g_menu_model_get_n_items (submodel);
+                       for (j = 0; j < j_items && !insertion_model; j++)
                        {
-                               submenu = g_menu_model_get_item_link (subsection, j, G_MENU_LINK_SUBMENU);
+                               submenu = g_menu_model_get_item_link (submodel, j, G_MENU_LINK_SUBMENU);
                                if (submenu)
                                {
-                                       section = find_gmenu_model (submenu, section_id);
+                                       insertion_model = find_gmenu_model (submenu, insertion_id);
                                }
                        }
                }
@@ -85,7 +94,7 @@ find_gmenu_model (GMenuModel  *model,
                g_free (id);
        }
 
-       return section;
+       return insertion_model;
 }
 
 /*
@@ -123,20 +132,20 @@ nautilus_gmenu_merge (GMenu *original,
  * the item @item.
  */
 void
-nautilus_gmenu_add_item_in_section (GMenu *menu,
+nautilus_gmenu_add_item_in_submodel (GMenu *menu,
                        GMenuItem *item,
-                       const gchar *section_name)
+                       const gchar *submodel_name)
 {
-       GMenuModel *section;
+       GMenuModel *submodel;
 
        g_return_if_fail (G_IS_MENU (menu));
        g_return_if_fail (G_IS_MENU_ITEM (item));
 
-       section = find_gmenu_model (G_MENU_MODEL (menu), section_name);
+       submodel = find_gmenu_model (G_MENU_MODEL (menu), submodel_name);
 
-       g_return_if_fail (section != NULL);
+       g_return_if_fail (submodel != NULL);
 
-       g_menu_append_item (G_MENU (section), item);
+       g_menu_append_item (G_MENU (submodel), item);
 }
 
 void
@@ -270,6 +279,9 @@ nautilus_escape_action_name (const char *action_name,
                case '"':
                        g_string_append (s, "\\q");
                        break;
+               case ' ':
+                       g_string_append (s, "+");
+                       break;
                default:
                        g_string_append_c (s, *action_name);
                }
diff --git a/libnautilus-private/nautilus-ui-utilities.h b/libnautilus-private/nautilus-ui-utilities.h
index f4f7caf..ae802e2 100644
--- a/libnautilus-private/nautilus-ui-utilities.h
+++ b/libnautilus-private/nautilus-ui-utilities.h
@@ -38,7 +38,7 @@ void nautilus_gmenu_merge                        (GMenu *original,
                                                    GMenu *gmenu_to_merge,
                                                    const gchar *section_name);
 
-void nautilus_gmenu_add_item_in_section           (GMenu *menu,
+void nautilus_gmenu_add_item_in_submodel          (GMenu *menu,
                                                    GMenuItem *item,
                                                    const gchar *section_name);
 
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c
index c2509d8..1c807b5 100644
--- a/src/nautilus-canvas-view.c
+++ b/src/nautilus-canvas-view.c
@@ -1477,10 +1477,11 @@ icon_rename_started_cb (NautilusCanvasContainer *container,
        NautilusView *directory_view;
 
        directory_view = NAUTILUS_VIEW (callback_data);
-       nautilus_clipboard_set_up_editable
+       //FIXME
+       /*nautilus_clipboard_set_up_editable
                (GTK_EDITABLE (widget),
                 nautilus_view_get_ui_manager (directory_view),
-                FALSE);
+                FALSE);*/
 }
 
 static char *
diff --git a/src/nautilus-desktop-canvas-view.c b/src/nautilus-desktop-canvas-view.c
index 6638f97..ca1a6f8 100644
--- a/src/nautilus-desktop-canvas-view.c
+++ b/src/nautilus-desktop-canvas-view.c
@@ -248,13 +248,6 @@ nautilus_desktop_canvas_view_dispose (GObject *object)
                canvas_view->details->reload_desktop_timeout = 0;
        }
 
-       ui_manager = nautilus_view_get_ui_manager (NAUTILUS_VIEW (canvas_view));
-       if (ui_manager != NULL) {
-               nautilus_ui_unmerge_ui (ui_manager,
-                                       &canvas_view->details->desktop_merge_id,
-                                       &canvas_view->details->desktop_action_group);
-       }
-
        g_signal_handlers_disconnect_by_func (nautilus_icon_view_preferences,
                                              default_zoom_level_changed,
                                              canvas_view);
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index d8d85fc..a1514b9 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -89,7 +89,6 @@ struct NautilusListViewDetails {
        gboolean drag_started;
        gboolean ignore_button_release;
        gboolean row_selected_on_button_down;
-       gboolean menus_ready;
        gboolean active;
        
        GHashTable *columns;
@@ -1288,10 +1287,11 @@ cell_renderer_editing_started_cb (GtkCellRenderer *renderer,
        g_signal_connect (entry, "focus-out-event",
                          G_CALLBACK (editable_focus_out_cb), list_view);
 
-       nautilus_clipboard_set_up_editable
+//FIXME
+       /*nautilus_clipboard_set_up_editable
                (GTK_EDITABLE (entry),
                 nautilus_view_get_ui_manager (NAUTILUS_VIEW (list_view)),
-                FALSE);
+                FALSE);*/
 }
 
 static void
@@ -3045,11 +3045,6 @@ nautilus_list_view_update_right_click_menus (NautilusView *view)
 
         list_view = NAUTILUS_LIST_VIEW (view);
 
-       /* don't update if the menus aren't ready */
-       if (!list_view->details->menus_ready) {
-               return;
-       }
-
        NAUTILUS_VIEW_CLASS (nautilus_list_view_parent_class)->update_right_click_menus (view);
 }
 
diff --git a/src/nautilus-main-menus.xml b/src/nautilus-main-menus.xml
index 6ed6a66..2274c00 100644
--- a/src/nautilus-main-menus.xml
+++ b/src/nautilus-main-menus.xml
@@ -13,14 +13,7 @@
       </item>
     </section>
     <section>
-      <item>
-        <attribute name="label" translatable="yes">Undo</attribute>
-        <attribute name="action">view.undo</attribute>
-      </item>
-      <item>
-        <attribute name="label" translatable="yes">Redo</attribute>
-        <attribute name="action">view.redo</attribute>
-      </item>
+      <attribute name="id">undo-redo-section</attribute>
     </section>
     <section>
       <item>
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c
index c92590d..62b88a1 100644
--- a/src/nautilus-toolbar.c
+++ b/src/nautilus-toolbar.c
@@ -60,6 +60,9 @@ struct _NautilusToolbarPrivate {
        GtkWidget *view_button;
        GtkWidget *action_button;
 
+       GtkWidget *undo_label;
+       GtkWidget *redo_label;
+
        GtkWidget *view_menu_widget;
        GtkAdjustment *zoom_adjustment;
        GtkWidget *zoom_level_scale;
@@ -469,6 +472,8 @@ nautilus_toolbar_init (NautilusToolbar *self)
 
        builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-toolbar-view-menu.xml");
        self->priv->view_menu_widget = g_object_ref (GTK_WIDGET (gtk_builder_get_object (builder, 
"view_menu_widget")));
+       self->priv->undo_label = g_object_ref (GTK_WIDGET (gtk_builder_get_object (builder, "undo_label")));
+       self->priv->redo_label = g_object_ref (GTK_WIDGET (gtk_builder_get_object (builder, "redo_label")));
        self->priv->zoom_level_scale = g_object_ref (GTK_WIDGET (gtk_builder_get_object (builder, 
"zoom_level_scale")));
        self->priv->zoom_adjustment = g_object_ref (GTK_ADJUSTMENT (gtk_builder_get_object (builder, 
"zoom_adjustment")));
        gtk_menu_button_set_popover (GTK_MENU_BUTTON (self->priv->view_button),
@@ -606,12 +611,32 @@ hide_widget_recursive (GtkWidget *widget,
        return found;
 }
 
+GMenu *
+nautilus_toolbar_action_menu_add_item (NautilusToolbar *self,
+                                      GMenuItem       *item,
+                                      const gchar     *section_name)
+{
+       nautilus_gmenu_add_item_in_submodel (self->priv->action_menu,
+                                            item,
+                                            section_name);
+}
+
 void
 nautilus_toolbar_reset_menus (NautilusToolbar *self)
 {
        NautilusWindowSlot *slot;
        NautilusView *view;
        GActionGroup *view_action_group;
+       GtkBuilder *builder;
+
+       if (self->priv->action_menu)
+               g_object_unref (self->priv->action_menu);
+
+       builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-main-menus.xml");
+       self->priv->action_menu = g_object_ref (G_MENU (gtk_builder_get_object (builder, "action-menu")));
+       gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (self->priv->action_button),
+                                       G_MENU_MODEL (self->priv->action_menu));
+       g_object_unref (builder);
 
        /* Map view actions to the view menu and action menu */
        slot = nautilus_window_get_active_slot (self->priv->window);
@@ -636,6 +661,24 @@ nautilus_toolbar_view_menu_widget_show_element (NautilusToolbar *self,
        show_widget_recursive (GTK_WIDGET (self->priv->view_menu_widget), id);
 }
 
+void
+nautilus_toolbar_view_menu_widget_set_undo_label (NautilusToolbar *self,
+                                                 gchar *label)
+{
+       g_assert (NAUTILUS_IS_TOOLBAR (self));
+
+       gtk_label_set_text (GTK_LABEL (self->priv->undo_label), label);
+}
+
+void
+nautilus_toolbar_view_menu_widget_set_redo_label (NautilusToolbar *self,
+                                                 gchar *label)
+{
+       g_assert (NAUTILUS_IS_TOOLBAR (self));
+
+       gtk_label_set_text (GTK_LABEL (self->priv->redo_label), label);
+}
+
 static gboolean
 show_widget_recursive (GtkWidget *widget,
                gchar *id)
diff --git a/src/nautilus-toolbar.h b/src/nautilus-toolbar.h
index ad6616f..4972065 100644
--- a/src/nautilus-toolbar.h
+++ b/src/nautilus-toolbar.h
@@ -72,7 +72,9 @@ void nautilus_toolbar_set_show_main_bar (NautilusToolbar *self,
                                         gboolean show_main_bar);
 void nautilus_toolbar_set_show_location_entry (NautilusToolbar *self,
                                               gboolean show_location_entry);
-
+GMenu * nautilus_toolbar_action_menu_add_item (NautilusToolbar *self,
+                                              GMenuItem       *item,
+                                              const gchar     *section_name);
 void nautilus_toolbar_reset_menus (NautilusToolbar *self);
 
 void nautilus_toolbar_sync_navigation_buttons (NautilusToolbar *self);
diff --git a/src/nautilus-view-right-click-menus.xml b/src/nautilus-view-right-click-menus.xml
index a70d41b..5ee0d79 100755
--- a/src/nautilus-view-right-click-menus.xml
+++ b/src/nautilus-view-right-click-menus.xml
@@ -1,13 +1,16 @@
 <?xml version="1.0"?>
 <interface>
   <menu id="background-menu">
-    <section>
-      <attribute name="id">templates-menu</attribute>
-    </section>
     <item>
       <attribute name="label" translatable="yes">New Folder</attribute>
       <attribute name="action">view.new-folder</attribute>
     </item>
+    <submenu>
+      <attribute name="id">templates-submenu</attribute>
+      <attribute name="label" translatable="yes">New Document</attribute>
+      <attribute name="action">view.new-document</attribute>
+      <attribute name="hidden-when">action-disabled</attribute>
+    </submenu>
     <section>
       <item>
         <attribute name="label" translatable="yes">Paste</attribute>
@@ -16,33 +19,6 @@
     </section>
     <section>
       <item>
-        <attribute name="label" translatable="yes">Mount Volume</attribute>
-        <attribute name="action">view.mount-volume</attribute>
-        <attribute name="hidden-when">action-disabled</attribute>
-      </item>
-      <item>
-        <attribute name="label" translatable="yes">Unmount Volume</attribute>
-        <attribute name="action">view.unmount-volume</attribute>
-        <attribute name="hidden-when">action-disabled</attribute>
-      </item>
-      <item>
-        <attribute name="label" translatable="yes">Eject Volume</attribute>
-        <attribute name="action">view.eject-volume</attribute>
-        <attribute name="hidden-when">action-disabled</attribute>
-      </item>
-      <item>
-        <attribute name="label" translatable="yes">Stop Volume</attribute>
-        <attribute name="action">view.stop-volume</attribute>
-        <attribute name="hidden-when">action-disabled</attribute>
-      </item>
-      <item>
-        <attribute name="label" translatable="yes">Poll</attribute>
-        <attribute name="action">view.poll</attribute>
-        <attribute name="hidden-when">action-disabled</attribute>
-      </item>
-    </section>
-    <section>
-      <item>
         <attribute name="label" translatable="yes">Select All</attribute>
         <attribute name="action">view.select-all</attribute>
       </item>
@@ -77,6 +53,19 @@
     <section>
       <attribute name="id">open-with-default-application-section</attribute>
     </section>
+    <submenu>
+      <attribute name="id">scripts-submenu</attribute>
+      <attribute name="label" translatable="yes">Scripts</attribute>
+      <attribute name="action">view.scripts</attribute>
+      <attribute name="hidden-when">action-disabled</attribute>
+      <section>
+        <item>
+          <attribute name="label" translatable="yes">Open Scripts Folder</attribute>
+          <attribute name="action">view.open-scripts-folder</attribute>
+          <attribute name="hidden-when">action-disabled</attribute>
+        </item>
+      </section>
+    </submenu>
     <section>
       <item>
         <attribute name="label" translatable="yes">Open Item Location</attribute>
@@ -170,6 +159,11 @@
         <attribute name="hidden-when">action-disabled</attribute>
       </item>
       <item>
+        <attribute name="label" translatable="yes">Delete Permanently</attribute>
+        <attribute name="action">view.delete</attribute>
+        <attribute name="hidden-when">action-disabled</attribute>
+      </item>
+      <item>
         <attribute name="label" translatable="yes">Empty Trash</attribute>
         <attribute name="action">view.empty-trash</attribute>
         <attribute name="hidden-when">action-disabled</attribute>
@@ -220,4 +214,4 @@
       </item>
     </section>
   </menu>
-</interface>
\ No newline at end of file
+</interface>
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index c214ea5..6bf7ded 100755
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -227,9 +227,8 @@ struct NautilusViewDetails
         * after it finishes loading the directory and its view.
         */
        gboolean loading;
-       gboolean scripts_invalid;
-       gboolean templates_invalid;
        gboolean templates_present;
+       gboolean scripts_present;
 
        /* flag to indicate that no file updates should be dispatched to subclasses.
         * This is a workaround for bug #87701 that prevents the list view from
@@ -277,19 +276,13 @@ typedef struct {
 /* forward declarations */
 
 static gboolean display_selection_info_idle_callback           (gpointer              data);
-static void     nautilus_view_create_links_for_files           (NautilusView      *view,
-                                                               GList                *files,
-                                                               GArray               *item_locations);
 static void     trash_or_delete_files                          (GtkWindow            *parent_window,
                                                                const GList          *files,
-                                                               gboolean              
delete_if_all_already_in_trash,
                                                                NautilusView      *view);
 static void     load_directory                                 (NautilusView      *view,
                                                                NautilusDirectory    *directory);
 static void     clipboard_changed_callback                     (NautilusClipboardMonitor *monitor,
                                                                NautilusView      *view);
-static void     open_one_in_new_window                         (gpointer              data,
-                                                               gpointer              callback_data);
 static void     schedule_update_right_click_menus                          (NautilusView      *view);
 static void     remove_update_right_click_menus_timeout_callback           (NautilusView      *view);
 static void     schedule_update_status                          (NautilusView      *view);
@@ -428,21 +421,6 @@ nautilus_view_get_selection_for_file_transfer (NautilusView *view)
        return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_selection_for_file_transfer (view);
 }
 
-/**
- * nautilus_view_get_selected_icon_locations:
- *
- * return an array of locations of selected icons if available
- * Return value: GArray of GdkPoints
- * 
- **/
-static GArray *
-nautilus_view_get_selected_icon_locations (NautilusView *view)
-{
-       g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL);
-
-       return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_selected_icon_locations (view);
-}
-
 static void
 nautilus_view_invert_selection (NautilusView *view)
 {
@@ -917,39 +895,6 @@ nautilus_view_get_containing_window (NautilusView *view)
 }
 
 static gboolean
-nautilus_view_confirm_multiple (GtkWindow *parent_window,
-                               int count,
-                               gboolean tabs)
-{
-       GtkDialog *dialog;
-       char *prompt;
-       char *detail;
-       int response;
-
-       if (count <= SILENT_WINDOW_OPEN_LIMIT) {
-               return TRUE;
-       }
-
-       prompt = _("Are you sure you want to open all files?");
-       if (tabs) {
-               detail = g_strdup_printf (ngettext("This will open %'d separate tab.",
-                                                  "This will open %'d separate tabs.", count), count);
-       } else {
-               detail = g_strdup_printf (ngettext("This will open %'d separate window.",
-                                                  "This will open %'d separate windows.", count), count);
-       }
-       dialog = eel_show_yes_no_dialog (prompt, detail, 
-                                        _("_OK"), _("_Cancel"),
-                                        parent_window);
-       g_free (detail);
-
-       response = gtk_dialog_run (dialog);
-       gtk_widget_destroy (GTK_WIDGET (dialog));
-
-       return response == GTK_RESPONSE_YES;
-}
-
-static gboolean
 selection_contains_one_item_in_menu_callback (NautilusView *view, GList *selection)
 {
        if (g_list_length (selection) == 1) {
@@ -1058,8 +1003,8 @@ nautilus_view_activate_file (NautilusView *view,
 
 static void
 action_open_with_default_application (GSimpleAction *action,
-                               GVariant      *state,
-                               gpointer       user_data)
+                                     GVariant      *state,
+                                     gpointer       user_data)
 {
        NautilusView *view;
 
@@ -1068,27 +1013,9 @@ action_open_with_default_application (GSimpleAction *action,
 }
 
 static void
-action_open_close_parent (GSimpleAction *action,
-                         GVariant      *state,
-                         gpointer       user_data)
-{
-       GList *selection;
-       NautilusView *view;
-
-       view = NAUTILUS_VIEW (user_data);
-
-       selection = nautilus_view_get_selection (view);
-       nautilus_view_activate_files (view,
-                                     selection,
-                                     NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND,
-                                     TRUE);
-       nautilus_file_list_free (selection);
-}
-
-static void
 action_open_item_location (GSimpleAction *action,
-                       GVariant      *state,
-                       gpointer       user_data)
+                          GVariant      *state,
+                          gpointer       user_data)
 {
        NautilusView *view;
        GList *selection;
@@ -1129,13 +1056,10 @@ action_open_item_new_tab (GSimpleAction *action,
        selection = nautilus_view_get_selection (view);
 
        window = nautilus_view_get_containing_window (view);
-
-       if (nautilus_view_confirm_multiple (window, g_list_length (selection), TRUE)) {
-               nautilus_view_activate_files (view,
-                                             selection,
-                                             NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB,
-                                             FALSE);
-       }
+       nautilus_view_activate_files (view,
+                                     selection,
+                                     NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB,
+                                     FALSE);
 
        nautilus_file_list_free (selection);
 }
@@ -1260,7 +1184,7 @@ trash_or_delete_selected_files (NautilusView *view)
        if (!view->details->selection_was_removed) {
                selection = nautilus_view_get_selection_for_file_transfer (view);
                trash_or_delete_files (nautilus_view_get_containing_window (view),
-                                      selection, TRUE,
+                                      selection,
                                       view);
                nautilus_file_list_free (selection);
                view->details->selection_was_removed = TRUE;
@@ -1291,6 +1215,14 @@ action_move_to_trash (GSimpleAction *action,
 }
 
 static void
+action_delete (GSimpleAction *action,
+              GVariant      *state,
+              gpointer       user_data)
+{
+       trash_or_delete_selected_files (NAUTILUS_VIEW (user_data));
+}
+
+static void
 delete_selected_files (NautilusView *view)
 {
         GList *selection;
@@ -1316,11 +1248,11 @@ delete_selected_files (NautilusView *view)
 }
 
 static void
-action_delete (GSimpleAction *action,
-             GVariant      *state,
-             gpointer       user_data)
-{
-        delete_selected_files (NAUTILUS_VIEW (user_data));
+action_delete_withouth_trash (GSimpleAction *action, 
+                             GVariant      *state,
+                             gpointer       user_data)
+{ 
+       delete_selected_files (NAUTILUS_VIEW (user_data)); 
 }
 
 static void
@@ -1357,28 +1289,6 @@ real_delete (NautilusView *view)
 }
 
 static void
-action_create_link (GSimpleAction *action,
-                   GVariant      *state,
-                   gpointer       user_data)
-{
-        NautilusView *view;
-        GList *selection;
-        GArray *selected_item_locations;
-        
-        g_assert (NAUTILUS_IS_VIEW (user_data));
-
-        view = NAUTILUS_VIEW (user_data);
-       selection = nautilus_view_get_selection (view);
-       if (selection_not_empty_in_menu_callback (view, selection)) {
-               selected_item_locations = nautilus_view_get_selected_icon_locations (view);
-               nautilus_view_create_links_for_files (view, selection, selected_item_locations);
-               g_array_free (selected_item_locations, TRUE);
-       }
-
-        nautilus_file_list_free (selection);
-}
-
-static void
 action_select_all (GSimpleAction *action,
                   GVariant      *state,
                   gpointer       user_data)
@@ -1509,25 +1419,6 @@ action_select_pattern (GSimpleAction *action,
 }
 
 static void
-action_save_search_callback (GtkAction *action,
-                            gpointer callback_data)
-{                
-       NautilusSearchDirectory *search;
-       NautilusView    *directory_view;
-       
-        directory_view = NAUTILUS_VIEW (callback_data);
-
-       if (directory_view->details->model &&
-           NAUTILUS_IS_SEARCH_DIRECTORY (directory_view->details->model)) {
-               search = NAUTILUS_SEARCH_DIRECTORY (directory_view->details->model);
-               nautilus_search_directory_save_search (search);
-
-               /* Save search is disabled */
-               schedule_update_right_click_menus (directory_view);
-       }
-}
-
-static void
 query_name_entry_changed_cb  (GtkWidget *entry, GtkWidget *button)
 {
        const char *text;
@@ -1540,114 +1431,6 @@ query_name_entry_changed_cb  (GtkWidget *entry, GtkWidget *button)
        gtk_widget_set_sensitive (button, sensitive);
 }
 
-
-static void
-action_save_search_as_callback (GtkAction *action,
-                               gpointer callback_data)
-{
-       NautilusView    *directory_view;
-       NautilusSearchDirectory *search;
-       GtkWidget *dialog, *grid, *label, *entry, *chooser, *save_button;
-       const char *entry_text;
-       char *filename, *filename_utf8, *dirname, *path, *uri;
-       GFile *location;
-       
-        directory_view = NAUTILUS_VIEW (callback_data);
-
-       if (directory_view->details->model &&
-           NAUTILUS_IS_SEARCH_DIRECTORY (directory_view->details->model)) {
-               search = NAUTILUS_SEARCH_DIRECTORY (directory_view->details->model);
-               
-               dialog = gtk_dialog_new_with_buttons (_("Save Search as"),
-                                                     nautilus_view_get_containing_window (directory_view),
-                                                     0,
-                                                     _("_Cancel"), GTK_RESPONSE_CANCEL,
-                                                     NULL);
-               save_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
-                                                    _("_Save"), GTK_RESPONSE_OK);
-               gtk_dialog_set_default_response (GTK_DIALOG (dialog),
-                                                GTK_RESPONSE_OK);
-               gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
-               gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), 2);
-               gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-
-               grid = gtk_grid_new ();
-               g_object_set (grid,
-                             "orientation", GTK_ORIENTATION_VERTICAL,
-                             "border-width", 5,
-                             "row-spacing", 6,
-                             "column-spacing", 12,
-                             NULL);
-               gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), grid, TRUE, 
TRUE, 0);
-               gtk_widget_show (grid);
-               
-               label = gtk_label_new_with_mnemonic (_("Search _name:"));
-               gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-               gtk_container_add (GTK_CONTAINER (grid), label);
-               gtk_widget_show (label);
-
-               entry = gtk_entry_new ();
-               gtk_widget_set_hexpand (entry, TRUE);
-               gtk_grid_attach_next_to (GTK_GRID (grid), entry, label,
-                                        GTK_POS_RIGHT, 1, 1);
-               gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
-               gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
-               
-               gtk_widget_set_sensitive (save_button, FALSE);
-               g_signal_connect (entry, "changed",
-                                 G_CALLBACK (query_name_entry_changed_cb), save_button);
-               
-               gtk_widget_show (entry);
-               label = gtk_label_new_with_mnemonic (_("_Folder:"));
-               gtk_misc_set_alignment (GTK_MISC(label), 0.0, 0.5);
-               gtk_container_add (GTK_CONTAINER (grid), label);
-               gtk_widget_show (label);
-
-               chooser = gtk_file_chooser_button_new (_("Select Folder to Save Search In"),
-                                                      GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
-               gtk_widget_set_hexpand (chooser, TRUE);
-               gtk_grid_attach_next_to (GTK_GRID (grid), chooser, label,
-                                        GTK_POS_RIGHT, 1, 1);
-               gtk_label_set_mnemonic_widget (GTK_LABEL (label), chooser);
-               gtk_widget_show (chooser);
-
-               gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), TRUE);
-
-               gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser),
-                                                    g_get_home_dir ());
-               
-               if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) {
-                       entry_text = gtk_entry_get_text (GTK_ENTRY (entry));
-                       if (g_str_has_suffix (entry_text, NAUTILUS_SAVED_SEARCH_EXTENSION)) {
-                               filename_utf8 = g_strdup (entry_text);
-                       } else {
-                               filename_utf8 = g_strconcat (entry_text, NAUTILUS_SAVED_SEARCH_EXTENSION, 
NULL);
-                       }
-
-                       filename = g_filename_from_utf8 (filename_utf8, -1, NULL, NULL, NULL);
-                       g_free (filename_utf8);
-
-                       dirname = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
-                       
-                       path = g_build_filename (dirname, filename, NULL);
-                       g_free (filename);
-                       g_free (dirname);
-
-                       uri = g_filename_to_uri (path, NULL, NULL);
-                       g_free (path);
-                       
-                       nautilus_search_directory_save_to_file (search, uri);
-                       location = g_file_new_for_uri (uri);
-                       nautilus_file_changes_queue_file_added (location);
-                       g_object_unref (location);
-                       nautilus_file_changes_consume_changes (TRUE);
-                       g_free (uri);
-               }
-               
-               gtk_widget_destroy (dialog);
-       }
-}
-
 typedef struct {
        NautilusView *view;
        NautilusFile *new_file;
@@ -2054,8 +1837,8 @@ nautilus_view_new_file (NautilusView *directory_view,
 
 static void
 action_new_folder (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
+                  GVariant      *state,
+                  gpointer       user_data)
 {
        g_assert (NAUTILUS_IS_VIEW (user_data));
 
@@ -2064,8 +1847,8 @@ action_new_folder (GSimpleAction *action,
 
 static void
 action_properties (GSimpleAction *action,
-                       GVariant *state,
-                       gpointer user_data)
+                  GVariant *state,
+                  gpointer user_data)
 {
         NautilusView *view;
         GList *selection;
@@ -2091,8 +1874,8 @@ action_properties (GSimpleAction *action,
 
 static void
 action_pathbar_properties (GSimpleAction *action,
-                               GVariant *state,
-                               gpointer user_data)
+                          GVariant *state,
+                          gpointer user_data)
 {
        NautilusView *view;
        GList           *files;
@@ -2156,21 +1939,9 @@ nautilus_view_set_show_hidden_files (NautilusView *view,
 }
 
 static void
-action_show_hidden_files_callback (GtkAction *action,
-                                  gpointer callback_data)
-{
-       NautilusView *view;
-
-       view = NAUTILUS_VIEW (callback_data);
-
-       nautilus_view_set_show_hidden_files
-               (view, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
-}
-
-static void
 action_show_hidden_files (GSimpleAction *action,
-                       GVariant      *state,
-                       gpointer       user_data)
+                         GVariant      *state,
+                         gpointer       user_data)
 {
        gboolean show_hidden;
        NautilusView *view;
@@ -2187,8 +1958,8 @@ action_show_hidden_files (GSimpleAction *action,
 
 static void
 action_undo (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
+            GVariant      *state,
+            gpointer       user_data)
 {
        GtkWidget *toplevel;
        NautilusView *view;
@@ -2202,8 +1973,8 @@ action_undo (GSimpleAction *action,
 
 static void
 action_redo (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
+            GVariant      *state,
+            gpointer       user_data)
 {
        GtkWidget *toplevel;
        NautilusView *view;
@@ -2231,8 +2002,8 @@ action_zoom_in (GSimpleAction *action,
 
 static void
 action_zoom_out (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data) 
+                GVariant      *state,
+                gpointer       user_data) 
 {
        NautilusView *view;
 
@@ -2245,8 +2016,8 @@ action_zoom_out (GSimpleAction *action,
 
 static void
 action_zoom_normal (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data) 
+                   GVariant      *state,
+                   gpointer       user_data) 
 {
        NautilusView *view;
 
@@ -2259,8 +2030,8 @@ action_zoom_normal (GSimpleAction *action,
 
 static void
 action_zoom_to_level (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
+                     GVariant      *state,
+                     gpointer       user_data)
 {
        NautilusView *view;
        gdouble zoom_value;
@@ -2294,8 +2065,8 @@ action_location_open_alternate_callback (GtkAction *action,
 
 static void
 action_open_item_new_window (GSimpleAction *action,
-                       GVariant      *state,
-                       gpointer       user_data)
+                            GVariant      *state,
+                            gpointer       user_data)
 {
        NautilusView *view;
        GList *selection;
@@ -2306,12 +2077,10 @@ action_open_item_new_window (GSimpleAction *action,
 
        window = nautilus_view_get_containing_window (view);
 
-       if (nautilus_view_confirm_multiple (window, g_list_length (selection), TRUE)) {
-               nautilus_view_activate_files (view,
-                                             selection,
-                                             NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW,
-                                             FALSE);
-       }
+       nautilus_view_activate_files (view,
+                                     selection,
+                                     NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW,
+                                     FALSE);
 
        nautilus_file_list_free (selection);
 }
@@ -2385,24 +2154,9 @@ paste_clipboard_received_callback (GtkClipboard     *clipboard,
 }
 
 static void
-action_paste_files_callback (GtkAction *action,
-                            gpointer callback_data)
-{
-       NautilusView *view;
-
-       view = NAUTILUS_VIEW (callback_data);
-
-       g_object_ref (view);
-       gtk_clipboard_request_contents (nautilus_clipboard_get (GTK_WIDGET (view)),
-                                       copied_files_atom,
-                                       paste_clipboard_received_callback,
-                                       view);
-}
-
-static void
 action_paste_files (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
+                   GVariant      *state,
+                   gpointer       user_data)
 {
        NautilusView *view;
 
@@ -2417,8 +2171,6 @@ action_paste_files (GSimpleAction *action,
                                        view);
 }
 
-/*************** END ACTIONS **********************/
-
 static void
 click_policy_changed_callback (gpointer callback_data)
 {
@@ -2546,7 +2298,6 @@ scripts_added_or_changed_callback (NautilusDirectory *directory,
 
        view = NAUTILUS_VIEW (callback_data);
 
-       view->details->scripts_invalid = TRUE;
        if (view->details->active) {
                schedule_update_right_click_menus (view);
        }
@@ -2561,7 +2312,6 @@ templates_added_or_changed_callback (NautilusDirectory *directory,
 
        view = NAUTILUS_VIEW (callback_data);
 
-       view->details->templates_invalid = TRUE;
        if (view->details->active) {
                schedule_update_right_click_menus (view);
        }
@@ -2674,7 +2424,6 @@ slot_inactive (NautilusWindowSlot *slot,
                return;
        }
 
-       g_print ("slot inactive\n");
        view->details->active = FALSE;
 
        remove_update_right_click_menus_timeout_callback (view);
@@ -2784,14 +2533,14 @@ update_undo_actions (NautilusView *view)
 }
 
 static void
-undo_manager_changed_cb (NautilusFileUndoManager* manager,
+undo_manager_changed (NautilusFileUndoManager* manager,
                         NautilusView *view)
 {
        if (!view->details->active) {
                return;
        }
 
-       update_undo_actions (view);
+       nautilus_view_update_toolbar_menus (view);
 }
 
 void
@@ -2839,33 +2588,6 @@ have_bulk_rename_tool ()
 }
 
 static void
-real_unmerge_menus (NautilusView *view)
-{
-       GtkUIManager *ui_manager;
-       g_print(" real unmerge menus\n");
-       ui_manager = nautilus_view_get_ui_manager (view);
-       if (ui_manager == NULL) {
-               return;
-       }
-
-       nautilus_ui_unmerge_ui (ui_manager,
-                               &view->details->dir_merge_id,
-                               &view->details->dir_action_group);
-       nautilus_ui_unmerge_ui (ui_manager,
-                               &view->details->extensions_menu_merge_id,
-                               &view->details->extensions_menu_action_group);
-       nautilus_ui_unmerge_ui (ui_manager,
-                               &view->details->open_with_merge_id,
-                               &view->details->open_with_action_group);
-       nautilus_ui_unmerge_ui (ui_manager,
-                               &view->details->scripts_merge_id,
-                               &view->details->scripts_action_group);
-       nautilus_ui_unmerge_ui (ui_manager,
-                               &view->details->templates_merge_id,
-                               &view->details->templates_action_group);
-}
-
-static void
 nautilus_view_destroy (GtkWidget *object)
 {
        NautilusView *view;
@@ -2983,7 +2705,6 @@ nautilus_view_display_selection_info (NautilusView *view)
        char *detail_status;
        NautilusFile *file;
 
-       g_print ("display select info %s\n", G_OBJECT_TYPE_NAME (view));
        g_return_if_fail (NAUTILUS_IS_VIEW (view));
 
        selection = nautilus_view_get_selection (view);
@@ -3188,7 +2909,6 @@ done_loading (NautilusView *view,
         * is no NautilusWindow any more.
         */
        if (window != NULL) {
-               g_print ("done_loading\n");
                schedule_update_right_click_menus (view);
                schedule_update_status (view);
                reset_update_interval (view);
@@ -3714,7 +3434,6 @@ static void
 update_right_click_menus_if_pending (NautilusView *view)
 {
        remove_update_right_click_menus_timeout_callback (view);
-       g_print ("update_menus if pending \n");
 
        nautilus_view_update_right_click_menus(view);
 }
@@ -3729,7 +3448,6 @@ update_right_click_menus_timeout_callback (gpointer data)
        g_object_ref (G_OBJECT (view));
 
        view->details->update_right_click_menus_timeout_id = 0;
-       g_print("update_menus_timeout_callback\n");
        nautilus_view_update_right_click_menus(view);
 
        g_object_unref (G_OBJECT (view));
@@ -4067,19 +3785,6 @@ nautilus_view_get_loading (NautilusView *view)
        return view->details->loading;
 }
 
-GtkUIManager *
-nautilus_view_get_ui_manager (NautilusView  *view)
-{
-       NautilusWindow *window;
-
-       if (view->details->slot == NULL) {
-               return NULL;
-       }
-
-       window = nautilus_window_slot_get_window (view->details->slot);
-       return nautilus_window_get_ui_manager (window);
-}
-
 /**
  * nautilus_view_get_model:
  *
@@ -4106,20 +3811,6 @@ nautilus_view_get_copied_files_atom (NautilusView *view)
 }
 
 static void
-prepend_uri_one (gpointer data, gpointer callback_data)
-{
-       NautilusFile *file;
-       GList **result;
-       
-       g_assert (NAUTILUS_IS_FILE (data));
-       g_assert (callback_data != NULL);
-
-       result = (GList **) callback_data;
-       file = (NautilusFile *) data;
-       *result = g_list_prepend (*result, nautilus_file_get_uri (file));
-}
-
-static void
 offset_drop_points (GArray *relative_item_points,
                    int x_offset, int y_offset)
 {
@@ -4135,41 +3826,6 @@ offset_drop_points (GArray *relative_item_points,
        }
 }
 
-static void
-nautilus_view_create_links_for_files (NautilusView *view, GList *files,
-                                     GArray *relative_item_points)
-{
-       GList *uris;
-       char *dir_uri;
-       CopyMoveDoneData *copy_move_done_data;
-       g_assert (relative_item_points->len == 0
-                 || g_list_length (files) == relative_item_points->len);
-       
-        g_assert (NAUTILUS_IS_VIEW (view));
-        g_assert (files != NULL);
-
-       /* create a list of URIs */
-       uris = NULL;
-       g_list_foreach (files, prepend_uri_one, &uris);
-       uris = g_list_reverse (uris);
-
-        g_assert (g_list_length (uris) == g_list_length (files));
-
-       /* offset the drop locations a bit so that we don't pile
-        * up the icons on top of each other
-        */
-       offset_drop_points (relative_item_points,
-                           DUPLICATE_HORIZONTAL_ICON_OFFSET,
-                           DUPLICATE_VERTICAL_ICON_OFFSET);
-
-        copy_move_done_data = pre_copy_move (view);
-       dir_uri = nautilus_view_get_backing_uri (view);
-       nautilus_file_operations_copy_move (uris, relative_item_points, dir_uri, GDK_ACTION_LINK, 
-                                           GTK_WIDGET (view), copy_move_done_callback, copy_move_done_data);
-       g_free (dir_uri);
-       g_list_free_full (uris, g_free);
-}
-
 /* special_link_in_selection
  * 
  * Return TRUE if one of our special links is in the selection.
@@ -4241,7 +3897,6 @@ trash_or_delete_done_cb (GHashTable *debuting_uris,
 static void
 trash_or_delete_files (GtkWindow *parent_window,
                       const GList *files,
-                      gboolean delete_if_all_already_in_trash,
                       NautilusView *view)
 {
        GList *locations;
@@ -4308,19 +3963,6 @@ update_context_menu_position_from_event (NautilusView *view,
        }
 }
 
-/* handle the open command */
-
-static void
-open_one_in_new_window (gpointer data, gpointer callback_data)
-{
-       g_assert (NAUTILUS_IS_FILE (data));
-       g_assert (NAUTILUS_IS_VIEW (callback_data));
-
-       nautilus_view_activate_file (NAUTILUS_VIEW (callback_data),
-                                    NAUTILUS_FILE (data),
-                                    NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW);
-}
-
 NautilusFile *
 nautilus_view_get_directory_as_file (NautilusView *view)
 {
@@ -4329,19 +3971,6 @@ nautilus_view_get_directory_as_file (NautilusView *view)
        return view->details->directory_as_file; 
 }
 
-static void
-open_with_launch_application_callback (GtkAction *action,
-                                      gpointer callback_data)
-{
-       ApplicationLaunchParameters *launch_parameters;
-       
-       launch_parameters = (ApplicationLaunchParameters *) callback_data;
-       nautilus_launch_application 
-               (launch_parameters->application,
-                launch_parameters->files,
-                nautilus_view_get_containing_window (launch_parameters->directory_view));
-}
-
 static char *
 escape_action_path (const char *action_path)
 {
@@ -4426,373 +4055,6 @@ add_submenu (GtkUIManager *ui_manager,
        }
 }
 
-static void
-menu_item_show_image (GtkUIManager *ui_manager,
-                     const char   *parent_path,
-                     const char   *action_name)
-{
-       char *path;
-       GtkWidget *menuitem;
-
-       path = g_strdup_printf ("%s/%s", parent_path, action_name);
-       menuitem = gtk_ui_manager_get_widget (ui_manager,
-                                             path);
-       if (menuitem != NULL) {
-               gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem),
-                                                          TRUE);
-       }
-       g_free (path);
-}
-
-static void
-add_application_to_open_with_menu (NautilusView *view,
-                                  GAppInfo *application, 
-                                  GList *files,
-                                  int index,
-                                  const char *menu_placeholder,
-                                  const char *popup_placeholder,
-                                  const gboolean submenu)
-{
-       ApplicationLaunchParameters *launch_parameters;
-       char *tip;
-       char *label;
-       char *action_name;
-       char *escaped_app;
-       GtkAction *action;
-       GIcon *app_icon;
-       GtkUIManager *ui_manager;
-
-       launch_parameters = application_launch_parameters_new 
-               (application, files, view);
-       escaped_app = eel_str_double_underscores (g_app_info_get_name (application));
-       if (submenu)
-               label = g_strdup_printf ("%s", escaped_app);
-       else
-               label = g_strdup_printf (_("Open With %s"), escaped_app);
-
-       tip = g_strdup_printf (ngettext ("Use “%s” to open the selected item",
-                                        "Use “%s” to open the selected items",
-                                        g_list_length (files)),
-                              escaped_app);
-       g_free (escaped_app);
-
-       action_name = g_strdup_printf ("open_with_%d", index);
-       
-       action = gtk_action_new (action_name,
-                                label,
-                                tip,
-                                NULL);
-
-       app_icon = g_app_info_get_icon (application);
-       if (app_icon != NULL) {
-               g_object_ref (app_icon);
-       } else {
-               app_icon = g_themed_icon_new ("application-x-executable");
-       }
-
-       gtk_action_set_gicon (action, app_icon);
-       g_object_unref (app_icon);
-
-       g_signal_connect_data (action, "activate",
-                              G_CALLBACK (open_with_launch_application_callback),
-                              launch_parameters, 
-                              (GClosureNotify)application_launch_parameters_free, 0);
-
-       gtk_action_group_add_action (view->details->open_with_action_group,
-                                    action);
-       g_object_unref (action);
-
-       ui_manager = nautilus_view_get_ui_manager (view);
-       gtk_ui_manager_add_ui (ui_manager,
-                              view->details->open_with_merge_id,
-                              popup_placeholder,
-                              action_name,
-                              action_name,
-                              GTK_UI_MANAGER_MENUITEM,
-                              FALSE);
-
-       menu_item_show_image (ui_manager, popup_placeholder, action_name);
-
-       g_free (action_name);
-       g_free (label);
-       g_free (tip);
-}
-
-static void
-get_x_content_async_callback (const char **content,
-                             gpointer user_data)
-{
-       NautilusView *view;
-
-       view = NAUTILUS_VIEW (user_data);
-
-       if (view->details->slot != NULL) {
-               schedule_update_right_click_menus (view);
-       }
-       g_object_unref (view);
-}
-
-static void
-add_x_content_apps (NautilusView *view, NautilusFile *file, GList **applications)
-{
-       GMount *mount;
-       char **x_content_types;
-       unsigned int n;
-
-       g_return_if_fail (applications != NULL);
-
-       mount = nautilus_file_get_mount (file);
-
-       if (mount == NULL) {
-               return;
-       }
-       
-       x_content_types = nautilus_get_cached_x_content_types_for_mount (mount);
-       if (x_content_types != NULL) {
-               for (n = 0; x_content_types[n] != NULL; n++) {
-                       char *x_content_type = x_content_types[n];
-                       GList *app_info_for_x_content_type;
-                       
-                       app_info_for_x_content_type = g_app_info_get_all_for_type (x_content_type);
-                       *applications = g_list_concat (*applications, app_info_for_x_content_type);
-               }
-               g_strfreev (x_content_types);
-       } else {
-               nautilus_get_x_content_types_for_mount_async (mount,
-                                                             get_x_content_async_callback,
-                                                             NULL,
-                                                             g_object_ref (view));
-               
-       }
-
-       g_object_unref (mount);
-}
-
-static void
-reset_open_with_menu (NautilusView *view, GList *selection)
-{
-       GList *applications, *node;
-       NautilusFile *file;
-       gboolean submenu_visible, filter_default;
-       int num_applications;
-       int index;
-       gboolean other_applications_visible;
-       gboolean open_with_chooser_visible;
-       GtkUIManager *ui_manager;
-       GtkAction *action;
-       GAppInfo *default_app;
-
-       /* Clear any previous inserted items in the applications and viewers placeholders */
-
-       ui_manager = nautilus_view_get_ui_manager (view);
-       nautilus_ui_unmerge_ui (ui_manager,
-                               &view->details->open_with_merge_id,
-                               &view->details->open_with_action_group);
-       
-       nautilus_ui_prepare_merge_ui (ui_manager,
-                                     "OpenWithGroup",
-                                     &view->details->open_with_merge_id,
-                                     &view->details->open_with_action_group);
-
-       other_applications_visible = (selection != NULL);
-       filter_default = (selection != NULL);
-
-       for (node = selection; node != NULL; node = node->next) {
-
-               file = NAUTILUS_FILE (node->data);
-
-               other_applications_visible &= (!nautilus_mime_file_opens_in_view (file) &&
-                                              !nautilus_file_is_nautilus_link (file));
-       }
-
-       default_app = NULL;
-       if (filter_default) {
-               default_app = nautilus_mime_get_default_application_for_files (selection);
-       }
-
-       applications = NULL;
-       if (other_applications_visible) {
-               applications = nautilus_mime_get_applications_for_files (selection);
-       }
-
-       if (g_list_length (selection) == 1) {
-               add_x_content_apps (view, NAUTILUS_FILE (selection->data), &applications);
-       }
-
-
-       num_applications = g_list_length (applications);
-
-       submenu_visible = (num_applications > 1);
-
-       for (node = applications, index = 0; node != NULL; node = node->next, index++) {
-               GAppInfo *application;
-               char *menu_path;
-               char *popup_path;
-               
-               application = node->data;
-
-               if (default_app != NULL && g_app_info_equal (default_app, application)) {
-                       continue;
-               }
-
-               if (submenu_visible) {
-                       menu_path = NAUTILUS_VIEW_MENU_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER;
-                       popup_path = NAUTILUS_VIEW_POPUP_PATH_APPLICATIONS_SUBMENU_PLACEHOLDER;
-               } else {
-                       menu_path = NAUTILUS_VIEW_MENU_PATH_APPLICATIONS_PLACEHOLDER;
-                       popup_path = NAUTILUS_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER;
-               }
-
-               gtk_ui_manager_add_ui (nautilus_view_get_ui_manager (view),
-                                      view->details->open_with_merge_id,
-                                      menu_path,
-                                      "separator",
-                                      NULL,
-                                      GTK_UI_MANAGER_SEPARATOR,
-                                      FALSE);
-                                      
-               add_application_to_open_with_menu (view, 
-                                                  node->data, 
-                                                  selection, 
-                                                  index, 
-                                                  menu_path, popup_path, submenu_visible);
-       }
-       g_list_free_full (applications, g_object_unref);
-       if (default_app != NULL) {
-               g_object_unref (default_app);
-       }
-
-       open_with_chooser_visible = other_applications_visible &&
-               g_list_length (selection) == 1;
-
-       if (submenu_visible) {
-               action = gtk_action_group_get_action (view->details->dir_action_group,
-                                                     NAUTILUS_ACTION_OTHER_APPLICATION1);
-               gtk_action_set_visible (action, open_with_chooser_visible);
-               action = gtk_action_group_get_action (view->details->dir_action_group,
-                                                     NAUTILUS_ACTION_OTHER_APPLICATION2);
-               gtk_action_set_visible (action, FALSE);
-       } else {
-               action = gtk_action_group_get_action (view->details->dir_action_group,
-                                                     NAUTILUS_ACTION_OTHER_APPLICATION1);
-               gtk_action_set_visible (action, FALSE);
-               action = gtk_action_group_get_action (view->details->dir_action_group,
-                                                     NAUTILUS_ACTION_OTHER_APPLICATION2);
-               gtk_action_set_visible (action, open_with_chooser_visible);
-       }
-}
-
-static GList *
-get_all_extension_menu_items (GtkWidget *window,
-                             GList *selection)
-{
-       GList *items;
-       GList *providers;
-       GList *l;
-       
-       providers = nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_MENU_PROVIDER);
-       items = NULL;
-
-       for (l = providers; l != NULL; l = l->next) {
-               NautilusMenuProvider *provider;
-               GList *file_items;
-               
-               provider = NAUTILUS_MENU_PROVIDER (l->data);
-               file_items = nautilus_menu_provider_get_file_items (provider,
-                                                                   window,
-                                                                   selection);
-               items = g_list_concat (items, file_items);              
-       }
-
-       nautilus_module_extension_list_free (providers);
-
-       return items;
-}
-
-typedef struct 
-{
-       NautilusMenuItem *item;
-       NautilusView *view;
-       GList *selection;
-       GtkAction *action;
-} ExtensionActionCallbackData;
-
-
-static void
-extension_action_callback_data_free (ExtensionActionCallbackData *data)
-{
-       g_object_unref (data->item);
-       nautilus_file_list_free (data->selection);
-       
-       g_free (data);
-}
-
-static gboolean
-search_in_menu_items (GList* items, const char *item_name)
-{
-       GList* list;
-       
-       for (list = items; list != NULL; list = list->next) {
-               NautilusMenu* menu;
-               char *name;
-               
-               g_object_get (list->data, "name", &name, NULL);
-               if (strcmp (name, item_name) == 0) {
-                       g_free (name);
-                       return TRUE;
-               }
-               g_free (name);
-
-               menu = NULL;
-               g_object_get (list->data, "menu", &menu, NULL);
-               if (menu != NULL) {
-                       gboolean ret;
-                       GList* submenus;
-
-                       submenus = nautilus_menu_get_items (menu);
-                       ret = search_in_menu_items (submenus, item_name);
-                       nautilus_menu_item_list_free (submenus);
-                       g_object_unref (menu);
-                       if (ret) {
-                               return TRUE;
-                       }
-               }
-       }
-       return FALSE;
-}
-
-static void
-extension_action_callback (GtkAction *action,
-                          gpointer callback_data)
-{
-       ExtensionActionCallbackData *data;
-       char *item_name;
-       gboolean is_valid;
-       GList *l;
-       GList *items;
-
-       data = callback_data;
-
-       /* Make sure the selected menu item is valid for the final sniffed
-        * mime type */
-       g_object_get (data->item, "name", &item_name, NULL);
-       items = get_all_extension_menu_items (gtk_widget_get_toplevel (GTK_WIDGET (data->view)), 
-                                             data->selection);
-       
-       is_valid = search_in_menu_items (items, item_name);
-
-       for (l = items; l != NULL; l = l->next) {
-               g_object_unref (l->data);
-       }
-       g_list_free (items);
-       
-       g_free (item_name);
-
-       if (is_valid) {
-               nautilus_menu_item_activate (data->item);
-       }
-}
-
 static GdkPixbuf *
 get_menu_icon_for_file (NautilusFile *file,
                        GtkWidget    *widget)
@@ -4811,153 +4073,6 @@ get_menu_icon_for_file (NautilusFile *file,
        return pixbuf;
 }
 
-static GtkAction *
-add_extension_action_for_files (NautilusView *view, 
-                               NautilusMenuItem *item,
-                               GList *files)
-{
-       char *name, *label, *tip, *icon;
-       gboolean sensitive, priority;
-       GtkAction *action;
-       GdkPixbuf *pixbuf;
-       ExtensionActionCallbackData *data;
-       
-       g_object_get (G_OBJECT (item), 
-                     "name", &name, "label", &label, 
-                     "tip", &tip, "icon", &icon,
-                     "sensitive", &sensitive,
-                     "priority", &priority,
-                     NULL);
-
-       action = gtk_action_new (name,
-                                label,
-                                tip,
-                                NULL);
-
-       if (icon != NULL) {
-               pixbuf = nautilus_ui_get_menu_icon (icon, GTK_WIDGET (view));
-               if (pixbuf != NULL) {
-                       gtk_action_set_gicon (action, G_ICON (pixbuf));
-                       g_object_unref (pixbuf);
-               }
-       }
-
-       gtk_action_set_sensitive (action, sensitive);
-       g_object_set (action, "is-important", priority, NULL);
-
-       data = g_new0 (ExtensionActionCallbackData, 1);
-       data->item = g_object_ref (item);
-       data->view = view;
-       data->selection = nautilus_file_list_copy (files);
-       data->action = action;
-
-       g_signal_connect_data (action, "activate",
-                              G_CALLBACK (extension_action_callback),
-                              data,
-                              (GClosureNotify)extension_action_callback_data_free, 0);
-               
-       gtk_action_group_add_action (view->details->extensions_menu_action_group,
-                                    GTK_ACTION (action));
-       g_object_unref (action);
-       
-       g_free (name);
-       g_free (label);
-       g_free (tip);
-       g_free (icon);
-
-       return action;
-}
-
-static void
-add_extension_menu_items (NautilusView *view,
-                         GList *files,
-                         GList *menu_items,
-                         const char *subdirectory)
-{
-       GtkUIManager *ui_manager;
-       GList *l;
-
-       ui_manager = nautilus_view_get_ui_manager (view);
-       
-       for (l = menu_items; l; l = l->next) {
-               NautilusMenuItem *item;
-               NautilusMenu *menu;
-               GtkAction *action;
-               char *path;
-               
-               item = NAUTILUS_MENU_ITEM (l->data);
-               
-               g_object_get (item, "menu", &menu, NULL);
-               
-               action = add_extension_action_for_files (view, item, files);
-               
-               path = g_build_path ("/", NAUTILUS_VIEW_POPUP_PATH_EXTENSION_ACTIONS, subdirectory, NULL);
-               gtk_ui_manager_add_ui (ui_manager,
-                                      view->details->extensions_menu_merge_id,
-                                      path,
-                                      gtk_action_get_name (action),
-                                      gtk_action_get_name (action),
-                                      (menu != NULL) ? GTK_UI_MANAGER_MENU : GTK_UI_MANAGER_MENUITEM,
-                                      FALSE);
-               g_free (path);
-
-               path = g_build_path ("/", NAUTILUS_VIEW_MENU_PATH_EXTENSION_ACTIONS_PLACEHOLDER, 
subdirectory, NULL);
-               gtk_ui_manager_add_ui (ui_manager,
-                                      view->details->extensions_menu_merge_id,
-                                      path,
-                                      gtk_action_get_name (action),
-                                      gtk_action_get_name (action),
-                                      (menu != NULL) ? GTK_UI_MANAGER_MENU : GTK_UI_MANAGER_MENUITEM,
-                                      FALSE);
-               g_free (path);
-
-               /* recursively fill the menu */                
-               if (menu != NULL) {
-                       char *subdir;
-                       GList *children;
-                       
-                       children = nautilus_menu_get_items (menu);
-                       
-                       subdir = g_build_path ("/", subdirectory, gtk_action_get_name (action), NULL);
-                       add_extension_menu_items (view,
-                                                 files,
-                                                 children,
-                                                 subdir);
-
-                       nautilus_menu_item_list_free (children);
-                       g_free (subdir);
-               }                       
-       }
-}
-
-static void
-reset_extension_actions_menu (NautilusView *view, GList *selection)
-{
-       GList *items;
-       GtkUIManager *ui_manager;
-       
-       /* Clear any previous inserted items in the extension actions placeholder */
-       ui_manager = nautilus_view_get_ui_manager (view);
-
-       nautilus_ui_unmerge_ui (ui_manager,
-                               &view->details->extensions_menu_merge_id,
-                               &view->details->extensions_menu_action_group);
-       
-       nautilus_ui_prepare_merge_ui (ui_manager,
-                                     "DirExtensionsMenuGroup",
-                                     &view->details->extensions_menu_merge_id,
-                                     &view->details->extensions_menu_action_group);
-
-       items = get_all_extension_menu_items (gtk_widget_get_toplevel (GTK_WIDGET (view)), 
-                                             selection);
-       if (items != NULL) {
-               add_extension_menu_items (view, selection, items, "");
-
-               g_list_foreach (items, (GFunc) g_object_unref, NULL);
-               g_list_free (items);
-       }
-}
-
 static char *
 change_to_view_directory (NautilusView *view)
 {
@@ -5151,7 +4266,9 @@ unset_script_environment_variables (void)
 }
 
 static void
-run_script_callback (GtkAction *action, gpointer callback_data)
+run_script (GSimpleAction *action,      
+            GVariant      *state,       
+            gpointer       user_data)   
 {
        ScriptLaunchParameters *launch_parameters;
        GdkScreen *screen;
@@ -5162,7 +4279,7 @@ run_script_callback (GtkAction *action, gpointer callback_data)
        char *old_working_dir;
        char **parameters;
        
-       launch_parameters = (ScriptLaunchParameters *) callback_data;
+       launch_parameters = (ScriptLaunchParameters *) user_data;
 
        file_uri = nautilus_file_get_uri (launch_parameters->file);
        local_file_path = g_filename_from_uri (file_uri, NULL, NULL);
@@ -5182,7 +4299,7 @@ run_script_callback (GtkAction *action, gpointer callback_data)
 
        screen = gtk_widget_get_screen (GTK_WIDGET (launch_parameters->directory_view));
 
-       DEBUG ("run_script_callback, script_path=“%s” (omitting script parameters)",
+       DEBUG ("run_script, script_path=“%s” (omitting script parameters)",
               local_file_path);
 
        nautilus_launch_application_from_command_array (screen, quoted_path, FALSE,
@@ -5197,86 +4314,50 @@ run_script_callback (GtkAction *action, gpointer callback_data)
 }
 
 static void
-add_script_to_scripts_menus (NautilusView *directory_view,
-                            NautilusFile *file,
-                            const char *menu_path,
-                            const char *popup_path, 
-                            const char *popup_bg_path)
+add_script_to_scripts_menus (NautilusView *view,
+                            NautilusFile *file)
 {
+       gchar *name;
+       GdkPixbuf *mimetype_icon;
+       gchar *action_name, *detailed_action_name, *prefix;
        ScriptLaunchParameters *launch_parameters;
-       char *tip;
-       char *name;
-       char *uri;
-       char *action_name;
-       char *escaped_label;
-       GdkPixbuf *pixbuf;
-       GtkUIManager *ui_manager;
-       GtkAction *action;
-
-       name = nautilus_file_get_display_name (file);
-       uri = nautilus_file_get_uri (file);
-       tip = g_strdup_printf (_("Run “%s” on any selected items"), name);
-
-       launch_parameters = script_launch_parameters_new (file, directory_view);
-
-       action_name = nautilus_escape_action_name (uri, "script_");
-       escaped_label = eel_str_double_underscores (name);
+       GAction *action;
+       GMenuItem *menu_item;
 
-       action = gtk_action_new (action_name,
-                                escaped_label,
-                                tip,
-                                NULL);
+       launch_parameters = script_launch_parameters_new (file, view);
 
-       pixbuf = get_menu_icon_for_file (file, GTK_WIDGET (directory_view));
-       if (pixbuf != NULL) {
-               gtk_action_set_gicon (action, G_ICON (pixbuf));
-               g_object_unref (pixbuf);
-       }
+       name = nautilus_file_get_display_name (file);
+       action_name = nautilus_escape_action_name (name, "script_");
 
+       action = G_ACTION (g_simple_action_new (action_name, NULL));
+       
        g_signal_connect_data (action, "activate",
-                              G_CALLBACK (run_script_callback),
+                              G_CALLBACK (run_script),
                               launch_parameters,
                               (GClosureNotify)script_launch_parameters_free, 0);
 
-       gtk_action_group_add_action_with_accel (directory_view->details->scripts_action_group,
-                                               action, NULL);
+       g_action_map_add_action (G_ACTION_MAP (view->details->view_action_group), action);
+       
        g_object_unref (action);
+       
+       detailed_action_name =  g_strconcat ("view.", action_name, NULL);
+       menu_item = g_menu_item_new (name, detailed_action_name);
 
-       ui_manager = nautilus_view_get_ui_manager (directory_view);
-
-       gtk_ui_manager_add_ui (ui_manager,
-                              directory_view->details->scripts_merge_id,
-                              menu_path,
-                              action_name,
-                              action_name,
-                              GTK_UI_MANAGER_MENUITEM,
-                              FALSE);
-       gtk_ui_manager_add_ui (ui_manager,
-                              directory_view->details->scripts_merge_id,
-                              popup_path,
-                              action_name,
-                              action_name,
-                              GTK_UI_MANAGER_MENUITEM,
-                              FALSE);
-       gtk_ui_manager_add_ui (ui_manager,
-                              directory_view->details->scripts_merge_id,
-                              popup_bg_path,
-                              action_name,
-                              action_name,
-                              GTK_UI_MANAGER_MENUITEM,
-                              FALSE);
-
-       menu_item_show_image (ui_manager, menu_path, action_name);
-       menu_item_show_image (ui_manager, popup_path, action_name);
-       menu_item_show_image (ui_manager, popup_bg_path, action_name);
+       mimetype_icon = get_menu_icon_for_file (file, GTK_WIDGET (view));
+       if (mimetype_icon != NULL) {
+               g_menu_item_set_icon (menu_item, G_ICON (mimetype_icon));
+               g_object_unref (mimetype_icon);
+       }
 
+       nautilus_gmenu_add_item_in_submodel (view->details->selection_menu,
+                                           menu_item,
+                                           "scripts-submenu");
        g_free (name);
-       g_free (uri);
-       g_free (tip);
        g_free (action_name);
-       g_free (escaped_label);
+       g_free (detailed_action_name);
 }
-
+//FIXME
+/*
 static void
 add_submenu_to_directory_menus (NautilusView *directory_view,
                                GtkActionGroup *action_group,
@@ -5303,7 +4384,7 @@ add_submenu_to_directory_menus (NautilusView *directory_view,
        }
        g_free (name);
        g_free (uri);
-}
+}*/
 
 static gboolean
 directory_belongs_in_scripts_menu (const char *uri)
@@ -5332,27 +4413,10 @@ directory_belongs_in_scripts_menu (const char *uri)
 static gboolean
 update_directory_in_scripts_menu (NautilusView *view, NautilusDirectory *directory)
 {
-       char *menu_path, *popup_path, *popup_bg_path;
        GList *file_list, *filtered, *node;
        gboolean any_scripts;
        NautilusFile *file;
        NautilusDirectory *dir;
-       char *uri;
-       char *escaped_path;
-       
-       uri = nautilus_directory_get_uri (directory);
-       escaped_path = escape_action_path (uri + scripts_directory_uri_length);
-       g_free (uri);
-       menu_path = g_strconcat (NAUTILUS_VIEW_MENU_PATH_SCRIPTS_PLACEHOLDER,
-                                escaped_path,
-                                NULL);
-       popup_path = g_strconcat (NAUTILUS_VIEW_POPUP_PATH_SCRIPTS_PLACEHOLDER,
-                                 escaped_path,
-                                 NULL);
-       popup_bg_path = g_strconcat (NAUTILUS_VIEW_POPUP_PATH_BACKGROUND_SCRIPTS_PLACEHOLDER,
-                                    escaped_path,
-                                    NULL);
-       g_free (escaped_path);
 
        file_list = nautilus_directory_get_file_list (directory);
        filtered = nautilus_file_list_filter_hidden (file_list, FALSE);
@@ -5365,32 +4429,13 @@ update_directory_in_scripts_menu (NautilusView *view, NautilusDirectory *directo
                file = node->data;
 
                if (nautilus_file_is_launchable (file)) {
-                       add_script_to_scripts_menus (view, file, menu_path, popup_path, popup_bg_path);
+                       add_script_to_scripts_menus (view, file);
                        any_scripts = TRUE;
-               } else if (nautilus_file_is_directory (file)) {
-                       uri = nautilus_file_get_uri (file);
-                       if (directory_belongs_in_scripts_menu (uri)) {
-                               dir = nautilus_directory_get_by_uri (uri);
-                               add_directory_to_scripts_directory_list (view, dir);
-                               nautilus_directory_unref (dir);
-
-                               add_submenu_to_directory_menus (view,
-                                                               view->details->scripts_action_group,
-                                                               view->details->scripts_merge_id,
-                                                               file, menu_path, popup_path, popup_bg_path);
-
-                               any_scripts = TRUE;
-                       }
-                       g_free (uri);
-               }
+               } 
        }
 
        nautilus_file_list_free (file_list);
 
-       g_free (popup_path);
-       g_free (popup_bg_path);
-       g_free (menu_path);
-
        return any_scripts;
 }
 
@@ -5404,21 +4449,6 @@ update_scripts_menu (NautilusView *view)
        GtkUIManager *ui_manager;
        GtkAction *action;
 
-       /* There is a race condition here.  If we don't mark the scripts menu as
-          valid before we begin our task then we can lose script menu updates that
-          occur before we finish. */
-       view->details->scripts_invalid = FALSE;
-
-       ui_manager = nautilus_view_get_ui_manager (view);
-       nautilus_ui_unmerge_ui (ui_manager,
-                               &view->details->scripts_merge_id,
-                               &view->details->scripts_action_group);
-       
-       nautilus_ui_prepare_merge_ui (ui_manager,
-                                     "ScriptsGroup",
-                                     &view->details->scripts_merge_id,
-                                     &view->details->scripts_action_group);
-
        /* As we walk through the directories, remove any that no longer belong. */
        any_scripts = FALSE;
        sorted_copy = nautilus_directory_list_sort_by_uri
@@ -5436,92 +4466,74 @@ update_scripts_menu (NautilusView *view)
        }
        nautilus_directory_list_free (sorted_copy);
 
-       action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_SCRIPTS);
-       gtk_action_set_visible (action, any_scripts);
+       view->details->scripts_present = any_scripts;
 }
 
 static void
-create_template_callback (GtkAction *action, gpointer callback_data)
+create_template (GSimpleAction *action,     
+                 GVariant      *state,      
+                 gpointer       user_data) 
 {
+
        CreateTemplateParameters *parameters;
 
-       parameters = callback_data;
+       parameters = user_data;
        
        nautilus_view_new_file (parameters->directory_view, NULL, parameters->file);
 }
 
 static void
-add_template_to_templates_menus (NautilusView *directory_view,
-                                NautilusFile *file,
-                                const char *menu_path,
-                                const char *popup_bg_path)
+add_template_to_templates_menus (NautilusView *view,
+                                NautilusFile *file)
 {
        char *tmp, *tip, *uri, *name;
        char *escaped_label;
-       GdkPixbuf *pixbuf;
-       char *action_name;
+       GdkPixbuf *mimetype_icon;
+       gchar *action_name, *detailed_action_name, *prefix;
        CreateTemplateParameters *parameters;
-       GtkUIManager *ui_manager;
-       GtkAction *action;
+       GAction *action;
+       GMenuItem *menu_item;
 
        tmp = nautilus_file_get_display_name (file);
        name = eel_filename_strip_extension (tmp);
        g_free (tmp);
 
        uri = nautilus_file_get_uri (file);
-       tip = g_strdup_printf (_("Create a new document from template “%s”"), name);
 
-       action_name = nautilus_escape_action_name (uri, "template_");
+       action_name = nautilus_escape_action_name (name, "template_");
        escaped_label = eel_str_double_underscores (name);
        
-       parameters = create_template_parameters_new (file, directory_view);
+       parameters = create_template_parameters_new (file, view);
 
-       action = gtk_action_new (action_name,
-                                escaped_label,
-                                tip,
-                                NULL);
+       action = G_ACTION (g_simple_action_new (action_name, NULL));
        
-       pixbuf = get_menu_icon_for_file (file, GTK_WIDGET (directory_view));
-       if (pixbuf != NULL) {
-               gtk_action_set_gicon (action, G_ICON (pixbuf));
-               g_object_unref (pixbuf);
-       }
-
        g_signal_connect_data (action, "activate",
-                              G_CALLBACK (create_template_callback),
+                              G_CALLBACK (create_template),
                               parameters, 
                               (GClosureNotify)create_templates_parameters_free, 0);
+
+       g_action_map_add_action (G_ACTION_MAP (view->details->view_action_group), action);
        
-       gtk_action_group_add_action (directory_view->details->templates_action_group,
-                                    action);
        g_object_unref (action);
-
-       ui_manager = nautilus_view_get_ui_manager (directory_view);
-
-       gtk_ui_manager_add_ui (ui_manager,
-                              directory_view->details->templates_merge_id,
-                              menu_path,
-                              action_name,
-                              action_name,
-                              GTK_UI_MANAGER_MENUITEM,
-                              FALSE);
        
-       gtk_ui_manager_add_ui (ui_manager,
-                              directory_view->details->templates_merge_id,
-                              popup_bg_path,
-                              action_name,
-                              action_name,
-                              GTK_UI_MANAGER_MENUITEM,
-                              FALSE);
+       detailed_action_name =  g_strconcat ("view.", action_name, NULL);
+       menu_item = g_menu_item_new (name, detailed_action_name);
+
+       mimetype_icon = get_menu_icon_for_file (file, GTK_WIDGET (view));
+       if (mimetype_icon != NULL) {
+               g_menu_item_set_icon (menu_item, G_ICON (mimetype_icon));
+               g_object_unref (mimetype_icon);
+       }
 
-       menu_item_show_image (ui_manager, menu_path, action_name);
-       menu_item_show_image (ui_manager, popup_bg_path, action_name);
+       nautilus_gmenu_add_item_in_submodel (view->details->background_menu,
+                                           menu_item,
+                                           "templates-submenu");
 
        g_free (escaped_label);
        g_free (name);
-       g_free (tip);
        g_free (uri);
        g_free (action_name);
+       g_free (detailed_action_name);
 }
 
 static void
@@ -5579,7 +4591,6 @@ update_directory_in_templates_menu (NautilusView *view,
                                    const char *templates_directory_uri,
                                    NautilusDirectory *directory)
 {
-       char *menu_path, *popup_bg_path;
        GList *file_list, *filtered, *node;
        gboolean any_templates;
        NautilusFile *file;
@@ -5594,12 +4605,6 @@ update_directory_in_templates_menu (NautilusView *view,
        uri = nautilus_directory_get_uri (directory);
        escaped_path = escape_action_path (uri + strlen (templates_directory_uri));
        g_free (uri);
-       menu_path = g_strconcat (NAUTILUS_VIEW_MENU_PATH_NEW_DOCUMENTS_PLACEHOLDER,
-                                escaped_path,
-                                NULL);
-       popup_bg_path = g_strconcat (NAUTILUS_VIEW_POPUP_PATH_BACKGROUND_NEW_DOCUMENTS_PLACEHOLDER,
-                                    escaped_path,
-                                    NULL);
        g_free (escaped_path);
 
        file_list = nautilus_directory_get_file_list (directory);
@@ -5614,31 +4619,14 @@ update_directory_in_templates_menu (NautilusView *view,
                file = node->data;
 
                if (nautilus_file_is_directory (file)) {
-                       uri = nautilus_file_get_uri (file);
-                       if (directory_belongs_in_templates_menu (templates_directory_uri, uri)) {
-                               dir = nautilus_directory_get_by_uri (uri);
-                               add_directory_to_templates_directory_list (view, dir);
-                               nautilus_directory_unref (dir);
-
-                               add_submenu_to_directory_menus (view,
-                                                               view->details->templates_action_group,
-                                                               view->details->templates_merge_id,
-                                                               file, menu_path, NULL, popup_bg_path);
-
-                               any_templates = TRUE;
-                       }
-                       g_free (uri);
                } else if (nautilus_file_can_read (file)) {
-                       add_template_to_templates_menus (view, file, menu_path, popup_bg_path);
+                       add_template_to_templates_menus (view, file);
                        any_templates = TRUE;
                }
        }
 
        nautilus_file_list_free (file_list);
 
-       g_free (popup_bg_path);
-       g_free (menu_path);
-
        return any_templates;
 }
 
@@ -5660,21 +4648,6 @@ update_templates_menu (NautilusView *view)
                templates_directory_uri = NULL;
        }
 
-       /* There is a race condition here.  If we don't mark the scripts menu as
-          valid before we begin our task then we can lose template menu updates that
-          occur before we finish. */
-       view->details->templates_invalid = FALSE;
-
-       ui_manager = nautilus_view_get_ui_manager (view);
-       nautilus_ui_unmerge_ui (ui_manager,
-                               &view->details->templates_merge_id,
-                               &view->details->templates_action_group);
-
-       nautilus_ui_prepare_merge_ui (ui_manager,
-                                     "TemplatesGroup",
-                                     &view->details->templates_merge_id,
-                                     &view->details->templates_action_group);
-
        /* As we walk through the directories, remove any that no longer belong. */
        any_templates = FALSE;
        sorted_copy = nautilus_directory_list_sort_by_uri
@@ -5701,9 +4674,10 @@ update_templates_menu (NautilusView *view)
 
 
 static void
-action_open_scripts_folder_callback (GtkAction *action, 
-                                    gpointer callback_data)
-{      
+action_open_scripts_folder (GSimpleAction *action,    
+                           GVariant      *state,     
+                            gpointer       user_data)
+{
        NautilusView *view;
        static GFile *location = NULL;
 
@@ -5711,24 +4685,10 @@ action_open_scripts_folder_callback (GtkAction *action,
                location = g_file_new_for_uri (scripts_directory_uri);
        }
 
-       view = NAUTILUS_VIEW (callback_data);
+       view = NAUTILUS_VIEW (user_data);
        nautilus_window_slot_open_location (view->details->slot, location, 0);
 }
 
-static GtkMenu *
-create_popup_menu (NautilusView *view, const char *popup_path)
-{
-       GtkWidget *menu;
-       
-       menu = gtk_ui_manager_get_widget (nautilus_view_get_ui_manager (view),
-                                         popup_path);
-       gtk_menu_set_screen (GTK_MENU (menu),
-                            gtk_widget_get_screen (GTK_WIDGET (view)));
-       gtk_widget_show (GTK_WIDGET (menu));
-
-       return GTK_MENU (menu);
-}
-
 typedef struct _CopyCallbackData {
        NautilusView   *view;
        GtkFileChooser *chooser;
@@ -6145,23 +5105,9 @@ copy_or_cut_files (NautilusView *view,
 }
 
 static void
-action_copy_files_callback (GtkAction *action,
-                           gpointer callback_data)
-{
-       NautilusView *view;
-       GList *selection;
-
-       view = NAUTILUS_VIEW (callback_data);
-
-       selection = nautilus_view_get_selection_for_file_transfer (view);
-       copy_or_cut_files (view, selection, FALSE);
-       nautilus_file_list_free (selection);
-}
-
-static void
-action_copy(GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
+action_copy (GSimpleAction *action,
+            GVariant      *state,
+            gpointer       user_data)
 {
        NautilusView *view;
        GList *selection;
@@ -6174,23 +5120,9 @@ action_copy(GSimpleAction *action,
 }
 
 static void
-action_cut_files_callback (GtkAction *action,
-                          gpointer callback_data)
-{
-       NautilusView *view;
-       GList *selection;
-
-       view = NAUTILUS_VIEW (callback_data);
-
-       selection = nautilus_view_get_selection_for_file_transfer (view);
-       copy_or_cut_files (view, selection, TRUE);
-       nautilus_file_list_free (selection);
-}
-
-static void
 action_cut (GSimpleAction *action,
-                       GVariant      *state,
-                       gpointer       user_data)
+           GVariant      *state,
+           gpointer       user_data)
 {
        NautilusView *view;
        GList *selection;
@@ -6203,16 +5135,6 @@ action_cut (GSimpleAction *action,
 }
 
 static void
-action_copy_to_callback (GtkAction *action,
-                        gpointer callback_data)
-{
-       NautilusView *view;
-
-       view = NAUTILUS_VIEW (callback_data);
-       copy_or_move_selection (view, FALSE);
-}
-
-static void
 action_copy_to (GSimpleAction *action,
                        GVariant      *state,
                        gpointer       user_data)
@@ -6224,16 +5146,6 @@ action_copy_to (GSimpleAction *action,
 }
 
 static void
-action_move_to_callback (GtkAction *action,
-                        gpointer callback_data)
-{
-       NautilusView *view;
-
-       view = NAUTILUS_VIEW (callback_data);
-       copy_or_move_selection (view, TRUE);
-}
-
-static void
 action_move_to (GSimpleAction *action,
                GVariant      *state,
                gpointer       user_data)
@@ -6296,22 +5208,6 @@ paste_into (NautilusView *view,
 }
 
 static void
-action_paste_files_into_callback (GtkAction *action,
-                                 gpointer callback_data)
-{
-       NautilusView *view;
-       GList *selection;
-
-       view = NAUTILUS_VIEW (callback_data);
-       selection = nautilus_view_get_selection (view);
-       if (selection != NULL) {
-               paste_into (view, NAUTILUS_FILE (selection->data));
-               nautilus_file_list_free (selection);
-       }
-
-}
-
-static void
 action_paste_files_into (GSimpleAction *action,
                        GVariant      *state,
                        gpointer       user_data)
@@ -6378,20 +5274,6 @@ real_action_redo (NautilusView *view)
 }
 
 static void
-action_undo_callback (GtkAction *action,
-                     gpointer callback_data)
-{
-       real_action_undo (NAUTILUS_VIEW (callback_data));
-}
-
-static void
-action_redo_callback (GtkAction *action,
-                     gpointer callback_data)
-{
-       real_action_redo (NAUTILUS_VIEW (callback_data));
-}
-
-static void
 real_action_rename (NautilusView *view,
                    gboolean select_all)
 {
@@ -6423,28 +5305,13 @@ real_action_rename (NautilusView *view,
 }
 
 static void
-action_rename_callback (GtkAction *action,
-                       gpointer callback_data)
-{
-       real_action_rename (NAUTILUS_VIEW (callback_data), FALSE);
-}
-
-static void
 action_rename (GSimpleAction *action,
-               GVariant      *state,
-               gpointer       user_data)
+              GVariant      *state,
+              gpointer       user_data)
 {
        real_action_rename (NAUTILUS_VIEW (user_data), FALSE);
 }
 
-
-static void
-action_rename_select_all_callback (GtkAction *action,
-                                  gpointer callback_data)
-{
-       real_action_rename (NAUTILUS_VIEW (callback_data), TRUE);
-}
-
 #define BG_KEY_PRIMARY_COLOR      "primary-color"
 #define BG_KEY_SECONDARY_COLOR    "secondary-color"
 #define BG_KEY_COLOR_TYPE         "color-shading-type"
@@ -6837,125 +5704,6 @@ action_detect_media (GSimpleAction *action,
        nautilus_file_list_free (selection);
 }
 
-static void
-action_self_mount_volume_callback (GtkAction *action,
-                                  gpointer data)
-{
-       NautilusFile *file;
-       NautilusView *view;
-       GMountOperation *mount_op;
-
-       view = NAUTILUS_VIEW (data);
-
-       file = nautilus_view_get_directory_as_file (view);
-       if (file == NULL) {
-               return;
-       }
-
-       mount_op = gtk_mount_operation_new (nautilus_view_get_containing_window (view));
-       g_mount_operation_set_password_save (mount_op, G_PASSWORD_SAVE_FOR_SESSION);
-       nautilus_file_mount (file, mount_op, NULL, file_mount_callback, view);
-       g_object_unref (mount_op);
-}
-
-static void
-action_self_unmount_volume_callback (GtkAction *action,
-                                    gpointer data)
-{
-       NautilusFile *file;
-       NautilusView *view;
-       GMountOperation *mount_op;
-
-       view = NAUTILUS_VIEW (data);
-
-       file = nautilus_view_get_directory_as_file (view);
-       if (file == NULL) {
-               return;
-       }
-
-       mount_op = gtk_mount_operation_new (nautilus_view_get_containing_window (view));
-       nautilus_file_unmount (file, mount_op, NULL, file_unmount_callback, g_object_ref (view));
-       g_object_unref (mount_op);
-}
-
-static void
-action_self_eject_volume_callback (GtkAction *action,
-                                  gpointer data)
-{
-       NautilusFile *file;
-       NautilusView *view;
-       GMountOperation *mount_op;
-
-       view = NAUTILUS_VIEW (data);
-
-       file = nautilus_view_get_directory_as_file (view);
-       if (file == NULL) {
-               return;
-       }
-       
-       mount_op = gtk_mount_operation_new (nautilus_view_get_containing_window (view));
-       nautilus_file_eject (file, mount_op, NULL, file_eject_callback, g_object_ref (view));
-       g_object_unref (mount_op);
-}
-
-static void
-action_self_start_volume_callback (GtkAction *action,
-                                  gpointer   data)
-{
-       NautilusFile *file;
-       NautilusView *view;
-       GMountOperation *mount_op;
-
-       view = NAUTILUS_VIEW (data);
-
-       file = nautilus_view_get_directory_as_file (view);
-       if (file == NULL) {
-               return;
-       }
-
-       mount_op = gtk_mount_operation_new (nautilus_view_get_containing_window (view));
-       nautilus_file_start (file, mount_op, NULL, file_start_callback, view);
-       g_object_unref (mount_op);
-}
-
-static void
-action_self_stop_volume_callback (GtkAction *action,
-                                 gpointer   data)
-{
-       NautilusFile *file;
-       NautilusView *view;
-       GMountOperation *mount_op;
-
-       view = NAUTILUS_VIEW (data);
-
-       file = nautilus_view_get_directory_as_file (view);
-       if (file == NULL) {
-               return;
-       }
-
-       mount_op = gtk_mount_operation_new (nautilus_view_get_containing_window (view));
-       nautilus_file_stop (file, mount_op, NULL,
-                           file_stop_callback, view);
-       g_object_unref (mount_op);
-}
-
-static void
-action_self_detect_media_callback (GtkAction *action,
-                                  gpointer   data)
-{
-       NautilusFile *file;
-       NautilusView *view;
-
-       view = NAUTILUS_VIEW (data);
-
-       file = nautilus_view_get_directory_as_file (view);
-       if (file == NULL) {
-               return;
-       }
-
-       nautilus_file_poll_for_media (file);
-}
-
 gboolean
 nautilus_view_get_show_hidden_files (NautilusView *view)
 {
@@ -6963,19 +5711,22 @@ nautilus_view_get_show_hidden_files (NautilusView *view)
 }
 
 const GActionEntry view_entries[] = {
-        /* Toolbar menu */
-        { "zoom-in",  action_zoom_in },
-        { "zoom-out", action_zoom_out },
-        { "zoom-to-level", NULL, NULL, "1", action_zoom_to_level },
-        { "zoom-normal", action_zoom_normal },
-        { "undo", action_undo },
-        { "redo", action_redo },
-        { "show-hidden-files", NULL, NULL, "true", action_show_hidden_files },
-        /* Background menu */
+       /* Toolbar menu */
+       { "zoom-in",  action_zoom_in },
+       { "zoom-out", action_zoom_out },
+       { "zoom-to-level", NULL, NULL, "1", action_zoom_to_level },
+       { "zoom-normal", action_zoom_normal },
+       { "undo", action_undo },
+       { "redo", action_redo },
+       { "show-hidden-files", NULL, NULL, "true", action_show_hidden_files },
+       /* Background menu */
        { "new-folder", action_new_folder },
        { "select-all", action_select_all },
-        { "paste", action_paste_files },
+       { "paste", action_paste_files },
+       { "new-document" },
        /* Selection menu */
+       { "scripts" },
+       { "open-scripts-folder", action_open_scripts_folder },
        { "open-item-location", action_open_item_location },
        { "open-with-default-application", action_open_with_default_application },
        { "open-with-other-application", action_open_with_other_application },
@@ -6986,6 +5737,7 @@ const GActionEntry view_entries[] = {
        { "move-to", action_move_to},
        { "copy-to", action_copy_to},
        { "move-to-trash", action_move_to_trash},
+       { "delete", action_delete},
        { "restore-from-trash", action_restore_from_trash},
        { "paste-into", action_paste_files_into },
        { "rename", action_rename},
@@ -7006,132 +5758,6 @@ const GActionEntry view_entries[] = {
        { "invert-selection", action_invert_selection }
 };
 
-static const GtkActionEntry directory_view_entries[] = {
-  /* name, stock id, label */  { NAUTILUS_ACTION_NEW_DOCUMENTS, "document-new", N_("New _Document") },
-  /* name, stock id */         { NAUTILUS_ACTION_OPEN_SCRIPTS_FOLDER, NULL,
-  /* label, accelerator */       N_("_Open Scripts Folder"), NULL,
-  /* tooltip */                 N_("Show the folder containing the scripts that appear in this menu"),
-                                G_CALLBACK (action_open_scripts_folder_callback) },
-  /*
-   * multiview-TODO: decide whether "Reset to Defaults" should
-   * be window-wide, and not just view-wide.
-   * Since this also resets the "Show hidden files" mode,
-   * it is a mixture of both ATM.
-   */
-  /* name, stock id */         { NAUTILUS_ACTION_SELF_MOUNT_VOLUME, NULL,
-  /* label, accelerator */       N_("_Mount"), NULL,
-  /* tooltip */                  N_("Mount the volume associated with the open folder"),
-                                G_CALLBACK (action_self_mount_volume_callback) },
-  /* name, stock id */         { NAUTILUS_ACTION_SELF_UNMOUNT_VOLUME, NULL,
-  /* label, accelerator */       N_("_Unmount"), NULL,
-  /* tooltip */                  N_("Unmount the volume associated with the open folder"),
-                                G_CALLBACK (action_self_unmount_volume_callback) },
-  /* name, stock id */         { NAUTILUS_ACTION_SELF_EJECT_VOLUME, NULL,
-  /* label, accelerator */       N_("_Eject"), NULL,
-  /* tooltip */                  N_("Eject the volume associated with the open folder"),
-                                G_CALLBACK (action_self_eject_volume_callback) },
-  /* name, stock id */         { NAUTILUS_ACTION_SELF_START_VOLUME, NULL,
-  /* label, accelerator */       N_("_Start"), NULL,
-  /* tooltip */                  N_("Start the volume associated with the open folder"),
-                                G_CALLBACK (action_self_start_volume_callback) },
-  /* name, stock id */         { NAUTILUS_ACTION_SELF_STOP_VOLUME, NULL,
-  /* label, accelerator */       N_("_Stop"), NULL,
-  /* tooltip */                  N_("Stop the volume associated with the open folder"),
-                                G_CALLBACK (action_self_stop_volume_callback) },
-  /* name, stock id */         { NAUTILUS_ACTION_SELF_POLL, NULL,
-  /* label, accelerator */       N_("_Detect Media"), NULL,
-  /* tooltip */                  N_("Detect media in the selected drive"),
-                                G_CALLBACK (action_self_detect_media_callback) },
-};
-
-static const GtkToggleActionEntry directory_view_toggle_entries[] = {
-  /* name, stock id */         { NAUTILUS_ACTION_SHOW_HIDDEN_FILES, NULL,
-  /* label, accelerator */       N_("Show _Hidden Files"), "<control>H",
-  /* tooltip */                  N_("Toggle the display of hidden files in the current window"),
-                                 G_CALLBACK (action_show_hidden_files_callback),
-                                 TRUE },
-};
-
-static void
-pre_activate (NautilusView *view,
-             GtkAction *action,
-             GtkActionGroup *action_group)
-{
-       GdkEvent *event;
-       GtkWidget *proxy;
-       gboolean activated_from_popup;
-
-       /* check whether action was activated through a popup menu.
-        * If not, unset the last stored context menu popup position */
-       activated_from_popup = FALSE;
-
-       event = gtk_get_current_event ();
-       proxy = gtk_get_event_widget (event);
-
-       if (proxy != NULL) {
-               GtkWidget *toplevel;
-               GdkWindowTypeHint hint;
-
-               toplevel = gtk_widget_get_toplevel (proxy);
-
-               if (GTK_IS_WINDOW (toplevel)) {
-                       hint = gtk_window_get_type_hint (GTK_WINDOW (toplevel));
-
-                       if (hint == GDK_WINDOW_TYPE_HINT_POPUP_MENU) {
-                               activated_from_popup = TRUE;
-                       }
-               }
-       }
-
-       if (!activated_from_popup) {
-               update_context_menu_position_from_event (view, NULL);
-       }
-}
-
-static void
-real_merge_menus (NautilusView *view)
-{
-       GtkActionGroup *action_group;
-       GtkUIManager *ui_manager;
-       GtkAction *action;
-       char *tooltip;
-
-       g_print("real merge menus\n");
-
-       ui_manager = nautilus_view_get_ui_manager (view);
-
-       action_group = gtk_action_group_new ("DirViewActions");
-       gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
-       view->details->dir_action_group = action_group;
-       gtk_action_group_add_actions (action_group, 
-                                     directory_view_entries, G_N_ELEMENTS (directory_view_entries),
-                                     view);
-       gtk_action_group_add_toggle_actions (action_group,
-                                            directory_view_toggle_entries, G_N_ELEMENTS 
(directory_view_toggle_entries),
-                                            view);
-
-       tooltip = g_strdup (_("Run or manage scripts"));
-       /* Create a script action here specially because its tooltip is dynamic */
-       action = gtk_action_new ("Scripts", _("_Scripts"), tooltip, NULL);
-       gtk_action_group_add_action (action_group, action);
-       g_object_unref (action);
-       g_free (tooltip);
-
-       g_signal_connect_object (action_group, "pre-activate",
-                                G_CALLBACK (pre_activate), G_OBJECT (view),
-                                G_CONNECT_SWAPPED);
-
-       /* Insert action group at end so clipboard action group ends up before it */
-       gtk_ui_manager_insert_action_group (ui_manager, action_group, -1);
-       g_object_unref (action_group); /* owned by ui manager */
-
-       view->details->dir_merge_id = gtk_ui_manager_add_ui_from_resource (ui_manager, 
"/org/gnome/nautilus/nautilus-directory-view-ui.xml", NULL);
-       
-       view->details->scripts_invalid = TRUE;
-       view->details->templates_invalid = TRUE;
-}
-
-
 static gboolean
 can_paste_into_file (NautilusFile *file)
 {
@@ -7197,13 +5823,13 @@ clipboard_targets_received (GtkClipboard     *clipboard,
        /* Take into account if the action was previously disabled for other reasons,
           like the directory not being writabble */
        g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
-                               can_paste && g_action_get_enabled (action));
+                                    can_paste && g_action_get_enabled (action));
 
        action = g_action_map_lookup_action (G_ACTION_MAP (view->details->view_action_group),
                                             "paste-into");
 
        g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
-                               can_paste && g_action_get_enabled (action));
+                                    can_paste && g_action_get_enabled (action));
 
        
        g_object_unref (view);
@@ -7306,57 +5932,6 @@ file_should_show_foreach (NautilusFile        *file,
        *start_stop_type = nautilus_file_get_start_stop_type (file);
 }
 
-static void
-file_should_show_self (NautilusFile        *file,
-                      gboolean            *show_mount,
-                      gboolean            *show_unmount,
-                      gboolean            *show_eject,
-                      gboolean            *show_start,
-                      gboolean            *show_stop,
-                      gboolean            *show_poll,
-                      GDriveStartStopType *start_stop_type)
-{
-       *show_mount = FALSE;
-       *show_unmount = FALSE;
-       *show_eject = FALSE;
-       *show_start = FALSE;
-       *show_stop = FALSE;
-       *show_poll = FALSE;
-
-       if (file == NULL) {
-               return;
-       }
-
-       if (nautilus_file_can_eject (file)) {
-               *show_eject = TRUE;
-       }
-
-       if (nautilus_file_can_mount (file)) {
-               *show_mount = TRUE;
-       }
-
-       if (nautilus_file_can_start (file) || nautilus_file_can_start_degraded (file)) {
-               *show_start = TRUE;
-       }
-
-       if (nautilus_file_can_stop (file)) {
-               *show_stop = TRUE;
-       }
-
-       /* Dot not show both Unmount and Eject/Safe Removal; too confusing to
-        * have too many menu entries */
-       if (nautilus_file_can_unmount (file) && !*show_eject && !*show_stop) {
-               *show_unmount = TRUE;
-       }
-
-       if (nautilus_file_can_poll_for_media (file) && !nautilus_file_is_media_check_automatic (file)) {
-               *show_poll = TRUE;
-       }
-
-       *start_stop_type = nautilus_file_get_start_stop_type (file);
-
-}
-
 static gboolean
 files_are_all_directories (GList *files)
 {
@@ -7433,231 +6008,6 @@ can_restore_from_trash (GList *files)
 }
 
 static void
-real_update_menus_volumes (NautilusView *view,
-                          GList *selection,
-                          gint selection_count)
-{
-       GList *l;
-       NautilusFile *file;
-       gboolean show_mount;
-       gboolean show_unmount;
-       gboolean show_eject;
-       gboolean show_start;
-       gboolean show_stop;
-       gboolean show_poll;
-       GDriveStartStopType start_stop_type;
-       gboolean show_self_mount;
-       gboolean show_self_unmount;
-       gboolean show_self_eject;
-       gboolean show_self_start;
-       gboolean show_self_stop;
-       gboolean show_self_poll;
-       GDriveStartStopType self_start_stop_type;
-       GtkAction *action;
-
-       show_mount = (selection != NULL);
-       show_unmount = (selection != NULL);
-       show_eject = (selection != NULL);
-       show_start = (selection != NULL && selection_count == 1);
-       show_stop = (selection != NULL && selection_count == 1);
-       show_poll = (selection != NULL && selection_count == 1);
-       start_stop_type = G_DRIVE_START_STOP_TYPE_UNKNOWN;
-       self_start_stop_type = G_DRIVE_START_STOP_TYPE_UNKNOWN;
-
-       for (l = selection; l != NULL && (show_mount || show_unmount
-                                         || show_eject
-                                          || show_start || show_stop
-                                         || show_poll);
-            l = l->next) {
-               gboolean show_mount_one;
-               gboolean show_unmount_one;
-               gboolean show_eject_one;
-               gboolean show_start_one;
-               gboolean show_stop_one;
-               gboolean show_poll_one;
-
-               file = NAUTILUS_FILE (l->data);
-               file_should_show_foreach (file,
-                                         &show_mount_one,
-                                         &show_unmount_one,
-                                         &show_eject_one,
-                                          &show_start_one,
-                                          &show_stop_one,
-                                         &show_poll_one,
-                                         &start_stop_type);
-
-               show_mount &= show_mount_one;
-               show_unmount &= show_unmount_one;
-               show_eject &= show_eject_one;
-               show_start &= show_start_one;
-               show_stop &= show_stop_one;
-               show_poll &= show_poll_one;
-       }
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_MOUNT_VOLUME);
-       gtk_action_set_visible (action, show_mount);
-       
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_UNMOUNT_VOLUME);
-       gtk_action_set_visible (action, show_unmount);
-       
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_EJECT_VOLUME);
-       gtk_action_set_visible (action, show_eject);
-       
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_START_VOLUME);
-       gtk_action_set_visible (action, show_start);
-       if (show_start) {
-               switch (start_stop_type) {
-               default:
-               case G_DRIVE_START_STOP_TYPE_UNKNOWN:
-                       gtk_action_set_label (action, _("_Start"));
-                       gtk_action_set_tooltip (action, _("Start the selected drive"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_SHUTDOWN:
-                       gtk_action_set_label (action, _("_Start"));
-                       gtk_action_set_tooltip (action, _("Start the selected drive"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_NETWORK:
-                       gtk_action_set_label (action, _("_Connect"));
-                       gtk_action_set_tooltip (action, _("Connect to the selected drive"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_MULTIDISK:
-                       gtk_action_set_label (action, _("_Start Multi-disk Drive"));
-                       gtk_action_set_tooltip (action, _("Start the selected multi-disk drive"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_PASSWORD:
-                       gtk_action_set_label (action, _("U_nlock Drive"));
-                       gtk_action_set_tooltip (action, _("Unlock the selected drive"));
-                       break;
-               }
-       }
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_STOP_VOLUME);
-       gtk_action_set_visible (action, show_stop);
-       if (show_stop) {
-               switch (start_stop_type) {
-               default:
-               case G_DRIVE_START_STOP_TYPE_UNKNOWN:
-                       gtk_action_set_label (action, _("_Stop"));
-                       gtk_action_set_tooltip (action, _("Stop the selected drive"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_SHUTDOWN:
-                       gtk_action_set_label (action, _("_Safely Remove Drive"));
-                       gtk_action_set_tooltip (action, _("Safely remove the selected drive"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_NETWORK:
-                       gtk_action_set_label (action, _("_Disconnect"));
-                       gtk_action_set_tooltip (action, _("Disconnect the selected drive"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_MULTIDISK:
-                       gtk_action_set_label (action, _("_Stop Multi-disk Drive"));
-                       gtk_action_set_tooltip (action, _("Stop the selected multi-disk drive"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_PASSWORD:
-                       gtk_action_set_label (action, _("_Lock Drive"));
-                       gtk_action_set_tooltip (action, _("Lock the selected drive"));
-                       break;
-               }
-       }
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_POLL);
-       gtk_action_set_visible (action, show_poll);
-
-       show_self_mount = show_self_unmount = show_self_eject =
-               show_self_start = show_self_stop = show_self_poll = FALSE;
-
-       file = nautilus_view_get_directory_as_file (view);
-       file_should_show_self (file,
-                              &show_self_mount,
-                              &show_self_unmount,
-                              &show_self_eject,
-                              &show_self_start,
-                              &show_self_stop,
-                              &show_self_poll,
-                              &self_start_stop_type);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SELF_MOUNT_VOLUME);
-       gtk_action_set_visible (action, show_self_mount);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SELF_UNMOUNT_VOLUME);
-       gtk_action_set_visible (action, show_self_unmount);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SELF_EJECT_VOLUME);
-       gtk_action_set_visible (action, show_self_eject);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SELF_START_VOLUME);
-       gtk_action_set_visible (action, show_self_start);
-       if (show_self_start) {
-               switch (self_start_stop_type) {
-               default:
-               case G_DRIVE_START_STOP_TYPE_UNKNOWN:
-                       gtk_action_set_label (action, _("_Start"));
-                       gtk_action_set_tooltip (action, _("Start the drive associated with the open folder"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_SHUTDOWN:
-                       gtk_action_set_label (action, _("_Start"));
-                       gtk_action_set_tooltip (action, _("Start the drive associated with the open folder"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_NETWORK:
-                       gtk_action_set_label (action, _("_Connect"));
-                       gtk_action_set_tooltip (action, _("Connect to the drive associated with the open 
folder"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_MULTIDISK:
-                       gtk_action_set_label (action, _("_Start Multi-disk Drive"));
-                       gtk_action_set_tooltip (action, _("Start the multi-disk drive associated with the 
open folder"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_PASSWORD:
-                       gtk_action_set_label (action, _("_Unlock Drive"));
-                       gtk_action_set_tooltip (action, _("Unlock the drive associated with the open 
folder"));
-                       break;
-               }
-       }
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SELF_STOP_VOLUME);
-       gtk_action_set_visible (action, show_self_stop);
-       if (show_self_stop) {
-               switch (self_start_stop_type) {
-               default:
-               case G_DRIVE_START_STOP_TYPE_UNKNOWN:
-                       gtk_action_set_label (action, _("_Stop"));
-                       gtk_action_set_tooltip (action, _("_Stop the drive associated with the open folder"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_SHUTDOWN:
-                       gtk_action_set_label (action, _("_Safely Remove Drive"));
-                       gtk_action_set_tooltip (action, _("Safely remove the drive associated with the open 
folder"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_NETWORK:
-                       gtk_action_set_label (action, _("_Disconnect"));
-                       gtk_action_set_tooltip (action, _("Disconnect the drive associated with the open 
folder"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_MULTIDISK:
-                       gtk_action_set_label (action, _("_Stop Multi-disk Drive"));
-                       gtk_action_set_tooltip (action, _("Stop the multi-disk drive associated with the open 
folder"));
-                       break;
-               case G_DRIVE_START_STOP_TYPE_PASSWORD:
-                       gtk_action_set_label (action, _("_Lock Drive"));
-                       gtk_action_set_tooltip (action, _("Lock the drive associated with the open folder"));
-                       break;
-               }
-       }
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SELF_POLL);
-       gtk_action_set_visible (action, show_self_poll);
-
-}
-
-static void
 clipboard_changed_callback (NautilusClipboardMonitor *monitor, NautilusView *view)
 {
        /* Update paste menu item */
@@ -7694,403 +6044,6 @@ can_trash_all (GList *files)
        return TRUE;
 }
 
-static void
-real_update_menus_old (NautilusView *view)
-{
-       GList *selection, *l;
-       gint selection_count;
-       const char *tip, *label;
-       char *label_with_underscore;
-       gboolean selection_contains_special_link;
-       gboolean selection_contains_desktop_or_home_dir;
-       gboolean selection_contains_recent;
-       gboolean selection_contains_search;
-       gboolean selection_all_in_trash;
-       gboolean can_create_files;
-       gboolean can_delete_files;
-       gboolean can_move_files;
-       gboolean can_trash_files;
-       gboolean can_copy_files;
-       gboolean can_link_files;
-       gboolean show_separate_delete_command;
-       gboolean show_open_alternate;
-       gboolean show_open_in_new_tab;
-       gboolean can_open;
-       gboolean show_app, show_run;
-       gboolean show_save_search;
-       gboolean save_search_sensitive;
-       gboolean show_save_search_as;
-       GtkAction *action;
-       GAppInfo *app;
-       GIcon *app_icon;
-       GtkWidget *menuitem;
-       gboolean show_properties;
-
-       selection = nautilus_view_get_selection (view);
-       selection_count = g_list_length (selection);
-
-       selection_contains_special_link = special_link_in_selection (selection);
-       selection_contains_desktop_or_home_dir = desktop_or_home_dir_in_selection (selection);
-       selection_contains_recent = showing_recent_directory (view);
-       selection_contains_search = view->details->model &&
-               NAUTILUS_IS_SEARCH_DIRECTORY (view->details->model);
-       selection_all_in_trash = all_selected_items_in_trash (selection);
-
-       can_create_files = nautilus_view_supports_creating_files (view);
-       can_delete_files =
-               can_delete_all (selection) &&
-               selection_count != 0 &&
-               !selection_contains_special_link &&
-               !selection_contains_desktop_or_home_dir;
-       can_trash_files =
-               can_trash_all (selection) &&
-               selection_count != 0 &&
-               !selection_contains_special_link &&
-               !selection_contains_desktop_or_home_dir;
-       can_copy_files = selection_count != 0
-               && !selection_contains_special_link;
-
-       can_move_files = can_delete_files && !selection_contains_recent;
-       can_link_files = can_create_files && can_copy_files;
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_RENAME);
-       /* rename sensitivity depending on selection */
-       if (selection_count > 1) {
-               /* If multiple files are selected, sensitivity depends on whether a bulk renamer is 
registered. */
-               gtk_action_set_sensitive (action, have_bulk_rename_tool ());
-       } else {
-               gtk_action_set_sensitive (action,
-                                         selection_count == 1 &&
-                                         nautilus_view_can_rename_file (view, selection->data));
-       }
-       gtk_action_set_visible (action, !selection_contains_recent);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SET_AS_WALLPAPER);
-       /* rename sensitivity depending on selection */
-       if (can_set_wallpaper (selection)) {
-               gtk_action_set_visible (action, TRUE);
-       } else {
-               gtk_action_set_visible (action, FALSE);
-       }
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_OPEN_ITEM_LOCATION);
-       if (selection_count == 1 &&
-           (selection_contains_recent || selection_contains_search))
-       {
-               gtk_action_set_visible (action, TRUE);
-       } else {
-               gtk_action_set_visible (action, FALSE);
-       }
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_NEW_FOLDER);
-       gtk_action_set_sensitive (action, can_create_files);
-       gtk_action_set_visible (action, !selection_contains_recent);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_NEW_FOLDER_WITH_SELECTION);
-       gtk_action_set_sensitive (action, can_create_files && can_delete_files && (selection_count > 1));
-       gtk_action_set_visible (action, !selection_contains_recent && (selection_count > 1));
-       label_with_underscore = g_strdup_printf (ngettext("New Folder with Selection (%'d Item)",
-                                                         "New Folder with Selection (%'d Items)",
-                                                         selection_count),
-                                                selection_count);
-       g_object_set (action, "label", label_with_underscore, NULL);
-       g_free (label_with_underscore);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_OPEN);
-       gtk_action_set_sensitive (action, selection_count != 0);
-       
-       can_open = show_app = show_run = selection_count != 0;
-
-       for (l = selection; l != NULL; l = l->next) {
-               NautilusFile *file;
-
-               file = NAUTILUS_FILE (selection->data);
-
-               if (!nautilus_mime_file_opens_in_external_app (file)) {
-                       show_app = FALSE;
-               }
-
-               if (!nautilus_mime_file_launches (file)) {
-                       show_run = FALSE;
-               }
-
-               if (!show_app && !show_run) {
-                       break;
-               }
-       } 
-
-       label_with_underscore = NULL;
-
-       app = NULL;
-       app_icon = NULL;
-
-       if (can_open && show_app) {
-               app = nautilus_mime_get_default_application_for_files (selection);
-       }
-
-       if (app != NULL) {
-               char *escaped_app;
-
-               escaped_app = eel_str_double_underscores (g_app_info_get_name (app));
-               label_with_underscore = g_strdup_printf (_("_Open With %s"),
-                                                        escaped_app);
-
-               app_icon = g_app_info_get_icon (app);
-               if (app_icon != NULL) {
-                       g_object_ref (app_icon);
-               }
-
-               g_free (escaped_app);
-               g_object_unref (app);
-       } else if (show_run) {
-               label_with_underscore = g_strdup (_("Run"));
-       } else {
-               label_with_underscore = g_strdup (_("_Open"));
-       }
-
-       g_object_set (action, "label", label_with_underscore, NULL);
-       g_free (label_with_underscore);
-
-       menuitem = gtk_ui_manager_get_widget (
-                                             nautilus_view_get_ui_manager (view),
-                                             NAUTILUS_VIEW_POPUP_PATH_OPEN);
-
-       /* Only force displaying the icon if it is an application icon */
-       gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem), app_icon != NULL);
-
-       if (app_icon == NULL) {
-               app_icon = g_themed_icon_new ("gtk-open");
-       }
-
-       gtk_action_set_gicon (action, app_icon);
-       g_object_unref (app_icon);
-
-       gtk_action_set_visible (action, can_open);
-
-       show_open_alternate = file_list_all_are_folders (selection) &&
-               selection_count > 0 &&
-               !NAUTILUS_IS_DESKTOP_CANVAS_VIEW (view);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_OPEN_ALTERNATE);
-
-       gtk_action_set_sensitive (action,  selection_count != 0);
-       gtk_action_set_visible (action, show_open_alternate);
-
-       if (selection_count == 0 || selection_count == 1) {
-               label_with_underscore = g_strdup (_("Open in New _Window"));
-       } else {
-               label_with_underscore = g_strdup_printf (ngettext("Open in %'d New _Window",
-                                                                 "Open in %'d New _Windows",
-                                                                 selection_count), 
-                                                        selection_count);
-       }
-
-       g_object_set (action, "label", 
-                     label_with_underscore,
-                     NULL);
-       g_free (label_with_underscore);
-
-       show_open_in_new_tab = show_open_alternate;
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_OPEN_IN_NEW_TAB);
-       gtk_action_set_sensitive (action, selection_count != 0);
-       gtk_action_set_visible (action, show_open_in_new_tab);
-
-       if (selection_count == 0 || selection_count == 1) {
-               label_with_underscore = g_strdup (_("Open in New _Tab"));
-       } else {
-               label_with_underscore = g_strdup_printf (ngettext("Open in %'d New _Tab",
-                                                                 "Open in %'d New _Tabs",
-                                                                 selection_count), 
-                                                        selection_count);
-       }
-
-       g_object_set (action, "label", 
-                     label_with_underscore,
-                     NULL);
-       g_free (label_with_underscore);
-
-       /* Broken into its own function just for convenience */
-       reset_open_with_menu (view, selection);
-       reset_extension_actions_menu (view, selection);
-
-       if (selection_all_in_trash) {
-               label = _("_Delete Permanently");
-               tip = _("Delete all selected items permanently");
-               show_separate_delete_command = FALSE;
-       } else {
-               label = _("Mo_ve to Trash");
-               tip = _("Move each selected item to the Trash");
-               show_separate_delete_command = g_settings_get_boolean (nautilus_preferences, 
NAUTILUS_PREFERENCES_ENABLE_DELETE);
-       }
-       
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_TRASH);
-       g_object_set (action,
-                     "label", label,
-                     "tooltip", tip,
-                     "icon-name", selection_all_in_trash ?
-                     NAUTILUS_ICON_DELETE : NAUTILUS_ICON_TRASH_FULL,
-                     NULL);
-       /* if the backend supports delete but not trash then don't show trash */
-       if (!can_trash_files && can_delete_files) {
-               gtk_action_set_visible (action, FALSE);
-       } else {
-               gtk_action_set_visible (action, TRUE);
-               gtk_action_set_sensitive (action, can_trash_files);
-       }
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_DELETE);
-       /* if the backend doesn't support trash but supports delete
-          show the delete option. or if the user set this  pref */
-       gtk_action_set_visible (action, (!can_trash_files && can_delete_files) || 
show_separate_delete_command);
-
-       if (selection_contains_recent) {
-               label = _("Remo_ve from Recent");
-               tip = _("Remove each selected item from the recently used list");
-       } else {
-               label = _("_Delete");
-               tip = _("Delete each selected item, without moving to the Trash");
-       }
-
-       if ((!can_trash_files && can_delete_files) || show_separate_delete_command) {
-               g_object_set (action,
-                             "label", label,
-                             "tooltip", tip,
-                             "icon-name", NAUTILUS_ICON_DELETE,
-                             NULL);
-       }
-       gtk_action_set_sensitive (action, can_delete_files);
-
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_RESTORE_FROM_TRASH);
-       //update_restore_from_trash_action (action, selection, FALSE);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_CREATE_LINK);
-       gtk_action_set_sensitive (action, can_link_files);
-       gtk_action_set_visible (action, !selection_contains_recent);
-       g_object_set (action, "label",
-                     ngettext ("Ma_ke Link",
-                               "Ma_ke Links",
-                               selection_count),
-                     NULL);
-
-       show_properties = !showing_network_directory (view)
-               && (!NAUTILUS_IS_DESKTOP_CANVAS_VIEW (view) || selection_count > 0);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_PROPERTIES);
-
-       gtk_action_set_sensitive (action, show_properties);
-       gtk_action_set_visible (action, show_properties);
-
-       if (selection_count == 0) {
-               gtk_action_set_tooltip (action, _("View or modify the properties of the open folder"));
-       } else {
-               gtk_action_set_tooltip (action, _("View or modify the properties of each selected item"));
-       }
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_PROPERTIES_ACCEL);
-
-       gtk_action_set_sensitive (action, show_properties);
-       gtk_action_set_visible (action, show_properties);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_EMPTY_TRASH);
-       g_object_set (action,
-                     "label", _("E_mpty Trash"),
-                     NULL);
-       gtk_action_set_sensitive (action, !nautilus_trash_monitor_is_empty ());
-       //gtk_action_set_visible (action, should_show_empty_trash (view));
-
-       show_save_search = FALSE;
-       save_search_sensitive = FALSE;
-       show_save_search_as = FALSE;
-       if (selection_contains_search) {
-               NautilusSearchDirectory *search;
-
-               search = NAUTILUS_SEARCH_DIRECTORY (view->details->model);
-               if (nautilus_search_directory_is_saved_search (search)) {
-                       show_save_search = TRUE;
-                       save_search_sensitive = nautilus_search_directory_is_modified (search);
-               } else {
-                       show_save_search_as = TRUE;
-               }
-       } 
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SAVE_SEARCH);
-       gtk_action_set_visible (action, show_save_search);
-       gtk_action_set_sensitive (action, save_search_sensitive);
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SAVE_SEARCH_AS);
-       gtk_action_set_visible (action, show_save_search_as);
-
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SELECT_ALL);
-       gtk_action_set_sensitive (action, !nautilus_view_is_empty (view));
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_SELECT_PATTERN);
-       gtk_action_set_sensitive (action, !nautilus_view_is_empty (view));
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_INVERT_SELECTION);
-       gtk_action_set_sensitive (action, !nautilus_view_is_empty (view));
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_CUT);
-       gtk_action_set_sensitive (action, can_move_files);
-       gtk_action_set_visible (action, !selection_contains_recent);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_COPY);
-       gtk_action_set_sensitive (action, can_copy_files);
-
-       real_update_menus_volumes (view, selection, selection_count);
-
-       update_undo_actions (view);
-
-       nautilus_file_list_free (selection);
-
-       if (view->details->scripts_invalid) {
-               update_scripts_menu (view);
-       }
-
-       if (can_create_files
-           && !selection_contains_recent
-           && view->details->templates_invalid) {
-               update_templates_menu (view);
-       }
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_NEW_DOCUMENTS);
-       gtk_action_set_sensitive (action, can_create_files);
-       gtk_action_set_visible (action, !selection_contains_recent && view->details->templates_present);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_COPY_TO);
-       gtk_action_set_sensitive (action, can_copy_files);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group,
-                                             NAUTILUS_ACTION_MOVE_TO);
-       gtk_action_set_sensitive (action, can_move_files);
-       gtk_action_set_visible (action, !selection_contains_recent);
-
-       action = gtk_action_group_get_action (view->details->dir_action_group, 
NAUTILUS_ACTION_SHOW_HIDDEN_FILES);
-       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), view->details->show_hidden_files);
-}
-
 GActionGroup *
 nautilus_view_get_action_group (NautilusView *view)
 {
@@ -8123,9 +6076,6 @@ real_update_actions_state (NautilusView *view)
        gboolean show_open_alternate;
        gboolean show_open_in_new_tab;
        gboolean show_app, show_run;
-       gboolean show_save_search;
-       gboolean save_search_sensitive;
-       gboolean show_save_search_as;
        gboolean item_opens_in_view;
        gboolean is_read_only;
        gboolean test;
@@ -8144,13 +6094,15 @@ real_update_actions_state (NautilusView *view)
        gboolean show_stop;
        gboolean show_detect_media;
        GDriveStartStopType start_stop_type;
+       NautilusFileUndoInfo *info;
+       NautilusFileUndoManagerState undo_state;
+       gboolean undo_active, redo_active;
+       gboolean is_undo;
 
        window = nautilus_view_get_window (view);
 
        view_action_group = view->details->view_action_group;
 
-       g_print ("entering update actions state\n");
-
        selection = nautilus_view_get_selection (view);
        selection_count = g_list_length (selection);
        selection_contains_special_link = special_link_in_selection (selection);
@@ -8251,8 +6203,16 @@ real_update_actions_state (NautilusView *view)
 
        action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
                                             "move-to-trash");
-       g_simple_action_set_enabled (G_SIMPLE_ACTION (action), can_trash_files &&
-                                                              can_delete_files);
+       g_simple_action_set_enabled (G_SIMPLE_ACTION (action), can_trash_files);
+
+       action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
+                                            "delete");
+       /* Only show it in trash folder or if the setting to include a delete menu item
+        * is enabled */
+       show_separate_delete_command = g_settings_get_boolean (nautilus_preferences, 
NAUTILUS_PREFERENCES_ENABLE_DELETE);
+       g_simple_action_set_enabled (G_SIMPLE_ACTION (action), 
+                                    can_delete_files &&
+                                    (!can_trash_files || show_separate_delete_command));
 
        action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
                                             "cut");
@@ -8310,6 +6270,11 @@ real_update_actions_state (NautilusView *view)
        g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
                                     show_detect_media);
 
+       action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
+                                            "scripts");
+       g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
+                                    view->details->scripts_present);
+
        /* Background menu actions */
        action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
                                             "new-folder");
@@ -8329,6 +6294,13 @@ real_update_actions_state (NautilusView *view)
                                             "properties");
        g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
                                     show_properties);
+       action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
+                                            "new-document");
+       g_simple_action_set_enabled (G_SIMPLE_ACTION (action),
+                                    can_create_files &&
+                                    !selection_contains_recent &&
+                                    view->details->templates_present);
+
        /* Ask the clipboard */
        g_object_ref (view); /* Need to keep the object alive until we get the reply */
        gtk_clipboard_request_targets (nautilus_clipboard_get (GTK_WIDGET (view)),
@@ -8341,13 +6313,28 @@ real_update_actions_state (NautilusView *view)
                                     !nautilus_view_is_empty (view));
 
        /* Toolbar menu actions */
+       /* Undo and Redo */
+       info = nautilus_file_undo_manager_get_action ();
+       undo_state = nautilus_file_undo_manager_get_state ();
+       undo_active = redo_active = FALSE;
+       if (info != NULL && 
+           (undo_state > NAUTILUS_FILE_UNDO_MANAGER_STATE_NONE)) {
+               is_undo = (undo_state == NAUTILUS_FILE_UNDO_MANAGER_STATE_UNDO);
+               undo_active = is_undo;
+               redo_active = !is_undo;
+       }
+
+       action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
+                                            "undo");
+       g_simple_action_set_enabled (action, undo_active);
+       action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
+                                            "redo");
+       g_simple_action_set_enabled (action, redo_active);
+
        action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
                                             "show-hidden-files");
        g_action_change_state (action,
                               g_variant_new_boolean (view->details->show_hidden_files));
-
-       g_print ("exiting update actions state\n");
-
 }
 
 /* Convenience function to be called when updating menus,
@@ -8376,13 +6363,11 @@ update_selection_menu (NautilusView *view)
        gboolean show_app, show_run;
        gboolean item_opens_in_view;
        GAction *action;
+       gchar *label_with_underscore;
+       gchar *start_label, *stop_label;        
        GAppInfo *app;
-       GMenuItem *open_menu_item;
-       GMenuItem *start_menu_item;
-       GMenuItem *stop_menu_item;
        GIcon *app_icon;
-       char *label_with_underscore;
-       gchar *start_label, *stop_label;
+       GMenuItem *open_menu_item, *start_menu_item, *stop_menu_item;
        gboolean show_mount;
        gboolean show_unmount;
        gboolean show_eject;
@@ -8435,14 +6420,14 @@ update_selection_menu (NautilusView *view)
                if (app_icon != NULL)
                        g_menu_item_set_icon (open_menu_item, app_icon);
 
-               nautilus_gmenu_add_item_in_section (view->details->selection_menu,
-                                                   open_menu_item,
-                                                   "open-with-default-application-section");
+               nautilus_gmenu_add_item_in_submodel (view->details->selection_menu,
+                                                    open_menu_item,
+                                                    "open-with-default-application-section");
 
                g_free (label_with_underscore);
        }
 
-       /* Drive menu */
+       /* Drives */
        if (file != NULL && selection_count == 1) {
                start_stop_type = G_DRIVE_START_STOP_TYPE_UNKNOWN;
                file_should_show_foreach (file,
@@ -8473,7 +6458,7 @@ update_selection_menu (NautilusView *view)
                        }
 
                        start_menu_item = g_menu_item_new (start_label, "view.start-volume");
-                       nautilus_gmenu_add_item_in_section (view->details->selection_menu,
+                       nautilus_gmenu_add_item_in_submodel (view->details->selection_menu,
                                                            start_menu_item,
                                                            "drive-section");
 
@@ -8500,18 +6485,28 @@ update_selection_menu (NautilusView *view)
                        }
 
                        stop_menu_item = g_menu_item_new (stop_label, "view.stop-volume");
-                       nautilus_gmenu_add_item_in_section (view->details->selection_menu,
+                       nautilus_gmenu_add_item_in_submodel (view->details->selection_menu,
                                                            stop_menu_item,
                                                            "drive-section");
                }
 
        }
+
+       update_scripts_menu (view);
+}
+
+static void
+update_background_menu (NautilusView *view)
+{
+
+       if (nautilus_view_supports_creating_files (view) &&
+           !showing_recent_directory (view))
+               update_templates_menu (view);
 }
 
 static void
 real_update_right_click_menus (NautilusView *view)
 {
-       g_print ("view real_update_right_click_menus\n");
        if (view->details->background_menu != NULL)
                g_object_unref (view->details->background_menu);
        if (view->details->selection_menu != NULL)
@@ -8527,6 +6522,7 @@ real_update_right_click_menus (NautilusView *view)
        g_object_unref (builder);
 
        update_selection_menu (view);
+       update_background_menu (view);
        nautilus_view_update_actions_state (view);
 }
 
@@ -8551,9 +6547,39 @@ static void
 real_update_toolbar_menus (NautilusView *view)
 {
        NautilusToolbar *toolbar;
+       NautilusFileUndoInfo *info;
+       NautilusFileUndoManagerState undo_state;
+       gboolean undo_active, redo_active;
+       gchar *undo_label, *undo_description, *redo_label, *redo_description;
+       GMenuItem *undo_menu_item, *redo_menu_item;
+       gboolean is_undo;
+
+       undo_label = undo_description = redo_label = redo_description = NULL;
 
        toolbar = nautilus_window_get_toolbar (nautilus_view_get_window (view));
        nautilus_toolbar_reset_menus (toolbar);
+
+       /* Undo and Redo */
+       info = nautilus_file_undo_manager_get_action ();
+       undo_state = nautilus_file_undo_manager_get_state ();
+       undo_active = redo_active = FALSE;
+       if (info != NULL && 
+           (undo_state > NAUTILUS_FILE_UNDO_MANAGER_STATE_NONE)) {
+               is_undo = (undo_state == NAUTILUS_FILE_UNDO_MANAGER_STATE_UNDO);
+               undo_active = is_undo;
+               redo_active = !is_undo;
+               nautilus_file_undo_info_get_strings (info,
+                                                    &undo_label, &undo_description,
+                                                    &redo_label, &redo_description);
+       }
+
+       undo_label = undo_active ? undo_label : _("Undo");
+       redo_label = redo_active ? redo_label : _("Redo");
+       undo_menu_item = g_menu_item_new (undo_label, "view.undo");
+       redo_menu_item = g_menu_item_new (redo_label, "view.redo");
+       nautilus_toolbar_action_menu_add_item (toolbar, undo_menu_item, "undo-redo-section");
+       nautilus_toolbar_action_menu_add_item (toolbar, redo_menu_item, "undo-redo-section");
+
        nautilus_view_update_actions_state (view);
 }
 
@@ -8568,8 +6594,8 @@ nautilus_view_update_toolbar_menus (NautilusView *view)
 
 static void 
 create_right_click_menu (NautilusView *view,
-               GMenu *menu,
-               GdkEventButton *event)
+                        GMenu *menu,
+                        GdkEventButton *event)
 {
        GtkWidget *gtk_menu;
 
@@ -8856,7 +6882,6 @@ nautilus_view_notify_selection_changed (NautilusView *view)
                 */
 
                /* Schedule an update of menu item states to match selection */
-                g_print ("selection_changed\n");
                schedule_update_right_click_menus (view);
        }
 }
@@ -8868,7 +6893,6 @@ file_changed_callback (NautilusFile *file, gpointer callback_data)
 
        schedule_changes (view);
 
-       g_print ("file_changed\n");
        schedule_update_right_click_menus (view);
        schedule_update_status (view);
 }
@@ -9616,22 +7640,6 @@ nautilus_view_class_init (NautilusViewClass *klass)
                              NULL, NULL,
                              g_cclosure_marshal_VOID__VOID,
                              G_TYPE_NONE, 0);
-       signals[TRASH] =
-               g_signal_new ("trash",
-                             G_TYPE_FROM_CLASS (klass),
-                             G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-                             G_STRUCT_OFFSET (NautilusViewClass, trash),
-                             g_signal_accumulator_true_handled, NULL,
-                             g_cclosure_marshal_generic,
-                             G_TYPE_BOOLEAN, 0);
-       signals[DELETE] =
-               g_signal_new ("delete",
-                             G_TYPE_FROM_CLASS (klass),
-                             G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-                             G_STRUCT_OFFSET (NautilusViewClass, delete),
-                             g_signal_accumulator_true_handled, NULL,
-                             g_cclosure_marshal_generic,
-                             G_TYPE_BOOLEAN, 0);
 
        klass->get_selected_icon_locations = real_get_selected_icon_locations;
        klass->is_read_only = real_is_read_only;
@@ -9639,16 +7647,12 @@ nautilus_view_class_init (NautilusViewClass *klass)
        klass->start_renaming_file = start_renaming_file;
        klass->get_backing_uri = real_get_backing_uri;
        klass->using_manual_layout = real_using_manual_layout;
-        klass->merge_menus = real_merge_menus;
-        klass->unmerge_menus = real_unmerge_menus;
        klass->get_window = nautilus_view_get_window;
        klass->get_action_group = nautilus_view_get_action_group;
        klass->update_right_click_menus = real_update_right_click_menus;
        klass->update_actions_state = real_update_actions_state;
        klass->update_toolbar_menus = real_update_toolbar_menus;
        klass->zoom_to_level = real_zoom_to_level;
-       klass->trash = real_trash;
-       klass->delete = real_delete;
 
        copied_files_atom = gdk_atom_intern ("x-special/gnome-copied-files", FALSE);
 
@@ -9668,14 +7672,6 @@ nautilus_view_class_init (NautilusViewClass *klass)
                                      G_PARAM_STATIC_STRINGS);
 
        g_object_class_install_properties (oclass, NUM_PROPERTIES, properties);
-
-       binding_set = gtk_binding_set_by_class (klass);
-       gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_CONTROL_MASK,
-                                     "trash", 0);
-       gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_CONTROL_MASK,
-                                     "trash", 0);
-       gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SHIFT_MASK,
-                                     "delete", 0);
 }
 
 static void
@@ -9762,7 +7758,7 @@ nautilus_view_init (NautilusView *view)
                                  G_CALLBACK (schedule_update_right_click_menus), view);
 
        g_signal_connect_object (nautilus_file_undo_manager_get (), "undo-changed",
-                                G_CALLBACK (undo_manager_changed_cb), view, 0);
+                                G_CALLBACK (undo_manager_changed), view, 0);
 
        /* Accessibility */
        atk_object = gtk_widget_get_accessible (GTK_WIDGET (view));
diff --git a/src/nautilus-view.h b/src/nautilus-view.h
index f5c04a3..7ce4113 100644
--- a/src/nautilus-view.h
+++ b/src/nautilus-view.h
@@ -296,12 +296,8 @@ struct NautilusViewClass {
        void           (* scroll_to_file)         (NautilusView          *view,
                                                   const char            *uri);
 
-        /* Signals used only for keybindings */
-        gboolean (* trash)                         (NautilusView *view);
-        gboolean (* delete)                        (NautilusView *view);
-
-        NautilusWindow * (*get_window)         (NautilusView *view);
-        GActionGroup * (*get_action_group)     (NautilusView *view);
+       NautilusWindow * (*get_window)  (NautilusView *view);
+       GActionGroup * (*get_action_group)      (NautilusView *view);
 };
 
 /* GObject support */
@@ -338,7 +334,6 @@ void                nautilus_view_preview_files                    (NautilusView
 void                nautilus_view_start_batching_selection_changes (NautilusView  *view);
 void                nautilus_view_stop_batching_selection_changes  (NautilusView  *view);
 void                nautilus_view_notify_selection_changed         (NautilusView  *view);
-GtkUIManager *      nautilus_view_get_ui_manager                   (NautilusView  *view);
 NautilusDirectory  *nautilus_view_get_model                        (NautilusView  *view);
 NautilusFile       *nautilus_view_get_directory_as_file            (NautilusView  *view);
 void                nautilus_view_pop_up_background_right_click_menu   (NautilusView  *view,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]