[nautilus] window: move undo actions to the window action group



commit 44ce04113c5b1a4ccd6d78849f511d2cf1f95041
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Sun Jan 25 18:06:20 2015 +0000

    window: move undo actions to the window action group
    
    They are shared between different views - and windows actually. So it
    makes more sense for them to live here for now.

 src/nautilus-view.c   |  110 +------------------------------------------------
 src/nautilus-window.c |   78 ++++++++++++++++++++++++++++++++++
 2 files changed, 79 insertions(+), 109 deletions(-)
---
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index d689b52..d1f1778 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -86,7 +86,6 @@
 #include <libnautilus-private/nautilus-ui-utilities.h>
 #include <libnautilus-private/nautilus-signaller.h>
 #include <libnautilus-private/nautilus-icon-names.h>
-#include <libnautilus-private/nautilus-file-undo-manager.h>
 
 #define GNOME_DESKTOP_USE_UNSTABLE_API
 #include <gdesktop-enums.h>
@@ -1801,36 +1800,6 @@ action_show_hidden_files (GSimpleAction *action,
 }
 
 static void
-action_undo (GSimpleAction *action,
-            GVariant      *state,
-            gpointer       user_data)
-{
-       GtkWidget *toplevel;
-       NautilusView *view;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       view = NAUTILUS_VIEW (user_data);
-       toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view));
-       nautilus_file_undo_manager_undo (GTK_WINDOW (toplevel));
-}
-
-static void
-action_redo (GSimpleAction *action,
-            GVariant      *state,
-            gpointer       user_data)
-{
-       GtkWidget *toplevel;
-       NautilusView *view;
-
-       g_assert (NAUTILUS_IS_VIEW (user_data));
-
-       view = NAUTILUS_VIEW (user_data);
-       toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view));
-       nautilus_file_undo_manager_redo (GTK_WINDOW (toplevel));
-}
-
-static void
 action_zoom_in (GSimpleAction *action,
                GVariant      *state,
                gpointer       user_data)
@@ -2259,17 +2228,6 @@ nautilus_view_get_selection_count (NautilusView *view)
        return len;
 }
 
-static void
-undo_manager_changed (NautilusFileUndoManager* manager,
-                     NautilusView *view)
-{
-       if (!view->details->active) {
-               return;
-       }
-
-       nautilus_view_update_toolbar_menus (view);
-}
-
 void
 nautilus_view_set_selection (NautilusView *nautilus_view,
                             GList *selection)
@@ -5585,8 +5543,6 @@ const GActionEntry view_entries[] = {
        { "zoom-in",  action_zoom_in },
        { "zoom-out", action_zoom_out },
        { "zoom-default", action_zoom_default },
-       { "undo", action_undo },
-       { "redo", action_redo },
        { "show-hidden-files", NULL, NULL, "true", action_show_hidden_files },
        /* Background menu */
        { "new-folder", action_new_folder },
@@ -5868,10 +5824,6 @@ 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;
 
        view_action_group = view->details->view_action_group;
 
@@ -6122,24 +6074,6 @@ 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 (G_SIMPLE_ACTION (action), undo_active);
-       action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group),
-                                            "redo");
-       g_simple_action_set_enabled (G_SIMPLE_ACTION (action), redo_active);
-
        g_action_group_change_action_state (view_action_group,
                                            "show-hidden-files",
                                            g_variant_new_boolean (view->details->show_hidden_files));
