From: Colin Clark Date: Thu, 13 Jul 2017 11:00:17 +0000 (+0100) Subject: Copy exif data to clipboard X-Git-Tag: v1.4~131 X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bfa5abb9b5c01308782e8417aed8c201c90bfc9f;p=geeqie.git Copy exif data to clipboard Click on any cell in the Exif Window, and the data is copied into the clipboard. --- diff --git a/src/advanced_exif.c b/src/advanced_exif.c index bde32b103..8aeb2af37 100644 --- a/src/advanced_exif.c +++ b/src/advanced_exif.c @@ -67,6 +67,15 @@ enum { EXIF_ADVCOL_COUNT }; +gint display_order [6] = { + EXIF_ADVCOL_DESCRIPTION, + EXIF_ADVCOL_VALUE, + EXIF_ADVCOL_NAME, + EXIF_ADVCOL_TAG, + EXIF_ADVCOL_FORMAT, + EXIF_ADVCOL_ELEMENTS +}; + static gboolean advanced_exif_row_enabled(const gchar *name) { GList *list; @@ -303,6 +312,39 @@ static gint advanced_exif_sort_cb(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIt return ret; } +static gboolean advanced_exif_mouseclick(GtkWidget *widget, + GdkEventButton *bevent, gpointer data) +{ + ExifWin *ew = data; + GtkTreePath *path; + GtkTreeViewColumn *column; + GtkTreeIter iter; + GtkTreeModel *store; + gchar *value; + GList *cols; + gint col_num; + GtkClipboard *clipboard; + + gtk_tree_view_get_cursor(GTK_TREE_VIEW(ew->listview), &path, &column); + if (path && column) + { + store = gtk_tree_view_get_model(GTK_TREE_VIEW(ew->listview)); + gtk_tree_model_get_iter(store, &iter, path); + + cols = gtk_tree_view_get_columns(GTK_TREE_VIEW(ew->listview)); + col_num = g_list_index(cols, (gpointer)column); + gtk_tree_model_get(store, &iter, display_order[col_num], &value, -1); + + clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); + gtk_clipboard_set_text(clipboard, value, -1); + + g_list_free(cols); + g_free(value); + } + + return TRUE; +} + static gboolean advanced_exif_keypress(GtkWidget *widget, GdkEventKey *event, gpointer data) { ExifWin *ew = data; @@ -403,6 +445,9 @@ GtkWidget *advanced_exif_new(void) g_signal_connect(G_OBJECT(ew->window), "key_press_event", G_CALLBACK(advanced_exif_keypress), ew); + g_signal_connect(G_OBJECT(ew->listview), "button_release_event", + G_CALLBACK(advanced_exif_mouseclick), ew); + ew->scrolled = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(ew->scrolled), GTK_SHADOW_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ew->scrolled),