[Xfce4-commits] [xfce/xfdesktop] 28/34: Port the rest to GDBus

noreply at xfce.org noreply at xfce.org
Sun Apr 16 07:07:02 CEST 2017


This is an automated email from the git hooks/post-receive script.

eric pushed a commit to branch master
in repository xfce/xfdesktop.

commit 78d841b96ce49e0427ceaa486904a529858da0bd
Author: Eric Koegel <eric.koegel at gmail.com>
Date:   Sun Jun 12 10:43:28 2016 +0300

    Port the rest to GDBus
---
 .gitignore                        |   3 +
 src/Makefile.am                   |  54 +++--
 src/xfdesktop-file-icon-manager.c |  85 +-------
 src/xfdesktop-file-utils.c        | 422 +++++++++++++++++++++++++-------------
 src/xfdesktop-file-utils.h        |   5 +-
 5 files changed, 313 insertions(+), 256 deletions(-)

diff --git a/.gitignore b/.gitignore
index abd4a52..6458620 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,8 +61,11 @@ common/xfdesktop-marshal.c
 common/xfdesktop-marshal.h
 common/tumbler.c
 common/tumbler.h
+src/xfdesktop-file-manager-proxy.c
 src/xfdesktop-file-manager-proxy.h
+src/xfdesktop-thunar-proxy.c
 src/xfdesktop-thunar-proxy.h
+src/xfdesktop-trash-proxy.c
 src/xfdesktop-trash-proxy.h
 src/xfdesktop-file-manager-proxy.c
 src/xfdesktop-thunar-proxy.c
diff --git a/src/Makefile.am b/src/Makefile.am
index b690e17..5dd4821 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -127,13 +127,10 @@ if ENABLE_FILE_ICONS
 xfdesktop_SOURCES += $(desktop_file_icon_sources)
 
 xfdesktop_CFLAGS += \
-	-DDBUS_API_SUBJECT_TO_CHANGE \
-	$(THUNARX_CFLAGS) \
-	$(DBUS_CFLAGS)
+	$(THUNARX_CFLAGS)
 
 xfdesktop_LDADD += \
-	$(THUNARX_LIBS) \
-	$(DBUS_LIBS)
+	$(THUNARX_LIBS)
 
 endif
 endif
@@ -179,33 +176,34 @@ xfce-desktop-enum-types.c: $(enum_headers) Makefile
 if ENABLE_FILE_ICONS
 
 xfdesktop_built_sources += \
+	xfdesktop-file-manager-proxy.c \
 	xfdesktop-file-manager-proxy.h \
+	xfdesktop-thunar-proxy.c \
 	xfdesktop-thunar-proxy.h \
+	xfdesktop-trash-proxy.c \
 	xfdesktop-trash-proxy.h
 
-xfdesktop-file-manager-proxy.h: $(srcdir)/xfdesktop-file-manager-dbus.xml Makefile
-	$(AM_V_GEN) ( \
-		dbus-binding-tool --mode=glib-client \
-			$(srcdir)/xfdesktop-file-manager-dbus.xml > xfdesktop-file-manager-proxy.h \
-		&& $(SED) -i -e 's/org_xfce_FileManager/xfdesktop_file_manager_proxy/g' \
-			xfdesktop-file-manager-proxy.h \
-	)
-			
-xfdesktop-thunar-proxy.h: $(srcdir)/xfdesktop-thunar-dbus.xml Makefile
-	$(AM_V_GEN) ( \
-		dbus-binding-tool --mode=glib-client \
-			$(srcdir)/xfdesktop-thunar-dbus.xml > xfdesktop-thunar-proxy.h \
-		&& $(SED) -i -e 's/org_xfce_Thunar/xfdesktop_thunar_proxy/g' \
-			xfdesktop-thunar-proxy.h \
-	)
-
-xfdesktop-trash-proxy.h: $(srcdir)/xfdesktop-trash-dbus.xml Makefile
-	$(AM_V_GEN) ( \
-		dbus-binding-tool --mode=glib-client \
-			$(srcdir)/xfdesktop-trash-dbus.xml > xfdesktop-trash-proxy.h \
-		&& $(SED) -i -e 's/org_xfce_Trash/xfdesktop_trash_proxy/g' \
-			xfdesktop-trash-proxy.h \
-	)
+
+xfdesktop-file-manager-proxy.c xfdesktop-file-manager-proxy.h : $(srcdir)/xfdesktop-file-manager-dbus.xml Makefile
+	gdbus-codegen \
+		--c-namespace=Xfdesktop \
+		--interface-prefix=org.xfce. \
+		--generate-c-code=xfdesktop-file-manager-proxy \
+		$(srcdir)/xfdesktop-file-manager-dbus.xml
+
+xfdesktop-thunar-proxy.c xfdesktop-thunar-proxy.h : $(srcdir)/xfdesktop-thunar-dbus.xml Makefile
+	gdbus-codegen \
+		--c-namespace=Xfdesktop \
+		--interface-prefix=org.xfce. \
+		--generate-c-code=xfdesktop-thunar-proxy \
+		$(srcdir)/xfdesktop-thunar-dbus.xml
+
+xfdesktop-trash-proxy.c xfdesktop-trash-proxy.h : $(srcdir)/xfdesktop-trash-dbus.xml Makefile
+	gdbus-codegen \
+		--c-namespace=Xfdesktop \
+		--interface-prefix=org.xfce. \
+		--generate-c-code=xfdesktop-trash-proxy \
+		$(srcdir)/xfdesktop-trash-dbus.xml
 
 endif
 
diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c
index fcdaac1..35eaad7 100644
--- a/src/xfdesktop-file-icon-manager.c
+++ b/src/xfdesktop-file-icon-manager.c
@@ -65,11 +65,9 @@
 #include "xfdesktop-file-icon.h"
 #include "xfdesktop-file-icon-manager.h"
 #include "xfdesktop-file-utils.h"
-#include "xfdesktop-file-manager-proxy.h"
 #include "xfdesktop-icon-view.h"
 #include "xfdesktop-regular-file-icon.h"
 #include "xfdesktop-special-file-icon.h"
-#include "xfdesktop-trash-proxy.h"
 #include "xfdesktop-volume-icon.h"
 #include "xfdesktop-thumbnailer.h"
 
@@ -234,13 +232,6 @@ G_DEFINE_TYPE_EXTENDED(XfdesktopFileIconManager,
 
 #define XFDESKTOP_FILE_ICON_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), XFDESKTOP_TYPE_ICON_VIEW_MANAGER, XfdesktopFileIconManagerPrivate))
 
-typedef struct
-{
-    XfdesktopFileIconManager *fmanager;
-    DBusGProxy *proxy;
-    DBusGProxyCall *call;
-    GList *files;
-} XfdesktopTrashFilesData;
 
 enum
 {
@@ -701,79 +692,21 @@ xfdesktop_file_icon_manager_delete_files(XfdesktopFileIconManager *fmanager,
     g_list_free(gfiles);
 }
 
-static void
-xfdesktop_file_icon_manager_trash_files_cb(DBusGProxy *proxy,
-                                           GError *error,
-                                           gpointer user_data)
-{
-    XfdesktopFileIconManager *fmanager = user_data;
-
-    g_return_if_fail(fmanager);
-
-    if(error) {
-        GtkWidget *parent = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
-
-        xfce_message_dialog(GTK_WINDOW(parent),
-                            _("Trash Error"), "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)."),
-                            XFCE_BUTTON_TYPE_MIXED, "window-close", _("_Close"), GTK_RESPONSE_ACCEPT,
-                            NULL);
-    }
-}
-
 static gboolean
 xfdesktop_file_icon_manager_trash_files(XfdesktopFileIconManager *fmanager,
                                         GList *files)
 {
-    DBusGProxy *trash_proxy = xfdesktop_file_utils_peek_trash_proxy();
-    gboolean result = TRUE;
-    gchar **uris, *display_name, *startup_id;
-    GList *l;
-    gint i, nfiles;
-    GFile *file;
-    
-    g_return_val_if_fail(files, TRUE);
-    
-    if(!trash_proxy)
-        return FALSE;
-    
-    nfiles = g_list_length(files);
-    uris = g_new(gchar *, nfiles + 1);
-    
-    for(l = files, i = 0; l; l = l->next, ++i) {
-        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());
-    
-    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));
+    GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
+    GList *gfiles = NULL, *lp;
 
-        xfce_message_dialog(GTK_WINDOW(parent),
-                            _("Trash Error"), "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)."),
-                            XFCE_BUTTON_TYPE_MIXED, "window-close", _("_Close"), GTK_RESPONSE_ACCEPT,
-                            NULL);
+    for(lp = g_list_last(files); lp != NULL; lp = lp->prev)
+        gfiles = g_list_prepend(gfiles, xfdesktop_file_icon_peek_file(lp->data));
 
-        result = FALSE;
-    }
-    
-    g_free(startup_id);
-    g_strfreev(uris);
-    g_free(display_name);
-    
-    return result;
+    xfdesktop_file_utils_trash_files(gfiles, fmanager->priv->gscreen,
+                                     GTK_WINDOW(toplevel));
+
+    g_list_free(gfiles);
+    return TRUE;
 }
 
 static void
diff --git a/src/xfdesktop-file-utils.c b/src/xfdesktop-file-utils.c
index 573c336..2d6f1e7 100644
--- a/src/xfdesktop-file-utils.c
+++ b/src/xfdesktop-file-utils.c
@@ -51,8 +51,6 @@
 
 #include <exo/exo.h>
 
-#include <dbus/dbus-glib-lowlevel.h>
-
 #ifdef HAVE_THUNARX
 #include <thunarx/thunarx.h>
 #endif
@@ -66,6 +64,15 @@
 
 static void xfdesktop_file_utils_add_emblems(GdkPixbuf *pix, GList *emblems);
 
