[Xfce4-commits] <xfdesktop:master> Port xfdesktop_file_icon_manager_trash_files() to GIO. Avoid fallback.

Jannis Pohlmann noreply at xfce.org
Tue Nov 2 01:14:09 CET 2010


Updating branch refs/heads/master
         to 53d3d5421dee4b6f2aa06201291b9228f073e5d9 (commit)
       from 0e69dd78810a40c63f05dbe0cf44aecb10bb58e8 (commit)

commit 53d3d5421dee4b6f2aa06201291b9228f073e5d9
Author: Jannis Pohlmann <jannis at xfce.org>
Date:   Mon Oct 18 13:13:19 2010 +0200

    Port xfdesktop_file_icon_manager_trash_files() to GIO. Avoid fallback.

 src/xfdesktop-file-icon-manager.c |   79 ++++++++++++++++++-------------------
 1 files changed, 39 insertions(+), 40 deletions(-)

diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c
index be874af..5a12333 100644
--- a/src/xfdesktop-file-icon-manager.c
+++ b/src/xfdesktop-file-icon-manager.c
@@ -773,21 +773,20 @@ xfdesktop_file_icon_manager_trash_files_cb(DBusGProxy *proxy,
                                            GError *error,
                                            gpointer user_data)
 {
-    XfdesktopTrashFilesData *tdata = user_data;
-    
+    XfdesktopFileIconManager *fmanager = user_data;
+
+    g_return_if_fail(fmanager);
+
     if(error) {
-        /* fallback to normal deletion */
-        xfdesktop_file_icon_manager_delete_files(tdata->fmanager, tdata->files);
+        GtkWidget *parent = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
+
+        xfce_message_dialog(GTK_WINDOW (parent),
+                            _("Trash Error"), GTK_STOCK_DIALOG_ERROR,
+                            _("The selected files could not be trashed"),
+                            _("This feature requires a file manager service to "
+                              "be present (such as the one supplied by Thunar)."),
+                            GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
     }
-    
-    tdata->fmanager->priv->active_trash_calls = g_list_remove(tdata->fmanager->priv->active_trash_calls,
-                                                              tdata);
-    
-    g_object_unref(G_OBJECT(tdata->proxy));
-    g_list_foreach(tdata->files, (GFunc)g_object_unref, NULL);
-    g_list_free(tdata->files);
-    
-    g_free(tdata);
 }
 
 static gboolean
@@ -795,12 +794,11 @@ xfdesktop_file_icon_manager_trash_files(XfdesktopFileIconManager *fmanager,
                                         GList *files)
 {
     DBusGProxy *trash_proxy = xfdesktop_file_utils_peek_trash_proxy();
-    DBusGProxyCall *call;
+    gboolean result = TRUE;
     gchar **uris, *display_name, *startup_id;
     GList *l;
     gint i, nfiles;
-    const ThunarVfsInfo *info;
-    XfdesktopTrashFilesData *tdata;
+    GFile *file;
     
     g_return_val_if_fail(files, TRUE);
     
@@ -811,36 +809,36 @@ xfdesktop_file_icon_manager_trash_files(XfdesktopFileIconManager *fmanager,
     uris = g_new(gchar *, nfiles + 1);
     
     for(l = files, i = 0; l; l = l->next, ++i) {
-        info = xfdesktop_file_icon_peek_info(XFDESKTOP_FILE_ICON(l->data));
-        uris[i] = thunar_vfs_path_dup_uri(info->path);
+        file = xfdesktop_file_icon_peek_file(XFDESKTOP_FILE_ICON(l->data));
+        uris[i] = g_file_get_uri(file);
     }
     uris[nfiles] = NULL;
     
     display_name = gdk_screen_make_display_name(fmanager->priv->gscreen);
-
     startup_id = g_strdup_printf("_TIME%d", gtk_get_current_event_time());
     
-    tdata = g_new(XfdesktopTrashFilesData, 1);
-    call = xfdesktop_trash_proxy_move_to_trash_async(trash_proxy, (const char **)uris,
-                                                     display_name, startup_id,
-                                                     xfdesktop_file_icon_manager_trash_files_cb, 
-                                                     tdata);
-
-    if(call) {
-        tdata->fmanager = fmanager;
-        tdata->proxy = g_object_ref(G_OBJECT(trash_proxy));
-        tdata->call = call;
-        tdata->files = files;
-        fmanager->priv->active_trash_calls = g_list_prepend(fmanager->priv->active_trash_calls,
-                                                            tdata);
-    } else
-        g_free(tdata);
+    if (!xfdesktop_trash_proxy_move_to_trash_async(trash_proxy, (const char **)uris,
+                                                   display_name, startup_id,
+                                                   xfdesktop_file_icon_manager_trash_files_cb, 
+                                                   fmanager))
+    {
+        GtkWidget *parent = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
+
+        xfce_message_dialog(GTK_WINDOW (parent),
+                            _("Trash Error"), GTK_STOCK_DIALOG_ERROR,
+                            _("The selected files could not be trashed"),
+                            _("This feature requires a file manager service to "
+                              "be present (such as the one supplied by Thunar)."),
+                            GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
+
+        result = FALSE;
+    }
     
     g_free(startup_id);
     g_strfreev(uris);
     g_free(display_name);
     
-    return !!call;
+    return result;
 }
 
 static void
@@ -880,13 +878,14 @@ xfdesktop_file_icon_manager_delete_selected(XfdesktopFileIconManager *fmanager,
     /* make sure the icons don't get destroyed while we're working */
     g_list_foreach(selected, (GFunc)g_object_ref, NULL);
     
-    if(force_delete || !xfdesktop_file_icon_manager_trash_files(fmanager,
-                                                                selected))
-    {
+    if (!force_delete) {
+        xfdesktop_file_icon_manager_trash_files(fmanager, selected);
+    } else {
         xfdesktop_file_icon_manager_delete_files(fmanager, selected);
-        g_list_foreach(selected, (GFunc)g_object_unref, NULL);
-        g_list_free(selected);
     }
+      
+    g_list_foreach(selected, (GFunc)g_object_unref, NULL);
+    g_list_free(selected);
     
     xfdesktop_file_icon_position_changed(NULL, fmanager);
 }



More information about the Xfce4-commits mailing list