[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