diff options
author | Carlos Soriano <csoriano@gnome.org> | 2016-11-14 14:48:30 +0100 |
---|---|---|
committer | Carlos Soriano <csoriano@gnome.org> | 2016-11-23 13:02:29 +0100 |
commit | 88cee3926a95150099f479cc16487ba01d6c8520 (patch) | |
tree | 9d54fb07fad793a75fb40558a256644c419634d1 | |
parent | d4323bd2be071b795552610245219a6a47cafb78 (diff) | |
download | nautilus-88cee3926a95150099f479cc16487ba01d6c8520.tar.gz |
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
-rw-r--r-- | src/nautilus-canvas-view.c | 15 | ||||
-rw-r--r-- | src/nautilus-files-view.c | 29 | ||||
-rw-r--r-- | src/nautilus-files-view.h | 12 | ||||
-rw-r--r-- | src/nautilus-list-view-private.h | 2 | ||||
-rw-r--r-- | src/nautilus-list-view.c | 14 | ||||
-rw-r--r-- | src/nautilus-places-view.c | 31 | ||||
-rw-r--r-- | src/nautilus-view.c | 49 | ||||
-rw-r--r-- | src/nautilus-view.h | 18 | ||||
-rw-r--r-- | 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 0e277ef4b..7d7d6eb24 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 33fb283e5..6f0c2d2aa 100644 --- a/src/nautilus-files-view.c +++ b/src/nautilus-files-view.c @@ -644,22 +644,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 * @@ -843,9 +827,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 * @@ -8501,12 +8485,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))); @@ -8910,7 +8888,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; @@ -8920,6 +8897,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 @@ -9042,7 +9020,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 888613fe1..70dcb2de8 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 7fbe00b89..e2a09a1e6 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 f4b1fb0ae..36656c5c6 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 151e424e4..981d2de15 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 a1930166f..7b3a3c973 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 4c76cd0cc..0f8170764 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 b53a3378b..e8143b63e 100644 --- a/src/nautilus-window-slot.c +++ b/src/nautilus-window-slot.c @@ -205,7 +205,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); } @@ -221,7 +221,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); } } @@ -261,7 +261,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 { @@ -336,7 +336,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); } } @@ -842,7 +842,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); @@ -3076,13 +3076,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 * |