[Xfce4-commits] <xfdesktop:master> Implement a few TODOs, rework launch and file transfer code a bit.

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


Updating branch refs/heads/master
         to 9553e7af647dbf84da20bca5bf63a6d640575c91 (commit)
       from 48f774dec5b95ef286059029bae906c65e9fb865 (commit)

commit 9553e7af647dbf84da20bca5bf63a6d640575c91
Author: Jannis Pohlmann <jannis at xfce.org>
Date:   Tue Nov 2 00:47:08 2010 +0100

    Implement a few TODOs, rework launch and file transfer code a bit.

 src/xfdesktop-file-icon-manager.c |   26 ++++++++-------------
 src/xfdesktop-file-icon.c         |    2 +
 src/xfdesktop-file-utils.c        |   46 +++++++++++++++++++++++++-----------
 src/xfdesktop-file-utils.h        |   17 +++++++------
 src/xfdesktop-regular-file-icon.c |    2 +-
 5 files changed, 54 insertions(+), 39 deletions(-)

diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c
index 52b18b0..1e64eeb 100644
--- a/src/xfdesktop-file-icon-manager.c
+++ b/src/xfdesktop-file-icon-manager.c
@@ -2880,17 +2880,14 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager
         
         file_list = xfdesktop_file_utils_file_list_from_string((const gchar *)data->data);
         if(file_list) {
+            GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
+
             if(tinfo && xfdesktop_file_utils_file_is_executable(tinfo)) {
-                xfdesktop_file_utils_execute(fmanager->priv->folder,
-                                             tfile, file_list,
-                                             fmanager->priv->gscreen);
-                
-                /* TODO check the result of the D-Bus method and the above function
-                 * call, and only set drop_ok on success */
-                drop_ok = TRUE;
+                drop_ok = xfdesktop_file_utils_execute(fmanager->priv->folder,
+                                                       tfile, file_list,
+                                                       fmanager->priv->gscreen,
+                                                       GTK_WINDOW(toplevel));
             } else if(tfile && g_file_has_uri_scheme(tfile, "trash")) {
-                GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
-
                 /* move files to the trash */
                 xfdesktop_file_utils_trash_files(file_list,
                                                  fmanager->priv->gscreen,
@@ -2931,16 +2928,13 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager
                 if(dest_file_list) {
                     dest_file_list = g_list_reverse(dest_file_list);
 
-                    xfdesktop_file_utils_transfer_files(context->action, 
-                                                        file_list, dest_file_list,
-                                                        fmanager->priv->gscreen);
+                    drop_ok =xfdesktop_file_utils_transfer_files(context->action, 
+                                                                 file_list, 
+                                                                 dest_file_list,
+                                                                 fmanager->priv->gscreen);
                 }
 
                 xfdesktop_file_utils_file_list_free(dest_file_list);
-
-                /* TODO check the result of the D-Bus method and the above
-                 * function call in order to set drop_ok to TRUE or FALSE */
-                drop_ok = TRUE;
             }
         }
     }
diff --git a/src/xfdesktop-file-icon.c b/src/xfdesktop-file-icon.c
index 98cc4cc..835af6a 100644
--- a/src/xfdesktop-file-icon.c
+++ b/src/xfdesktop-file-icon.c
@@ -89,6 +89,8 @@ xfdesktop_file_icon_activated(XfdesktopIcon *icon)
 
     if(g_file_info_get_file_type(info) == G_FILE_TYPE_DIRECTORY)
         xfdesktop_file_utils_open_folder(file, gscreen, GTK_WINDOW(toplevel));
+    else if(xfdesktop_file_utils_file_is_executable(info))
+        xfdesktop_file_utils_execute(NULL, file, NULL, gscreen, GTK_WINDOW(toplevel));
     else
         xfdesktop_file_utils_launch(file, gscreen, GTK_WINDOW(toplevel));
     
diff --git a/src/xfdesktop-file-utils.c b/src/xfdesktop-file-utils.c
index 567f8b5..64aca16 100644
--- a/src/xfdesktop-file-utils.c
+++ b/src/xfdesktop-file-utils.c
@@ -941,8 +941,8 @@ xfdesktop_file_utils_launch(GFile *file,
             xfce_message_dialog(parent,
                                 _("Launch Error"), GTK_STOCK_DIALOG_ERROR,
                                 _("The file could not be opened"),
-                                error->message, GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT,
-                                NULL);
+                                error->message, 
+                                GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
 
             g_error_free(error);
         }
@@ -962,17 +962,20 @@ xfdesktop_file_utils_launch(GFile *file,
     }
 }
 
