static void bar_pane_keywords_set_selection(PaneKeywordsData *pkd, gboolean append) { GList *keywords = NULL; GList *list = NULL; GList *work; keywords = keyword_list_pull(pkd->keyword_view); list = layout_selection_list(pkd->pane.lw); list = file_data_process_groups_in_selection(list, FALSE, NULL); work = list; while (work) { FileData *fd = work->data; work = work->next; if (append) { metadata_append_list(fd, KEYWORD_KEY, keywords); } else { metadata_write_list(fd, KEYWORD_KEY, keywords); } } filelist_free(list); string_list_free(keywords); }
static void bar_pane_gps_update(PaneGPSData *pgd) { GList *list; GList *work; /* The widget does not have a parent during bar_pane_gps_new, so calling gtk_widget_show_all there gives a * "Gtk-CRITICAL **: gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed" * error. gtk_widget_show_all can be given after it has been added to the bar. */ if (gtk_widget_get_parent(pgd->widget) != NULL) gtk_widget_show_all(pgd->widget); /* If a create-marker background process is running, kill it * and start again */ if (pgd->create_markers_id != 0) { if (g_idle_remove_by_data(pgd)) { pgd->create_markers_id = 0; } else { return; } } /* Delete any markers currently displayed */ work = clutter_container_get_children(CLUTTER_CONTAINER(pgd->icon_layer)); while (work) { clutter_container_remove(CLUTTER_CONTAINER(pgd->icon_layer), work->data, NULL); work = work->next; } g_list_free(work); if (!pgd->enable_markers_checked) { return; } /* For each selected photo that has GPS data, create a marker containing * a single, small text character the same colour as the marker background. * Use a background process in case the user selects a large number of files. */ list = layout_selection_list(pgd->pane.lw); list = file_data_process_groups_in_selection(list, FALSE, NULL); if (list != NULL) { pgd->selection_list = g_list_copy(list); pgd->marker_list = g_ptr_array_new(); pgd->selection_count = g_list_length(pgd->selection_list); pgd->create_markers_id = g_idle_add(bar_pane_gps_create_markers_cb, pgd); } g_list_free(list); g_list_free(work); }
static void bar_pane_comment_set_selection(PaneCommentData *pcd, gboolean append) { GList *list = NULL; GList *work; gchar *comment = NULL; comment = text_widget_text_pull(pcd->comment_view); list = layout_selection_list(pcd->pane.lw); list = file_data_process_groups_in_selection(list, FALSE, NULL); work = list; while (work) { FileData *fd = work->data; work = work->next; if (fd == pcd->fd) continue; if (append) { metadata_append_string(fd, pcd->key, comment); } else { metadata_write_string(fd, pcd->key, comment); } } filelist_free(list); g_free(comment); }
/** * \brief Callback for adding selected keyword to all selected images. */ static void bar_pane_keywords_add_to_selected_cb(GtkWidget *menu_widget, gpointer data) { PaneKeywordsData *pkd = data; GtkTreeIter iter; /* This is the iter which initial holds the current keyword */ GtkTreeIter child_iter; GtkTreeModel *model; GtkTreeModel *keyword_tree; GList *list, *work; GList *keywords = NULL; GtkTextBuffer *keyword_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pkd->keyword_view)); /* Aquire selected keyword */ if (pkd->click_tpath) { gboolean is_keyword = TRUE; model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview)); if (!gtk_tree_model_get_iter(model, &iter, pkd->click_tpath)) return; gtk_tree_model_get(model, &iter, FILTER_KEYWORD_COLUMN_IS_KEYWORD, &is_keyword, -1); if (!is_keyword) return; } else return; keyword_tree = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &child_iter, &iter); list = keyword_list_pull(pkd->keyword_view); /* Get the left keyword view */ /* Now set the current image */ keyword_tree_set(keyword_tree, &child_iter, &list); keyword_list_push(pkd->keyword_view, list); /* Set the left keyword view */ string_list_free(list); bar_pane_keywords_changed(keyword_buffer, pkd); /* Get list of all keywords in the hierarchy */ gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &child_iter, &iter); keywords = keyword_tree_get(keyword_tree, &child_iter); list = layout_selection_list(pkd->pane.lw); work = list; while (work) { FileData *fd = work->data; work = work->next; metadata_append_list(fd, KEYWORD_KEY, keywords); } filelist_free(list); string_list_free(keywords); }