Fix #520: copy path inserts quotes around path
authorColin Clark <colin.clark@cclark.uk>
Thu, 9 Nov 2017 15:52:54 +0000 (15:52 +0000)
committerColin Clark <colin.clark@cclark.uk>
Thu, 9 Nov 2017 15:52:54 +0000 (15:52 +0000)
https://github.com/BestImageViewer/geeqie/issues/520

Additional menu item:
Copy path unquoted

DnD still uses quotes

13 files changed:
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

index a2bd176..c30245b 100644 (file)
             <entry />\r
             <entry>Copy path</entry>\r
             <entry>\r
-              <para>Copy sjkhsdlfjhvfljhDelete file or folder</para>\r
+              <para>\r
+                Copy selected item-path(s) to clipboard\r
+                <footnote id='ref1'>\r
+                  The clipboard used is selected\r
+                  <link linkend="Behaviour">here.</link>\r
+                </footnote>\r
+                . Each data item copied will be enclosed in quotes.\r
+              </para>\r
+            </entry>\r
+          </row>\r
+          <row>\r
+            <entry />\r
+            <entry>Copy path unquoted</entry>\r
+            <entry>\r
+              <para>Copy selected item-path(s) to clipboard. The data will not be enclosed in quotes.</para>\r
             </entry>\r
           </row>\r
           <row>\r
index 066c5d7..e3cb747 100644 (file)
           </menuchoice>\r
         </term>\r
         <listitem>\r
-          <para>Copy selected item path to clipboard.</para>\r
+          <para>\r
+            Copy selected item-path(s) to clipboard\r
+            <footnote id='ref1'>\r
+              The clipboard used is selected\r
+              <link linkend="Behaviour">here.</link>\r
+            </footnote>\r
+            . Each data item copied will be enclosed in quotes.\r
+          </para>\r
+        </listitem>\r
+      </varlistentry>\r
+      <varlistentry>\r
+        <term>\r
+          <menuchoice>\r
+            <guimenu>Copy path unquoted</guimenu>\r
+          </menuchoice>\r
+        </term>\r
+        <listitem>\r
+          <para>Copy selected item-path(s) to clipboard. The data will not be enclosed in quotes.</para>\r
         </listitem>\r
       </varlistentry>\r
       <varlistentry>\r
index ca4868f..4ea3f48 100644 (file)
@@ -729,7 +729,14 @@ static void collection_table_popup_copy_path_cb(GtkWidget *widget, gpointer data
 {
        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 @@ static GtkWidget *collection_table_popup_menu(CollectTable *ct, gboolean over_ic
                        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);
index ff49303..a5b5c83 100644 (file)
@@ -2255,7 +2255,14 @@ static void dupe_menu_copy_path_cb(GtkWidget *widget, gpointer data)
 {
        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 @@ static GtkWidget *dupe_menu_popup_main(DupeWindow *dw, DupeItem *di)
                                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);
index 057b296..89d5df8 100644 (file)
@@ -1170,7 +1170,16 @@ static void view_copy_path_cb(GtkWidget *widget, gpointer data)
        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 @@ static GtkWidget *view_popup_menu(ViewWindow *vw)
        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);
index b736e41..ade67a3 100644 (file)
@@ -514,7 +514,14 @@ static void li_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data)
 {
        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 @@ static GtkWidget *layout_image_pop_menu(LayoutWindow *lw)
        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);
index 3495a37..0f164b5 100644 (file)
@@ -289,7 +289,14 @@ static void layout_menu_copy_path_cb(GtkAction *action, gpointer data)
 {
        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 @@ static GtkActionEntry menu_entries[] = {
   { "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 @@ static const gchar *menu_ui_description =
 "      <placeholder name='SelectSection'/>"
 "      <separator/>"
 "      <menuitem action='CopyPath'/>"
+"      <menuitem action='CopyPathUnquoted'/>"
 "      <placeholder name='ClipboardSection'/>"
 "      <separator/>"
 "      <menuitem action='ShowMarks'/>"
index bcd1d85..6010477 100644 (file)
@@ -2138,7 +2138,16 @@ static void pan_copy_path_cb(GtkWidget *widget, gpointer data)
        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 @@ static GtkWidget *pan_popup_menu(PanWindow *pw)
                                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);
 
index 190000d..7ded659 100644 (file)
@@ -999,7 +999,14 @@ static void sr_menu_copy_path_cb(GtkWidget *widget, gpointer data)
 {
        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 @@ static GtkWidget *search_result_menu(SearchData *sd, gboolean on_row, gboolean e
                                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);
index 06d04ff..0950b98 100644 (file)
@@ -3032,7 +3032,7 @@ void file_util_rename_dir(FileData *source_fd, const gchar *new_path, GtkWidget
 }
 
 
-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 @@ void file_util_copy_path_to_clipboard(FileData *fd)
                {
                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 @@ void file_util_copy_path_list_to_clipboard(GList *list)
 
                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, ' ');
                }
 
index 5daa6e1..d9c6a1b 100644 (file)
@@ -68,8 +68,8 @@ void file_util_start_filter_from_filelist(const gchar *key, GList *list, const g
 
 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: */
index d349d7e..8ae22cc 100644 (file)
@@ -528,7 +528,16 @@ static void vd_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data)
 
        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 @@ GtkWidget *vd_pop_menu(ViewDir *vd, FileData *fd)
        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);
index de8b14b..65084ee 100644 (file)
@@ -357,7 +357,14 @@ static void vf_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data)
 {
        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 @@ GtkWidget *vf_pop_menu(ViewFile *vf)
                                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);