diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2015-01-25 18:06:20 +0000 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2015-01-26 11:19:22 +0000 |
commit | 44ce04113c5b1a4ccd6d78849f511d2cf1f95041 (patch) | |
tree | 6f9ee78ae80cbff82aa9f400a8bad260cf5c32a1 /src/nautilus-window.c | |
parent | be0f488a2d2525deab363ebf98ce548395e60d90 (diff) | |
download | nautilus-44ce04113c5b1a4ccd6d78849f511d2cf1f95041.tar.gz |
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.
Diffstat (limited to 'src/nautilus-window.c')
-rw-r--r-- | src/nautilus-window.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/nautilus-window.c b/src/nautilus-window.c index 2e7f3622e..a80b0c5dc 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 |