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; }