Mercurial > hg > forks > geeqie
changeset 2557:20045d6aef1d
Copy exif data to clipboard
Click on any cell in the Exif Window, and the data is copied into the
clipboard.
author | Colin Clark <colin.clark@cclark.uk> |
---|---|
date | Thu, 13 Jul 2017 12:00:17 +0100 |
parents | 628485fdb4b4 |
children | a8db80c1aea2 |
files | src/advanced_exif.c |
diffstat | 1 files changed, 45 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/advanced_exif.c Mon Jul 10 17:07:29 2017 +0000 +++ b/src/advanced_exif.c Thu Jul 13 12:00:17 2017 +0100 @@ -67,6 +67,15 @@ 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 @@ 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 @@ 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),