[gtk+] placessidebar: add starred location item
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] placessidebar: add starred location item
- Date: Sun, 5 Nov 2017 20:08:38 +0000 (UTC)
commit 2421e745b9adaf1b96ad01d9535a89e22775b110
Author: Alexandru Pandelea <alexandru pandelea gmail com>
Date: Thu Jul 20 16:29:42 2017 +0100
placessidebar: add starred location item
Add an item for showing all files marked as favorite. This item will
open all files that have the nao:predefined-tag-favorite tag
https://bugzilla.gnome.org/show_bug.cgi?id=785176
gtk/gtkplacessidebar.c | 113 +++++++++++++++++++++++++++++++++++++++++
gtk/gtkplacessidebar.h | 5 ++
gtk/gtkplacessidebarprivate.h | 1 +
3 files changed, 119 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index 21c2ad3..016436b 100644
--- a/gtk/gtkplacessidebar.c
+++ b/gtk/gtkplacessidebar.c
@@ -186,6 +186,7 @@ struct _GtkPlacesSidebar {
guint show_enter_location : 1;
guint show_other_locations : 1;
guint show_trash : 1;
+ guint show_starred_location : 1;
guint local_only : 1;
guint populate_all : 1;
};
@@ -218,6 +219,8 @@ struct _GtkPlacesSidebarClass {
void (* show_other_locations_with_flags) (GtkPlacesSidebar *sidebar,
GtkPlacesOpenFlags open_flags);
+ void (* show_starred_location) (GtkPlacesSidebar *sidebar);
+
void (* mount) (GtkPlacesSidebar *sidebar,
GMountOperation *mount_operation);
void (* unmount) (GtkPlacesSidebar *sidebar,
@@ -233,6 +236,7 @@ enum {
DRAG_ACTION_ASK,
DRAG_PERFORM_DROP,
SHOW_OTHER_LOCATIONS_WITH_FLAGS,
+ SHOW_STARRED_LOCATION,
MOUNT,
UNMOUNT,
LAST_SIGNAL
@@ -245,6 +249,7 @@ enum {
PROP_SHOW_DESKTOP,
PROP_SHOW_ENTER_LOCATION,
PROP_SHOW_TRASH,
+ PROP_SHOW_STARRED_LOCATION,
PROP_LOCAL_ONLY,
PROP_SHOW_OTHER_LOCATIONS,
PROP_POPULATE_ALL,
@@ -353,6 +358,15 @@ emit_show_other_locations_with_flags (GtkPlacesSidebar *sidebar,
}
static void
+emit_show_starred_location (GtkPlacesSidebar *sidebar,
+ GtkPlacesOpenFlags open_flags)
+{
+ g_signal_emit (sidebar, places_sidebar_signals[SHOW_STARRED_LOCATION], 0,
+ open_flags);
+}
+
+
+static void
emit_mount_operation (GtkPlacesSidebar *sidebar,
GMountOperation *mount_op)
{
@@ -1017,6 +1031,17 @@ update_places (GtkPlacesSidebar *sidebar)
g_object_unref (start_icon);
}
+ if (sidebar->show_starred_location)
+ {
+ start_icon = g_themed_icon_new_with_default_fallbacks ("starred-symbolic");
+ add_place (sidebar, PLACES_STARRED_LOCATION,
+ SECTION_COMPUTER,
+ _("Starred"), start_icon, NULL, "favorites:///",
+ NULL, NULL, NULL, NULL, 0,
+ _("Favorite files"));
+ g_object_unref (start_icon);
+ }
+
/* home folder */
home_uri = get_home_directory_uri ();
start_icon = g_themed_icon_new_with_default_fallbacks (ICON_NAME_HOME);
@@ -1506,6 +1531,12 @@ check_valid_drop_target (GtkPlacesSidebar *sidebar,
"uri", &uri,
NULL);
+ if (place_type == PLACES_STARRED_LOCATION)
+ {
+ g_free (uri);
+ return FALSE;
+ }
+
if (place_type == PLACES_CONNECT_TO_SERVER)
{
g_free (uri);
@@ -2453,6 +2484,10 @@ open_row (GtkSidebarRow *row,
{
emit_show_other_locations_with_flags (sidebar, open_flags);
}
+ else if (place_type == PLACES_STARRED_LOCATION)
+ {
+ emit_show_starred_location (sidebar, open_flags);
+ }
else if (uri != NULL)
{
open_uri (sidebar, uri, open_flags);
@@ -4130,6 +4165,10 @@ gtk_places_sidebar_set_property (GObject *obj,
gtk_places_sidebar_set_show_trash (sidebar, g_value_get_boolean (value));
break;
+ case PROP_SHOW_STARRED_LOCATION:
+ gtk_places_sidebar_set_show_starred_location (sidebar, g_value_get_boolean (value));
+ break;
+
case PROP_LOCAL_ONLY:
gtk_places_sidebar_set_local_only (sidebar, g_value_get_boolean (value));
break;
@@ -4186,6 +4225,10 @@ gtk_places_sidebar_get_property (GObject *obj,
g_value_set_boolean (value, gtk_places_sidebar_get_show_trash (sidebar));
break;
+ case PROP_SHOW_STARRED_LOCATION:
+ g_value_set_boolean (value, gtk_places_sidebar_get_show_starred_location (sidebar));
+ break;
+
case PROP_LOCAL_ONLY:
g_value_set_boolean (value, gtk_places_sidebar_get_local_only (sidebar));
break;
@@ -4576,6 +4619,26 @@ gtk_places_sidebar_class_init (GtkPlacesSidebarClass *class)
1,
G_TYPE_MOUNT_OPERATION);
+ /**
+ * GtkPlacesSidebar::show-starred-location:
+ * @sidebar: the object which received the signal.
+ *
+ * The places sidebar emits this signal when it needs the calling
+ * application to present a way to show the starred files. In GNOME,
+ * starred files are implemented by setting the nao:predefined-tag-favorite
+ * tag in the tracker database.
+ *
+ * Since: 3.22.26
+ */
+ places_sidebar_signals [SHOW_STARRED_LOCATION] =
+ g_signal_new (I_("show-starred-location"),
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GtkPlacesSidebarClass, show_starred_location),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 1,
+ GTK_TYPE_PLACES_OPEN_FLAGS);
properties[PROP_LOCATION] =
g_param_spec_object ("location",
@@ -4626,6 +4689,13 @@ gtk_places_sidebar_class_init (GtkPlacesSidebarClass *class)
P_("Whether the sidebar includes an item to show external locations"),
FALSE,
G_PARAM_READWRITE);
+ properties[PROP_SHOW_STARRED_LOCATION] =
+ g_param_spec_boolean ("show-starred-location",
+ P_("Show 'Starred Location'"),
+ P_("Whether the sidebar includes an item to show starred files"),
+ FALSE,
+ G_PARAM_READWRITE);
+
/**
* GtkPlacesSidebar:populate-all:
@@ -5332,3 +5402,46 @@ gtk_places_sidebar_set_drop_targets_visible (GtkPlacesSidebar *sidebar,
}
}
}
+
+/**
+ * gtk_places_sidebar_set_show_starred_location:
+ * @sidebar: a places sidebar
+ * @show_starred_location: whether to show an item for Starred files
+ *
+ * If you enable this, you should connect to the
+ * #GtkPlacesSidebar::show-starred-location signal.
+ *
+ * Since: 3.22.26
+ */
+void
+gtk_places_sidebar_set_show_starred_location (GtkPlacesSidebar *sidebar,
+ gboolean show_starred_location)
+{
+ g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar));
+
+ show_starred_location = !!show_starred_location;
+ if (sidebar->show_starred_location != show_starred_location)
+ {
+ sidebar->show_starred_location = show_starred_location;
+ update_places (sidebar);
+ g_object_notify_by_pspec (G_OBJECT (sidebar), properties[PROP_SHOW_STARRED_LOCATION]);
+ }
+}
+
+/**
+ * gtk_places_sidebar_get_show_starred_location:
+ * @sidebar: a places sidebar
+ *
+ * Returns the value previously set with gtk_places_sidebar_set_show_starred_location()
+ *
+ * Returns: %TRUE if the sidebar will display a Starred item.
+ *
+ * Since: 3.22.26
+ */
+gboolean
+gtk_places_sidebar_get_show_starred_location (GtkPlacesSidebar *sidebar)
+{
+ g_return_val_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar), FALSE);
+
+ return sidebar->show_starred_location;
+}
diff --git a/gtk/gtkplacessidebar.h b/gtk/gtkplacessidebar.h
index 482cad8..2104d7d 100644
--- a/gtk/gtkplacessidebar.h
+++ b/gtk/gtkplacessidebar.h
@@ -145,6 +145,11 @@ void gtk_places_sidebar_set_show_other_locations (GtkPlacesSideb
GDK_AVAILABLE_IN_3_18
gboolean gtk_places_sidebar_get_show_other_locations (GtkPlacesSidebar *sidebar);
+GDK_AVAILABLE_IN_3_22
+void gtk_places_sidebar_set_show_starred_location (GtkPlacesSidebar *sidebar,
+ gboolean
show_starred_location);
+GDK_AVAILABLE_IN_3_22
+gboolean gtk_places_sidebar_get_show_starred_location (GtkPlacesSidebar *sidebar);
G_END_DECLS
#endif /* __GTK_PLACES_SIDEBAR_H__ */
diff --git a/gtk/gtkplacessidebarprivate.h b/gtk/gtkplacessidebarprivate.h
index aee1e18..c3f389e 100644
--- a/gtk/gtkplacessidebarprivate.h
+++ b/gtk/gtkplacessidebarprivate.h
@@ -49,6 +49,7 @@ typedef enum {
PLACES_DROP_FEEDBACK,
PLACES_BOOKMARK_PLACEHOLDER,
PLACES_OTHER_LOCATIONS,
+ PLACES_STARRED_LOCATION,
N_PLACES
} GtkPlacesSidebarPlaceType;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]