+static XfdesktopTrash       *xfdesktop_file_utils_peek_trash_proxy(void);
+static XfdesktopFileManager *xfdesktop_file_utils_peek_filemanager_proxy(void);
+
+#ifdef HAVE_THUNARX
+static XfdesktopThunar *xfdesktop_file_utils_peek_thunar_proxy(void);
+#else
+static gpointer xfdesktop_file_utils_peek_thunar_proxy(void);
+#endif
+
 gboolean
 xfdesktop_file_utils_is_desktop_file(GFileInfo *info)
 {
@@ -674,30 +681,36 @@ xfdesktop_file_utils_open_folder(GFile *file,
 }
 
 static void
-xfdesktop_file_utils_async_cb(DBusGProxy *proxy, GError *error, gpointer userdata)
+xfdesktop_file_utils_async_handle_error(GError *error, gpointer userdata)
 {
     GtkWindow *parent = GTK_WINDOW(userdata);
 
     if(error != NULL) {
-        /* ignore dbus timeout error (bug #11283) */
-        if(error->code != DBUS_GERROR_NO_REPLY) {
-            xfce_message_dialog(parent,
-                                _("Error"), "dialog-error",
-                                _("The requested operation could not be completed"),
-                                error->message,
-                                XFCE_BUTTON_TYPE_MIXED, "window-close", _("_Close"), GTK_RESPONSE_ACCEPT,
-                                NULL);
-        }
+        xfce_message_dialog(parent,
+                            _("Error"), "dialog-error",
+                            _("The requested operation could not be completed"),
+                            error->message,
+                            XFCE_BUTTON_TYPE_MIXED, "window-close", _("_Close"), GTK_RESPONSE_ACCEPT,
+                            NULL);
+
         g_clear_error(&error);
     }
 }
 
+static void
+rename_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+    GError *error = NULL;
+    if (!xfdesktop_file_manager_call_rename_file_finish(XFDESKTOP_FILE_MANAGER(source_object), res, &error))
+        xfdesktop_file_utils_async_handle_error(error, user_data);
+}
+
 void
 xfdesktop_file_utils_rename_file(GFile *file,
                                  GdkScreen *screen,
                                  GtkWindow *parent)
 {
-    DBusGProxy *fileman_proxy;
+    XfdesktopFileManager *fileman_proxy;
 
     g_return_if_fail(G_IS_FILE(file));
     g_return_if_fail(GDK_IS_SCREEN(screen) || GTK_IS_WINDOW(parent));
@@ -712,10 +725,12 @@ xfdesktop_file_utils_rename_file(GFile *file,
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_WATCH);
 
-        xfdesktop_file_manager_proxy_rename_file_async(fileman_proxy,
-                                                       uri, NULL, startup_id,
-                                                       (xfdesktop_file_manager_proxy_rename_file_reply)xfdesktop_file_utils_async_cb,
-                                                       parent);
+
+        xfdesktop_file_manager_call_rename_file(fileman_proxy,
+                                                uri, "", startup_id,
+                                                NULL,
+                                                rename_cb,
+                                                parent);
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_LEFT_PTR);
 
@@ -732,13 +747,21 @@ xfdesktop_file_utils_rename_file(GFile *file,
     }
 }
 
+static void
+bulk_rename_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+    GError *error = NULL;
+    if (!xfdesktop_thunar_call_bulk_rename_finish(XFDESKTOP_THUNAR(source_object), res, &error))
+        xfdesktop_file_utils_async_handle_error(error, user_data);
+}
+
 void
 xfdesktop_file_utils_bulk_rename(GFile *working_directory,
                                  GList *files,
                                  GdkScreen *screen,
                                  GtkWindow *parent)
 {
-    DBusGProxy *thunar_proxy;
+    XfdesktopThunar *thunar_proxy;
 
     g_return_if_fail(G_IS_FILE(working_directory));
     g_return_if_fail(GDK_IS_SCREEN(screen) || GTK_IS_WINDOW(parent));
@@ -762,11 +785,13 @@ xfdesktop_file_utils_bulk_rename(GFile *working_directory,
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_WATCH);
 
-        xfdesktop_thunar_proxy_bulk_rename_async(thunar_proxy,
-                                                 directory, (const gchar **)filenames,
-                                                 FALSE, NULL, startup_id,
-                                                 (xfdesktop_thunar_proxy_bulk_rename_reply)xfdesktop_file_utils_async_cb,
-                                                 parent);
+
+        xfdesktop_thunar_call_bulk_rename(thunar_proxy,
+                                          directory, (const gchar **)filenames,
+                                          FALSE, "", startup_id,
+                                          NULL,
+                                          bulk_rename_cb,
+                                          parent);
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_LEFT_PTR);
 
@@ -784,12 +809,20 @@ xfdesktop_file_utils_bulk_rename(GFile *working_directory,
     }
 }
 
