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),