Klaus Ethgen <Klaus+geekie@...> writes:
Ian> I can make a patch. It probably won't be trivially short; where do
Ian> you want it posted?
Klaus> Here would be great. Or fork the repo on gitorious and create a
Klaus> merge request.
Here is a patch. Since perfection seems to be out of reach, I took the
most conservative path (a configuration option).
diff --git a/doc/docbook/GuideOptionsBehavior.xml
b/doc/docbook/GuideOptionsBehavior.xml
index 3e107ec..24b767d 100644
--- a/doc/docbook/GuideOptionsBehavior.xml
+++ b/doc/docbook/GuideOptionsBehavior.xml
@@ -93,7 +93,17 @@
Enable this option to show a "Copy path" menu item in applicable menus.
</para>
<para>
- This allows to copy path to files or directories to the clipboard,
names are enclosed with double quotes and separated by space.
+ This allows to copy path to files or directories to the primary
selection, names are enclosed with double quotes and separated by space.
+ </para>
+ <variablelist><varlistentry><term>
+ Copy path to clipboard instead of primary selection
+ </term><listitem><para/></listitem></varlistentry></variablelist>
+ <para>
+ If this is set, the "Copy path" menu item will affect the clipboard
and not the primary selection.
+ </para>
+ <para>
+ Setting the clipboard is the behavior resembling most modern Gtk
applications.
+ The old behavior (setting the primary selection) is the default for
backward compatibility reasons.
</para>
<variablelist><varlistentry><term>
Open recent list maximum size
diff --git a/src/options.c b/src/options.c
index 4972967..54c6430 100644
--- a/src/options.c
+++ b/src/options.c
@@ -90,6 +90,7 @@ ConfOptions *init_options(ConfOptions *options)
options->mousewheel_scrolls = FALSE;
options->open_recent_list_maxsize = 10;
options->place_dialogs_under_mouse = FALSE;
+ options->copy_path_to_clipboard = FALSE;
options->progressive_key_scrolling = TRUE;
diff --git a/src/options.h b/src/options.h
index 1556dac..75d2023 100644
--- a/src/options.h
+++ b/src/options.h
@@ -35,6 +35,7 @@ struct _ConfOptions
gboolean save_window_positions;
gboolean tools_restore_state;
+ gboolean copy_path_to_clipboard;
/* file ops */
struct {
diff --git a/src/preferences.c b/src/preferences.c
index 4f3e21a..a92a2d7 100644
--- a/src/preferences.c
+++ b/src/preferences.c
@@ -291,6 +291,7 @@ static void config_window_apply(void)
options->tree_descend_subdirs = c_options->tree_descend_subdirs;
options->open_recent_list_maxsize = c_options->open_recent_list_maxsize;
+ options->copy_path_to_clipboard = c_options->copy_path_to_clipboard;
options->dnd_icon_size = c_options->dnd_icon_size;
options->metadata.save_in_image_file =
c_options->metadata.save_in_image_file;
@@ -1928,6 +1929,9 @@ static void config_tab_behavior(GtkWidget *notebook)
pref_checkbox_new_int(group, _("In place renaming"),
options->file_ops.enable_in_place_rename,
&c_options->file_ops.enable_in_place_rename);
+ pref_checkbox_new_int(group, _("Copy path to clipboard instead of
primary selection"),
+ options->copy_path_to_clipboard,
&c_options->copy_path_to_clipboard);
+
pref_spin_new_int(group, _("Open recent list maximum size"), NULL,
1, 50, 1, options->open_recent_list_maxsize,
&c_options->open_recent_list_maxsize);
diff --git a/src/rcfile.c b/src/rcfile.c
index b61c4db..62189c4 100644
--- a/src/rcfile.c
+++ b/src/rcfile.c
@@ -279,6 +279,7 @@ static void write_global_attributes(GString *outstr,
gint indent)
WRITE_NL(); WRITE_INT(*options, open_recent_list_maxsize);
WRITE_NL(); WRITE_INT(*options, dnd_icon_size);
WRITE_NL(); WRITE_BOOL(*options, place_dialogs_under_mouse);
+ WRITE_NL(); WRITE_BOOL(*options, copy_path_to_clipboard);
WRITE_NL(); WRITE_BOOL(*options, save_window_positions);
WRITE_NL(); WRITE_BOOL(*options, tools_restore_state);
@@ -598,6 +599,7 @@ static gboolean load_global_params(const gchar
**attribute_names, const gchar **
if (READ_INT(*options, open_recent_list_maxsize)) continue;
if (READ_INT(*options, dnd_icon_size)) continue;
if (READ_BOOL(*options, place_dialogs_under_mouse)) continue;
+ if (READ_BOOL(*options, copy_path_to_clipboard)) continue;
if (READ_BOOL(*options, save_window_positions)) continue;
if (READ_BOOL(*options, tools_restore_state)) continue;
diff --git a/src/utilops.c b/src/utilops.c
index 125ef4a..cde8b70 100644
--- a/src/utilops.c
+++ b/src/utilops.c
@@ -2862,21 +2862,29 @@ void file_util_rename_dir(FileData *source_fd, const
gchar *new_path, GtkWidget
void file_util_copy_path_to_clipboard(FileData *fd)
{
GtkClipboard *clipboard;
+ GdkAtom selection;
+ selection = (options->copy_path_to_clipboard ?
+ GDK_SELECTION_CLIPBOARD :
+ GDK_SELECTION_PRIMARY);
if (!fd || !*fd->path) return;
- clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+ clipboard = gtk_clipboard_get(selection);
gtk_clipboard_set_text(clipboard, g_shell_quote(fd->path), -1);
}
void file_util_copy_path_list_to_clipboard(GList *list)
{
GtkClipboard *clipboard;
+ GdkAtom selection;
GList *work;
GString *new;
- clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
-
+ selection = (options->copy_path_to_clipboard ?
+ GDK_SELECTION_CLIPBOARD :
+ GDK_SELECTION_PRIMARY);
+ clipboard = gtk_clipboard_get(selection);
+
new = g_string_new("");
work = list;
while (work) {
------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Geeqie-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-devel