Re: Patch: copy path to clipboard
Carles Pina i Estany <[email protected]> Thu, 13 Apr 2006 17:12:31 +0200
| Newsgroups | gmane.comp.gnome.apps.gqview.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, I attach a new version, with g_free... there was a memory leak in other one... Excuse me, -- Carles Pina i Estany GPG id: 0x8CBDAE64 http://pinux.info Manresa - Barcelona
gqview-copy-path2-2.0.1.patch
(text/plain, 4.9 KB)
Only in gqview-2.0.1: gqview.spec
Only in gqview-2.0.1-carles2/src: core
diff -ur gqview-2.0.1/src/layout_image.c gqview-2.0.1-carles2/src/layout_image.c
--- gqview-2.0.1/src/layout_image.c 2005-03-01 17:00:03.000000000 +0100
+++ gqview-2.0.1-carles2/src/layout_image.c 2006-04-13 10:14:29.000000000 +0200
@@ -631,6 +631,12 @@
li_pop_menu_click_parent(widget, lw));
}
+static void li_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data)
+{
+ LayoutWindow *lw = data;
+ file_util_copy_path(layout_image_get_path(lw));
+}
+
static void li_pop_menu_move_cb(GtkWidget *widget, gpointer data)
{
LayoutWindow *lw = data;
@@ -725,6 +731,7 @@
menu_item_add_divider(menu);
item = menu_item_add_stock(menu, _("_Copy..."), GTK_STOCK_COPY, G_CALLBACK(li_pop_menu_copy_cb), lw);
+ item = menu_item_add(menu, _("_Copy path"), G_CALLBACK(li_pop_menu_copy_path_cb), lw);
if (!path) gtk_widget_set_sensitive(item, FALSE);
item = menu_item_add(menu, _("_Move..."), G_CALLBACK(li_pop_menu_move_cb), lw);
if (!path) gtk_widget_set_sensitive(item, FALSE);
diff -ur gqview-2.0.1/src/layout_util.c gqview-2.0.1-carles2/src/layout_util.c
--- gqview-2.0.1/src/layout_util.c 2005-03-01 17:00:03.000000000 +0100
+++ gqview-2.0.1-carles2/src/layout_util.c 2006-04-13 10:31:46.000000000 +0200
@@ -310,6 +310,12 @@
file_util_copy(NULL, layout_selection_list(lw), NULL, lw->window);
}
+static void layout_menu_copy_path_cb(GtkAction *action, gpointer data)
+{
+ LayoutWindow *lw = data;
+ file_util_copy_path_list(layout_selection_list(lw));
+}
+
static void layout_menu_move_cb(GtkAction *action, gpointer data)
{
LayoutWindow *lw = data;
@@ -759,7 +765,8 @@
{ "FindDupes", GTK_STOCK_FIND, N_("_Find duplicates..."),"D", NULL, CB(layout_menu_dupes_cb) },
{ "Print", GTK_STOCK_PRINT,N_("_Print..."), "<shift>P", NULL, CB(layout_menu_print_cb) },
{ "NewFolder", NULL, N_("N_ew folder..."), "<control>F", NULL, CB(layout_menu_dir_cb) },
- { "Copy", NULL, N_("_Copy..."), "<control>C", NULL, CB(layout_menu_copy_cb) },
+ { "Copy", GTK_STOCK_COPY, N_("_Copy..."), "<control>C", NULL, CB(layout_menu_copy_cb) },
+ { "Copy path", NULL, N_("_Copy path"), NULL, NULL, CB(layout_menu_copy_path_cb) },
{ "Move", NULL, N_("_Move..."), "<control>M", NULL, CB(layout_menu_move_cb) },
{ "Rename", NULL, N_("_Rename..."), "<control>R", NULL, CB(layout_menu_rename_cb) },
{ "Delete", GTK_STOCK_DELETE, N_("_Delete..."), "<control>D", NULL, CB(layout_menu_delete_cb) },
@@ -836,6 +843,7 @@
" <menuitem action='NewFolder'/>"
" <separator/>"
" <menuitem action='Copy'/>"
+" <menuitem action='Copy path'/>"
" <menuitem action='Move'/>"
" <menuitem action='Rename'/>"
" <menuitem action='Delete'/>"
diff -ur gqview-2.0.1/src/utilops.c gqview-2.0.1-carles2/src/utilops.c
--- gqview-2.0.1/src/utilops.c 2005-05-14 18:23:05.000000000 +0200
+++ gqview-2.0.1-carles2/src/utilops.c 2006-04-13 17:10:13.000000000 +0200
@@ -1078,6 +1078,44 @@
real_file_util_move(source_path, source_list, dest_path, TRUE, parent);
}
+void file_util_copy_path(const gchar *path)
+{
+ static GtkClipboard *clipboard;
+ clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+
+ gtk_clipboard_set_text(clipboard,g_shell_quote(path),-1);
+}
+
+void file_util_copy_path_list(GList *list)
+{
+ static GtkClipboard *clipboard;
+ gchar *dest, *temp;
+ gchar *t2;
+ GList *l = list;
+
+ clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+
+ dest = g_new(gchar,1); g_sprintf(dest,"");
+
+ while (l) {
+ temp = g_shell_quote(l->data);
+
+ //we save dest buffer to request more memory...
+ t2 = g_strdup(dest);
+
+ //we request more memory
+ dest = g_renew(gchar,dest,strlen(dest)+strlen(temp)+2);
+
+ g_sprintf(dest,"%s %s",temp,t2);
+ g_free(t2);
+
+ l=l->next;
+
+ }
+ gtk_clipboard_set_text(clipboard,dest,-1);
+ g_free(dest);
+}
+
void file_util_move_simple(GList *list, const gchar *dest_path)
{
if (!list) return;
diff -ur gqview-2.0.1/src/view_file_list.c gqview-2.0.1-carles2/src/view_file_list.c
--- gqview-2.0.1/src/view_file_list.c 2005-03-01 17:00:03.000000000 +0100
+++ gqview-2.0.1-carles2/src/view_file_list.c 2006-04-13 12:54:27.000000000 +0200
@@ -256,6 +256,13 @@
file_util_copy(NULL, vflist_pop_menu_file_list(vfl), NULL, vfl->listview);
}
+static void vflist_pop_menu_copy_path_cb(GtkWidget *widget, gpointer data)
+{
+ ViewFileList *vfl = data;
+
+ file_util_copy_path_list(vflist_pop_menu_file_list(vfl));
+}
+
static void vflist_pop_menu_move_cb(GtkWidget *widget, gpointer data)
{
ViewFileList *vfl = data;
@@ -398,6 +405,8 @@
menu_item_add_divider(menu);
menu_item_add_stock_sensitive(menu, _("_Copy..."), GTK_STOCK_COPY, active,
G_CALLBACK(vflist_pop_menu_copy_cb), vfl);
+ menu_item_add_sensitive(menu, _("_Copy path"), active,
+ G_CALLBACK(vflist_pop_menu_copy_path_cb), vfl);
menu_item_add_sensitive(menu, _("_Move..."), active,
G_CALLBACK(vflist_pop_menu_move_cb), vfl);
menu_item_add_sensitive(menu, _("_Rename..."), active,