+static void
+unlink_files_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+    GError *error = NULL;
+    if (!xfdesktop_file_manager_call_unlink_files_finish(XFDESKTOP_FILE_MANAGER(source_object), res, &error))
+        xfdesktop_file_utils_async_handle_error(error, user_data);
+}
+
 void
 xfdesktop_file_utils_unlink_files(GList *files,
                                   GdkScreen *screen,
                                   GtkWindow *parent)
 {
-    DBusGProxy *fileman_proxy;
+    XfdesktopFileManager *fileman_proxy;
 
     g_return_if_fail(files != NULL && G_IS_FILE(files->data));
     g_return_if_fail(GDK_IS_SCREEN(screen) || GTK_IS_WINDOW(parent));
@@ -812,11 +845,13 @@ xfdesktop_file_utils_unlink_files(GList *files,
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_WATCH);
 
-        xfdesktop_file_manager_proxy_unlink_files_async(fileman_proxy,
-                                                        NULL, (const gchar **)uris,
-                                                        NULL, startup_id,
-                                                        (xfdesktop_file_manager_proxy_unlink_files_reply)xfdesktop_file_utils_async_cb,
-                                                        parent);
+
+        xfdesktop_file_manager_call_unlink_files(fileman_proxy,
+                                                 "", (const gchar **)uris,
+                                                 "", startup_id,
+                                                 NULL,
+                                                 unlink_files_cb,
+                                                 parent);
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_LEFT_PTR);
 
@@ -833,12 +868,20 @@ xfdesktop_file_utils_unlink_files(GList *files,
     }
 }
 
+static void
+trash_files_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+    GError *error = NULL;
+    if (!xfdesktop_trash_call_move_to_trash_finish(XFDESKTOP_TRASH(source_object), res, &error))
+        xfdesktop_file_utils_async_handle_error(error, user_data);
+}
+
 void
 xfdesktop_file_utils_trash_files(GList *files,
                                  GdkScreen *screen,
                                  GtkWindow *parent)
 {
-    DBusGProxy *trash_proxy;
+    XfdesktopTrash *trash_proxy;
 
     g_return_if_fail(files != NULL && G_IS_FILE(files->data));
     g_return_if_fail(GDK_IS_SCREEN(screen) || GTK_IS_WINDOW(parent));
@@ -861,11 +904,13 @@ xfdesktop_file_utils_trash_files(GList *files,
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_WATCH);
 
-        xfdesktop_trash_proxy_move_to_trash_async(trash_proxy,
-                                                  (const gchar **)uris,
-                                                  NULL, startup_id,
-                                                  (xfdesktop_trash_proxy_move_to_trash_reply)xfdesktop_file_utils_async_cb,
-                                                  parent);
+
+        xfdesktop_trash_call_move_to_trash(trash_proxy,
+                                           (const gchar **)uris,
+                                           "", startup_id,
+                                           NULL,
+                                           trash_files_cb,
+                                           parent);
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_LEFT_PTR);
 
@@ -882,11 +927,19 @@ xfdesktop_file_utils_trash_files(GList *files,
     }
 }
 
+static void
+empty_trash_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+    GError *error = NULL;
+    if (!xfdesktop_trash_call_empty_trash_finish(XFDESKTOP_TRASH(source_object), res, &error))
+        xfdesktop_file_utils_async_handle_error(error, user_data);
+}
+
 void
 xfdesktop_file_utils_empty_trash(GdkScreen *screen,
                                  GtkWindow *parent)
 {
-    DBusGProxy *trash_proxy;
+    XfdesktopTrash *trash_proxy;
 
     g_return_if_fail(GDK_IS_SCREEN(screen) || GTK_IS_WINDOW(parent));
 
@@ -899,10 +952,12 @@ xfdesktop_file_utils_empty_trash(GdkScreen *screen,
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_WATCH);
 
-        xfdesktop_trash_proxy_empty_trash_async(trash_proxy,
-                                                NULL, startup_id,
-                                                (xfdesktop_trash_proxy_empty_trash_reply)xfdesktop_file_utils_async_cb,
-                                                parent);
+
+        xfdesktop_trash_call_empty_trash(trash_proxy,
+                                         "", startup_id,
+                                         NULL,
+                                         empty_trash_cb,
+                                         parent);
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_LEFT_PTR);
 
@@ -918,13 +973,21 @@ xfdesktop_file_utils_empty_trash(GdkScreen *screen,
     }
 }
 
+static void
+create_file_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+    GError *error = NULL;
+    if (!xfdesktop_file_manager_call_create_file_finish(XFDESKTOP_FILE_MANAGER(source_object), res, &error))
+        xfdesktop_file_utils_async_handle_error(error, user_data);
+}
+
 void
 xfdesktop_file_utils_create_file(GFile *parent_folder,
                                  const gchar *content_type,
                                  GdkScreen *screen,
                                  GtkWindow *parent)
 {
-    DBusGProxy *fileman_proxy;
+    XfdesktopFileManager *fileman_proxy;
 
     g_return_if_fail(G_IS_FILE(parent_folder));
     g_return_if_fail(GDK_IS_SCREEN(screen) || GTK_IS_WINDOW(parent));
@@ -939,12 +1002,14 @@ xfdesktop_file_utils_create_file(GFile *parent_folder,
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_WATCH);
 
-        xfdesktop_file_manager_proxy_create_file_async(fileman_proxy,
-                                                       parent_directory,
-                                                       content_type, NULL,
-                                                       startup_id,
-                                                       (xfdesktop_file_manager_proxy_create_file_reply)xfdesktop_file_utils_async_cb,
-                                                       parent);
+
+        xfdesktop_file_manager_call_create_file(fileman_proxy,
+                                                parent_directory,
+                                                content_type, "",
+                                                startup_id,
+                                                NULL,
+                                                create_file_cb,
+                                                parent);
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_LEFT_PTR);
 
