[nautilus/wip/gbsneto/view-menu] view: add ::icon property
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/wip/gbsneto/view-menu] view: add ::icon property
- Date: Tue, 11 Aug 2015 15:36:18 +0000 (UTC)
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]