[nautilus/gnome-3-22] view: make icon getter static



commit b953d31eb3ebc2b175d256fe01e3575216076c6c
Author: Carlos Soriano <csoriano gnome org>
Date:   Mon Nov 14 14:48:30 2016 +0100

    view: make icon getter static
    
    We were relying on the current view to return the icon to put in the
    toolbar, however that requires a view instance and also we cannot
    control really what icon we want to show in which circumstances.
    
    We want more control about that, so we need a single entry point where
    we can get the icon to show depending on the known view types we
    have.
    
    So this patch converts the view property to a static method.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=771075

 src/nautilus-canvas-view.c       |   15 +-----------
 src/nautilus-files-view.c        |   29 ++--------------------
 src/nautilus-files-view.h        |   12 +-------
 src/nautilus-list-view-private.h |    2 -
 src/nautilus-list-view.c         |   14 +----------
 src/nautilus-places-view.c       |   31 +++++------------------
 src/nautilus-view.c              |   49 +++++++++++++++++++++++++------------
 src/nautilus-view.h              |   18 +++++++++++---
 src/nautilus-window-slot.c       |   29 ++++++++++++++++------
 9 files changed, 82 insertions(+), 117 deletions(-)
---
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c
index 0e277ef..7d7d6eb 100644
--- a/src/nautilus-canvas-view.c
+++ b/src/nautilus-canvas-view.c
@@ -27,6 +27,7 @@
 #include "nautilus-error-reporting.h"
 #include "nautilus-files-view-dnd.h"
 #include "nautilus-toolbar.h"
+#include "nautilus-view.h"
 
 #include <stdlib.h>
 #include <errno.h>
@@ -106,8 +107,6 @@ struct NautilusCanvasViewDetails
      * Ideally we would connect to a weak reference and do a cancellable.
      */
     gboolean destroyed;
