summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Soriano <csoriano@gnome.org>2016-11-14 14:48:30 +0100
committerCarlos Soriano <csoriano@gnome.org>2016-11-23 13:02:29 +0100
commit88cee3926a95150099f479cc16487ba01d6c8520 (patch)
tree9d54fb07fad793a75fb40558a256644c419634d1
parentd4323bd2be071b795552610245219a6a47cafb78 (diff)
downloadnautilus-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.c15
-rw-r--r--src/nautilus-files-view.c29
-rw-r--r--src/nautilus-files-view.h12
-rw-r--r--src/nautilus-list-view-private.h2
-rw-r--r--src/nautilus-list-view.c14
-rw-r--r--src/nautilus-places-view.c31
-rw-r--r--src/nautilus-view.c49
-rw-r--r--src/nautilus-view.h18
-rw-r--r--src/nautilus-window-slot.c29
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 *