diff options
author | Carlos Soriano <csoriano@gnome.org> | 2015-08-23 01:00:32 +0200 |
---|---|---|
committer | Carlos Soriano <csoriano@gnome.org> | 2015-08-23 01:03:33 +0200 |
commit | c2847953b2fea4dcb6fdd1fbc7b9d860dd658dc8 (patch) | |
tree | dfd2420168016e5f909e3612bca643120b9b17db | |
parent | 0216ce9d694dc1b2690f7245cbc9f7374b71452f (diff) | |
download | nautilus-c2847953b2fea4dcb6fdd1fbc7b9d860dd658dc8.tar.gz |
window: delegate view mode to slot
Delefate the view management to the slot.
Also on the way, remove duplicates of views ID.
This patch is another step forward to full isolation of
window/slot/view
-rw-r--r-- | libnautilus-private/nautilus-global-preferences.c | 5 | ||||
-rw-r--r-- | libnautilus-private/nautilus-global-preferences.h | 5 | ||||
-rw-r--r-- | src/nautilus-application.h | 2 | ||||
-rw-r--r-- | src/nautilus-desktop-canvas-view.c | 2 | ||||
-rw-r--r-- | src/nautilus-files-view.c | 2 | ||||
-rw-r--r-- | src/nautilus-files-view.h | 8 | ||||
-rw-r--r-- | src/nautilus-toolbar-view-menu.xml | 4 | ||||
-rw-r--r-- | src/nautilus-window-slot.c | 94 | ||||
-rw-r--r-- | src/nautilus-window.c | 47 |
9 files changed, 92 insertions, 77 deletions
diff --git a/libnautilus-private/nautilus-global-preferences.c b/libnautilus-private/nautilus-global-preferences.c index 75afe0fd7..15d8f808e 100644 --- a/libnautilus-private/nautilus-global-preferences.c +++ b/libnautilus-private/nautilus-global-preferences.c @@ -27,6 +27,7 @@ #include "nautilus-file-utilities.h" #include "nautilus-file.h" +#include "src/nautilus-files-view.h" #include <eel/eel-glib-extensions.h> #include <eel/eel-gtk-extensions.h> #include <eel/eel-stock-dialogs.h> @@ -57,9 +58,9 @@ nautilus_global_preferences_get_default_folder_viewer_preference_as_iid (void) g_settings_get_enum (nautilus_preferences, NAUTILUS_PREFERENCES_DEFAULT_FOLDER_VIEWER); if (preference_value == NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW) { - viewer_iid = NAUTILUS_LIST_VIEW_IID; + viewer_iid = NAUTILUS_LIST_VIEW_ID; } else { - viewer_iid = NAUTILUS_CANVAS_VIEW_IID; + viewer_iid = NAUTILUS_CANVAS_VIEW_ID; } return g_strdup (viewer_iid); diff --git a/libnautilus-private/nautilus-global-preferences.h b/libnautilus-private/nautilus-global-preferences.h index ef9dfbfc3..d3204751b 100644 --- a/libnautilus-private/nautilus-global-preferences.h +++ b/libnautilus-private/nautilus-global-preferences.h @@ -82,11 +82,6 @@ enum NAUTILUS_DEFAULT_FOLDER_VIEWER_OTHER }; -/* These IIDs are used by the preferences code and in nautilus-application.c */ -#define NAUTILUS_CANVAS_VIEW_IID "OAFIID:Nautilus_File_Manager_Canvas_View" -#define NAUTILUS_LIST_VIEW_IID "OAFIID:Nautilus_File_Manager_List_View" - - /* Icon View */ #define NAUTILUS_PREFERENCES_ICON_VIEW_DEFAULT_ZOOM_LEVEL "default-zoom-level" diff --git a/src/nautilus-application.h b/src/nautilus-application.h index 8b6ef79eb..179a4f46b 100644 --- a/src/nautilus-application.h +++ b/src/nautilus-application.h @@ -29,8 +29,6 @@ #include "nautilus-bookmark-list.h" #include "nautilus-window.h" -#define NAUTILUS_DESKTOP_ICON_VIEW_IID "OAFIID:Nautilus_File_Manager_Desktop_Canvas_View" - #define NAUTILUS_TYPE_APPLICATION nautilus_application_get_type() #define NAUTILUS_APPLICATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_APPLICATION, NautilusApplication)) diff --git a/src/nautilus-desktop-canvas-view.c b/src/nautilus-desktop-canvas-view.c index 3031b253b..8d5844055 100644 --- a/src/nautilus-desktop-canvas-view.c +++ b/src/nautilus-desktop-canvas-view.c @@ -229,7 +229,7 @@ desktop_canvas_view_property_filter (GdkXEvent *gdk_xevent, static const char * real_get_id (NautilusFilesView *view) { - return NAUTILUS_DESKTOP_CANVAS_VIEW_ID; + return NAUTILUS_DESKTOP_VIEW_ID; } static void diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c index 9c77e658d..995811537 100644 --- a/src/nautilus-files-view.c +++ b/src/nautilus-files-view.c @@ -8259,7 +8259,7 @@ nautilus_files_view_new (const gchar *id, view = nautilus_canvas_view_new (slot); } else if (g_strcmp0 (id, NAUTILUS_LIST_VIEW_ID) == 0) { view = nautilus_list_view_new (slot); - } else if (g_strcmp0 (id, NAUTILUS_DESKTOP_CANVAS_VIEW_ID) == 0) { + } else if (g_strcmp0 (id, NAUTILUS_DESKTOP_VIEW_ID) == 0) { view = nautilus_desktop_canvas_view_new (slot); } #if ENABLE_EMPTY_VIEW diff --git a/src/nautilus-files-view.h b/src/nautilus-files-view.h index a0d5ff1e6..87c2955c9 100644 --- a/src/nautilus-files-view.h +++ b/src/nautilus-files-view.h @@ -40,12 +40,12 @@ typedef struct NautilusFilesViewClass NautilusFilesViewClass; #include "nautilus-window-slot.h" #if ENABLE_EMPTY_VIEW -#define NAUTILUS_EMPTY_VIEW_ID "OAFIID:Nautilus_File_Manager_Empty_View" +#define NAUTILUS_EMPTY_VIEW_ID "empty" #endif -#define NAUTILUS_CANVAS_VIEW_ID "OAFIID:Nautilus_File_Manager_Canvas_View" -#define NAUTILUS_DESKTOP_CANVAS_VIEW_ID "OAFIID:Nautilus_File_Manager_Desktop_Canvas_View" -#define NAUTILUS_LIST_VIEW_ID "OAFIID:Nautilus_File_Manager_List_View" +#define NAUTILUS_CANVAS_VIEW_ID "grid" +#define NAUTILUS_DESKTOP_VIEW_ID "desktop" +#define NAUTILUS_LIST_VIEW_ID "list" #define NAUTILUS_TYPE_FILES_VIEW nautilus_files_view_get_type() #define NAUTILUS_FILES_VIEW(obj)\ diff --git a/src/nautilus-toolbar-view-menu.xml b/src/nautilus-toolbar-view-menu.xml index db6fbd85c..c4a0d88d8 100644 --- a/src/nautilus-toolbar-view-menu.xml +++ b/src/nautilus-toolbar-view-menu.xml @@ -20,7 +20,7 @@ <object class="GtkModelButton" id="grid_button"> <property name="visible">True</property> <property name="text">Grid</property> - <property name="action-name">win.view-mode</property> + <property name="action-name">slot.files-view-mode</property> <property name="action-target">'grid'</property> <property name="iconic">True</property> <property name="centered">True</property> @@ -36,7 +36,7 @@ <object class="GtkModelButton" id="list_button"> <property name="visible">True</property> <property name="text">List</property> - <property name="action-name">win.view-mode</property> + <property name="action-name">slot.files-view-mode</property> <property name="action-target">'list'</property> <property name="iconic">True</property> <property name="centered">True</property> diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c index 88d0cfe9a..64a118074 100644 --- a/src/nautilus-window-slot.c +++ b/src/nautilus-window-slot.c @@ -27,6 +27,7 @@ #include "nautilus-application.h" #include "nautilus-canvas-view.h" #include "nautilus-desktop-window.h" +#include "nautilus-desktop-canvas-view.h" #include "nautilus-list-view.h" #include "nautilus-mime-actions.h" #include "nautilus-places-view.h" @@ -75,6 +76,9 @@ struct NautilusWindowSlotDetails { */ GtkWidget *extra_location_widgets; + /* Slot actions */ + GActionGroup *slot_action_group; + /* Current location. */ GFile *location; gchar *title; @@ -155,7 +159,7 @@ nautilus_window_slot_get_view_for_location (NautilusWindowSlot *slot, * for the desktop window. */ if (NAUTILUS_IS_DESKTOP_WINDOW (window)) { - view = NAUTILUS_VIEW (nautilus_files_view_new (NAUTILUS_DESKTOP_ICON_VIEW_IID, slot)); + view = NAUTILUS_VIEW (nautilus_files_view_new (NAUTILUS_DESKTOP_VIEW_ID, slot)); } else if (nautilus_file_is_other_locations (file)) { view = NAUTILUS_VIEW (nautilus_places_view_new ()); @@ -179,7 +183,7 @@ nautilus_window_slot_get_view_for_location (NautilusWindowSlot *slot, if (slot->details->view_mode_before_search == NULL) { slot->details->view_mode_before_search = g_strdup (nautilus_files_view_get_view_id (NAUTILUS_FILES_VIEW (slot->details->content_view))); } - view_id = g_strdup (NAUTILUS_LIST_VIEW_IID); + view_id = g_strdup (NAUTILUS_LIST_VIEW_ID); } else { g_free (slot->details->view_mode_before_search); slot->details->view_mode_before_search = NULL; @@ -245,6 +249,7 @@ nautilus_window_slot_sync_actions (NautilusWindowSlot *slot) NautilusView *view; GAction *action; gboolean show_search; + GVariant *variant; view = nautilus_window_slot_get_current_view (slot); show_search = (slot->details->search_visible || (view && nautilus_view_is_searching (view))); @@ -263,17 +268,16 @@ nautilus_window_slot_sync_actions (NautilusWindowSlot *slot) /* By setting the toggle-search action state, NautilusWindow will call nautilus_window_slot_set_search_visible() */ g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (show_search)); - /* View mode */ - action = g_action_map_lookup_action (G_ACTION_MAP (slot->details->window), "view-mode"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - - if (nautilus_window_slot_content_view_matches (slot, NAUTILUS_LIST_VIEW_ID)) { - g_action_change_state (action, g_variant_new_string ("list")); - } else if (nautilus_window_slot_content_view_matches (slot, NAUTILUS_CANVAS_VIEW_ID)) { - g_action_change_state (action, g_variant_new_string ("grid")); - } else { - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); - } + /* Files view mode */ + action = g_action_map_lookup_action (G_ACTION_MAP (slot->details->slot_action_group), "files-view-mode"); + if (NAUTILUS_IS_FILES_VIEW (nautilus_window_slot_get_current_view (slot)) && + !NAUTILUS_IS_DESKTOP_CANVAS_VIEW (nautilus_window_slot_get_current_view (slot))) { + variant = g_variant_new_string (nautilus_files_view_get_view_id (NAUTILUS_FILES_VIEW (nautilus_window_slot_get_current_view (slot)))); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + g_action_change_state (action, variant); + } else { + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); + } } static void @@ -462,6 +466,8 @@ real_active (NautilusWindowSlot *slot) nautilus_window_sync_title (window, slot); nautilus_window_sync_location_widgets (window); nautilus_window_slot_sync_actions (slot); + + gtk_widget_insert_action_group (GTK_WIDGET (window), "slot", slot->details->slot_action_group); } static void @@ -471,6 +477,8 @@ real_inactive (NautilusWindowSlot *slot) window = nautilus_window_slot_get_window (slot); g_assert (slot == nautilus_window_get_active_slot (window)); + + gtk_widget_insert_action_group (GTK_WIDGET (window), "slot", NULL); } static void @@ -579,12 +587,72 @@ nautilus_window_slot_constructed (GObject *object) slot->details->title = g_strdup (_("Loading…")); } +static void +action_files_view_mode (GSimpleAction *action, + GVariant *value, + gpointer user_data) +{ + const gchar *name; + NautilusWindowSlot *slot; + + name = g_variant_get_string (value, NULL); + slot = NAUTILUS_WINDOW_SLOT (user_data); + + if (!NAUTILUS_IS_FILES_VIEW (nautilus_window_slot_get_current_view (slot))) + return; + + nautilus_window_slot_set_content_view (slot, name); + if (g_strcmp0 (name, "list") == 0) { + /* If this change is caused because of the automatic list view + * switch for search, don't set as default list view */ + if (!(nautilus_view_is_searching (nautilus_window_slot_get_current_view (slot)) && + g_settings_get_boolean (nautilus_preferences, NAUTILUS_PREFERENCES_LIST_VIEW_ON_SEARCH))) { + g_settings_set_enum (nautilus_preferences, + NAUTILUS_PREFERENCES_DEFAULT_FOLDER_VIEWER, + NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW); + } + } else if (g_strcmp0 (name, "grid") == 0) { + /* If the user manually changed the view mode to grid, disable the automatic + * switch to list view on search */ + if (nautilus_view_is_searching (nautilus_window_slot_get_current_view (slot))) { + g_settings_set_boolean (nautilus_preferences, + NAUTILUS_PREFERENCES_LIST_VIEW_ON_SEARCH, + FALSE); + } + g_settings_set_enum (nautilus_preferences, + NAUTILUS_PREFERENCES_DEFAULT_FOLDER_VIEWER, + NAUTILUS_DEFAULT_FOLDER_VIEWER_ICON_VIEW); + } else { + g_assert_not_reached (); + } + + g_simple_action_set_state (action, value); +} + +const GActionEntry slot_entries[] = { + { "files-view-mode", NULL, "s", "''", action_files_view_mode }, +}; static void nautilus_window_slot_init (NautilusWindowSlot *slot) { + GApplication *app; + + app = g_application_get_default (); + slot->details = G_TYPE_INSTANCE_GET_PRIVATE (slot, NAUTILUS_TYPE_WINDOW_SLOT, NautilusWindowSlotDetails); + + slot->details->slot_action_group = G_ACTION_GROUP (g_simple_action_group_new ()); + g_action_map_add_action_entries (G_ACTION_MAP (slot->details->slot_action_group), + slot_entries, + G_N_ELEMENTS (slot_entries), + slot); + gtk_widget_insert_action_group (GTK_WIDGET (slot), + "slot", + G_ACTION_GROUP (slot->details->slot_action_group)); + nautilus_application_add_accelerator (app, "slot.files-view-mode('list')", "<control>1"); + nautilus_application_add_accelerator (app, "slot.files-view-mode('grid')", "<control>2"); } #define DEBUG_FLAG NAUTILUS_DEBUG_WINDOW diff --git a/src/nautilus-window.c b/src/nautilus-window.c index c3a50bc3a..0aa0a2fb8 100644 --- a/src/nautilus-window.c +++ b/src/nautilus-window.c @@ -435,50 +435,6 @@ action_toggle_state_action_button (GSimpleAction *action, } static void -action_view_mode (GSimpleAction *action, - GVariant *value, - gpointer user_data) -{ - const gchar *name; - NautilusWindowSlot *slot; - GFile *location; - - name = g_variant_get_string (value, NULL); - slot = nautilus_window_get_active_slot (NAUTILUS_WINDOW (user_data)); - - if (g_strcmp0 (name, "list") == 0) { - nautilus_window_slot_set_content_view (slot, NAUTILUS_LIST_VIEW_ID); - /* If this change is caused because of the automatic list view - * switch for search, don't set as default list view */ - location = nautilus_window_slot_get_location (slot); - if (!(nautilus_file_is_in_search (nautilus_file_get (location)) && - g_settings_get_boolean (nautilus_preferences, NAUTILUS_PREFERENCES_LIST_VIEW_ON_SEARCH))) {; - g_settings_set_enum (nautilus_preferences, - NAUTILUS_PREFERENCES_DEFAULT_FOLDER_VIEWER, - NAUTILUS_DEFAULT_FOLDER_VIEWER_LIST_VIEW); - } - } else if (g_strcmp0 (name, "grid") == 0) { - nautilus_window_slot_set_content_view (slot, NAUTILUS_CANVAS_VIEW_ID); - - /* If the user manually changed the view mode to grid, disable the automatic - * switch to list view on search */ - location = nautilus_window_slot_get_location (slot); - if (nautilus_file_is_in_search (nautilus_file_get (location))) { - g_settings_set_boolean (nautilus_preferences, - NAUTILUS_PREFERENCES_LIST_VIEW_ON_SEARCH, - FALSE); - } - g_settings_set_enum (nautilus_preferences, - NAUTILUS_PREFERENCES_DEFAULT_FOLDER_VIEWER, - NAUTILUS_DEFAULT_FOLDER_VIEWER_ICON_VIEW); - } else { - g_assert_not_reached (); - } - - g_simple_action_set_state (action, value); -} - -static void undo_manager_changed (NautilusWindow *window) { NautilusToolbar *toolbar; @@ -1937,7 +1893,6 @@ const GActionEntry win_entries[] = { { "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 }, { "go-home", action_go_home }, @@ -1978,8 +1933,6 @@ nautilus_window_initialize_actions (NautilusWindow *window) nautilus_application_add_accelerator (app, "win.enter-location", "<control>l"); nautilus_application_add_accelerator (app, "win.new-tab", "<control>t"); nautilus_application_add_accelerator (app, "win.toggle-search", "<control>f"); - nautilus_application_add_accelerator (app, "win.view-mode('list')", "<control>1"); - nautilus_application_add_accelerator (app, "win.view-mode('grid')", "<control>2"); nautilus_application_add_accelerator (app, "win.close-current-view", "<control>w"); /* Special case reload, since users are used to use two shortcuts instead of one */ |