-
-    GIcon *icon;
 };
 
 /* Note that the first item in this list is the default sort,
@@ -1933,8 +1932,6 @@ nautilus_canvas_view_finalize (GObject *object)
 
     canvas_view = NAUTILUS_CANVAS_VIEW (object);
 
-    g_clear_object (&canvas_view->details->icon);
-
     g_free (canvas_view->details);
 
     G_OBJECT_CLASS (nautilus_canvas_view_parent_class)->finalize (object);
@@ -1963,14 +1960,6 @@ nautilus_canvas_view_dispose (GObject *object)
     G_OBJECT_CLASS (nautilus_canvas_view_parent_class)->dispose (object);
 }
 
-static GIcon *
-nautilus_canvas_view_get_icon (NautilusFilesView *view)
-{
-    g_return_val_if_fail (NAUTILUS_IS_CANVAS_VIEW (view), NULL);
-
-    return NAUTILUS_CANVAS_VIEW (view)->details->icon;
-}
-
 static void
 nautilus_canvas_view_class_init (NautilusCanvasViewClass *klass)
 {
@@ -2017,7 +2006,6 @@ nautilus_canvas_view_class_init (NautilusCanvasViewClass *klass)
     nautilus_files_view_class->get_view_id = nautilus_canvas_view_get_id;
     nautilus_files_view_class->get_first_visible_file = canvas_view_get_first_visible_file;
     nautilus_files_view_class->scroll_to_file = canvas_view_scroll_to_file;
-    nautilus_files_view_class->get_icon = nautilus_canvas_view_get_icon;
 
     properties[PROP_SUPPORTS_AUTO_LAYOUT] =
         g_param_spec_boolean ("supports-auto-layout",
@@ -2060,7 +2048,6 @@ nautilus_canvas_view_init (NautilusCanvasView *canvas_view)
 
     canvas_view->details = g_new0 (NautilusCanvasViewDetails, 1);
     canvas_view->details->sort = &sort_criteria[0];
-    canvas_view->details->icon = g_themed_icon_new ("view-grid-symbolic");
     canvas_view->details->destroyed = FALSE;
 
     canvas_container = create_canvas_container (canvas_view);
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index c6eab15..6d32acd 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -643,22 +643,6 @@ nautilus_files_view_using_manual_layout (NautilusFilesView *view)
 }
 
 /**
- * nautilus_files_view_get_icon:
- * @view: a #NautilusView
- *
- * Retrieves the #GIcon that represents @view.
- *
- * Returns: (transfer none): the #Gicon that represents @view
- */
-static GIcon *
-nautilus_files_view_get_icon (NautilusView *view)
-{
-    g_return_val_if_fail (NAUTILUS_IS_FILES_VIEW (view), NULL);
-
-    return NAUTILUS_FILES_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_icon (NAUTILUS_FILES_VIEW (view));
-}
-
-/**
  * nautilus_files_view_get_toolbar_menu_sections:
  * @view: a #NautilusFilesView
  *
@@ -842,9 +826,9 @@ nautilus_files_view_is_searching (NautilusView *view)
 }
 
 guint
-nautilus_files_view_get_view_id (NautilusFilesView *view)
+nautilus_files_view_get_view_id (NautilusView *view)
 {
-    return NAUTILUS_FILES_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_view_id (view);
+    return NAUTILUS_FILES_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_view_id (NAUTILUS_FILES_VIEW (view));
 }
 
 char *
@@ -8490,12 +8474,6 @@ nautilus_files_view_get_property (GObject    *object,
 
     switch (prop_id)
     {
-        case PROP_ICON:
-            {
-                g_value_set_object (value, nautilus_view_get_icon (NAUTILUS_VIEW (view)));
-            }
-            break;
-
         case PROP_IS_LOADING:
             {
                 g_value_set_boolean (value, nautilus_view_is_loading (NAUTILUS_VIEW (view)));
@@ -8899,7 +8877,6 @@ nautilus_files_view_is_loading (NautilusView *view)
 static void
 nautilus_files_view_iface_init (NautilusViewInterface *iface)
 {
-    iface->get_icon = nautilus_files_view_get_icon;
     iface->get_location = nautilus_files_view_get_location;
     iface->set_location = nautilus_files_view_set_location;
     iface->get_selection = nautilus_files_view_get_selection;
@@ -8909,6 +8886,7 @@ nautilus_files_view_iface_init (NautilusViewInterface *iface)
     iface->get_toolbar_menu_sections = nautilus_files_view_get_toolbar_menu_sections;
     iface->is_searching = nautilus_files_view_is_searching;
     iface->is_loading = nautilus_files_view_is_loading;
+    iface->get_view_id = nautilus_files_view_get_view_id;
 }
 
 static void
@@ -9031,7 +9009,6 @@ nautilus_files_view_class_init (NautilusFilesViewClass *klass)
                               G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
                               G_PARAM_STATIC_STRINGS));
 
-    g_object_class_override_property (oclass, PROP_ICON, "icon");
     g_object_class_override_property (oclass, PROP_IS_LOADING, "is-loading");
     g_object_class_override_property (oclass, PROP_IS_SEARCH, "is-searching");
     g_object_class_override_property (oclass, PROP_LOCATION, "location");
diff --git a/src/nautilus-files-view.h b/src/nautilus-files-view.h
index 888613f..70dcb2d 100644
--- a/src/nautilus-files-view.h
+++ b/src/nautilus-files-view.h
@@ -36,16 +36,9 @@ typedef struct NautilusFilesView NautilusFilesView;
 typedef struct NautilusFilesViewClass NautilusFilesViewClass;
 
 #include "nautilus-window.h"
+#include "nautilus-view.h"
 #include "nautilus-window-slot.h"
 
-enum {
-  NAUTILUS_VIEW_GRID_ID,
-  NAUTILUS_VIEW_LIST_ID,
-  NAUTILUS_VIEW_DESKTOP_ID,
-  NAUTILUS_VIEW_EMPTY_ID,
-  NAUTILUS_VIEW_INVALID_ID,
-};
-
 #define NAUTILUS_TYPE_FILES_VIEW nautilus_files_view_get_type()
 #define NAUTILUS_FILES_VIEW(obj)\
         (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_FILES_VIEW, NautilusFilesView))
@@ -322,8 +315,7 @@ void                nautilus_files_view_remove_subdirectory             (Nautilu
 gboolean            nautilus_files_view_is_editable              (NautilusFilesView      *view);
 NautilusWindow *    nautilus_files_view_get_window               (NautilusFilesView      *view);
 
-/* NautilusFilesView methods */
-guint               nautilus_files_view_get_view_id                (NautilusFilesView      *view);
+guint               nautilus_files_view_get_view_id                (NautilusView      *view);
 
 /* file operations */
 char *            nautilus_files_view_get_backing_uri            (NautilusFilesView      *view);
