summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Soriano <csoriano@gnome.org>2015-08-23 01:00:32 +0200
committerCarlos Soriano <csoriano@gnome.org>2015-08-23 01:03:33 +0200
commitc2847953b2fea4dcb6fdd1fbc7b9d860dd658dc8 (patch)
treedfd2420168016e5f909e3612bca643120b9b17db
parent0216ce9d694dc1b2690f7245cbc9f7374b71452f (diff)
downloadnautilus-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.c5
-rw-r--r--libnautilus-private/nautilus-global-preferences.h5
-rw-r--r--src/nautilus-application.h2
-rw-r--r--src/nautilus-desktop-canvas-view.c2
-rw-r--r--src/nautilus-files-view.c2
-rw-r--r--src/nautilus-files-view.h8
-rw-r--r--src/nautilus-toolbar-view-menu.xml4
-rw-r--r--src/nautilus-window-slot.c94
-rw-r--r--src/nautilus-window.c47
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 */