@@ -6413,50 +6347,13 @@ real_update_toolbar_menus (NautilusView *view)
 {
        NautilusToolbar *toolbar;
        NautilusWindow *window;
-       NautilusFileUndoInfo *info;
-       NautilusFileUndoManagerState undo_state;
-       gboolean undo_active, redo_active;
-       gchar *undo_label, *undo_description, *redo_label, *redo_description;
-       gboolean is_undo;
-       GMenu* undo_section;
-
-       undo_label = undo_description = redo_label = redo_description = NULL;
 
-       toolbar = NAUTILUS_TOOLBAR (nautilus_window_get_toolbar (nautilus_view_get_window (view)));
        window = nautilus_view_get_window (view);
+       toolbar = NAUTILUS_TOOLBAR (nautilus_window_get_toolbar (window));
        nautilus_toolbar_reset_menus (toolbar);
        nautilus_window_reset_menus (window);
 
-       /* 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_section = g_menu_new ();
-       undo_label = undo_active ? undo_label : g_strdup (_("Undo"));
-       redo_label = redo_active ? redo_label : g_strdup (_("Redo"));
-       g_menu_append (undo_section, undo_label, "view.undo");
-       g_menu_append (undo_section, redo_label, "view.redo");
-       nautilus_gmenu_replace_section (nautilus_toolbar_get_action_menu (toolbar),
-                                       "undo-redo-section",
-                                       G_MENU_MODEL (undo_section));
-
        nautilus_view_update_actions_state (view);
-
-       g_object_unref (undo_section);
-       g_free (undo_label);
-       g_free (undo_description);
-       g_free (redo_label);
-       g_free (redo_description);
 }
 
 /* Convenience function to reset the menus owned by the but that are managed on
@@ -7587,9 +7484,6 @@ nautilus_view_init (NautilusView *view)
                                  "changed::" NAUTILUS_PREFERENCES_LOCKDOWN_COMMAND_LINE,
                                  G_CALLBACK (schedule_update_context_menus), view);
 
-       g_signal_connect_object (nautilus_file_undo_manager_get (), "undo-changed",
-                                G_CALLBACK (undo_manager_changed), view, 0);
-
        /* Accessibility */
        atk_object = gtk_widget_get_accessible (GTK_WIDGET (view));
        atk_object_set_name (atk_object, _("Content View"));
@@ -7609,8 +7503,6 @@ nautilus_view_init (NautilusView *view)
        /* Toolbar menu */
        nautilus_application_add_accelerator (app, "view.zoom-in", "<control>plus");
        nautilus_application_add_accelerator (app, "view.zoom-out", "<control>minus");
-       nautilus_application_add_accelerator (app, "view.undo", "<control>z");
-       nautilus_application_add_accelerator (app, "view.redo", "<shift><control>z");
        nautilus_application_add_accelerator (app, "view.show-hidden-files", "<control>h");
        /* Background menu */
        nautilus_application_add_accelerator (app, "view.select-all", "<control>a");
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 2e7f362..a80b0c5 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -58,6 +58,7 @@
 #include <libnautilus-private/nautilus-file-utilities.h>
 #include <libnautilus-private/nautilus-file-attributes.h>
 #include <libnautilus-private/nautilus-file-operations.h>
+#include <libnautilus-private/nautilus-file-undo-manager.h>
 #include <libnautilus-private/nautilus-global-preferences.h>
 #include <libnautilus-private/nautilus-metadata.h>
 #include <libnautilus-private/nautilus-profile.h>
@@ -354,6 +355,26 @@ action_prompt_for_location_home (GSimpleAction *action,
 }
 
 static void
+action_redo (GSimpleAction *action,
+            GVariant      *state,
+            gpointer       user_data)
+{
+       NautilusWindow *window = user_data;
+
+       nautilus_file_undo_manager_redo (GTK_WINDOW (window));
+}
+
+static void
+action_undo (GSimpleAction *action,
+            GVariant      *state,
+            gpointer       user_data)
+{
+       NautilusWindow *window = user_data;
+
+       nautilus_file_undo_manager_undo (GTK_WINDOW (window));
+}
+
+static void
 action_toggle_state_action_button (GSimpleAction *action,
                                   GVariant      *state,
                                   gpointer       user_data)
@@ -388,6 +409,55 @@ action_view_mode (GSimpleAction *action,
        g_simple_action_set_state (action, value);
 }
 
+static void
+undo_manager_changed (NautilusWindow *window)
+{
+       NautilusToolbar *toolbar;
+       NautilusFileUndoInfo *info;
+       NautilusFileUndoManagerState undo_state;
+       gboolean undo_active, redo_active;
+       gchar *undo_label, *undo_description, *redo_label, *redo_description;
+       gboolean is_undo;
+       GMenu* undo_section;
+       GAction *action;
+
+       toolbar = NAUTILUS_TOOLBAR (window->details->toolbar);
+       undo_label = undo_description = redo_label = redo_description = NULL;
+
+       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);
+       }
+
+       action = g_action_map_lookup_action (G_ACTION_MAP (window), "undo");
+       g_simple_action_set_enabled (G_SIMPLE_ACTION (action), undo_active);
+       action = g_action_map_lookup_action (G_ACTION_MAP (window), "redo");
+       g_simple_action_set_enabled (G_SIMPLE_ACTION (action), redo_active);
+
+       undo_section = g_menu_new ();
+       undo_label = undo_active ? undo_label : g_strdup (_("Undo"));
+       redo_label = redo_active ? redo_label : g_strdup (_("Redo"));
+       g_menu_append (undo_section, undo_label, "win.undo");
+       g_menu_append (undo_section, redo_label, "win.redo");
+       nautilus_gmenu_replace_section (nautilus_toolbar_get_action_menu (toolbar),
+                                       "undo-redo-section",
+                                       G_MENU_MODEL (undo_section));
+
+       g_object_unref (undo_section);
+       g_free (undo_label);
+       g_free (undo_description);
+       g_free (redo_label);
+       g_free (redo_description);
+}
+
 const GActionEntry win_entries[] = {
        { "back",  action_back },
        { "forward",  action_forward },
@@ -399,6 +469,8 @@ const GActionEntry win_entries[] = {
        { "enter-location", action_enter_location },
        { "bookmark-current-location", action_bookmark_current_location },
        { "toggle-search", NULL, NULL, "false", action_toggle_search },
+       { "undo", action_undo },
+       { "redo", action_redo },
        { "view-mode", NULL, "s", "''", action_view_mode },
        /* Only accesible by shorcuts */
        { "close-current-view", action_close_current_view },
@@ -436,6 +508,8 @@ nautilus_window_initialize_actions (NautilusWindow *window)
        nautilus_application_add_accelerator (app, "win.view-mode('grid')", "<control>2");
        nautilus_application_add_accelerator (app, "win.close-current-view", "<control>w");
        nautilus_application_add_accelerator (app, "win.reload", "<control>r");
+       nautilus_application_add_accelerator (app, "win.undo", "<control>z");
+       nautilus_application_add_accelerator (app, "win.redo", "<shift><control>z");
        /* Only accesible by shorcuts */
        nautilus_application_add_accelerator (app, "win.bookmark-current-location", "<control>d");
        nautilus_application_add_accelerator (app, "win.up", "<alt>Up");
@@ -461,6 +535,10 @@ nautilus_window_initialize_actions (NautilusWindow *window)
                nautilus_window_show_sidebar (window);
 
        g_variant_unref (state);
+
+       g_signal_connect_object (nautilus_file_undo_manager_get (), "undo-changed",
+                                G_CALLBACK (undo_manager_changed), window, G_CONNECT_SWAPPED);
+       undo_manager_changed (window);
 }
 
 void


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