diff --git a/src/nautilus-list-view-private.h b/src/nautilus-list-view-private.h
index 7fbe00b..e2a09a1 100644
--- a/src/nautilus-list-view-private.h
+++ b/src/nautilus-list-view-private.h
@@ -64,7 +64,5 @@ struct NautilusListViewDetails {
   gulong clipboard_handler_id;
 
   GQuark last_sort_attr;
-
-  GIcon *icon;
 };
 
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index f4b1fb0..36656c5 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -31,6 +31,7 @@
 #include "nautilus-files-view-dnd.h"
 #include "nautilus-toolbar.h"
 #include "nautilus-list-view-dnd.h"
+#include "nautilus-view.h"
 
 #include <string.h>
 #include <eel/eel-vfs-extensions.h>
@@ -3295,8 +3296,6 @@ nautilus_list_view_finalize (GObject *object)
         gtk_widget_destroy (list_view->details->column_editor);
     }
 
-    g_clear_object (&list_view->details->icon);
-
     g_free (list_view->details);
 
     G_OBJECT_CLASS (nautilus_list_view_parent_class)->finalize (object);
@@ -3488,14 +3487,6 @@ nautilus_list_view_compute_rename_popover_pointing_to (NautilusFilesView *view)
     return rect;
 }
 
-static GIcon *
-nautilus_list_view_get_icon (NautilusFilesView *view)
-{
-    g_return_val_if_fail (NAUTILUS_IS_LIST_VIEW (view), NULL);
-
-    return NAUTILUS_LIST_VIEW (view)->details->icon;
-}
-
 static void
 nautilus_list_view_class_init (NautilusListViewClass *class)
 {
@@ -3535,7 +3526,6 @@ nautilus_list_view_class_init (NautilusListViewClass *class)
     nautilus_files_view_class->get_first_visible_file = nautilus_list_view_get_first_visible_file;
     nautilus_files_view_class->scroll_to_file = list_view_scroll_to_file;
     nautilus_files_view_class->compute_rename_popover_pointing_to = 
nautilus_list_view_compute_rename_popover_pointing_to;
-    nautilus_files_view_class->get_icon = nautilus_list_view_get_icon;
 }
 
 static void
@@ -3546,8 +3536,6 @@ nautilus_list_view_init (NautilusListView *list_view)
 
     list_view->details = g_new0 (NautilusListViewDetails, 1);
 
-    list_view->details->icon = g_themed_icon_new ("view-list-symbolic");
-
     /* ensure that the zoom level is always set before settings up the tree view columns */
     list_view->details->zoom_level = get_default_zoom_level ();
 
