From 23d54a6fa903a9522062e266a139b94e4f4b26d7 Mon Sep 17 00:00:00 2001 From: Colin Clark Date: Sat, 28 Nov 2020 11:18:13 +0000 Subject: [PATCH] Ref #137: Copy to both clipboards https://github.com/BestImageViewer/geeqie/issues/137 A third option to copy to both clipboards. Default is to copy to both. --- doc/docbook/GuideOptionsBehavior.xml | 12 ++++++-- src/options.c | 2 +- src/preferences.c | 20 ++++++++----- src/typedefs.h | 5 ++-- src/utilops.c | 42 +++++++++++++--------------- 5 files changed, 47 insertions(+), 34 deletions(-) diff --git a/doc/docbook/GuideOptionsBehavior.xml b/doc/docbook/GuideOptionsBehavior.xml index c6b1ca8e..67e18506 100644 --- a/doc/docbook/GuideOptionsBehavior.xml +++ b/doc/docbook/GuideOptionsBehavior.xml @@ -202,7 +202,7 @@ - PRIMARY + Primary Paste using mouse middle-click, or shift-insert. @@ -210,12 +210,20 @@ - CLIPBOARD + Clipboard Paste using mouse right-click and select paste, or control-v. + + + Both + + + Paste using either method. + + diff --git a/src/options.c b/src/options.c index a112d07c..a4765d99 100644 --- a/src/options.c +++ b/src/options.c @@ -186,7 +186,7 @@ ConfOptions *init_options(ConfOptions *options) options->tree_descend_subdirs = FALSE; options->view_dir_list_single_click_enter = TRUE; options->update_on_time_change = TRUE; - options->clipboard_selection = PRIMARY; + options->clipboard_selection = CLIPBOARD_BOTH; options->stereo.fixed_w = 1920; options->stereo.fixed_h = 1080; diff --git a/src/preferences.c b/src/preferences.c index ccdb5f46..1486ee4a 100644 --- a/src/preferences.c +++ b/src/preferences.c @@ -581,12 +581,16 @@ static void clipboard_selection_menu_cb(GtkWidget *combo, gpointer data) switch (gtk_combo_box_get_active(GTK_COMBO_BOX(combo))) { case 0: - default: - *option = PRIMARY; + *option = CLIPBOARD_PRIMARY; break; case 1: - *option = CLIPBOARD; + *option = CLIPBOARD_CLIPBOARD; + break; + case 2: + *option = CLIPBOARD_BOTH; break; + default: + *option = CLIPBOARD_BOTH; } } @@ -657,10 +661,12 @@ static void add_clipboard_selection_menu(GtkWidget *table, gint column, gint row combo = gtk_combo_box_text_new(); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("PRIMARY")); - if (option == PRIMARY) current = 0; - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("CLIPBOARD")); - if (option == CLIPBOARD) current = 1; + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Primary")); + if (option == CLIPBOARD_PRIMARY) current = 0; + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Clipboard")); + if (option == CLIPBOARD_CLIPBOARD) current = 1; + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _("Both")); + if (option == CLIPBOARD_BOTH) current = 2; gtk_combo_box_set_active(GTK_COMBO_BOX(combo), current); diff --git a/src/typedefs.h b/src/typedefs.h index 8eae1211..1291e0ed 100644 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -29,8 +29,9 @@ typedef enum { } ZoomMode; typedef enum { - PRIMARY = 0, - CLIPBOARD = 1, + CLIPBOARD_PRIMARY = 0, + CLIPBOARD_CLIPBOARD = 1, + CLIPBOARD_BOTH = 2 } ClipboardSelection; typedef enum { diff --git a/src/utilops.c b/src/utilops.c index 26f7854c..822d269f 100644 --- a/src/utilops.c +++ b/src/utilops.c @@ -3084,43 +3084,28 @@ void file_util_rename_dir(FileData *source_fd, const gchar *new_path, GtkWidget void file_util_copy_path_to_clipboard(FileData *fd, gboolean quoted) { - GtkClipboard *clipboard; - if (!fd || !*fd->path) return; - if (options->clipboard_selection == PRIMARY) + if (options->clipboard_selection == CLIPBOARD_PRIMARY) { - clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY); + gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY), quoted ? g_shell_quote(fd->path) : fd->path , -1); } - else + else if (options->clipboard_selection == CLIPBOARD_CLIPBOARD) { - clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); - } - if (quoted) - { - gtk_clipboard_set_text(clipboard, g_shell_quote(fd->path), -1); + gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), quoted ? g_shell_quote(fd->path) : fd->path , -1); } else { - gtk_clipboard_set_text(clipboard, fd->path, -1); + gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY), quoted ? g_shell_quote(fd->path) : fd->path , -1); + gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), quoted ? g_shell_quote(fd->path) : fd->path , -1); } } void file_util_copy_path_list_to_clipboard(GList *list, gboolean quoted) { - GtkClipboard *clipboard; GList *work; GString *new; - if (options->clipboard_selection == PRIMARY) - { - clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY); - } - else - { - clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); - } - new = g_string_new(""); work = list; while (work) { @@ -3140,7 +3125,20 @@ void file_util_copy_path_list_to_clipboard(GList *list, gboolean quoted) if (work) g_string_append_c(new, ' '); } - gtk_clipboard_set_text(clipboard, new->str, new->len); + if (options->clipboard_selection == CLIPBOARD_PRIMARY) + { + gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY), new->str, new->len); + } + else if (options->clipboard_selection == CLIPBOARD_CLIPBOARD) + { + gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), new->str, new->len); + } + else + { + gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY), new->str, new->len); + gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), new->str, new->len); + } + g_string_free(new, TRUE); filelist_free(list); } -- 2.20.1