Mercurial > hg > forks > geeqie
changeset 2663:3e6d26094fb4
Fix #520: copy path inserts quotes around path
https://github.com/BestImageViewer/geeqie/issues/520
Additional menu item:
Copy path unquoted
DnD still uses quotes
author | Colin Clark <colin.clark@cclark.uk> |
---|---|
date | Thu, 09 Nov 2017 15:52:54 +0000 |
parents | 08d2547d72ea |
children | 5f6be8251b96 |
files | doc/docbook/GuideMainWindowFolderPane.xml doc/docbook/GuideMainWindowMenus.xml src/collect-table.c src/dupe.c src/img-view.c src/layout_image.c src/layout_util.c src/pan-view/pan-view.c src/search.c src/utilops.c src/utilops.h src/view_dir.c src/view_file/view_file.c |
diffstat | 13 files changed, 148 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/docbook/GuideMainWindowFolderPane.xml Wed Nov 08 17:06:50 2017 +0000 +++ b/doc/docbook/GuideMainWindowFolderPane.xml Thu Nov 09 15:52:54 2017 +0000 @@ -390,7 +390,21 @@ <entry /> <entry>Copy path</entry> <entry> - <para>Copy sjkhsdlfjhvfljhDelete file or folder</para> + <para> + Copy selected item-path(s) to clipboard + <footnote id='ref1'> + The clipboard used is selected + <link linkend="Behaviour">here.</link> + </footnote> + . Each data item copied will be enclosed in quotes. + </para> + </entry> + </row> + <row> + <entry /> + <entry>Copy path unquoted</entry> + <entry> + <para>Copy selected item-path(s) to clipboard. The data will not be enclosed in quotes.</para> </entry> </row> <row>
--- a/doc/docbook/GuideMainWindowMenus.xml Wed Nov 08 17:06:50 2017 +0000 +++ b/doc/docbook/GuideMainWindowMenus.xml Thu Nov 09 15:52:54 2017 +0000 @@ -407,7 +407,24 @@ </menuchoice> </term> <listitem> - <para>Copy selected item path to clipboard.</para> + <para> + Copy selected item-path(s) to clipboard + <footnote id='ref1'> + The clipboard used is selected + <link linkend="Behaviour">here.</link> + </footnote> + . Each data item copied will be enclosed in quotes. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <menuchoice> + <guimenu>Copy path unquoted</guimenu> + </menuchoice> + </term> + <listitem> + <para>Copy selected item-path(s) to clipboard. The data will not be enclosed in quotes.</para> </listitem> </varlistentry> <varlistentry>
--- a/src/collect-table.c Wed Nov 08 17:06:50 2017 +0000 +++ b/src/collect-table.c Thu Nov 09 15:52:54 2017 +0000 @@ -729,7 +729,14 @@ { CollectTable *ct = data; - file_util_copy_path_list_to_clipboard(collection_table_popup_file_list(ct)); + file_util_copy_path_list_to_clipboard(collection_table_popup_file_list(ct), TRUE); +} + +static void collection_table_popup_copy_path_unquoted_cb(GtkWidget *widget, gpointer data) +{ + CollectTable *ct = data; + + file_util_copy_path_list_to_clipboard(collection_table_popup_file_list(ct), FALSE); } static void collection_table_popup_sort_cb(GtkWidget *widget, gpointer data) @@ -945,6 +952,8 @@ G_CALLBACK(collection_table_popup_rename_cb), ct); menu_item_add_sensitive(menu, _("_Copy path"), over_icon, G_CALLBACK(collection_table_popup_copy_path_cb), ct); + menu_item_add_sensitive(menu, _("_Copy path unquoted"), over_icon, + G_CALLBACK(collection_table_popup_copy_path_unquoted_cb), ct); menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, over_icon, G_CALLBACK(collection_table_popup_delete_cb), ct); menu_item_add_divider(menu);
--- a/src/dupe.c Wed Nov 08 17:06:50 2017 +0000 +++ b/src/dupe.c Thu Nov 09 15:52:54 2017 +0000 @@ -2255,7 +2255,14 @@ { DupeWindow *dw = data; - file_util_copy_path_list_to_clipboard(dupe_listview_get_selection(dw, dw->listview)); + file_util_copy_path_list_to_clipboard(dupe_listview_get_selection(dw, dw->listview), TRUE); +} + +static void dupe_menu_copy_path_unquoted_cb(GtkWidget *widget, gpointer data) +{ + DupeWindow *dw = data; + + file_util_copy_path_list_to_clipboard(dupe_listview_get_selection(dw, dw->listview), FALSE); } static void dupe_menu_remove_cb(GtkWidget *widget, gpointer data) @@ -2369,6 +2376,8 @@ G_CALLBACK(dupe_menu_rename_cb), dw); menu_item_add_sensitive(menu, _("_Copy path"), on_row, G_CALLBACK(dupe_menu_copy_path_cb), dw); + menu_item_add_sensitive(menu, _("_Copy path unquoted"), on_row, + G_CALLBACK(dupe_menu_copy_path_unquoted_cb), dw); menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, on_row, G_CALLBACK(dupe_menu_delete_cb), dw); menu_item_add_divider(menu);
--- a/src/img-view.c Wed Nov 08 17:06:50 2017 +0000 +++ b/src/img-view.c Thu Nov 09 15:52:54 2017 +0000 @@ -1170,7 +1170,16 @@ ImageWindow *imd; imd = view_window_active_image(vw); - file_util_copy_path_to_clipboard(image_get_fd(imd)); + file_util_copy_path_to_clipboard(image_get_fd(imd), TRUE); +} + +static void view_copy_path_unquoted_cb(GtkWidget *widget, gpointer data) +{ + ViewWindow *vw = data; + ImageWindow *imd; + + imd = view_window_active_image(vw); + file_util_copy_path_to_clipboard(image_get_fd(imd), FALSE); } static void view_fullscreen_cb(GtkWidget *widget, gpointer data) @@ -1315,6 +1324,7 @@ menu_item_add(menu, _("_Move..."), G_CALLBACK(view_move_cb), vw); menu_item_add(menu, _("_Rename..."), G_CALLBACK(view_rename_cb), vw); menu_item_add(menu, _("_Copy path"), G_CALLBACK(view_copy_path_cb), vw); + menu_item_add(menu, _("_Copy path unquoted"), G_CALLBACK(view_copy_path_unquoted_cb), vw); menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(view_delete_cb), vw); menu_item_add_divider(menu);
--- a/src/layout_image.c Wed Nov 08 17:06:50 2017 +0000 +++ b/src/layout_image.c Thu Nov 09 15:52:54 2017 +0000 @@ -514,7 +514,14 @@ { LayoutWindow *lw = data; - file_util_copy_path_to_clipboard(layout_image_get_fd(lw)); + file_util_copy_path_to_clipboard(layout_image_get_fd(lw), TRUE); +} + +static void li_pop_menu_copy_path_unquoted_cb(GtkWidget *widget, gpointer data) +{ + LayoutWindow *lw = data; + + file_util_copy_path_to_clipboard(layout_image_get_fd(lw), FALSE); } static void li_pop_menu_move_cb(GtkWidget *widget, gpointer data) @@ -696,6 +703,7 @@ item = menu_item_add(menu, _("_Rename..."), G_CALLBACK(li_pop_menu_rename_cb), lw); if (!path) gtk_widget_set_sensitive(item, FALSE); item = menu_item_add(menu, _("_Copy path"), G_CALLBACK(li_pop_menu_copy_path_cb), lw); + item = menu_item_add(menu, _("_Copy path unquoted"), G_CALLBACK(li_pop_menu_copy_path_unquoted_cb), lw); if (!path) gtk_widget_set_sensitive(item, FALSE); item = menu_item_add_stock(menu, _("_Delete..."), GTK_STOCK_DELETE, G_CALLBACK(li_pop_menu_delete_cb), lw); if (!path) gtk_widget_set_sensitive(item, FALSE);
--- a/src/layout_util.c Wed Nov 08 17:06:50 2017 +0000 +++ b/src/layout_util.c Thu Nov 09 15:52:54 2017 +0000 @@ -289,7 +289,14 @@ { LayoutWindow *lw = data; - file_util_copy_path_list_to_clipboard(layout_selection_list(lw)); + file_util_copy_path_list_to_clipboard(layout_selection_list(lw), TRUE); +} + +static void layout_menu_copy_path_unquoted_cb(GtkAction *action, gpointer data) +{ + LayoutWindow *lw = data; + + file_util_copy_path_list_to_clipboard(layout_selection_list(lw), FALSE); } static void layout_menu_move_cb(GtkAction *action, gpointer data) @@ -1754,6 +1761,7 @@ { "EnableGrouping", NULL, N_("Enable file _grouping"), NULL, N_("Enable file grouping"), CB(layout_menu_enable_grouping_cb) }, { "DisableGrouping", NULL, N_("Disable file groupi_ng"), NULL, N_("Disable file grouping"), CB(layout_menu_disable_grouping_cb) }, { "CopyPath", NULL, N_("_Copy path to clipboard"), NULL, N_("Copy path to clipboard"), CB(layout_menu_copy_path_cb) }, + { "CopyPathUnquoted", NULL, N_("_Copy path unquoted to clipboard"), NULL, N_("Copy path unquoted to clipboard"), CB(layout_menu_copy_path_unquoted_cb) }, { "CloseWindow", GTK_STOCK_CLOSE, N_("C_lose window"), "<control>W", N_("Close window"), CB(layout_menu_close_cb) }, { "Quit", GTK_STOCK_QUIT, N_("_Quit"), "<control>Q", N_("Quit"), CB(layout_menu_exit_cb) }, { "RotateCW", NULL, N_("_Rotate clockwise"), "bracketright", N_("Rotate clockwise"), CB(layout_menu_alter_90_cb) }, @@ -1959,6 +1967,7 @@ " <placeholder name='SelectSection'/>" " <separator/>" " <menuitem action='CopyPath'/>" +" <menuitem action='CopyPathUnquoted'/>" " <placeholder name='ClipboardSection'/>" " <separator/>" " <menuitem action='ShowMarks'/>"
--- a/src/pan-view/pan-view.c Wed Nov 08 17:06:50 2017 +0000 +++ b/src/pan-view/pan-view.c Thu Nov 09 15:52:54 2017 +0000 @@ -2138,7 +2138,16 @@ FileData *fd; fd = pan_menu_click_fd(pw); - if (fd) file_util_copy_path_to_clipboard(fd); + if (fd) file_util_copy_path_to_clipboard(fd, TRUE); +} + +static void pan_copy_path_unquoted_cb(GtkWidget *widget, gpointer data) +{ + PanWindow *pw = data; + FileData *fd; + + fd = pan_menu_click_fd(pw); + if (fd) file_util_copy_path_to_clipboard(fd, FALSE); } static void pan_exif_date_toggle_cb(GtkWidget *widget, gpointer data) @@ -2254,6 +2263,8 @@ G_CALLBACK(pan_rename_cb), pw); menu_item_add_sensitive(menu, _("_Copy path"), active, G_CALLBACK(pan_copy_path_cb), pw); + menu_item_add_sensitive(menu, _("_Copy path unquoted"), active, + G_CALLBACK(pan_copy_path_unquoted_cb), pw); menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active, G_CALLBACK(pan_delete_cb), pw);
--- a/src/search.c Wed Nov 08 17:06:50 2017 +0000 +++ b/src/search.c Thu Nov 09 15:52:54 2017 +0000 @@ -999,7 +999,14 @@ { SearchData *sd = data; - file_util_copy_path_list_to_clipboard(search_result_selection_list(sd)); + file_util_copy_path_list_to_clipboard(search_result_selection_list(sd), TRUE); +} + +static void sr_menu_copy_path_unquoted_cb(GtkWidget *widget, gpointer data) +{ + SearchData *sd = data; + + file_util_copy_path_list_to_clipboard(search_result_selection_list(sd), FALSE); } static void sr_menu_remove_cb(GtkWidget *widget, gpointer data) @@ -1083,6 +1090,8 @@ G_CALLBACK(sr_menu_rename_cb), sd); menu_item_add_sensitive(menu, _("_Copy path"), on_row, G_CALLBACK(sr_menu_copy_path_cb), sd); + menu_item_add_sensitive(menu, _("_Copy path unquoted"), on_row, + G_CALLBACK(sr_menu_copy_path_unquoted_cb), sd); menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, on_row, G_CALLBACK(sr_menu_delete_cb), sd); menu_item_add_divider(menu);
--- a/src/utilops.c Wed Nov 08 17:06:50 2017 +0000 +++ b/src/utilops.c Thu Nov 09 15:52:54 2017 +0000 @@ -3032,7 +3032,7 @@ } -void file_util_copy_path_to_clipboard(FileData *fd) +void file_util_copy_path_to_clipboard(FileData *fd, gboolean quoted) { GtkClipboard *clipboard; @@ -3046,10 +3046,17 @@ { clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); } - gtk_clipboard_set_text(clipboard, g_shell_quote(fd->path), -1); + if (quoted) + { + gtk_clipboard_set_text(clipboard, g_shell_quote(fd->path), -1); + } + else + { + gtk_clipboard_set_text(clipboard, fd->path, -1); + } } -void file_util_copy_path_list_to_clipboard(GList *list) +void file_util_copy_path_list_to_clipboard(GList *list, gboolean quoted) { GtkClipboard *clipboard; GList *work; @@ -3072,7 +3079,14 @@ if (!fd || !*fd->path) continue; - g_string_append(new, g_shell_quote(fd->path)); + if (quoted) + { + g_string_append(new, g_shell_quote(fd->path)); + } + else + { + g_string_append(new, fd->path); + } if (work) g_string_append_c(new, ' '); }
--- a/src/utilops.h Wed Nov 08 17:06:50 2017 +0000 +++ b/src/utilops.h Thu Nov 09 15:52:54 2017 +0000 @@ -68,8 +68,8 @@ void file_util_delete_dir(FileData *source_fd, GtkWidget *parent); -void file_util_copy_path_to_clipboard(FileData *fd); -void file_util_copy_path_list_to_clipboard(GList *list); +void file_util_copy_path_to_clipboard(FileData *fd, gboolean quoted); +void file_util_copy_path_list_to_clipboard(GList *list, gboolean quoted); #endif /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
--- a/src/view_dir.c Wed Nov 08 17:06:50 2017 +0000 +++ b/src/view_dir.c Thu Nov 09 15:52:54 2017 +0000 @@ -528,7 +528,16 @@ if (!vd->click_fd) return; - file_util_copy_path_to_clipboard(vd->click_fd); + file_util_copy_path_to_clipboard(vd->click_fd, TRUE); +} + +static void vd_pop_menu_copy_path_unquoted_cb(GtkWidget *widget, gpointer data) +{ + ViewDir *vd = data; + + if (!vd->click_fd) return; + + file_util_copy_path_to_clipboard(vd->click_fd, FALSE); } static void vd_pop_submenu_dir_view_as_cb(GtkWidget *widget, gpointer data) @@ -677,6 +686,9 @@ menu_item_add(menu, _("_Copy path"), G_CALLBACK(vd_pop_menu_copy_path_cb), vd); + menu_item_add(menu, _("_Copy path unquoted"), + G_CALLBACK(vd_pop_menu_copy_path_unquoted_cb), vd); + menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, rename_delete_active, G_CALLBACK(vd_pop_menu_delete_cb), vd); menu_item_add_divider(menu);
--- a/src/view_file/view_file.c Wed Nov 08 17:06:50 2017 +0000 +++ b/src/view_file/view_file.c Thu Nov 09 15:52:54 2017 +0000 @@ -357,7 +357,14 @@ { ViewFile *vf = data; - file_util_copy_path_list_to_clipboard(vf_pop_menu_file_list(vf)); + file_util_copy_path_list_to_clipboard(vf_pop_menu_file_list(vf), TRUE); +} + +static void vf_pop_menu_copy_path_unquoted_cb(GtkWidget *widget, gpointer data) +{ + ViewFile *vf = data; + + file_util_copy_path_list_to_clipboard(vf_pop_menu_file_list(vf), FALSE); } static void vf_pop_menu_enable_grouping_cb(GtkWidget *widget, gpointer data) @@ -600,6 +607,8 @@ G_CALLBACK(vf_pop_menu_rename_cb), vf); menu_item_add_sensitive(menu, _("_Copy path"), active, G_CALLBACK(vf_pop_menu_copy_path_cb), vf); + menu_item_add_sensitive(menu, _("_Copy path unquoted"), active, + G_CALLBACK(vf_pop_menu_copy_path_unquoted_cb), vf); menu_item_add_stock_sensitive(menu, _("_Delete..."), GTK_STOCK_DELETE, active, G_CALLBACK(vf_pop_menu_delete_cb), vf); menu_item_add_divider(menu);