diff --git a/src/nautilus-places-view.c b/src/nautilus-places-view.c
index 151e424..981d2de 100644
--- a/src/nautilus-places-view.c
+++ b/src/nautilus-places-view.c
@@ -26,7 +26,6 @@
 typedef struct
 {
     GFile *location;
-    GIcon *icon;
     NautilusQuery *search_query;
     NautilusToolbarMenuSections *toolbar_menu_sections;
 
@@ -47,7 +46,6 @@ G_DEFINE_TYPE_WITH_CODE (NautilusPlacesView, nautilus_places_view, GTK_TYPE_BOX,
 enum
 {
     PROP_0,
-    PROP_ICON,
     PROP_LOCATION,
     PROP_SEARCH_QUERY,
     PROP_IS_LOADING,
@@ -142,7 +140,6 @@ nautilus_places_view_finalize (GObject *object)
     NautilusPlacesView *self = (NautilusPlacesView *) object;
     NautilusPlacesViewPrivate *priv = nautilus_places_view_get_instance_private (self);
 
-    g_clear_object (&priv->icon);
     g_clear_object (&priv->location);
     g_clear_object (&priv->search_query);
 
@@ -161,12 +158,6 @@ nautilus_places_view_get_property (GObject    *object,
 
     switch (prop_id)
     {
-        case PROP_ICON:
-        {
-            g_value_set_object (value, nautilus_view_get_icon (view));
-        }
-        break;
-
         case PROP_LOCATION:
         {
             g_value_set_object (value, nautilus_view_get_location (view));
@@ -211,16 +202,6 @@ nautilus_places_view_set_property (GObject      *object,
     }
 }
 
-static GIcon *
-nautilus_places_view_get_icon (NautilusView *view)
-{
-    NautilusPlacesViewPrivate *priv;
-
-    priv = nautilus_places_view_get_instance_private (NAUTILUS_PLACES_VIEW (view));
-
-    return priv->icon;
-}
-
 static GFile *
 nautilus_places_view_get_location (NautilusView *view)
 {
@@ -334,10 +315,15 @@ nautilus_places_view_is_searching (NautilusView *view)
     return priv->search_query != NULL;
 }
 
+static guint
+nautilus_places_view_get_view_id (NautilusView *view)
+{
+    return NAUTILUS_VIEW_OTHER_LOCATIONS_ID;
+}
+
 static void
 nautilus_places_view_iface_init (NautilusViewInterface *iface)
 {
-    iface->get_icon = nautilus_places_view_get_icon;
     iface->get_location = nautilus_places_view_get_location;
     iface->set_location = nautilus_places_view_set_location;
     iface->get_selection = nautilus_places_view_get_selection;
@@ -347,6 +333,7 @@ nautilus_places_view_iface_init (NautilusViewInterface *iface)
     iface->get_toolbar_menu_sections = nautilus_places_view_get_toolbar_menu_sections;
     iface->is_loading = nautilus_places_view_is_loading;
     iface->is_searching = nautilus_places_view_is_searching;
+    iface->get_view_id = nautilus_places_view_get_view_id;
 }
 
 static void
@@ -358,7 +345,6 @@ nautilus_places_view_class_init (NautilusPlacesViewClass *klass)
     object_class->get_property = nautilus_places_view_get_property;
     object_class->set_property = nautilus_places_view_set_property;
 
-    g_object_class_override_property (object_class, PROP_ICON, "icon");
     g_object_class_override_property (object_class, PROP_IS_LOADING, "is-loading");
     g_object_class_override_property (object_class, PROP_IS_SEARCHING, "is-searching");
     g_object_class_override_property (object_class, PROP_LOCATION, "location");
@@ -372,9 +358,6 @@ nautilus_places_view_init (NautilusPlacesView *self)
 
     priv = nautilus_places_view_get_instance_private (self);
 
-    /* Icon */
-    priv->icon = g_themed_icon_new_with_default_fallbacks ("view-list-symbolic");
-
     /* Location */
     priv->location = g_file_new_for_uri ("other-locations:///");
 
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index a193016..7b3a3c9 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -26,18 +26,6 @@ static void
 nautilus_view_default_init (NautilusViewInterface *iface)
 {
     /**
-     * NautilusView::icon:
-     *
-     * The #GIcon that represents the view, or %NULL.
-     */
-    g_object_interface_install_property (iface,
-                                         g_param_spec_object ("icon",
-                                                              "Icon that represents the view",
-                                                              "The icon that represents the view",
-                                                              G_TYPE_ICON,
-                                                              G_PARAM_READABLE));
-
-    /**
      * NautilusView::is-loading:
      *
      * %TRUE if the view is loading the location, %FALSE otherwise.
@@ -92,14 +80,43 @@ nautilus_view_default_init (NautilusViewInterface *iface)
  *
  * Retrieves the #GIcon that represents @view.
  *
- * Returns: (transfer none): a #GIcon
+ * Returns: (transfer full): a #GIcon
  */
 GIcon *
-nautilus_view_get_icon (NautilusView *view)
+nautilus_view_get_icon (guint view_id)
+{
+    if (view_id == NAUTILUS_VIEW_GRID_ID)
+    {
+        return g_themed_icon_new ("view-grid-symbolic");
+    }
+    else if (view_id == NAUTILUS_VIEW_LIST_ID)
+    {
+        return g_themed_icon_new ("view-list-symbolic");
+    }
+    else if (view_id == NAUTILUS_VIEW_OTHER_LOCATIONS_ID)
+    {
+        return g_themed_icon_new_with_default_fallbacks ("view-list-symbolic");
+    }
+    else
+    {
+        return NULL;
+    }
+}
+
+/**
+ * nautilus_view_get_view_id:
+ * @view: a #NautilusView
+ *
+ * Retrieves the view id that represents the @view type.
+ *
+ * Returns: a guint representing the view type
+ */
+guint
+nautilus_view_get_view_id (NautilusView *view)
 {
-    g_return_val_if_fail (NAUTILUS_VIEW_GET_IFACE (view)->get_icon, NULL);
+    g_return_val_if_fail (NAUTILUS_VIEW_GET_IFACE (view)->get_view_id, NAUTILUS_VIEW_INVALID_ID);
 
-    return NAUTILUS_VIEW_GET_IFACE (view)->get_icon (view);
+    return NAUTILUS_VIEW_GET_IFACE (view)->get_view_id (view);
 }
 
 /**
diff --git a/src/nautilus-view.h b/src/nautilus-view.h
index 4c76cd0..0f81707 100644
--- a/src/nautilus-view.h
+++ b/src/nautilus-view.h
@@ -26,6 +26,16 @@
 #include "nautilus-query.h"
 #include "nautilus-toolbar-menu-sections.h"
 
+enum
+{
+    NAUTILUS_VIEW_GRID_ID,
+    NAUTILUS_VIEW_LIST_ID,
+    NAUTILUS_VIEW_DESKTOP_ID,
+    NAUTILUS_VIEW_EMPTY_ID,
+    NAUTILUS_VIEW_OTHER_LOCATIONS_ID,
+    NAUTILUS_VIEW_INVALID_ID,
+};
+
 G_BEGIN_DECLS
 
 #define NAUTILUS_TYPE_VIEW (nautilus_view_get_type ())
@@ -36,9 +46,7 @@ struct _NautilusViewInterface
 {
         GTypeInterface parent;
 
-        /* The icon that represents the view */
-        GIcon*                          (*get_icon)                  (NautilusView         *view);
-
+        guint                           (*get_view_id)               (NautilusView         *view);
         /*
          * Returns the menu sections that should be shown in the toolbar menu
          * when this view is active. Implementations must not return %NULL
@@ -67,7 +75,9 @@ struct _NautilusViewInterface
         gboolean                        (*is_searching)              (NautilusView         *view);
 };
 
-GIcon *                        nautilus_view_get_icon                  (NautilusView         *view);
+GIcon *                        nautilus_view_get_icon                  (guint                 view_id);
+
+guint                          nautilus_view_get_view_id               (NautilusView         *view);
 
 NautilusToolbarMenuSections *  nautilus_view_get_toolbar_menu_sections (NautilusView         *view);
 
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index ba278e7..c680ba3 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -200,7 +200,7 @@ real_get_view_for_location (NautilusWindowSlot *self,
          * which is not the one we are interested in */
         if (priv->view_mode_before_search == NAUTILUS_VIEW_INVALID_ID)
         {
-            priv->view_mode_before_search = nautilus_files_view_get_view_id (NAUTILUS_FILES_VIEW 
(priv->content_view));
+            priv->view_mode_before_search = nautilus_files_view_get_view_id (priv->content_view);
         }
         view_id = g_settings_get_enum (nautilus_preferences, NAUTILUS_PREFERENCES_SEARCH_VIEW);
     }
@@ -216,7 +216,7 @@ real_get_view_for_location (NautilusWindowSlot *self,
         }
         else
         {
-            view_id = nautilus_files_view_get_view_id (NAUTILUS_FILES_VIEW (priv->content_view));
+            view_id = nautilus_files_view_get_view_id (priv->content_view);
         }
     }
 
@@ -256,7 +256,7 @@ nautilus_window_slot_content_view_matches (NautilusWindowSlot *self,
 
     if (id != NAUTILUS_VIEW_INVALID_ID && NAUTILUS_IS_FILES_VIEW (priv->content_view))
     {
-        return nautilus_files_view_get_view_id (NAUTILUS_FILES_VIEW (priv->content_view)) == id;
+        return nautilus_files_view_get_view_id (priv->content_view) == id;
     }
     else
     {
@@ -331,7 +331,7 @@ nautilus_window_slot_sync_actions (NautilusWindowSlot *self)
     action = g_action_map_lookup_action (G_ACTION_MAP (priv->slot_action_group), "files-view-mode");
     if (g_action_get_enabled (action))
     {
-        variant = g_variant_new_uint32 (nautilus_files_view_get_view_id (NAUTILUS_FILES_VIEW 
(nautilus_window_slot_get_current_view (self))));
+        variant = g_variant_new_uint32 (nautilus_files_view_get_view_id 
(nautilus_window_slot_get_current_view (self)));
         g_action_change_state (action, variant);
     }
 }
@@ -837,7 +837,7 @@ action_files_view_mode_toggle (GSimpleAction *action,
         return;
     }
 
-    current_view_id = nautilus_files_view_get_view_id (NAUTILUS_FILES_VIEW (priv->content_view));
+    current_view_id = nautilus_files_view_get_view_id (priv->content_view);
     if (current_view_id == NAUTILUS_VIEW_LIST_ID)
     {
         change_files_view_mode (self, NAUTILUS_VIEW_GRID_ID);
@@ -3038,13 +3038,26 @@ nautilus_window_slot_new (NautilusWindow *window)
 GIcon *
 nautilus_window_slot_get_icon (NautilusWindowSlot *self)
 {
-    NautilusView *view;
+    guint current_view_id;
+    NautilusWindowSlotPrivate *priv;
 
     g_return_val_if_fail (NAUTILUS_IS_WINDOW_SLOT (self), NULL);
 
-    view = nautilus_window_slot_get_current_view (self);
+    priv = nautilus_window_slot_get_instance_private (self);
+    if (priv->content_view == NULL)
+    {
+        return NULL;
+    }
 
-    return view ? nautilus_view_get_icon (view) : NULL;
+    current_view_id = nautilus_view_get_view_id (NAUTILUS_VIEW (priv->content_view));
+    if (current_view_id != NAUTILUS_VIEW_INVALID_ID)
+    {
+        return nautilus_view_get_icon (current_view_id);
+    }
+    else
+    {
+        return NULL;
+    }
 }
 
 NautilusToolbarMenuSections *


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