[nautilus/wip/gbsneto/view-menu] view: add ::icon property



commit 7f94073595684884436f4758e071f70e7b05de24
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Tue Aug 11 12:33:39 2015 -0300

    view: add ::icon property
    
    Each NautilusView implementation has a different
    GIcon that represents it. Currently we are relying
    on string comparations to know which icon to use for
    the view.
    
    Fix that by adding a GIcon property to the view.

 src/nautilus-canvas-view.c |   14 ++++++++++++++
 src/nautilus-empty-view.c  |    7 +++++++
 src/nautilus-list-view.c   |   13 +++++++++++++
 src/nautilus-view.c        |   43 +++++++++++++++++++++++++++++++++++++++++++
 src/nautilus-view.h        |    4 ++++
 5 files changed, 81 insertions(+), 0 deletions(-)
---
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c
index 53e37d9..879d1a6 100644
--- a/src/nautilus-canvas-view.c
+++ b/src/nautilus-canvas-view.c
@@ -105,6 +105,8 @@ struct NautilusCanvasViewDetails
        gboolean supports_manual_layout;
        gboolean supports_scaling;
        gboolean supports_keep_aligned;
+
+        GIcon *icon;
 };
 
 /* Note that the first item in this list is the default sort,
@@ -1834,6 +1836,8 @@ 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_signal_handlers_disconnect_by_func (nautilus_preferences,
@@ -1853,6 +1857,14 @@ nautilus_canvas_view_finalize (GObject *object)
        G_OBJECT_CLASS (nautilus_canvas_view_parent_class)->finalize (object);
 }
 
+static GIcon*
+nautilus_canvas_view_get_icon (NautilusView *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)
 {
@@ -1896,6 +1908,7 @@ nautilus_canvas_view_class_init (NautilusCanvasViewClass *klass)
        nautilus_view_class->get_view_id = nautilus_canvas_view_get_id;
        nautilus_view_class->get_first_visible_file = canvas_view_get_first_visible_file;
        nautilus_view_class->scroll_to_file = canvas_view_scroll_to_file;
+        nautilus_view_class->get_icon = nautilus_canvas_view_get_icon;
 
        properties[PROP_SUPPORTS_AUTO_LAYOUT] =
                g_param_spec_boolean ("supports-auto-layout",
@@ -1937,6 +1950,7 @@ 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_container = create_canvas_container (canvas_view);
 
diff --git a/src/nautilus-empty-view.c b/src/nautilus-empty-view.c
index 9881b84..5ece1c4 100644
--- a/src/nautilus-empty-view.c
+++ b/src/nautilus-empty-view.c
@@ -229,6 +229,12 @@ nautilus_empty_view_get_id (NautilusView *view)
        return NAUTILUS_EMPTY_VIEW_ID;
 }
 
+static GIcon*
+nautilus_empty_view_get_icon (NautilusView *view)
+{
+        return NULL;
+}
+
 static void
 nautilus_empty_view_class_init (NautilusEmptyViewClass *class)
 {
@@ -266,6 +272,7 @@ nautilus_empty_view_class_init (NautilusEmptyViewClass *class)
        nautilus_view_class->get_view_id = nautilus_empty_view_get_id;
        nautilus_view_class->get_first_visible_file = nautilus_empty_view_get_first_visible_file;
        nautilus_view_class->scroll_to_file = nautilus_empty_view_scroll_to_file;
+        nautilus_view_class->get_icon = nautilus_empty_view_get_icon;
 }
 
 static void
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index 20a4882..a6e9a0b 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -97,6 +97,8 @@ struct NautilusListViewDetails {
        gulong clipboard_handler_id;
 
        GQuark last_sort_attr;
+
+        GIcon *icon;
 };
 
 struct SelectionForeachData {
@@ -3240,6 +3242,14 @@ nautilus_list_view_get_id (NautilusView *view)
        return NAUTILUS_LIST_VIEW_ID;
 }
 
+static GIcon*
+nautilus_list_view_get_icon (NautilusView *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)
 {
@@ -3277,6 +3287,7 @@ nautilus_list_view_class_init (NautilusListViewClass *class)
        nautilus_view_class->get_view_id = nautilus_list_view_get_id;
        nautilus_view_class->get_first_visible_file = nautilus_list_view_get_first_visible_file;
        nautilus_view_class->scroll_to_file = list_view_scroll_to_file;
+        nautilus_view_class->get_icon = nautilus_list_view_get_icon;
 }
 
 static void
@@ -3285,6 +3296,8 @@ nautilus_list_view_init (NautilusListView *list_view)
        GActionGroup *view_action_group;
        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-view.c b/src/nautilus-view.c
index 073bacc..ecdcb60 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -141,6 +141,7 @@ enum {
 enum {
        PROP_WINDOW_SLOT = 1,
        PROP_SUPPORTS_ZOOMING,
+        PROP_ICON,
        NUM_PROPERTIES
 };
 
@@ -593,6 +594,22 @@ nautilus_view_using_manual_layout (NautilusView  *view)
 }
 
 /**
+ * nautilus_view_get_icon:
+ * @view: a #NautilusView
+ *
+ * Retrieves the #GIcon that represents @view.
+ *
+ * Returns: (transfer none): the #Gicon that represents @view
+ */
+GIcon*
+nautilus_view_get_icon (NautilusView *view)
+{
+        g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL);
+
+        return NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_icon (view);
+}
+
+/**
  * nautilus_view_can_rename_file
  *
  * Determine whether a file can be renamed.
@@ -7424,6 +7441,25 @@ real_get_selected_icon_locations (NautilusView *view)
 }
 
 static void
+nautilus_view_get_property (GObject    *object,
+                            guint       prop_id,
+                            GValue     *value,
+                            GParamSpec *pspec)
+{
+        NautilusView *view = NAUTILUS_VIEW (object);
+
+        switch (prop_id) {
+        case PROP_ICON:
+                g_value_set_object (value, nautilus_view_get_icon (view));
+                break;
+
+        default:
+                g_assert_not_reached ();
+
+        }
+}
+
+static void
 nautilus_view_set_property (GObject         *object,
                            guint            prop_id,
                            const GValue    *value,
@@ -7564,6 +7600,7 @@ nautilus_view_class_init (NautilusViewClass *klass)
        oclass = G_OBJECT_CLASS (klass);
 
        oclass->finalize = nautilus_view_finalize;
+        oclass->get_property = nautilus_view_get_property;
        oclass->set_property = nautilus_view_set_property;
 
        widget_class->destroy = nautilus_view_destroy;
@@ -7671,6 +7708,12 @@ nautilus_view_class_init (NautilusViewClass *klass)
                                      TRUE,
                                      G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
                                      G_PARAM_STATIC_STRINGS);
+        properties[PROP_ICON] =
+                g_param_spec_object ("icon",
+                                     "Icon",
+                                     "The icon that represents the view",
+                                     G_TYPE_ICON,
+                                     G_PARAM_READABLE);
 
        g_object_class_install_properties (oclass, NUM_PROPERTIES, properties);
 }
diff --git a/src/nautilus-view.h b/src/nautilus-view.h
index 93fbc89..b30210d 100644
--- a/src/nautilus-view.h
+++ b/src/nautilus-view.h
@@ -276,6 +276,8 @@ struct NautilusViewClass {
                                                   const char            *uri);
 
        NautilusWindow * (*get_window)            (NautilusView *view);
+
+        GIcon *        (* get_icon)               (NautilusView *view);
 };
 
 /* GObject support */
@@ -390,4 +392,6 @@ GActionGroup *    nautilus_view_get_action_group           (NautilusView      *v
 GtkWidget*        nautilus_view_get_content_widget         (NautilusView      *view);
 gboolean          nautilus_view_is_search                  (NautilusView      *view);
 
+GIcon*            nautilus_view_get_icon                   (NautilusView      *view);
+
 #endif /* NAUTILUS_VIEW_H */


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