static void photos_organize_collection_view_text_editing_canceled (PhotosOrganizeCollectionView *self) { if (self->choice_confirmed) { GtkCellArea *cell_area; GtkCellEditable *entry; GtkTreePath *path; self->choice_confirmed = FALSE; g_object_get (self->view_col, "cell-area", &cell_area, NULL); entry = gtk_cell_area_get_edit_widget (cell_area); g_object_unref (cell_area); path = photos_organize_collection_model_get_placeholder (PHOTOS_ORGANIZE_COLLECTION_MODEL (self->model), FALSE); if (entry != NULL && path != NULL) { const gchar *text; text = gtk_entry_get_text (GTK_ENTRY (entry)); photos_organize_collection_view_text_edited_real (self, GTK_CELL_RENDERER_TEXT (self->renderer_text), path, text); } gtk_tree_path_free (path); } else photos_organize_collection_model_remove_placeholder (PHOTOS_ORGANIZE_COLLECTION_MODEL (self->model)); }
static void photos_organize_collection_view_text_edited_real (PhotosOrganizeCollectionView *self, GtkCellRendererText *cell_renderer, GtkTreePath *path, const gchar *new_text) { GtkTreeIter iter; PhotosCreateCollectionJob *job; g_object_set (cell_renderer, "editable", FALSE, NULL); if (new_text == NULL || new_text[0] == '\0') { /* Don't insert collections with empty names. */ photos_organize_collection_model_remove_placeholder (PHOTOS_ORGANIZE_COLLECTION_MODEL (self->model)); return; } gtk_tree_model_get_iter (GTK_TREE_MODEL (self->model), &iter, path); gtk_list_store_set (self->model, &iter, PHOTOS_ORGANIZE_MODEL_NAME, new_text, -1); job = photos_create_collection_job_new (new_text, NULL); photos_create_collection_job_run (job, self->cancellable, photos_organize_collection_view_create_collection_executed, self); g_object_unref (job); }
static void photos_organize_collection_view_create_collection_executed (GObject *source_object, GAsyncResult *res, gpointer user_data) { PhotosOrganizeCollectionView *self; PhotosCreateCollectionJob *col_job = PHOTOS_CREATE_COLLECTION_JOB (source_object); PhotosSetCollectionJob *set_job = NULL; GApplication *app; GError *error; GList *urns; GtkTreeIter iter; GtkTreePath *path = NULL; PhotosSearchContextState *state; gchar *created_urn = NULL; error = NULL; created_urn = photos_create_collection_job_finish (col_job, res, &error); if (error != NULL) { if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_error_free (error); goto out; } else { g_warning ("Unable to create collection: %s", error->message); g_error_free (error); } } self = PHOTOS_ORGANIZE_COLLECTION_VIEW (user_data); if (created_urn == NULL) { photos_organize_collection_model_remove_placeholder (PHOTOS_ORGANIZE_COLLECTION_MODEL (self->model)); goto out; } path = photos_organize_collection_model_get_placeholder (PHOTOS_ORGANIZE_COLLECTION_MODEL (self->model), TRUE); if (path == NULL) goto out; app = g_application_get_default (); state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app)); gtk_tree_model_get_iter (GTK_TREE_MODEL (self->model), &iter, path); gtk_list_store_set (self->model, &iter, PHOTOS_ORGANIZE_MODEL_ID, created_urn, -1); set_job = photos_set_collection_job_new (created_urn, TRUE); urns = photos_selection_controller_get_selection (self->sel_cntrlr); photos_set_collection_job_run (set_job, state, urns, NULL, NULL, NULL); out: g_clear_object (&set_job); g_free (created_urn); gtk_tree_path_free (path); }
static void photos_organize_collection_model_fetch_collection_state_executed (GHashTable *collection_state, gpointer user_data) { PhotosOrganizeCollectionModel *self = PHOTOS_ORGANIZE_COLLECTION_MODEL (user_data); GHashTableIter collection_state_iter; const gchar *idx; gpointer value; photos_organize_collection_model_remove_placeholder (self); g_hash_table_iter_init (&collection_state_iter, collection_state); while (g_hash_table_iter_next (&collection_state_iter, (gpointer) &idx, (gpointer) &value)) { GtkTreeIter *iter; PhotosBaseItem *collection; gint state = GPOINTER_TO_INT (value); if (state & PHOTOS_COLLECTION_STATE_HIDDEN) continue; collection = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (self->priv->manager, idx)); iter = photos_organize_collection_model_find_collection_iter (self, collection); if (iter == NULL) { GtkTreeIter tmp; gtk_list_store_append (GTK_LIST_STORE (self), &tmp); iter = gtk_tree_iter_copy (&tmp); } gtk_list_store_set (GTK_LIST_STORE (self), iter, PHOTOS_ORGANIZE_MODEL_ID, idx, PHOTOS_ORGANIZE_MODEL_NAME, photos_base_item_get_name (collection), PHOTOS_ORGANIZE_MODEL_STATE, state, -1); gtk_tree_iter_free (iter); } g_object_unref (self); }