diff options
Diffstat (limited to 'extra/xfdesktop/implement-paste-on-desktop.patch')
-rw-r--r-- | extra/xfdesktop/implement-paste-on-desktop.patch | 236 |
1 files changed, 0 insertions, 236 deletions
diff --git a/extra/xfdesktop/implement-paste-on-desktop.patch b/extra/xfdesktop/implement-paste-on-desktop.patch deleted file mode 100644 index a84e6cb05..000000000 --- a/extra/xfdesktop/implement-paste-on-desktop.patch +++ /dev/null @@ -1,236 +0,0 @@ -From dd57435413a10b288153d1ae0062d37e58bcffd1 Mon Sep 17 00:00:00 2001 -From: Eric Koegel <eric.koegel@gmail.com> -Date: Sat, 17 Dec 2011 10:37:04 +0300 -Subject: [PATCH] Adds the code required to perform a paste on the on the - desktop. Fixes bug 3804. - ---- - src/xfdesktop-clipboard-manager.c | 114 ++++++++++++++++++++++++++++++------- - src/xfdesktop-file-icon-manager.c | 27 ++++++++- - 2 files changed, 120 insertions(+), 21 deletions(-) - -diff --git a/src/xfdesktop-clipboard-manager.c b/src/xfdesktop-clipboard-manager.c -index 76b4bef..ed90aa0 100644 ---- a/src/xfdesktop-clipboard-manager.c -+++ b/src/xfdesktop-clipboard-manager.c -@@ -307,7 +307,6 @@ xfdesktop_clipboard_manager_owner_changed (GtkClipboard *clipboard, - } - - --#if 0 - static void - xfdesktop_clipboard_manager_contents_received (GtkClipboard *clipboard, - GtkSelectionData *selection_data, -@@ -318,6 +317,8 @@ xfdesktop_clipboard_manager_contents_received (GtkClipboard *clipboard, - GtkWindow *parent = GTK_WINDOW(gtk_widget_get_toplevel(request->widget)); - gboolean path_copy = TRUE; - GList *path_list = NULL; -+ GList *dest_file_list = NULL; -+ GList *l = NULL; - gchar *data; - - /* check whether the retrieval worked */ -@@ -340,19 +341,43 @@ xfdesktop_clipboard_manager_contents_received (GtkClipboard *clipboard, - } - - /* determine the path list stored with the selection */ -- path_list = thunar_vfs_path_list_from_string (data, NULL); -+ path_list = xfdesktop_file_utils_file_list_from_string (data); - } - - /* perform the action if possible */ - if (G_LIKELY (path_list != NULL)) - { -+ for (l = path_list; l; l = l->next) { -+ gchar *dest_basename = g_file_get_basename(l->data); -+ -+ if(dest_basename && *dest_basename != '\0') { -+ /* If we copy a file, we need to use the new absolute filename -+ * as the destination. If we move, we need to use the destination -+ * directory. */ -+ if(path_copy) { -+ GFile *dest_file = g_file_get_child(request->target_file, dest_basename); -+ dest_file_list = g_list_prepend(dest_file_list, dest_file); -+ } else { -+ dest_file_list = g_list_prepend(dest_file_list, request->target_file); -+ } -+ } -+ g_free(dest_basename); -+ } -+ -+ dest_file_list = g_list_reverse(dest_file_list); -+ - if (G_LIKELY (path_copy)) -- xfdesktop_file_utils_copy_into(parent, path_list, request->target_path); -- //thunar_application_copy_into (application, request->widget, path_list, request->target_path, request->new_files_closure); -- else -- xfdesktop_file_utils_move_into(parent, path_list, request->target_path); -- //thunar_application_move_into (application, request->widget, path_list, request->target_path, request->new_files_closure); -- thunar_vfs_path_list_free (path_list); -+ { -+ xfdesktop_file_utils_transfer_files(GDK_ACTION_COPY, -+ path_list, -+ dest_file_list, -+ gtk_widget_get_screen(GTK_WIDGET(parent))); -+ } else { -+ xfdesktop_file_utils_transfer_files(GDK_ACTION_MOVE, -+ path_list, -+ dest_file_list, -+ gtk_widget_get_screen(GTK_WIDGET(parent))); -+ } - - /* clear the clipboard if it contained "cutted data" - * (gtk_clipboard_clear takes care of not clearing -@@ -365,18 +390,11 @@ xfdesktop_clipboard_manager_contents_received (GtkClipboard *clipboard, - * if either the Xserver or our GTK+ version - * doesn't support the XFixes extension. - */ --#if GTK_CHECK_VERSION(2,6,0) - if (!gdk_display_supports_selection_notification (gtk_clipboard_get_display (manager->clipboard))) --#endif - { - xfdesktop_clipboard_manager_owner_changed (manager->clipboard, NULL, manager); - } - } -- else -- { -- /* tell the user that we cannot paste */ --// thunar_dialogs_show_error (request->widget, NULL, _("There is nothing on the clipboard to paste")); -- } - - /* free the request */ - if (G_LIKELY (request->widget != NULL)) -@@ -384,10 +402,11 @@ xfdesktop_clipboard_manager_contents_received (GtkClipboard *clipboard, - if (G_LIKELY (request->new_files_closure != NULL)) - g_closure_unref (request->new_files_closure); - g_object_unref (G_OBJECT (request->manager)); -- thunar_vfs_path_unref (request->target_path); -- g_free (request); -+ -+ g_list_free(dest_file_list); -+ g_list_free(path_list); - } --#endif -+ - - - static void -@@ -654,6 +673,61 @@ xfdesktop_clipboard_manager_cut_files (XfdesktopClipboardManager *manager, - gboolean - xfdesktop_clipboard_manager_get_can_paste (XfdesktopClipboardManager *manager) - { -- /* FIXME: implement */ -- return FALSE; -+ g_return_val_if_fail (XFDESKTOP_IS_CLIPBOARD_MANAGER (manager), FALSE); -+ return manager->can_paste; -+} -+ -+ -+/** -+ * thunar_clipboard_manager_paste_files: -+ * @manager : a #XfdesktopClipboardManager. -+ * @target_file : the #GFile of the folder to which the contents on the clipboard -+ * should be pasted. -+ * @widget : a #GtkWidget, on which to perform the paste or %NULL if no widget is -+ * known. -+ * @new_files_closure : a #GClosure to connect to the job's "new-files" signal, -+ * which will be emitted when the job finishes with the -+ * list of #GFile<!---->s created by the job, or -+ * %NULL if you're not interested in the signal. -+ * -+ * Pastes the contents from the clipboard associated with @manager to the directory -+ * referenced by @target_file. -+ * Code copied and adapted from thunar-clipboard-manager.c -+ * Copyright (c) 2005-2006 Benedikt Meurer <benny@xfce.org> -+ * Copyright (c) 2009-2011 Jannis Pohlmann <jannis@xfce.org> -+ **/ -+void -+xfdesktop_clipboard_manager_paste_files (XfdesktopClipboardManager *manager, -+ GFile *target_file, -+ GtkWidget *widget, -+ GClosure *new_files_closure) -+{ -+ XfdesktopClipboardPasteRequest *request; -+ -+ g_return_if_fail (XFDESKTOP_IS_CLIPBOARD_MANAGER (manager)); -+ g_return_if_fail (widget == NULL || GTK_IS_WIDGET (widget)); -+ -+ /* prepare the paste request */ -+ request = g_slice_new0 (XfdesktopClipboardPasteRequest); -+ request->manager = g_object_ref (G_OBJECT (manager)); -+ request->target_file = g_object_ref (target_file); -+ request->widget = widget; -+ -+ /* take a reference on the closure (if any) */ -+ if (G_LIKELY (new_files_closure != NULL)) -+ { -+ request->new_files_closure = new_files_closure; -+ g_closure_ref (new_files_closure); -+ g_closure_sink (new_files_closure); -+ } -+ -+ /* get notified when the widget is destroyed prior to -+ * completing the clipboard contents retrieval -+ */ -+ if (G_LIKELY (request->widget != NULL)) -+ g_object_add_weak_pointer (G_OBJECT (request->widget), (gpointer) &request->widget); -+ -+ /* schedule the request */ -+ gtk_clipboard_request_contents (manager->clipboard, manager->x_special_gnome_copied_files, -+ xfdesktop_clipboard_manager_contents_received, request); - } -diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c -index d3ca2eb..b7fada2 100644 ---- a/src/xfdesktop-file-icon-manager.c -+++ b/src/xfdesktop-file-icon-manager.c -@@ -858,6 +858,15 @@ xfdesktop_file_icon_menu_delete(GtkWidget *widget, - } - - static void -+xfdesktop_file_icon_menu_paste(GtkWidget *widget, -+ gpointer user_data) -+{ -+ XfdesktopFileIconManager *fmanager = XFDESKTOP_FILE_ICON_MANAGER(user_data); -+ if(widget && fmanager) -+ xfdesktop_clipboard_manager_paste_files(clipboard_manager, fmanager->priv->folder, widget, NULL); -+} -+ -+static void - xfdesktop_file_icon_menu_properties(GtkWidget *widget, - gpointer user_data) - { -@@ -1616,7 +1625,11 @@ xfdesktop_file_icon_manager_populate_context_menu(XfceDesktop *desktop, - mi = gtk_image_menu_item_new_from_stock(GTK_STOCK_PASTE, NULL); - gtk_widget_show(mi); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); -- /* FIXME: implement */ -+ if(xfdesktop_clipboard_manager_get_can_paste(clipboard_manager)) { -+ g_signal_connect(G_OBJECT(mi), "activate", -+ G_CALLBACK(xfdesktop_file_icon_menu_paste), -+ fmanager); -+ } else - gtk_widget_set_sensitive(mi, FALSE); - } else { - mi = gtk_image_menu_item_new_from_stock(GTK_STOCK_COPY, NULL); -@@ -2098,6 +2111,18 @@ xfdesktop_file_icon_manager_key_press(GtkWidget *widget, - } - return TRUE; - -+ case GDK_v: -+ case GDK_V: -+ if(!(evt->state & GDK_CONTROL_MASK) -+ || (evt->state & (GDK_SHIFT_MASK|GDK_MOD1_MASK|GDK_MOD4_MASK))) -+ { -+ return FALSE; -+ } -+ if(xfdesktop_clipboard_manager_get_can_paste(clipboard_manager)) { -+ xfdesktop_clipboard_manager_paste_files(clipboard_manager, fmanager->priv->folder, widget, NULL); -+ } -+ return TRUE; -+ - case GDK_r: - case GDK_R: - if(!(evt->state & GDK_CONTROL_MASK) --- -1.7.5.4 - |