diff options
-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 */ |