[nautilus] window: delegate view mode to slot



commit c2847953b2fea4dcb6fdd1fbc7b9d860dd658dc8
Author: Carlos Soriano <csoriano gnome org>
Date:   Sun Aug 23 01:00:32 2015 +0200

    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

 libnautilus-private/nautilus-global-preferences.c |    5 +-
 libnautilus-private/nautilus-global-preferences.h |    5 -
 src/nautilus-application.h                        |    2 -
 src/nautilus-desktop-canvas-view.c                |    2 +-
 src/nautilus-files-view.c                         |    2 +-
 src/nautilus-files-view.h                         |    8 +-
 src/nautilus-toolbar-view-menu.xml                |    4 +-
 src/nautilus-window-slot.c                        |   94 ++++++++++++++++++---
 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 75afe0f..15d8f80 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 ef9dfbf..d320475 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 8b6ef79..179a4f4 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 3031b25..8d58440 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 9c77e65..9958115 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 a0d5ff1..87c2955 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 db6fbd8..c4a0d88 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 88d0cfe..64a1180 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 c3a50bc..0aa0a2f 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 */


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