@@ -961,13 +1026,21 @@ xfdesktop_file_utils_create_file(GFile *parent_folder,
     }
 }
 
+static void
+create_file_from_template_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+    GError *error = NULL;
+    if (!xfdesktop_file_manager_call_create_file_from_template_finish(XFDESKTOP_FILE_MANAGER(source_object), res, &error))
+        xfdesktop_file_utils_async_handle_error(error, user_data);
+}
+
 void
 xfdesktop_file_utils_create_file_from_template(GFile *parent_folder,
                                                GFile *template_file,
                                                GdkScreen *screen,
                                                GtkWindow *parent)
 {
-    DBusGProxy *fileman_proxy;
+    XfdesktopFileManager *fileman_proxy;
 
     g_return_if_fail(G_IS_FILE(parent_folder));
     g_return_if_fail(G_IS_FILE(template_file));
@@ -984,13 +1057,15 @@ xfdesktop_file_utils_create_file_from_template(GFile *parent_folder,
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_WATCH);
 
-        xfdesktop_file_manager_proxy_create_file_from_template_async(fileman_proxy,
-                                                                     parent_directory,
-                                                                     template_uri,
-                                                                     NULL,
-                                                                     startup_id,
-                                                                     (xfdesktop_file_manager_proxy_create_file_from_template_reply)xfdesktop_file_utils_async_cb,
-                                                                     parent);
+
+        xfdesktop_file_manager_call_create_file_from_template(fileman_proxy,
+                                                              parent_directory,
+                                                              template_uri,
+                                                              "",
+                                                              startup_id,
+                                                              NULL,
+                                                              create_file_from_template_cb,
+                                                              parent);
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_LEFT_PTR);
 
@@ -1007,12 +1082,20 @@ xfdesktop_file_utils_create_file_from_template(GFile *parent_folder,
     }
 }
 
+static void
+show_properties_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+    GError *error = NULL;
+    if (!xfdesktop_file_manager_call_display_file_properties_finish(XFDESKTOP_FILE_MANAGER(source_object), res, &error))
+        xfdesktop_file_utils_async_handle_error(error, user_data);
+}
+
 void
 xfdesktop_file_utils_show_properties_dialog(GFile *file,
                                             GdkScreen *screen,
                                             GtkWindow *parent)
 {
-    DBusGProxy *fileman_proxy;
+    XfdesktopFileManager *fileman_proxy;
 
     g_return_if_fail(G_IS_FILE(file));
     g_return_if_fail(GDK_IS_SCREEN(screen) || GTK_IS_WINDOW(parent));
@@ -1027,10 +1110,12 @@ xfdesktop_file_utils_show_properties_dialog(GFile *file,
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_WATCH);
 
-        xfdesktop_file_manager_proxy_display_file_properties_async(fileman_proxy,
-                                                                   uri, NULL, startup_id,
-                                                                   (xfdesktop_file_manager_proxy_display_file_properties_reply)xfdesktop_file_utils_async_cb,
-                                                                   parent);
+
+        xfdesktop_file_manager_call_display_file_properties(fileman_proxy,
+                                                            uri, "", startup_id,
+                                                            NULL,
+                                                            show_properties_cb,
+                                                            parent);
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_LEFT_PTR);
 
@@ -1047,12 +1132,20 @@ xfdesktop_file_utils_show_properties_dialog(GFile *file,
     }
 }
 