-void
+gboolean
 xfdesktop_file_utils_execute(GFile *working_directory,
                              GFile *file,
                              GList *files,
-                             GdkScreen *screen)
+                             GdkScreen *screen,
+                             GtkWindow *parent)
 {
     DBusGProxy *fileman_proxy;
+    gboolean success = TRUE;
     
-    g_return_if_fail(working_directory == NULL || G_IS_FILE(working_directory));
-    g_return_if_fail(G_IS_FILE(file));
-    g_return_if_fail(screen == NULL || GDK_IS_SCREEN(screen));
+    g_return_val_if_fail(working_directory == NULL || G_IS_FILE(working_directory), FALSE);
+    g_return_val_if_fail(G_IS_FILE(file), FALSE);
+    g_return_val_if_fail(screen == NULL || GDK_IS_SCREEN(screen), FALSE);
+    g_return_val_if_fail(parent == NULL || GTK_IS_WINDOW(parent), FALSE);
     
     if(!screen)
         screen = gdk_display_get_default_screen(gdk_display_get_default());
@@ -1002,8 +1005,8 @@ xfdesktop_file_utils_execute(GFile *working_directory,
             gchar *name = g_filename_display_basename(filename);
             gchar *primary = g_markup_printf_escaped(_("Failed to run \"%s\""), name);
 
-            xfce_message_dialog(NULL,
-                                _("Run Error"), GTK_STOCK_DIALOG_ERROR,
+            xfce_message_dialog(parent,
+                                _("Launch Error"), GTK_STOCK_DIALOG_ERROR,
                                 primary, error->message, 
                                 GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT,
                                 NULL);
@@ -1013,6 +1016,8 @@ xfdesktop_file_utils_execute(GFile *working_directory,
             g_free(filename);
 
             g_error_free(error);
+
+            success = FALSE;
         }
         
         g_free(startup_id);
@@ -1025,7 +1030,7 @@ xfdesktop_file_utils_execute(GFile *working_directory,
         gchar *name = g_filename_display_basename(filename);
         gchar *primary = g_markup_printf_escaped(_("Failed to run \"%s\""), name);
 
-        xfce_message_dialog(NULL,
+        xfce_message_dialog(parent,
                             _("Launch Error"), GTK_STOCK_DIALOG_ERROR,
                             primary,
                             _("This feature requires a file manager service to "
@@ -1035,7 +1040,11 @@ xfdesktop_file_utils_execute(GFile *working_directory,
         g_free(primary);
         g_free(name);
         g_free(filename);
+
+        success = FALSE;
     }
+
+    return success;
 }
 
 void
@@ -1164,17 +1173,18 @@ xfdesktop_file_utils_transfer_file(GdkDragAction action,
     }
 }
 
-void
+gboolean
 xfdesktop_file_utils_transfer_files(GdkDragAction action,
                                     GList *source_files,
                                     GList *target_files,
                                     GdkScreen *screen)
 {
     DBusGProxy *fileman_proxy;
+    gboolean success = TRUE;
     
-    g_return_if_fail(source_files != NULL && G_IS_FILE(source_files->data));
-    g_return_if_fail(target_files != NULL && G_IS_FILE(target_files->data));
-    g_return_if_fail(screen == NULL || GDK_IS_SCREEN(screen));
+    g_return_val_if_fail(source_files != NULL && G_IS_FILE(source_files->data), FALSE);
+    g_return_val_if_fail(target_files != NULL && G_IS_FILE(target_files->data), FALSE);
+    g_return_val_if_fail(screen == NULL || GDK_IS_SCREEN(screen), FALSE);
 
     if(!screen)
         screen = gdk_display_get_default_screen(gdk_display_get_default());
@@ -1211,6 +1221,8 @@ xfdesktop_file_utils_transfer_files(GdkDragAction action,
                 break;
             default:
                 g_warning("Unsupported transfer action");
+                success = FALSE;
+                break;
         }
 
         if(error) {
@@ -1221,6 +1233,8 @@ xfdesktop_file_utils_transfer_files(GdkDragAction action,
                                 NULL);
 
             g_error_free(error);
+
+            success = FALSE;
         }
         
         g_free(startup_id);
@@ -1234,7 +1248,11 @@ xfdesktop_file_utils_transfer_files(GdkDragAction action,
                             _("This feature requires a file manager service to "
                               "be present (such as the one supplied by Thunar)."),
                             GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
+
+        success = FALSE;
     }
+
+    return success;
 }
 
 static gint dbus_ref_cnt = 0;
diff --git a/src/xfdesktop-file-utils.h b/src/xfdesktop-file-utils.h
index 2b44239..97a0e21 100644
--- a/src/xfdesktop-file-utils.h
+++ b/src/xfdesktop-file-utils.h
@@ -86,10 +86,11 @@ void xfdesktop_file_utils_show_properties_dialog(GFile *file,
 void xfdesktop_file_utils_launch(GFile *file,
                                  GdkScreen *screen,
                                  GtkWindow *parent);
-void xfdesktop_file_utils_execute(GFile *working_directory,
-                                  GFile *file,
-                                  GList *files,
-                                  GdkScreen *screen);
+gboolean xfdesktop_file_utils_execute(GFile *working_directory,
+                                      GFile *file,
+                                      GList *files,
+                                      GdkScreen *screen,
+                                      GtkWindow *parent);
 void xfdesktop_file_utils_display_chooser_dialog(GFile *file,
                                                  gboolean open,
                                                  GdkScreen *screen,
@@ -98,10 +99,10 @@ void xfdesktop_file_utils_transfer_file(GdkDragAction action,
                                         GFile *source_file,
                                         GFile *target_file,
                                         GdkScreen *screen);
-void xfdesktop_file_utils_transfer_files(GdkDragAction action,
-                                         GList *source_files,
-                                         GList *target_files,
-                                         GdkScreen *screen);
+gboolean xfdesktop_file_utils_transfer_files(GdkDragAction action,
+                                             GList *source_files,
+                                             GList *target_files,
+                                             GdkScreen *screen);
 
 
 gboolean xfdesktop_file_utils_dbus_init(void);
diff --git a/src/xfdesktop-regular-file-icon.c b/src/xfdesktop-regular-file-icon.c
index c46a639..323e79b 100644
--- a/src/xfdesktop-regular-file-icon.c
+++ b/src/xfdesktop-regular-file-icon.c
@@ -394,7 +394,7 @@ xfdesktop_regular_file_icon_do_drop_dest(XfdesktopIcon *icon,
         files.prev = files.next = NULL;
 
         xfdesktop_file_utils_execute(NULL, regular_file_icon->priv->file, &files,
-                                     regular_file_icon->priv->gscreen);
+                                     regular_file_icon->priv->gscreen, NULL);
 
         result = TRUE;
     } else {



More information about the Xfce4-commits mailing list