static void photos_selection_toolbar_favorite_clicked (GtkButton *button, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); PhotosSelectionToolbarPrivate *priv = self->priv; GList *selection; GList *l; if (priv->inside_refresh) return; selection = photos_selection_controller_get_selection (priv->sel_cntrlr); for (l = selection; l != NULL; l = l->next) { const gchar *urn = (gchar *) l->data; PhotosBaseItem *item; gboolean favorite; item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (priv->item_mngr, urn)); favorite = photos_base_item_is_favorite (item); photos_base_item_set_favorite (item, !favorite); } photos_selection_controller_set_selection_mode (priv->sel_cntrlr, FALSE); }
static void photos_preview_nav_buttons_active_changed (PhotosPreviewNavButtons *self, GObject *object) { PhotosBaseItem *item = PHOTOS_BASE_ITEM (object); gboolean favorite; if (object == NULL) return; favorite = photos_base_item_is_favorite (item); photos_preview_nav_buttons_update_favorite (self, favorite); }
static void photos_preview_nav_buttons_favorite_clicked (PhotosPreviewNavButtons *self) { PhotosPreviewNavButtonsPrivate *priv = self->priv; PhotosBaseItem *item; gboolean favorite; item = PHOTOS_BASE_ITEM (photos_base_manager_get_active_object (priv->item_mngr)); favorite = photos_base_item_is_favorite (item); photos_base_item_set_favorite (item, !favorite); photos_preview_nav_buttons_update_favorite (self, !favorite); }
static void photos_selection_toolbar_favorite_clicked (GtkButton *button, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); GList *items = NULL; GList *selection; GList *l; if (self->inside_refresh) return; selection = photos_selection_controller_get_selection (self->sel_cntrlr); for (l = selection; l != NULL; l = l->next) { const gchar *urn = (gchar *) l->data; PhotosBaseItem *item; item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (self->item_mngr, urn)); items = g_list_prepend (items, g_object_ref (item)); } /* photos_base_item_set_favorite will emit info-updated signal while * looping: there is a chance that the selection will get modified * while we are iterating over it. To avoid this we make a copy of * the selection and work on it. */ for (l = items; l != NULL; l = l->next) { PhotosBaseItem *item = PHOTOS_BASE_ITEM (l->data); gboolean favorite; favorite = photos_base_item_is_favorite (item); photos_base_item_set_favorite (item, !favorite); } photos_selection_controller_set_selection_mode (self->sel_cntrlr, FALSE); g_list_free_full (items, g_object_unref); }
static void photos_selection_toolbar_set_item_visibility (PhotosSelectionToolbar *self) { GList *apps = NULL; GList *l; GList *selection; GtkWidget *image; gboolean has_selection; gboolean show_collection; gboolean show_favorite; gchar *favorite_label; gchar *open_label; guint fav_count = 0; guint sel_length = 0; self->inside_refresh = TRUE; selection = photos_selection_controller_get_selection (self->sel_cntrlr); has_selection = selection != NULL; show_collection = has_selection; show_favorite = has_selection; for (l = selection; l != NULL; l = g_list_next (l)) { PhotosBaseItem *item; const gchar *default_app_name; const gchar *urn = (gchar *) l->data; item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (self->item_mngr, urn)); show_collection = show_collection && !photos_base_item_is_collection (item); show_favorite = show_favorite && !photos_base_item_is_collection (item); if (photos_base_item_is_favorite (item)) fav_count++; default_app_name = photos_base_item_get_default_app_name (item); if (default_app_name != NULL && g_list_find_custom (apps, default_app_name, (GCompareFunc) g_strcmp0) == NULL) apps = g_list_prepend (apps, (gpointer) g_strdup (default_app_name)); sel_length++; } show_favorite = show_favorite && ((fav_count == 0) || (fav_count == sel_length)); if (apps != NULL && apps->next == NULL) /* length == 1 */ /* Translators: this is the Open action in a context menu */ open_label = g_strdup_printf (_("Open with %s"), (gchar *) apps->data); else /* Translators: this is the Open action in a context menu */ open_label = g_strdup (_("Open")); gtk_button_set_label (GTK_BUTTON (self->toolbar_open), open_label); g_free (open_label); g_list_free_full (apps, g_free); if (show_favorite && fav_count == sel_length) { favorite_label = g_strdup (_("Remove from favorites")); image = gtk_image_new_from_icon_name (PHOTOS_ICON_FAVORITE_SYMBOLIC, GTK_ICON_SIZE_BUTTON); } else { favorite_label = g_strdup (_("Add to favorites")); image = gtk_image_new_from_icon_name (PHOTOS_ICON_NOT_FAVORITE_SYMBOLIC, GTK_ICON_SIZE_BUTTON); } gtk_button_set_image (GTK_BUTTON (self->toolbar_favorite), image); gtk_widget_set_tooltip_text (self->toolbar_favorite, favorite_label); g_free (favorite_label); gtk_widget_set_sensitive (self->toolbar_collection, show_collection); gtk_widget_set_sensitive (self->toolbar_favorite, show_favorite); self->inside_refresh = FALSE; }
static void photos_selection_toolbar_set_item_visibility (PhotosSelectionToolbar *self) { PhotosSelectionToolbarPrivate *priv = self->priv; GList *apps = NULL; GList *l; GList *selection; GtkStyleContext *context; gboolean has_selection; gboolean show_collection; gboolean show_favorite; gboolean show_open; gboolean show_print; gboolean show_properties; gboolean show_trash; gchar *favorite_label; gchar *open_label; guint fav_count = 0; guint apps_length; guint sel_length; priv->inside_refresh = TRUE; selection = photos_selection_controller_get_selection (priv->sel_cntrlr); sel_length = g_list_length (selection); has_selection = sel_length > 0; show_collection = has_selection; show_favorite = has_selection; show_open = has_selection; show_print = has_selection; show_properties = has_selection; show_trash = has_selection; for (l = selection; l != NULL; l = g_list_next (l)) { PhotosBaseItem *item; const gchar *default_app_name; const gchar *urn = (gchar *) l->data; item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (priv->item_mngr, urn)); if (photos_base_item_is_favorite (item)) fav_count++; default_app_name = photos_base_item_get_default_app_name (item); if (default_app_name != NULL && g_list_find (apps, default_app_name) == NULL) apps = g_list_prepend (apps, (gpointer) g_strdup (default_app_name)); show_trash = show_trash && photos_base_item_can_trash (item); show_print = show_print && !photos_base_item_is_collection (item); } show_favorite = show_favorite && ((fav_count == 0) || (fav_count == sel_length)); apps_length = g_list_length (apps); show_open = (apps_length > 0); if (sel_length > 1) { show_print = FALSE; show_properties = FALSE; } if (apps_length == 1) /* Translators: this is the Open action in a context menu */ open_label = g_strdup_printf (_("Open with %s"), (gchar *) apps->data); else /* Translators: this is the Open action in a context menu */ open_label = g_strdup (_("Open")); gd_header_button_set_label (GD_HEADER_BUTTON (priv->toolbar_open), open_label); g_free (open_label); g_list_free_full (apps, g_free); context = gtk_widget_get_style_context (priv->toolbar_favorite); if (show_favorite && fav_count == sel_length) { favorite_label = g_strdup (_("Remove from favorites")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->toolbar_favorite), TRUE); gtk_style_context_add_class (context, "documents-favorite"); } else { favorite_label = g_strdup (_("Add to favorites")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->toolbar_favorite), FALSE); gtk_style_context_remove_class (context, "documents-favorite"); } gtk_widget_reset_style (priv->toolbar_favorite); gtk_widget_set_tooltip_text (priv->toolbar_favorite, favorite_label); g_free (favorite_label); gtk_widget_set_sensitive (priv->toolbar_collection, show_collection); gtk_widget_set_sensitive (priv->toolbar_print, show_print); gtk_widget_set_sensitive (priv->toolbar_properties, show_properties); gtk_widget_set_sensitive (priv->toolbar_trash, show_trash); gtk_widget_set_sensitive (priv->toolbar_open, show_open); gtk_widget_set_sensitive (priv->toolbar_favorite, show_favorite); priv->inside_refresh = FALSE; }