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_selection_toolbar_trash_clicked (GtkButton *button, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); PhotosSelectionToolbarPrivate *priv = self->priv; GList *items = NULL; GList *selection; GList *l; selection = photos_selection_controller_get_selection (priv->sel_cntrlr); for (l = selection; l != NULL; l = l->next) { PhotosBaseItem *item; const gchar *urn = (gchar *) l->data; item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (priv->item_mngr, urn)); items = g_list_prepend (items, g_object_ref (item)); } /* Removing an item from the item manager changes the selection, so * we can't use the selection while removing items. */ for (l = items; l != NULL; l = l->next) { PhotosBaseItem *item = PHOTOS_BASE_ITEM (l->data); photos_base_manager_remove_object (priv->item_mngr, G_OBJECT (item)); } photos_delete_notification_new (items); photos_selection_controller_set_selection_mode (priv->sel_cntrlr, FALSE); g_list_free_full (items, g_object_unref); }
static void photos_selection_toolbar_properties_response (GtkDialog *dialog, gint response_id, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); gtk_widget_destroy (GTK_WIDGET (dialog)); photos_selection_controller_set_selection_mode (self->priv->sel_cntrlr, FALSE); }
static void photos_selection_toolbar_dialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); if (response_id != GTK_RESPONSE_CLOSE) return; gtk_widget_destroy (GTK_WIDGET (dialog)); photos_selection_controller_set_selection_mode (self->sel_cntrlr, FALSE); }
static void photos_selection_toolbar_dispose (GObject *object) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (object); g_clear_pointer (&self->item_listeners, (GDestroyNotify) g_hash_table_unref); g_clear_object (&self->item_mngr); g_clear_object (&self->sel_cntrlr); G_OBJECT_CLASS (photos_selection_toolbar_parent_class)->dispose (object); }
static void photos_selection_toolbar_selection_mode_changed (PhotosSelectionController *sel_cntrlr, gboolean mode, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); if (mode) photos_selection_toolbar_selection_changed (sel_cntrlr, self); else gtk_revealer_set_reveal_child (GTK_REVEALER (self), FALSE); }
static void photos_selection_toolbar_collection_clicked (GtkButton *button, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); GtkWidget *dialog; GtkWidget *toplevel; toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self)); if (!gtk_widget_is_toplevel (toplevel)) return; dialog = photos_organize_collection_dialog_new (GTK_WINDOW (toplevel)); gtk_widget_show_all (dialog); g_signal_connect (dialog, "response", G_CALLBACK (photos_selection_toolbar_dialog_response), self); }
static void photos_selection_toolbar_selection_changed (PhotosSelectionController *sel_cntrlr, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); PhotosSelectionToolbarPrivate *priv = self->priv; GList *selection; if (!photos_selection_controller_get_selection_mode (priv->sel_cntrlr)) return; selection = photos_selection_controller_get_selection (priv->sel_cntrlr); photos_selection_toolbar_set_item_listeners (self, selection); photos_selection_toolbar_set_item_visibility (self); gtk_revealer_set_reveal_child (GTK_REVEALER (self), TRUE); }
static void photos_selection_toolbar_dispose (GObject *object) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (object); PhotosSelectionToolbarPrivate *priv = self->priv; if (priv->item_listeners != NULL) { g_hash_table_unref (priv->item_listeners); priv->item_listeners = NULL; } g_clear_object (&priv->item_mngr); g_clear_object (&priv->sel_cntrlr); G_OBJECT_CLASS (photos_selection_toolbar_parent_class)->dispose (object); }
static void photos_selection_toolbar_print_clicked (GtkButton *button, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); PhotosSelectionToolbarPrivate *priv = self->priv; GList *selection; GtkWidget *toplevel; PhotosBaseItem *item; const gchar *urn; selection = photos_selection_controller_get_selection (priv->sel_cntrlr); if (g_list_length (selection) != 1) return; urn = (gchar *) selection->data; item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (priv->item_mngr, urn)); toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button)); photos_base_item_print (item, toplevel); }
static void photos_selection_toolbar_properties_clicked (GtkButton *button, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); PhotosSelectionToolbarPrivate *priv = self->priv; GList *selection; GList *windows; GApplication *app; GtkWidget *dialog; const gchar *urn; app = g_application_get_default (); windows = gtk_application_get_windows (GTK_APPLICATION (app)); selection = photos_selection_controller_get_selection (priv->sel_cntrlr); urn = (gchar *) selection->data; dialog = photos_properties_dialog_new (GTK_WINDOW (windows->data), urn); gtk_widget_show_all (dialog); g_signal_connect (dialog, "response", G_CALLBACK (photos_selection_toolbar_properties_response), self); }
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_open_clicked (GtkButton *button, gpointer user_data) { PhotosSelectionToolbar *self = PHOTOS_SELECTION_TOOLBAR (user_data); PhotosSelectionToolbarPrivate *priv = self->priv; GList *selection; GList *l; selection = photos_selection_controller_get_selection (priv->sel_cntrlr); for (l = selection; l != NULL; l = l->next) { const gchar *urn = (gchar *) l->data; GdkScreen *screen; PhotosBaseItem *item; guint32 time; item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (priv->item_mngr, urn)); screen = gtk_widget_get_screen (GTK_WIDGET (button)); time = gtk_get_current_event_time (); photos_base_item_open (item, screen, time); } photos_selection_controller_set_selection_mode (priv->sel_cntrlr, FALSE); }