diff options
-rw-r--r-- | gtk/gtkplacessidebar.c | 21 | ||||
-rw-r--r-- | gtk/gtksidebarrow.c | 27 | ||||
-rw-r--r-- | gtk/gtksidebarrowprivate.h | 2 |
3 files changed, 38 insertions, 12 deletions
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c index 3de9e2cd66..ba8d3c0241 100644 --- a/gtk/gtkplacessidebar.c +++ b/gtk/gtkplacessidebar.c @@ -132,6 +132,7 @@ struct _GtkPlacesSidebar { gchar *rename_uri; gulong trash_monitor_changed_id; + GtkWidget *trash_row; /* DND */ GList *drag_list; /* list of GFile */ @@ -879,6 +880,14 @@ is_external_volume (GVolume *volume) } static void +update_trash_icon (GtkPlacesSidebar *sidebar) +{ + if (sidebar->trash_row) + gtk_sidebar_row_set_icon (GTK_SIDEBAR_ROW (sidebar->trash_row), + _gtk_trash_monitor_get_icon (sidebar->trash_monitor)); +} + +static void update_places (GtkPlacesSidebar *sidebar) { GList *mounts, *l, *ll; @@ -980,11 +989,11 @@ update_places (GtkPlacesSidebar *sidebar) { mount_uri = "trash:///"; /* No need to strdup */ icon = _gtk_trash_monitor_get_icon (sidebar->trash_monitor); - add_place (sidebar, PLACES_BUILT_IN, - SECTION_COMPUTER, - _("Trash"), icon, mount_uri, - NULL, NULL, NULL, 0, - _("Open the trash")); + sidebar->trash_row = add_place (sidebar, PLACES_BUILT_IN, + SECTION_COMPUTER, + _("Trash"), icon, mount_uri, + NULL, NULL, NULL, 0, + _("Open the trash")); g_object_unref (icon); } @@ -3773,7 +3782,7 @@ gtk_places_sidebar_init (GtkPlacesSidebar *sidebar) sidebar->trash_monitor = _gtk_trash_monitor_get (); sidebar->trash_monitor_changed_id = g_signal_connect_swapped (sidebar->trash_monitor, "trash-state-changed", - G_CALLBACK (update_places), sidebar); + G_CALLBACK (update_trash_icon), sidebar); gtk_widget_set_size_request (GTK_WIDGET (sidebar), 140, 280); diff --git a/gtk/gtksidebarrow.c b/gtk/gtksidebarrow.c index a095bd2655..3df5b026dd 100644 --- a/gtk/gtksidebarrow.c +++ b/gtk/gtksidebarrow.c @@ -156,11 +156,7 @@ gtk_sidebar_row_set_property (GObject *object, break; case PROP_ICON: - g_set_object (&self->icon, g_value_get_object (value)); - if (self->icon != NULL) - gtk_image_set_from_gicon (GTK_IMAGE (self->icon_widget), self->icon, GTK_ICON_SIZE_MENU); - else - gtk_image_clear (GTK_IMAGE (self->icon_widget)); + gtk_sidebar_row_set_icon (self, g_value_get_object (value)); break; case PROP_LABEL: @@ -239,7 +235,7 @@ gtk_sidebar_row_set_property (GObject *object, (GtkCallback) gtk_widget_destroy, NULL); - context = gtk_widget_get_style_context (GTK_WIDGET (self)); + context = gtk_widget_get_style_context (GTK_WIDGET (self)); gtk_style_context_add_class (context, "sidebar-placeholder-row"); } break; @@ -283,6 +279,25 @@ gtk_sidebar_row_hide (GtkSidebarRow *self, gtk_revealer_set_transition_duration (GTK_REVEALER (self->revealer), transition_duration); } +void +gtk_sidebar_row_set_icon (GtkSidebarRow *self, + GIcon *icon) +{ + g_return_if_fail (GTK_IS_SIDEBAR_ROW (self)); + + if (self->icon != icon) + { + g_set_object (&self->icon, icon); + if (self->icon != NULL) + gtk_image_set_from_gicon (GTK_IMAGE (self->icon_widget), self->icon, + GTK_ICON_SIZE_MENU); + else + gtk_image_clear (GTK_IMAGE (self->icon_widget)); + + g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_ICON]); + } +} + static void gtk_sidebar_row_finalize (GObject *object) { diff --git a/gtk/gtksidebarrowprivate.h b/gtk/gtksidebarrowprivate.h index 8042757c99..d13dc6d830 100644 --- a/gtk/gtksidebarrowprivate.h +++ b/gtk/gtksidebarrowprivate.h @@ -50,6 +50,8 @@ void gtk_sidebar_row_reveal (GtkSidebarRow *self); GtkWidget *gtk_sidebar_row_get_eject_button (GtkSidebarRow *self); GtkWidget *gtk_sidebar_row_get_event_box (GtkSidebarRow *self); +void gtk_sidebar_row_set_icon (GtkSidebarRow *self, + GIcon *icon); G_END_DECLS |