+static void
+launch_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+    GError *error = NULL;
+    if (!xfdesktop_file_manager_call_launch_files_finish(XFDESKTOP_FILE_MANAGER(source_object), res, &error))
+        xfdesktop_file_utils_async_handle_error(error, user_data);
+}
+
 void
 xfdesktop_file_utils_launch(GFile *file,
                             GdkScreen *screen,
                             GtkWindow *parent)
 {
-    DBusGProxy *fileman_proxy;
+    XfdesktopFileManager *fileman_proxy;
 
     g_return_if_fail(G_IS_FILE(file));
     g_return_if_fail(GDK_IS_SCREEN(screen) || GTK_IS_WINDOW(parent));
@@ -1062,20 +1155,31 @@ xfdesktop_file_utils_launch(GFile *file,
 
     fileman_proxy = xfdesktop_file_utils_peek_filemanager_proxy();
     if(fileman_proxy) {
-        gchar *uri = g_file_get_uri(file);
-        gchar *startup_id = g_strdup_printf("_TIME%d", gtk_get_current_event_time());
+        gchar **uris;
+        GFile  *parent_file = g_file_get_parent(file);
+        gchar  *parent_path = g_file_get_path(parent_file);
+        gchar  *startup_id = g_strdup_printf("_TIME%d", gtk_get_current_event_time());
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_WATCH);
 
-        xfdesktop_file_manager_proxy_launch_async(fileman_proxy,
-                                                  uri, NULL, startup_id,
-                                                  (xfdesktop_file_manager_proxy_launch_reply)xfdesktop_file_utils_async_cb,
-                                                  parent);
+        uris = g_new0(gchar *, 2);
+        uris[0] = g_file_get_uri(file);
+        uris[1] = NULL;
+
+        xfdesktop_file_manager_call_launch_files(fileman_proxy, parent_path,
+                                                 (const gchar * const*)uris,
+                                                 "", startup_id,
+                                                 NULL,
+                                                 launch_cb,
+                                                 parent);
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_LEFT_PTR);
 
         g_free(startup_id);
-        g_free(uri);
+        g_free(uris[0]);
+        g_free(uris);
+        g_free(parent_path);
+        g_object_unref(parent_file);
     } else {
         xfce_message_dialog(parent,
                             _("Launch Error"), "dialog-error",
@@ -1094,7 +1198,7 @@ xfdesktop_file_utils_execute(GFile *working_directory,
                              GdkScreen *screen,
                              GtkWindow *parent)
 {
-    DBusGProxy *fileman_proxy;
+    XfdesktopFileManager *fileman_proxy;
     gboolean success = TRUE;
 
     g_return_val_if_fail(working_directory == NULL || G_IS_FILE(working_directory), FALSE);
@@ -1144,11 +1248,11 @@ xfdesktop_file_utils_execute(GFile *working_directory,
                 g_object_unref(info);
         }
 
-        if(!xfdesktop_file_manager_proxy_execute(fileman_proxy,
-                                                 working_dir, uri,
-                                                 (const gchar **)uris,
-                                                 NULL, startup_id,
-                                                 &error))
+        if(!xfdesktop_file_manager_call_execute_sync(fileman_proxy,
+                                                     working_dir, uri,
+                                                     (const gchar **)uris,
+                                                     "", startup_id,
+                                                     NULL, &error))
         {
             gchar *filename = g_file_get_uri(file);
             gchar *name = g_filename_display_basename(filename);
@@ -1195,13 +1299,21 @@ xfdesktop_file_utils_execute(GFile *working_directory,
     return success;
 }
 
+static void
+display_chooser_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+    GError *error = NULL;
+    if (!xfdesktop_file_manager_call_display_chooser_dialog_finish(XFDESKTOP_FILE_MANAGER(source_object), res, &error))
+        xfdesktop_file_utils_async_handle_error(error, user_data);
+}
+
 void
 xfdesktop_file_utils_display_chooser_dialog(GFile *file,
                                             gboolean open,
                                             GdkScreen *screen,
                                             GtkWindow *parent)
 {
-    DBusGProxy *fileman_proxy;
+    XfdesktopFileManager *fileman_proxy;
 
     g_return_if_fail(G_IS_FILE(file));
     g_return_if_fail(GDK_IS_SCREEN(screen) || GTK_IS_WINDOW(parent));
@@ -1216,12 +1328,13 @@ xfdesktop_file_utils_display_chooser_dialog(GFile *file,
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_WATCH);
 
-        xfdesktop_file_manager_proxy_display_chooser_dialog_async(fileman_proxy,
-                                                                  uri, open,
-                                                                  NULL,
-                                                                  startup_id,
-                                                                  (xfdesktop_file_manager_proxy_display_chooser_dialog_reply)xfdesktop_file_utils_async_cb,
-                                                                  parent);
+        xfdesktop_file_manager_call_display_chooser_dialog(fileman_proxy,
+                                                           uri, open,
+                                                           "",
+                                                           startup_id,
+                                                           NULL,
+                                                           display_chooser_cb,
+                                                           parent);
 
         xfdesktop_file_utils_set_window_cursor(parent, GDK_LEFT_PTR);
 
@@ -1244,7 +1357,7 @@ xfdesktop_file_utils_transfer_file(GdkDragAction action,
                                    GFile *target_file,
                                    GdkScreen *screen)
 {
-    DBusGProxy *fileman_proxy;
+    XfdesktopFileManager *fileman_proxy;
 
     g_return_if_fail(G_IS_FILE(source_file));
     g_return_if_fail(G_IS_FILE(target_file));
@@ -1262,25 +1375,25 @@ xfdesktop_file_utils_transfer_file(GdkDragAction action,
 
         switch(action) {
             case GDK_ACTION_MOVE:
-                xfdesktop_file_manager_proxy_move_into(fileman_proxy, NULL,
-                                                       (const gchar **)source_uris,
-                                                       (const gchar *)target_uris[0],
-                                                       NULL, startup_id,
-                                                       &error);
+                xfdesktop_file_manager_call_move_into_sync(fileman_proxy, "",
+                                                           (const gchar **)source_uris,
+                                                           (const gchar *)target_uris[0],
+                                                           "", startup_id,
+                                                           NULL, &error);
                 break;
             case GDK_ACTION_COPY:
-                xfdesktop_file_manager_proxy_copy_to(fileman_proxy, NULL,
-                                                     (const gchar **)source_uris,
-                                                     (const gchar **)target_uris,
-                                                     NULL, startup_id,
-                                                     &error);
+                xfdesktop_file_manager_call_copy_to_sync(fileman_proxy, "",
+                                                         (const gchar **)source_uris,
+                                                         (const gchar **)target_uris,
+                                                         "", startup_id,
+                                                         NULL, &error);
                 break;
             case GDK_ACTION_LINK:
-                xfdesktop_file_manager_proxy_link_into(fileman_proxy, NULL,
-                                                       (const gchar **)source_uris,
-                                                       (const gchar *)target_uris[0],
-                                                       NULL, startup_id,
-                                                       &error);
+                xfdesktop_file_manager_call_link_into_sync(fileman_proxy, "",
+                                                           (const gchar **)source_uris,
+                                                           (const gchar *)target_uris[0],
+                                                           "", startup_id,
+                                                           NULL, &error);
                 break;
             default:
                 g_warning("Unsupported transfer action");
@@ -1317,7 +1430,7 @@ xfdesktop_file_utils_transfer_files(GdkDragAction action,
                                     GList *target_files,
                                     GdkScreen *screen)
 {
-    DBusGProxy *fileman_proxy;
+    XfdesktopFileManager *fileman_proxy;
     gboolean success = TRUE;
 
     g_return_val_if_fail(source_files != NULL && G_IS_FILE(source_files->data), FALSE);
@@ -1336,25 +1449,25 @@ xfdesktop_file_utils_transfer_files(GdkDragAction action,
 
         switch(action) {
             case GDK_ACTION_MOVE:
-                xfdesktop_file_manager_proxy_move_into(fileman_proxy, NULL,
-                                                       (const gchar **)source_uris,
-                                                       (const gchar *)target_uris[0],
-                                                       NULL, startup_id,
-                                                       &error);
+                xfdesktop_file_manager_call_move_into_sync(fileman_proxy, "",
+                                                           (const gchar **)source_uris,
+                                                           (const gchar *)target_uris[0],
+                                                           "", startup_id,
+                                                           NULL, &error);
                 break;
             case GDK_ACTION_COPY:
-                xfdesktop_file_manager_proxy_copy_to(fileman_proxy, NULL,
-                                                     (const gchar **)source_uris,
-                                                     (const gchar **)target_uris,
-                                                     NULL, startup_id,
-                                                     &error);
+                xfdesktop_file_manager_call_copy_to_sync(fileman_proxy, "",
+                                                         (const gchar **)source_uris,
+                                                         (const gchar **)target_uris,
+                                                         "", startup_id,
+                                                         NULL, &error);
                 break;
             case GDK_ACTION_LINK:
-                xfdesktop_file_manager_proxy_link_into(fileman_proxy, NULL,
-                                                       (const gchar **)source_uris,
-                                                       (const gchar *)target_uris[0],
-                                                       NULL, startup_id,
-                                                       &error);
+                xfdesktop_file_manager_call_link_into_sync(fileman_proxy, "",
+                                                          (const gchar **)source_uris,
+                                                          (const gchar *)target_uris[0],
+                                                          "", startup_id,
+                                                          NULL, &error);
                 break;
             default:
                 g_warning("Unsupported transfer action");
@@ -1394,11 +1507,14 @@ xfdesktop_file_utils_transfer_files(GdkDragAction action,
 }
 
 static gint dbus_ref_cnt = 0;
-static DBusGConnection *dbus_gconn = NULL;
-static DBusGProxy *dbus_trash_proxy = NULL;
-static DBusGProxy *dbus_filemanager_proxy = NULL;
-static DBusGProxy *dbus_thunar_proxy = NULL;
-
+static GDBusConnection *dbus_gconn = NULL;
+static XfdesktopTrash *dbus_trash_proxy = NULL;
+static XfdesktopFileManager *dbus_filemanager_proxy = NULL;
+#ifdef HAVE_THUNARX
+static XfdesktopThunar *dbus_thunar_proxy = NULL;
+#else
+static GDBusProxy *dbus_thunar_proxy = NULL;
+#endif
 gboolean
 xfdesktop_file_utils_dbus_init(void)
 {
@@ -1408,31 +1524,35 @@ xfdesktop_file_utils_dbus_init(void)
         return TRUE;
 
     if(!dbus_gconn) {
-        dbus_gconn = dbus_g_bus_get(DBUS_BUS_SESSION, NULL);
-        if(G_LIKELY(dbus_gconn)) {
-            /* dbus's default is brain-dead */
-            DBusConnection *dconn = dbus_g_connection_get_connection(dbus_gconn);
-            dbus_connection_set_exit_on_disconnect(dconn, FALSE);
-        }
+        dbus_gconn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL);
     }
 
-    if(G_LIKELY(dbus_gconn)) {
-        dbus_trash_proxy = dbus_g_proxy_new_for_name(dbus_gconn,
-                                                     "org.xfce.FileManager",
-                                                     "/org/xfce/FileManager",
-                                                     "org.xfce.Trash");
-        dbus_g_proxy_add_signal(dbus_trash_proxy, "TrashChanged",
-                                G_TYPE_BOOLEAN, G_TYPE_INVALID);
-
-        dbus_filemanager_proxy = dbus_g_proxy_new_for_name(dbus_gconn,
-                                                           "org.xfce.FileManager",
-                                                           "/org/xfce/FileManager",
-                                                           "org.xfce.FileManager");
-
-        dbus_thunar_proxy = dbus_g_proxy_new_for_name(dbus_gconn,
-                                                      "org.xfce.FileManager",
-                                                      "/org/xfce/FileManager",
-                                                      "org.xfce.Thunar");
+    if(dbus_gconn) {
+        dbus_trash_proxy = xfdesktop_trash_proxy_new_sync(dbus_gconn,
+                                                          G_DBUS_PROXY_FLAGS_NONE,
+                                                          "org.xfce.FileManager",
+                                                          "/org/xfce/FileManager",
+                                                          NULL,
+                                                          NULL);
+
+        dbus_filemanager_proxy = xfdesktop_file_manager_proxy_new_sync(dbus_gconn,
+                                                                       G_DBUS_PROXY_FLAGS_NONE,
+                                                                       "org.xfce.FileManager",
+                                                                       "/org/xfce/FileManager",
+                                                                       NULL,
+                                                                       NULL);
+
+#ifdef HAVE_THUNARX
+        dbus_thunar_proxy = xfdesktop_thunar_proxy_new_sync(dbus_gconn,
+                                                            G_DBUS_PROXY_FLAGS_NONE,
+                                                            "org.xfce.FileManager",
+                                                            "/org/xfce/FileManager",
+                                                            NULL,
+                                                            NULL);
+#else
+        dbus_thunar_proxy = NULL;
+#endif
+
     } else {
         ret = FALSE;
         dbus_ref_cnt = 0;
@@ -1441,23 +1561,31 @@ xfdesktop_file_utils_dbus_init(void)
     return ret;
 }
 
-DBusGProxy *
+static XfdesktopTrash *
 xfdesktop_file_utils_peek_trash_proxy(void)
 {
     return dbus_trash_proxy;
 }
 
-DBusGProxy *
+static XfdesktopFileManager *
 xfdesktop_file_utils_peek_filemanager_proxy(void)
 {
     return dbus_filemanager_proxy;
 }
 
-DBusGProxy *
+#ifdef HAVE_THUNARX
+static XfdesktopThunar *
 xfdesktop_file_utils_peek_thunar_proxy(void)
 {
     return dbus_thunar_proxy;
 }
+#else
+static gpointer
+xfdesktop_file_utils_peek_thunar_proxy(void)
+{
+    return NULL;
+}
+#endif
 
 void
 xfdesktop_file_utils_dbus_cleanup(void)
@@ -1471,10 +1599,8 @@ xfdesktop_file_utils_dbus_cleanup(void)
         g_object_unref(G_OBJECT(dbus_filemanager_proxy));
     if(dbus_thunar_proxy)
         g_object_unref(G_OBJECT(dbus_thunar_proxy));
-
-    /* we aren't going to unref dbus_gconn because dbus appears to have a
-     * memleak in dbus_connection_setup_with_g_main().  really; the comments
-     * in dbus-gmain.c admit this. */
+    if(dbus_gconn)
+        g_object_unref(G_OBJECT(dbus_gconn));
 }
 
 
diff --git a/src/xfdesktop-file-utils.h b/src/xfdesktop-file-utils.h
index a3fed69..20566d9 100644
--- a/src/xfdesktop-file-utils.h
+++ b/src/xfdesktop-file-utils.h
@@ -22,7 +22,7 @@
 #ifndef __XFDESKTOP_FILE_UTILS_H__
 #define __XFDESKTOP_FILE_UTILS_H__
 
-#include <dbus/dbus-glib.h>
+#include <gio/gio.h>
 
 #ifdef HAVE_THUNARX
 #include <thunarx/thunarx.h>
@@ -113,9 +113,6 @@ gboolean xfdesktop_file_utils_transfer_files(GdkDragAction action,
 
 
 gboolean xfdesktop_file_utils_dbus_init(void);
-DBusGProxy *xfdesktop_file_utils_peek_trash_proxy(void);
-DBusGProxy *xfdesktop_file_utils_peek_filemanager_proxy(void);
-DBusGProxy *xfdesktop_file_utils_peek_thunar_proxy(void);
 void xfdesktop_file_utils_dbus_cleanup(void);
 
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list