diff options
Diffstat (limited to 'extra/xfdesktop')
-rw-r--r-- | extra/xfdesktop/PKGBUILD | 49 | ||||
-rw-r--r-- | extra/xfdesktop/implement-paste-on-desktop.patch | 236 | ||||
-rw-r--r-- | extra/xfdesktop/xfdesktop.install | 6 |
3 files changed, 269 insertions, 22 deletions
diff --git a/extra/xfdesktop/PKGBUILD b/extra/xfdesktop/PKGBUILD index f300f061c..635492267 100644 --- a/extra/xfdesktop/PKGBUILD +++ b/extra/xfdesktop/PKGBUILD @@ -1,41 +1,50 @@ -# $Id: PKGBUILD 138129 2011-09-17 02:28:33Z allan $ -# Maintainer: AndyRTR <andyrtr@archlinux.org> +# $Id: PKGBUILD 150819 2012-02-23 06:32:41Z foutrelis $ +# Maintainer: Evangelos Foutras <evangelos@foutrelis.com> # Contributor: tobias <tobias funnychar archlinux.org> pkgname=xfdesktop pkgver=4.8.3 -pkgrel=1 +pkgrel=2 pkgdesc="A desktop manager for Xfce" arch=('i686' 'x86_64' 'mips64el') -license=('GPL2') url="http://www.xfce.org/" +license=('GPL2') groups=('xfce4') -depends=('libxfce4ui' 'thunar>=1.2.0' 'garcon' 'hicolor-icon-theme' 'libwnck>=2.30.0') -makedepends=('intltool' 'xfce4-panel>=4.8.0') +depends=('libxfce4ui' 'thunar>=1.2.0' 'garcon' 'hicolor-icon-theme' 'libwnck') +makedepends=('intltool' 'xfce4-panel') optdepends=('xfce4-panel: panel menu plugin') conflicts=('xfce4-menueditor') replaces=('xfce4-menueditor') options=('!libtool') install=xfdesktop.install -source=(http://archive.xfce.org/src/xfce/${pkgname}/4.8/${pkgname}-${pkgver}.tar.bz2) -md5sums=('617c667c469698e8c974e38412cb484c') +source=(http://archive.xfce.org/src/xfce/$pkgname/4.8/$pkgname-$pkgver.tar.bz2 + implement-paste-on-desktop.patch) +sha256sums=('e58460f52ae96c389402f6db62c46db61cd51cdb550a42bd97c0ab2a5b62f424' + 'f26a75fe27c198cd40fad139310e984f4eaac0dfa2cae0d7f32498a8f58322b2') build() { - cd "${srcdir}/${pkgname}-${pkgver}" + cd "$srcdir/$pkgname-$pkgver" + + # Fix FS#27866: Paste menu entry in context menu is deactivated + # Upstream report/patch: https://bugzilla.xfce.org/show_bug.cgi?id=3804 + patch -Np1 -i "$srcdir/implement-paste-on-desktop.patch" + ./configure --prefix=/usr \ - --sysconfdir=/etc \ - --libexecdir=/usr/lib \ - --localstatedir=/var \ - --disable-static \ - --enable-gio-unix \ - --enable-thunarx \ - --enable-exo \ - --enable-notifications \ - --disable-debug + --sysconfdir=/etc \ + --libexecdir=/usr/lib \ + --localstatedir=/var \ + --disable-static \ + --enable-gio-unix \ + --enable-thunarx \ + --enable-exo \ + --enable-notifications \ + --disable-debug make } package() { - cd "${srcdir}/${pkgname}-${pkgver}" - make DESTDIR="${pkgdir}" install + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install } + +# vim:set ts=2 sw=2 et: diff --git a/extra/xfdesktop/implement-paste-on-desktop.patch b/extra/xfdesktop/implement-paste-on-desktop.patch new file mode 100644 index 000000000..a84e6cb05 --- /dev/null +++ b/extra/xfdesktop/implement-paste-on-desktop.patch @@ -0,0 +1,236 @@ +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 + diff --git a/extra/xfdesktop/xfdesktop.install b/extra/xfdesktop/xfdesktop.install index 21b79d2d4..e4f8fd06c 100644 --- a/extra/xfdesktop/xfdesktop.install +++ b/extra/xfdesktop/xfdesktop.install @@ -3,9 +3,11 @@ post_install() { } post_upgrade() { - post_install $1 + post_install } post_remove() { - gtk-update-icon-cache -q -t -f usr/share/icons/hicolor + post_install } + +# vim:set ts=2 sw=2 et: |