[Xfce4-commits] [xfce/thunar] 22/46: Replace dbus-glib with GDBus

noreply at xfce.org noreply at xfce.org
Tue Aug 15 02:35:30 CEST 2017


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

a   n   d   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/thunar.

commit 4ce7c649f248d90d063440ca8e6db06e64f94e69
Author: Jonas Kümmerlin <rgcjonas at gmail.com>
Date:   Fri Aug 28 22:45:34 2015 +0200

    Replace dbus-glib with GDBus
    
    The thumbnailer code is a bit hairy, but it appears to work.
    Let's wait for the crashes and bug reports.
---
 Makefile.am                            |    2 -
 configure.ac.in                        |   11 -
 po/POTFILES.in                         |    1 -
 thunar/Makefile.am                     |   56 +-
 thunar/main.c                          |    2 -
 thunar/thunar-application.c            |   29 +
 thunar/thunar-dbus-client.c            |  313 --
 thunar/thunar-dbus-client.h            |   44 -
 thunar/thunar-dbus-service-infos.c     | 7156 ++++++++++++++++++++++++++++++++
 thunar/thunar-dbus-service-infos.xml   |    6 +-
 thunar/thunar-dbus-service.c           |  883 ++--
 thunar/thunar-dbus-service.h           |    4 +-
 thunar/thunar-thumbnail-cache-dbus.xml |    1 +
 thunar/thunar-thumbnail-cache-proxy.c  | 1663 ++++++++
 thunar/thunar-thumbnail-cache.c        |  302 +-
 thunar/thunar-thumbnailer-dbus.xml     |    2 +-
 thunar/thunar-thumbnailer-proxy.c      | 2149 ++++++++++
 thunar/thunar-thumbnailer.c            |  729 ++--
 18 files changed, 12124 insertions(+), 1229 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index cca7c3b..d9b86bc 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -78,13 +78,11 @@ appdatadir = $(datadir)/appdata
 appdata_DATA = $(appdata_in_files:.xml.in=.xml)
 appdata_in_files = thunar.appdata.xml.in
 
-if HAVE_DBUS
 servicedir = $(datadir)/dbus-1/services
 service_in_files = org.xfce.FileManager.service.in org.xfce.Thunar.service.in
 service_DATA = $(service_in_files:.service.in=.service)
 %.service: %.service.in
 	$(AM_V_GEN) $(SED) -e "s,\@bindir\@,$(bindir),g" < $< > $@
-endif
 
 polkit_policydir = $(datadir)/polkit-1/actions
 polkit_in_in_files =			\
diff --git a/configure.ac.in b/configure.ac.in
index 740c7f1..a56ece7 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -162,12 +162,6 @@ dnl **********************************
 XDT_CHECK_OPTIONAL_PACKAGE([GIO_UNIX], [gio-unix-2.0],
                            [2.30.0], [gio-unix], [GIO UNIX features])
 
-dnl **********************************
-dnl *** Optional support for D-BUS ***
-dnl **********************************
-XDT_CHECK_OPTIONAL_PACKAGE([DBUS], [dbus-glib-1],
-                           [0.34], [dbus], [D-BUS support])
-
 dnl ***************************************************************
 dnl *** Optional support for GUDev (required for thunar-volman) ***
 dnl ***************************************************************
@@ -252,11 +246,6 @@ dnl ***************************
 echo
 echo "Build Configuration:"
 echo
-if test x"$DBUS_FOUND" = x"yes"; then
-echo "* D-BUS support:                      yes"
-else
-echo "* D-BUS support:                      no"
-fi
 if test x"$GIO_UNIX_FOUND" = x"yes"; then
 echo "* GIO UNIX features:                  yes"
 else
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 44e0d4e..4bc7e19 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -12,7 +12,6 @@ thunar/thunar-column-model.c
 thunar/thunar-compact-view.c
 thunar/thunar-component.c
 thunar/thunar-create-dialog.c
-thunar/thunar-dbus-client.c
 thunar/thunar-dbus-service.c
 thunar/thunar-deep-count-job.c
 thunar/thunar-details-view.c
diff --git a/thunar/Makefile.am b/thunar/Makefile.am
index 86cd09d..98bcbb6 100644
--- a/thunar/Makefile.am
+++ b/thunar/Makefile.am
@@ -31,6 +31,12 @@ thunar_built_sources =							\
 	thunar-renamer-dialog-ui.h					\
 	thunar-standard-view-ui.h					\
 	thunar-thumbnail-frame.c					\
+	thunar-dbus-service-infos.h					\
+	thunar-dbus-service-infos.c					\
+	thunar-thumbnailer-proxy.c					\
+	thunar-thumbnailer-proxy.h					\
+	thunar-thumbnail-cache-proxy.h 					\
+	thunar-thumbnail-cache-proxy.c					\
 	thunar-window-ui.h
 
 
@@ -65,6 +71,8 @@ thunar_SOURCES =							\
 	thunar-component.h						\
 	thunar-create-dialog.c						\
 	thunar-create-dialog.h						\
+	thunar-dbus-service.c						\
+	thunar-dbus-service.h						\
 	thunar-deep-count-job.h						\
 	thunar-deep-count-job.c						\
 	thunar-details-view.c						\
@@ -238,28 +246,6 @@ thunar_LDADD =								\
 thunar_DEPENDENCIES =							\
 	$(top_builddir)/thunarx/libthunarx-$(THUNARX_VERSION_API).la
 
-if HAVE_DBUS
-thunar_built_sources +=							\
-	thunar-dbus-service-infos.h					\
-	thunar-thumbnail-cache-proxy.h					\
-	thunar-thumbnailer-proxy.h
-
-thunar_dbus_sources =							\
-	thunar-dbus-client.c						\
-	thunar-dbus-client.h						\
-	thunar-dbus-service.c						\
-	thunar-dbus-service.h						\
-	thunar-thumbnail-cache-proxy.h					\
-	thunar-thumbnailer-proxy.h
-
-thunar_CFLAGS +=							\
-	-DDBUS_API_SUBJECT_TO_CHANGE					\
-	$(DBUS_CFLAGS)
-
-thunar_LDADD +=								\
-	$(DBUS_LIBS)
-endif
-
 if HAVE_GIO_UNIX
 thunar_CFLAGS +=							\
 	$(GIO_UNIX_CFLAGS)
@@ -296,28 +282,14 @@ DISTCLEANFILES +=							\
 BUILT_SOURCES =								\
 	$(thunar_built_sources)
 
-if HAVE_DBUS
-thunar-dbus-service-infos.h: $(srcdir)/thunar-dbus-service-infos.xml Makefile
-	$(AM_V_GEN) dbus-binding-tool --prefix=thunar_dbus_service --mode=glib-server $(srcdir)/thunar-dbus-service-infos.xml > thunar-dbus-service-infos.h
+thunar-dbus-service-infos.h thunar-dbus-service-infos.c: $(srcdir)/thunar-dbus-service-infos.xml Makefile
+	$(AM_V_GEN) gdbus-codegen --c-namespace Thunar --generate-c-code=thunar-dbus-service-infos $(srcdir)/thunar-dbus-service-infos.xml
 
-thunar-thumbnailer-proxy.h: $(srcdir)/thunar-thumbnailer-dbus.xml Makefile
-	$(AM_V_GEN) ( \
-		dbus-binding-tool --mode=glib-client \
-			$(srcdir)/thunar-thumbnailer-dbus.xml > thunar-thumbnailer-proxy.h.tmp \
-		&& $(SED) -e 's/org_freedesktop_thumbnails_Thumbnailer1/thunar_thumbnailer_proxy/g' \
-			thunar-thumbnailer-proxy.h.tmp > thunar-thumbnailer-proxy.h \
-		&& $(RM) thunar-thumbnailer-proxy.h.tmp \
-	)
+thunar-thumbnailer-proxy.h thunar-thumbnailer-proxy.c: $(srcdir)/thunar-thumbnailer-dbus.xml Makefile
+	$(AM_V_GEN) gdbus-codegen --c-namespace Thunar --generate-c-code thunar-thumbnailer-proxy $(srcdir)/thunar-thumbnailer-dbus.xml
 
-thunar-thumbnail-cache-proxy.h: $(srcdir)/thunar-thumbnail-cache-dbus.xml Makefile
-	$(AM_V_GEN) ( \
-		dbus-binding-tool --mode=glib-client \
-			$(srcdir)/thunar-thumbnail-cache-dbus.xml > thunar-thumbnail-cache-proxy.h.tmp \
-		&& $(SED) -e 's/org_freedesktop_thumbnails_Cache1/thunar_thumbnail_cache_proxy/g' \
-			thunar-thumbnail-cache-proxy.h.tmp > thunar-thumbnail-cache-proxy.h \
-		&& $(RM) thunar-thumbnail-cache-proxy.h.tmp \
-	)
-endif
+thunar-thumbnail-cache-proxy.h thunar-thumbnail-cache-proxy.c: $(srcdir)/thunar-thumbnail-cache-dbus.xml Makefile
+	$(AM_V_GEN) gdbus-codegen --c-namespace Thunar --generate-c-code thunar-thumbnail-cache-proxy $(srcdir)/thunar-thumbnail-cache-dbus.xml
 
 thunar-thumbnail-frame.c: $(srcdir)/thunar-thumbnail-frame.png Makefile
 	$(AM_V_GEN) (echo "#include <thunar/thunar-thumbnail-frame.h>" && gdk-pixbuf-csource --extern --raw --stream --name=thunar_thumbnail_frame $(srcdir)/thunar-thumbnail-frame.png) > thunar-thumbnail-frame.c
diff --git a/thunar/main.c b/thunar/main.c
index 9a31391..0e5ff2b 100644
--- a/thunar/main.c
+++ b/thunar/main.c
@@ -36,8 +36,6 @@
 #include <xfconf/xfconf.h>
 
 #include <thunar/thunar-application.h>
-#include <thunar/thunar-dbus-client.h>
-#include <thunar/thunar-dbus-service.h>
 #include <thunar/thunar-gobject-extensions.h>
 #include <thunar/thunar-private.h>
 #include <thunar/thunar-notify.h>
diff --git a/thunar/thunar-application.c b/thunar/thunar-application.c
index 4c98ec6..95e52b2 100644
--- a/thunar/thunar-application.c
+++ b/thunar/thunar-application.c
@@ -61,6 +61,7 @@
 #include <thunar/thunar-util.h>
 #include <thunar/thunar-view.h>
 #include <thunar/thunar-session-client.h>
+#include <thunar/thunar-dbus-service.h>
 
 #define ACCEL_MAP_PATH "Thunar/accels.scm"
 
@@ -117,6 +118,10 @@ static int            thunar_application_handle_local_options   (GApplication
                                                                  GVariantDict           *options);
 static int            thunar_application_command_line           (GApplication           *application,
                                                                  GApplicationCommandLine *command_line);
+static gboolean       thunar_application_dbus_register          (GApplication           *application,
+                                                                 GDBusConnection        *connection,
+                                                                 const gchar            *object_path,
+                                                                 GError                **error);
 static void           thunar_application_accel_map_changed      (ThunarApplication      *application);
 static gboolean       thunar_application_accel_map_save         (gpointer                user_data);
 static void           thunar_application_collect_and_launch     (ThunarApplication      *application,
@@ -175,6 +180,8 @@ struct _ThunarApplication
   ThunarThumbnailCache  *thumbnail_cache;
   ThunarThumbnailer     *thumbnailer;
 
+  ThunarDBusService     *dbus_service;
+
   gboolean               daemon;
 
   guint                  accel_map_save_id;
@@ -229,6 +236,7 @@ thunar_application_class_init (ThunarApplicationClass *klass)
   gapplication_class->shutdown             = thunar_application_shutdown;
   gapplication_class->handle_local_options = thunar_application_handle_local_options;
   gapplication_class->command_line         = thunar_application_command_line;
+  gapplication_class->dbus_register        = thunar_application_dbus_register;
 
   /**
    * ThunarApplication:daemon:
@@ -364,6 +372,9 @@ thunar_application_shutdown (GApplication *gapp)
   /* disconnect from the session manager */
   g_object_unref (G_OBJECT (application->session_client));
 
+  /* remove the dbus service */
+  g_clear_pointer (&application->dbus_service, g_object_unref);
+
   G_APPLICATION_CLASS (thunar_application_parent_class)->shutdown (gapp);
 }
 
@@ -480,6 +491,24 @@ out:
 
 
 
+static gboolean
+thunar_application_dbus_register (GApplication           *gapp,
+                                  GDBusConnection        *connection,
+                                  const gchar            *object_path,
+                                  GError                **error)
+{
+    ThunarApplication *application = THUNAR_APPLICATION (gapp);
+
+    if (application->dbus_service) /* WTF? */
+        return TRUE;
+
+    application->dbus_service = g_object_new (THUNAR_TYPE_DBUS_SERVICE, NULL);
+
+    return thunar_dbus_service_export_on_connection (application->dbus_service, connection, error);
+}
+
+
+
 static void
 thunar_application_activate (GApplication *gapp)
 {
diff --git a/thunar/thunar-dbus-client.c b/thunar/thunar-dbus-client.c
deleted file mode 100644
index 535f6c8..0000000
--- a/thunar/thunar-dbus-client.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/* vi:set et ai sw=2 sts=2 ts=2: */
-/*-
- * Copyright (c) 2006 Benedikt Meurer <benny at xfce.org>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <dbus/dbus-glib-lowlevel.h>
-#include <dbus/dbus.h>
-
-#include <thunar/thunar-dbus-client.h>
-#include <thunar/thunar-private.h>
-
-
-
-/**
- * thunar_dbus_client_bulk_rename:
- * @working_directory : the default working directory for the bulk rename dialog.
- * @filenames         : the list of files that should be displayed by default or
- *                      the empty list to start with an empty bulk rename dialog.
- * @standalone        : whether to run the bulk renamer in standalone mode.
- * @screen            : the #GdkScreen on which to display the dialog or %NULL to
- *                      use the default #GdkScreen.
- * @startup_id        : startup id to properly finish startup notification and set
- *                      the window timestamp or %NULL.
- * @error             : return location for errors or %NULL.
- *
- * Tries to invoke the BulkRename() method on a running Thunar instance, that is
- * registered with the current D-BUS session bus. Returns %TRUE if the method was
- * successfully invoked, else %FALSE.
- *
- * If %TRUE is returned, the current process may afterwards just terminate, as
- * all @filenames will be handled by the remote instance.
- *
- * Return value: %TRUE on success, else %FALSE.
- **/
-gboolean
-thunar_dbus_client_bulk_rename (const gchar *working_directory,
-                                gchar      **filenames,
-                                gboolean     standalone,
-                                GdkScreen   *screen,
-                                const gchar *startup_id,
-                                GError     **error)
-{
-  DBusConnection *connection;
-  DBusMessage    *message;
-  DBusMessage    *result;
-  DBusError       derror;
-  gchar          *display_name;
-
-  _thunar_return_val_if_fail (screen == NULL || GDK_IS_SCREEN (screen), FALSE);
-  _thunar_return_val_if_fail (g_path_is_absolute (working_directory), FALSE);
-  _thunar_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-  _thunar_return_val_if_fail (filenames != NULL, FALSE);
-
-  /* initialize the DBusError struct */
-  dbus_error_init (&derror);
-
-  /* fallback to default screen if no other is specified */
-  if (G_LIKELY (screen == NULL))
-    screen = gdk_screen_get_default ();
-
-  /* try to connect to the session bus */
-  connection = dbus_bus_get (DBUS_BUS_SESSION, &derror);
-  if (G_UNLIKELY (connection == NULL))
-    {
-      dbus_set_g_error (error, &derror);
-      dbus_error_free (&derror);
-      return FALSE;
-    }
-
-  /* determine the display name for the screen */
-  display_name = gdk_screen_make_display_name (screen);
-
-  /* dbus does not like null values */
-  if (startup_id == NULL)
-    startup_id = "";
-
-  /* generate the BulkRename() method (disable activation!) */
-  message = dbus_message_new_method_call ("org.xfce.Thunar", "/org/xfce/FileManager", "org.xfce.Thunar", "BulkRename");
-  dbus_message_set_auto_start (message, FALSE);
-  dbus_message_append_args (message,
-                            DBUS_TYPE_STRING, &working_directory,
-                            DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &filenames, g_strv_length (filenames),
-                            DBUS_TYPE_BOOLEAN, &standalone,
-                            DBUS_TYPE_STRING, &display_name,
-                            DBUS_TYPE_STRING, &startup_id,
-                            DBUS_TYPE_INVALID);
-
-  /* release the display name */
-  g_free (display_name);
-
-  /* send the message and release our references on connection and message */
-  dbus_error_init (&derror);
-  result = dbus_connection_send_with_reply_and_block (connection, message, -1, &derror);
-  dbus_message_unref (message);
-
-  /* check if no reply was received */
-  if (G_UNLIKELY (result == NULL))
-    {
-      dbus_set_g_error (error, &derror);
-      dbus_error_free (&derror);
-      return FALSE;
-    }
-
-  /* but maybe we received an error */
-  if (dbus_message_get_type (result) == DBUS_MESSAGE_TYPE_ERROR)
-    {
-      dbus_set_error_from_message (&derror, result);
-      dbus_set_g_error (error, &derror);
-      dbus_message_unref (result);
-      dbus_error_free (&derror);
-      return FALSE;
-    }
-
-  /* let's asume that it worked */
-  dbus_message_unref (result);
-  return TRUE;
-}
-
-
-
-/**
- * thunar_dbus_client_launch_files:
- * @working_directory : the directory relative to which @filenames may be looked up.
- * @filenames         : the list of @filenames to launch.
- * @screen            : the #GdkScreen on which to launch the @filenames or %NULL
- *                      to use the default #GdkScreen.
- * @startup_id        : startup id to properly finish startup notification and set
- *                      the window timestamp or %NULL.
- * @error             : return location for errors or %NULL.
- *
- * Tries to invoke the LaunchFiles() method on a running Thunar instance, that is
- * registered with the current D-BUS session bus. Returns %TRUE if the method was
- * successfully invoked, else %FALSE.
- *
- * If %TRUE is returned, the current process may afterwards just terminate, as
- * all @filenames will be handled by the remote instance. Else, if %FALSE is
- * returned the current process should try to launch the @filenames itself.
- *
- * Return value: %TRUE on success, else %FALSE.
- **/
-gboolean
-thunar_dbus_client_launch_files (const gchar *working_directory,
-                                 gchar      **filenames,
-                                 GdkScreen   *screen,
-                                 const gchar *startup_id,
-                                 GError     **error)
-{
-  DBusConnection *connection;
-  DBusMessage    *message;
-  DBusMessage    *result;
-  DBusError       derror;
-  gchar          *display_name;
-
-  _thunar_return_val_if_fail (g_path_is_absolute (working_directory), FALSE);
-  _thunar_return_val_if_fail (filenames != NULL && *filenames != NULL, FALSE);
-  _thunar_return_val_if_fail (screen == NULL || GDK_IS_SCREEN (screen), FALSE);
-  _thunar_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-  /* initialize the DBusError struct */
-  dbus_error_init (&derror);
-
-  /* fallback to default screen if no other is specified */
-  if (G_LIKELY (screen == NULL))
-    screen = gdk_screen_get_default ();
-
-  /* try to connect to the session bus */
-  connection = dbus_bus_get (DBUS_BUS_SESSION, &derror);
-  if (G_UNLIKELY (connection == NULL))
-    {
-      dbus_set_g_error (error, &derror);
-      dbus_error_free (&derror);
-      return FALSE;
-    }
-
-  /* determine the display name for the screen */
-  display_name = gdk_screen_make_display_name (screen);
-
-  /* dbus does not like null values */
-  if (startup_id == NULL)
-    startup_id = "";
-
-  /* generate the LaunchFiles() method (disable activation!) */
-  message = dbus_message_new_method_call ("org.xfce.Thunar", "/org/xfce/FileManager", "org.xfce.FileManager", "LaunchFiles");
-  dbus_message_set_auto_start (message, FALSE);
-  dbus_message_append_args (message,
-                            DBUS_TYPE_STRING, &working_directory,
-                            DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &filenames, g_strv_length (filenames),
-                            DBUS_TYPE_STRING, &display_name,
-                            DBUS_TYPE_STRING, &startup_id,
-                            DBUS_TYPE_INVALID);
-
-  /* release the display name */
-  g_free (display_name);
-
-  /* send the message and release our references on connection and message */
-  dbus_error_init (&derror);
-  result = dbus_connection_send_with_reply_and_block (connection, message, -1, &derror);
-  dbus_message_unref (message);
-
-  /* check if no reply was received */
-  if (G_UNLIKELY (result == NULL))
-    {
-      dbus_set_g_error (error, &derror);
-      dbus_error_free (&derror);
-      return FALSE;
-    }
-
-  /* but maybe we received an error */
-  if (dbus_message_get_type (result) == DBUS_MESSAGE_TYPE_ERROR)
-    {
-      dbus_set_error_from_message (&derror, result);
-      dbus_set_g_error (error, &derror);
-      dbus_message_unref (result);
-      dbus_error_free (&derror);
-      return FALSE;
-    }
-
-  /* let's asume that it worked */
-  dbus_message_unref (result);
-  return TRUE;
-}
-
-
-
-/**
- * thunar_dbus_client_terminate:
- * @error : Return location for errors or %NULL.
- *
- * Tells a running Thunar instance, connected to the D-BUS
- * session bus, to terminate immediately.
- *
- * Return value: %TRUE if any instance was terminated, else
- *               %FALSE and @error is set.
- **/
-gboolean
-thunar_dbus_client_terminate (GError **error)
-{
-  DBusConnection *connection;
-  DBusMessage    *message;
-  DBusMessage    *result;
-  DBusError       derror;
-
-  _thunar_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-  /* initialize the DBusError struct */
-  dbus_error_init (&derror);
-
-  /* try to connect to the session bus */
-  connection = dbus_bus_get (DBUS_BUS_SESSION, &derror);
-  if (G_UNLIKELY (connection == NULL))
-    {
-      dbus_set_g_error (error, &derror);
-      dbus_error_free (&derror);
-      return FALSE;
-    }
-
-  /* generate the LaunchFiles() method (disable activation!) */
-  message = dbus_message_new_method_call ("org.xfce.Thunar", "/org/xfce/FileManager", "org.xfce.Thunar", "Terminate");
-  dbus_message_set_auto_start (message, FALSE);
-
-  /* send the message and release our references on connection and message */
-  dbus_error_init (&derror);
-  result = dbus_connection_send_with_reply_and_block (connection, message, -1, &derror);
-  dbus_message_unref (message);
-
-  /* check if no reply was received */
-  if (G_UNLIKELY (result == NULL))
-    {
-      /* check if there was nothing to terminate */
-      if (dbus_error_has_name (&derror, DBUS_ERROR_NAME_HAS_NO_OWNER))
-        {
-          dbus_error_free (&derror);
-          return TRUE;
-        }
-
-      /* Looks like there was a real error */
-      dbus_set_g_error (error, &derror);
-      dbus_error_free (&derror);
-      return FALSE;
-    }
-
-  /* but maybe we received an error */
-  if (dbus_message_get_type (result) == DBUS_MESSAGE_TYPE_ERROR)
-    {
-      dbus_set_error_from_message (&derror, result);
-      dbus_set_g_error (error, &derror);
-      dbus_message_unref (result);
-      dbus_error_free (&derror);
-      return FALSE;
-    }
-
-  /* let's asume that it worked */
-  dbus_message_unref (result);
-  return TRUE;
-}
diff --git a/thunar/thunar-dbus-client.h b/thunar/thunar-dbus-client.h
deleted file mode 100644
index fd872b1..0000000
--- a/thunar/thunar-dbus-client.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* vi:set et ai sw=2 sts=2 ts=2: */
-/*-
- * Copyright (c) 2006 Benedikt Meurer <benny at xfce.org>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef __THUNAR_DBUS_CLIENT_H__
-#define __THUNAR_DBUS_CLIENT_H__
-
-#include <gdk/gdk.h>
-
-G_BEGIN_DECLS;
-
-gboolean thunar_dbus_client_bulk_rename  (const gchar *working_directory,
-                                          gchar      **filenames,
-                                          gboolean     standalone,
-                                          GdkScreen   *screen,
-                                          const gchar *startup_id,
-                                          GError     **error);
-
-gboolean thunar_dbus_client_launch_files (const gchar *working_directory,
-                                          gchar      **filenames,
-                                          GdkScreen   *screen,
-                                          const gchar *startup_id,
-                                          GError     **error);
-
-gboolean thunar_dbus_client_terminate    (GError     **error);
-
-G_END_DECLS;
-
-#endif /* !__THUNAR_DBUS_CLIENT_H__ */
diff --git a/thunar/thunar-dbus-service-infos.c b/thunar/thunar-dbus-service-infos.c
new file mode 100644
index 0000000..a824610
--- /dev/null
+++ b/thunar/thunar-dbus-service-infos.c
@@ -0,0 +1,7156 @@
+/*
+ * Generated by gdbus-codegen 2.44.1. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "thunar-dbus-service-infos.h"
+
+#include <string.h>
+#ifdef G_OS_UNIX
+#  include <gio/gunixfdlist.h>
+#endif
+
+typedef struct
+{
+  GDBusArgInfo parent_struct;
+  gboolean use_gvariant;
+} _ExtendedGDBusArgInfo;
+
+typedef struct
+{
+  GDBusMethodInfo parent_struct;
+  const gchar *signal_name;
+  gboolean pass_fdlist;
+} _ExtendedGDBusMethodInfo;
+
+typedef struct
+{
+  GDBusSignalInfo parent_struct;
+  const gchar *signal_name;
+} _ExtendedGDBusSignalInfo;
+
+typedef struct
+{
+  GDBusPropertyInfo parent_struct;
+  const gchar *hyphen_name;
+  gboolean use_gvariant;
+} _ExtendedGDBusPropertyInfo;
+
+typedef struct
+{
+  GDBusInterfaceInfo parent_struct;
+  const gchar *hyphen_name;
+} _ExtendedGDBusInterfaceInfo;
+
+typedef struct
+{
+  const _ExtendedGDBusPropertyInfo *info;
+  guint prop_id;
+  GValue orig_value; /* the value before the change */
+} ChangedProperty;
+
+static void
+_changed_property_free (ChangedProperty *data)
+{
+  g_value_unset (&data->orig_value);
+  g_free (data);
+}
+
+static gboolean
+_g_strv_equal0 (gchar **a, gchar **b)
+{
+  gboolean ret = FALSE;
+  guint n;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  if (g_strv_length (a) != g_strv_length (b))
+    goto out;
+  for (n = 0; a[n] != NULL; n++)
+    if (g_strcmp0 (a[n], b[n]) != 0)
+      goto out;
+  ret = TRUE;
+out:
+  return ret;
+}
+
+static gboolean
+_g_variant_equal0 (GVariant *a, GVariant *b)
+{
+  gboolean ret = FALSE;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  ret = g_variant_equal (a, b);
+out:
+  return ret;
+}
+
+G_GNUC_UNUSED static gboolean
+_g_value_equal (const GValue *a, const GValue *b)
+{
+  gboolean ret = FALSE;
+  g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
+  switch (G_VALUE_TYPE (a))
+    {
+      case G_TYPE_BOOLEAN:
+        ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
+        break;
+      case G_TYPE_UCHAR:
+        ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
+        break;
+      case G_TYPE_INT:
+        ret = (g_value_get_int (a) == g_value_get_int (b));
+        break;
+      case G_TYPE_UINT:
+        ret = (g_value_get_uint (a) == g_value_get_uint (b));
+        break;
+      case G_TYPE_INT64:
+        ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
+        break;
+      case G_TYPE_UINT64:
+        ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
+        break;
+      case G_TYPE_DOUBLE:
+        {
+          /* Avoid -Wfloat-equal warnings by doing a direct bit compare */
+          gdouble da = g_value_get_double (a);
+          gdouble db = g_value_get_double (b);
+          ret = memcmp (&da, &db, sizeof (gdouble)) == 0;
+        }
+        break;
+      case G_TYPE_STRING:
+        ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
+        break;
+      case G_TYPE_VARIANT:
+        ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
+        break;
+      default:
+        if (G_VALUE_TYPE (a) == G_TYPE_STRV)
+          ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
+        else
+          g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
+        break;
+    }
+  return ret;
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.xfce.FileManager
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:ThunarDBusFileManager
+ * @title: ThunarDBusFileManager
+ * @short_description: Generated C code for the org.xfce.FileManager D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-xfce-FileManager.top_of_page">org.xfce.FileManager</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.xfce.FileManager ---- */
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_chooser_dialog_IN_ARG_uri =
+{
+  {
+    -1,
+    (gchar *) "uri",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_chooser_dialog_IN_ARG_open =
+{
+  {
+    -1,
+    (gchar *) "open",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_chooser_dialog_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_chooser_dialog_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_display_chooser_dialog_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_display_chooser_dialog_IN_ARG_uri,
+  &_thunar_dbus_file_manager_method_info_display_chooser_dialog_IN_ARG_open,
+  &_thunar_dbus_file_manager_method_info_display_chooser_dialog_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_display_chooser_dialog_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_display_chooser_dialog =
+{
+  {
+    -1,
+    (gchar *) "DisplayChooserDialog",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_display_chooser_dialog_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-display-chooser-dialog",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_folder_IN_ARG_uri =
+{
+  {
+    -1,
+    (gchar *) "uri",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_folder_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_folder_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_display_folder_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_display_folder_IN_ARG_uri,
+  &_thunar_dbus_file_manager_method_info_display_folder_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_display_folder_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_display_folder =
+{
+  {
+    -1,
+    (gchar *) "DisplayFolder",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_display_folder_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-display-folder",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_folder_and_select_IN_ARG_uri =
+{
+  {
+    -1,
+    (gchar *) "uri",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_folder_and_select_IN_ARG_filename =
+{
+  {
+    -1,
+    (gchar *) "filename",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_folder_and_select_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_folder_and_select_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_display_folder_and_select_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_display_folder_and_select_IN_ARG_uri,
+  &_thunar_dbus_file_manager_method_info_display_folder_and_select_IN_ARG_filename,
+  &_thunar_dbus_file_manager_method_info_display_folder_and_select_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_display_folder_and_select_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_display_folder_and_select =
+{
+  {
+    -1,
+    (gchar *) "DisplayFolderAndSelect",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_display_folder_and_select_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-display-folder-and-select",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_file_properties_IN_ARG_uri =
+{
+  {
+    -1,
+    (gchar *) "uri",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_file_properties_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_file_properties_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_display_file_properties_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_display_file_properties_IN_ARG_uri,
+  &_thunar_dbus_file_manager_method_info_display_file_properties_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_display_file_properties_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_display_file_properties =
+{
+  {
+    -1,
+    (gchar *) "DisplayFileProperties",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_display_file_properties_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-display-file-properties",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_launch_IN_ARG_uri =
+{
+  {
+    -1,
+    (gchar *) "uri",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_launch_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_launch_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_launch_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_launch_IN_ARG_uri,
+  &_thunar_dbus_file_manager_method_info_launch_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_launch_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_launch =
+{
+  {
+    -1,
+    (gchar *) "Launch",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_launch_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-launch",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_execute_IN_ARG_working_directory =
+{
+  {
+    -1,
+    (gchar *) "working_directory",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_execute_IN_ARG_uri =
+{
+  {
+    -1,
+    (gchar *) "uri",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_execute_IN_ARG_files =
+{
+  {
+    -1,
+    (gchar *) "files",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_execute_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_execute_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_execute_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_execute_IN_ARG_working_directory,
+  &_thunar_dbus_file_manager_method_info_execute_IN_ARG_uri,
+  &_thunar_dbus_file_manager_method_info_execute_IN_ARG_files,
+  &_thunar_dbus_file_manager_method_info_execute_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_execute_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_execute =
+{
+  {
+    -1,
+    (gchar *) "Execute",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_execute_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-execute",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_preferences_dialog_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_display_preferences_dialog_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_display_preferences_dialog_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_display_preferences_dialog_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_display_preferences_dialog_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_display_preferences_dialog =
+{
+  {
+    -1,
+    (gchar *) "DisplayPreferencesDialog",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_display_preferences_dialog_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-display-preferences-dialog",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_copy_to_IN_ARG_working_directory =
+{
+  {
+    -1,
+    (gchar *) "working_directory",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_copy_to_IN_ARG_source_filenames =
+{
+  {
+    -1,
+    (gchar *) "source_filenames",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_copy_to_IN_ARG_target_filenames =
+{
+  {
+    -1,
+    (gchar *) "target_filenames",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_copy_to_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_copy_to_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_copy_to_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_copy_to_IN_ARG_working_directory,
+  &_thunar_dbus_file_manager_method_info_copy_to_IN_ARG_source_filenames,
+  &_thunar_dbus_file_manager_method_info_copy_to_IN_ARG_target_filenames,
+  &_thunar_dbus_file_manager_method_info_copy_to_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_copy_to_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_copy_to =
+{
+  {
+    -1,
+    (gchar *) "CopyTo",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_copy_to_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-copy-to",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_copy_into_IN_ARG_working_directory =
+{
+  {
+    -1,
+    (gchar *) "working_directory",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_copy_into_IN_ARG_source_filenames =
+{
+  {
+    -1,
+    (gchar *) "source_filenames",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_copy_into_IN_ARG_target_filename =
+{
+  {
+    -1,
+    (gchar *) "target_filename",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_copy_into_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_copy_into_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_copy_into_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_copy_into_IN_ARG_working_directory,
+  &_thunar_dbus_file_manager_method_info_copy_into_IN_ARG_source_filenames,
+  &_thunar_dbus_file_manager_method_info_copy_into_IN_ARG_target_filename,
+  &_thunar_dbus_file_manager_method_info_copy_into_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_copy_into_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_copy_into =
+{
+  {
+    -1,
+    (gchar *) "CopyInto",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_copy_into_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-copy-into",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_move_into_IN_ARG_working_directory =
+{
+  {
+    -1,
+    (gchar *) "working_directory",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_move_into_IN_ARG_source_filenames =
+{
+  {
+    -1,
+    (gchar *) "source_filenames",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_move_into_IN_ARG_target_filename =
+{
+  {
+    -1,
+    (gchar *) "target_filename",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_move_into_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_move_into_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_move_into_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_move_into_IN_ARG_working_directory,
+  &_thunar_dbus_file_manager_method_info_move_into_IN_ARG_source_filenames,
+  &_thunar_dbus_file_manager_method_info_move_into_IN_ARG_target_filename,
+  &_thunar_dbus_file_manager_method_info_move_into_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_move_into_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_move_into =
+{
+  {
+    -1,
+    (gchar *) "MoveInto",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_move_into_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-move-into",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_link_into_IN_ARG_working_directory =
+{
+  {
+    -1,
+    (gchar *) "working_directory",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_link_into_IN_ARG_source_filenames =
+{
+  {
+    -1,
+    (gchar *) "source_filenames",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_link_into_IN_ARG_target_filename =
+{
+  {
+    -1,
+    (gchar *) "target_filename",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_link_into_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_link_into_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_link_into_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_link_into_IN_ARG_working_directory,
+  &_thunar_dbus_file_manager_method_info_link_into_IN_ARG_source_filenames,
+  &_thunar_dbus_file_manager_method_info_link_into_IN_ARG_target_filename,
+  &_thunar_dbus_file_manager_method_info_link_into_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_link_into_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_link_into =
+{
+  {
+    -1,
+    (gchar *) "LinkInto",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_link_into_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-link-into",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_unlink_files_IN_ARG_working_directory =
+{
+  {
+    -1,
+    (gchar *) "working_directory",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_unlink_files_IN_ARG_filenames =
+{
+  {
+    -1,
+    (gchar *) "filenames",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_unlink_files_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_unlink_files_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_unlink_files_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_unlink_files_IN_ARG_working_directory,
+  &_thunar_dbus_file_manager_method_info_unlink_files_IN_ARG_filenames,
+  &_thunar_dbus_file_manager_method_info_unlink_files_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_unlink_files_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_unlink_files =
+{
+  {
+    -1,
+    (gchar *) "UnlinkFiles",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_unlink_files_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-unlink-files",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_launch_files_IN_ARG_working_directory =
+{
+  {
+    -1,
+    (gchar *) "working_directory",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_launch_files_IN_ARG_filenames =
+{
+  {
+    -1,
+    (gchar *) "filenames",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_launch_files_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_launch_files_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_launch_files_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_launch_files_IN_ARG_working_directory,
+  &_thunar_dbus_file_manager_method_info_launch_files_IN_ARG_filenames,
+  &_thunar_dbus_file_manager_method_info_launch_files_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_launch_files_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_launch_files =
+{
+  {
+    -1,
+    (gchar *) "LaunchFiles",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_launch_files_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-launch-files",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_rename_file_IN_ARG_filename =
+{
+  {
+    -1,
+    (gchar *) "filename",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_rename_file_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_rename_file_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_rename_file_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_rename_file_IN_ARG_filename,
+  &_thunar_dbus_file_manager_method_info_rename_file_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_rename_file_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_rename_file =
+{
+  {
+    -1,
+    (gchar *) "RenameFile",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_rename_file_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-rename-file",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_create_file_IN_ARG_parent_directory =
+{
+  {
+    -1,
+    (gchar *) "parent_directory",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_create_file_IN_ARG_content_type =
+{
+  {
+    -1,
+    (gchar *) "content_type",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_create_file_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_create_file_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_create_file_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_create_file_IN_ARG_parent_directory,
+  &_thunar_dbus_file_manager_method_info_create_file_IN_ARG_content_type,
+  &_thunar_dbus_file_manager_method_info_create_file_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_create_file_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_create_file =
+{
+  {
+    -1,
+    (gchar *) "CreateFile",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_create_file_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-create-file",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_create_file_from_template_IN_ARG_parent_directory =
+{
+  {
+    -1,
+    (gchar *) "parent_directory",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_create_file_from_template_IN_ARG_template_uri =
+{
+  {
+    -1,
+    (gchar *) "template_uri",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_create_file_from_template_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_file_manager_method_info_create_file_from_template_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_file_manager_method_info_create_file_from_template_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_create_file_from_template_IN_ARG_parent_directory,
+  &_thunar_dbus_file_manager_method_info_create_file_from_template_IN_ARG_template_uri,
+  &_thunar_dbus_file_manager_method_info_create_file_from_template_IN_ARG_display,
+  &_thunar_dbus_file_manager_method_info_create_file_from_template_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_file_manager_method_info_create_file_from_template =
+{
+  {
+    -1,
+    (gchar *) "CreateFileFromTemplate",
+    (GDBusArgInfo **) &_thunar_dbus_file_manager_method_info_create_file_from_template_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-create-file-from-template",
+  FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _thunar_dbus_file_manager_method_info_pointers[] =
+{
+  &_thunar_dbus_file_manager_method_info_display_chooser_dialog,
+  &_thunar_dbus_file_manager_method_info_display_folder,
+  &_thunar_dbus_file_manager_method_info_display_folder_and_select,
+  &_thunar_dbus_file_manager_method_info_display_file_properties,
+  &_thunar_dbus_file_manager_method_info_launch,
+  &_thunar_dbus_file_manager_method_info_execute,
+  &_thunar_dbus_file_manager_method_info_display_preferences_dialog,
+  &_thunar_dbus_file_manager_method_info_copy_to,
+  &_thunar_dbus_file_manager_method_info_copy_into,
+  &_thunar_dbus_file_manager_method_info_move_into,
+  &_thunar_dbus_file_manager_method_info_link_into,
+  &_thunar_dbus_file_manager_method_info_unlink_files,
+  &_thunar_dbus_file_manager_method_info_launch_files,
+  &_thunar_dbus_file_manager_method_info_rename_file,
+  &_thunar_dbus_file_manager_method_info_create_file,
+  &_thunar_dbus_file_manager_method_info_create_file_from_template,
+  NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _thunar_dbus_file_manager_interface_info =
+{
+  {
+    -1,
+    (gchar *) "org.xfce.FileManager",
+    (GDBusMethodInfo **) &_thunar_dbus_file_manager_method_info_pointers,
+    NULL,
+    NULL,
+    NULL
+  },
+  "dbus-file-manager",
+};
+
+
+/**
+ * thunar_dbus_file_manager_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-xfce-FileManager.top_of_page">org.xfce.FileManager</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+thunar_dbus_file_manager_interface_info (void)
+{
+  return (GDBusInterfaceInfo *) &_thunar_dbus_file_manager_interface_info.parent_struct;
+}
+
+/**
+ * thunar_dbus_file_manager_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #ThunarDBusFileManager interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+thunar_dbus_file_manager_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+  return property_id_begin - 1;
+}
+
+
+
+/**
+ * ThunarDBusFileManager:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-xfce-FileManager.top_of_page">org.xfce.FileManager</link>.
+ */
+
+/**
+ * ThunarDBusFileManagerIface:
+ * @parent_iface: The parent interface.
+ * @handle_copy_into: Handler for the #ThunarDBusFileManager::handle-copy-into signal.
+ * @handle_copy_to: Handler for the #ThunarDBusFileManager::handle-copy-to signal.
+ * @handle_create_file: Handler for the #ThunarDBusFileManager::handle-create-file signal.
+ * @handle_create_file_from_template: Handler for the #ThunarDBusFileManager::handle-create-file-from-template signal.
+ * @handle_display_chooser_dialog: Handler for the #ThunarDBusFileManager::handle-display-chooser-dialog signal.
+ * @handle_display_file_properties: Handler for the #ThunarDBusFileManager::handle-display-file-properties signal.
+ * @handle_display_folder: Handler for the #ThunarDBusFileManager::handle-display-folder signal.
+ * @handle_display_folder_and_select: Handler for the #ThunarDBusFileManager::handle-display-folder-and-select signal.
+ * @handle_display_preferences_dialog: Handler for the #ThunarDBusFileManager::handle-display-preferences-dialog signal.
+ * @handle_execute: Handler for the #ThunarDBusFileManager::handle-execute signal.
+ * @handle_launch: Handler for the #ThunarDBusFileManager::handle-launch signal.
+ * @handle_launch_files: Handler for the #ThunarDBusFileManager::handle-launch-files signal.
+ * @handle_link_into: Handler for the #ThunarDBusFileManager::handle-link-into signal.
+ * @handle_move_into: Handler for the #ThunarDBusFileManager::handle-move-into signal.
+ * @handle_rename_file: Handler for the #ThunarDBusFileManager::handle-rename-file signal.
+ * @handle_unlink_files: Handler for the #ThunarDBusFileManager::handle-unlink-files signal.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-xfce-FileManager.top_of_page">org.xfce.FileManager</link>.
+ */
+
+typedef ThunarDBusFileManagerIface ThunarDBusFileManagerInterface;
+G_DEFINE_INTERFACE (ThunarDBusFileManager, thunar_dbus_file_manager, G_TYPE_OBJECT);
+
+static void
+thunar_dbus_file_manager_default_init (ThunarDBusFileManagerIface *iface)
+{
+  /* GObject signals for incoming D-Bus method calls: */
+  /**
+   * ThunarDBusFileManager::handle-display-chooser-dialog:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_uri: Argument passed by remote caller.
+   * @arg_open: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.DisplayChooserDialog">DisplayChooserDialog()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_display_chooser_dialog() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-display-chooser-dialog",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_display_chooser_dialog),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    5,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-display-folder:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_uri: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFolder">DisplayFolder()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_display_folder() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-display-folder",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_display_folder),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    4,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-display-folder-and-select:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_uri: Argument passed by remote caller.
+   * @arg_filename: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFolderAndSelect">DisplayFolderAndSelect()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_display_folder_and_select() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-display-folder-and-select",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_display_folder_and_select),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    5,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-display-file-properties:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_uri: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFileProperties">DisplayFileProperties()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_display_file_properties() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-display-file-properties",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_display_file_properties),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    4,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-launch:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_uri: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.Launch">Launch()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_launch() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-launch",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_launch),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    4,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-execute:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_working_directory: Argument passed by remote caller.
+   * @arg_uri: Argument passed by remote caller.
+   * @arg_files: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.Execute">Execute()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_execute() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-execute",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_execute),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    6,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRV, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-display-preferences-dialog:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.DisplayPreferencesDialog">DisplayPreferencesDialog()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_display_preferences_dialog() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-display-preferences-dialog",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_display_preferences_dialog),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-copy-to:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_working_directory: Argument passed by remote caller.
+   * @arg_source_filenames: Argument passed by remote caller.
+   * @arg_target_filenames: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.CopyTo">CopyTo()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_copy_to() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-copy-to",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_copy_to),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    6,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRV, G_TYPE_STRV, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-copy-into:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_working_directory: Argument passed by remote caller.
+   * @arg_source_filenames: Argument passed by remote caller.
+   * @arg_target_filename: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.CopyInto">CopyInto()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_copy_into() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-copy-into",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_copy_into),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    6,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRV, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-move-into:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_working_directory: Argument passed by remote caller.
+   * @arg_source_filenames: Argument passed by remote caller.
+   * @arg_target_filename: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.MoveInto">MoveInto()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_move_into() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-move-into",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_move_into),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    6,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRV, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-link-into:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_working_directory: Argument passed by remote caller.
+   * @arg_source_filenames: Argument passed by remote caller.
+   * @arg_target_filename: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.LinkInto">LinkInto()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_link_into() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-link-into",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_link_into),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    6,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRV, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-unlink-files:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_working_directory: Argument passed by remote caller.
+   * @arg_filenames: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.UnlinkFiles">UnlinkFiles()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_unlink_files() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-unlink-files",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_unlink_files),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    5,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRV, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-launch-files:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_working_directory: Argument passed by remote caller.
+   * @arg_filenames: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.LaunchFiles">LaunchFiles()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_launch_files() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-launch-files",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_launch_files),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    5,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRV, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-rename-file:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_filename: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.RenameFile">RenameFile()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_rename_file() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-rename-file",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_rename_file),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    4,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-create-file:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_parent_directory: Argument passed by remote caller.
+   * @arg_content_type: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.CreateFile">CreateFile()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_create_file() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-create-file",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_create_file),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    5,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusFileManager::handle-create-file-from-template:
+   * @object: A #ThunarDBusFileManager.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_parent_directory: Argument passed by remote caller.
+   * @arg_template_uri: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-FileManager.CreateFileFromTemplate">CreateFileFromTemplate()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_file_manager_complete_create_file_from_template() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-create-file-from-template",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusFileManagerIface, handle_create_file_from_template),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    5,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_chooser_dialog:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_open: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.DisplayChooserDialog">DisplayChooserDialog()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_display_chooser_dialog_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_display_chooser_dialog_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_display_chooser_dialog (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_uri,
+    gboolean arg_open,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "DisplayChooserDialog",
+    g_variant_new ("(sbss)",
+                   arg_uri,
+                   arg_open,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_chooser_dialog_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_display_chooser_dialog().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_display_chooser_dialog().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_display_chooser_dialog_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_chooser_dialog_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_open: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.DisplayChooserDialog">DisplayChooserDialog()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_display_chooser_dialog() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_display_chooser_dialog_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_uri,
+    gboolean arg_open,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "DisplayChooserDialog",
+    g_variant_new ("(sbss)",
+                   arg_uri,
+                   arg_open,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_folder:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFolder">DisplayFolder()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_display_folder_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_display_folder_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_display_folder (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_uri,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "DisplayFolder",
+    g_variant_new ("(sss)",
+                   arg_uri,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_folder_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_display_folder().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_display_folder().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_display_folder_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_folder_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFolder">DisplayFolder()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_display_folder() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_display_folder_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_uri,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "DisplayFolder",
+    g_variant_new ("(sss)",
+                   arg_uri,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_folder_and_select:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_filename: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFolderAndSelect">DisplayFolderAndSelect()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_display_folder_and_select_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_display_folder_and_select_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_display_folder_and_select (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_uri,
+    const gchar *arg_filename,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "DisplayFolderAndSelect",
+    g_variant_new ("(ssss)",
+                   arg_uri,
+                   arg_filename,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_folder_and_select_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_display_folder_and_select().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_display_folder_and_select().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_display_folder_and_select_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_folder_and_select_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_filename: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFolderAndSelect">DisplayFolderAndSelect()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_display_folder_and_select() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_display_folder_and_select_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_uri,
+    const gchar *arg_filename,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "DisplayFolderAndSelect",
+    g_variant_new ("(ssss)",
+                   arg_uri,
+                   arg_filename,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_file_properties:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFileProperties">DisplayFileProperties()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_display_file_properties_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_display_file_properties_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_display_file_properties (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_uri,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "DisplayFileProperties",
+    g_variant_new ("(sss)",
+                   arg_uri,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_file_properties_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_display_file_properties().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_display_file_properties().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_display_file_properties_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_file_properties_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFileProperties">DisplayFileProperties()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_display_file_properties() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_display_file_properties_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_uri,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "DisplayFileProperties",
+    g_variant_new ("(sss)",
+                   arg_uri,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_launch:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.Launch">Launch()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_launch_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_launch_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_launch (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_uri,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "Launch",
+    g_variant_new ("(sss)",
+                   arg_uri,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_launch_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_launch().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_launch().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_launch_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_launch_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.Launch">Launch()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_launch() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_launch_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_uri,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "Launch",
+    g_variant_new ("(sss)",
+                   arg_uri,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_execute:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_files: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.Execute">Execute()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_execute_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_execute_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_execute (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *arg_uri,
+    const gchar *const *arg_files,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "Execute",
+    g_variant_new ("(ss^asss)",
+                   arg_working_directory,
+                   arg_uri,
+                   arg_files,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_execute_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_execute().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_execute().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_execute_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_execute_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_uri: Argument to pass with the method invocation.
+ * @arg_files: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.Execute">Execute()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_execute() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_execute_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *arg_uri,
+    const gchar *const *arg_files,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "Execute",
+    g_variant_new ("(ss^asss)",
+                   arg_working_directory,
+                   arg_uri,
+                   arg_files,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_preferences_dialog:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.DisplayPreferencesDialog">DisplayPreferencesDialog()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_display_preferences_dialog_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_display_preferences_dialog_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_display_preferences_dialog (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "DisplayPreferencesDialog",
+    g_variant_new ("(ss)",
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_preferences_dialog_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_display_preferences_dialog().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_display_preferences_dialog().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_display_preferences_dialog_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_display_preferences_dialog_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.DisplayPreferencesDialog">DisplayPreferencesDialog()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_display_preferences_dialog() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_display_preferences_dialog_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "DisplayPreferencesDialog",
+    g_variant_new ("(ss)",
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_copy_to:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_source_filenames: Argument to pass with the method invocation.
+ * @arg_target_filenames: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.CopyTo">CopyTo()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_copy_to_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_copy_to_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_copy_to (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_source_filenames,
+    const gchar *const *arg_target_filenames,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "CopyTo",
+    g_variant_new ("(s^as^asss)",
+                   arg_working_directory,
+                   arg_source_filenames,
+                   arg_target_filenames,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_copy_to_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_copy_to().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_copy_to().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_copy_to_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_copy_to_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_source_filenames: Argument to pass with the method invocation.
+ * @arg_target_filenames: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.CopyTo">CopyTo()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_copy_to() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_copy_to_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_source_filenames,
+    const gchar *const *arg_target_filenames,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "CopyTo",
+    g_variant_new ("(s^as^asss)",
+                   arg_working_directory,
+                   arg_source_filenames,
+                   arg_target_filenames,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_copy_into:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_source_filenames: Argument to pass with the method invocation.
+ * @arg_target_filename: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.CopyInto">CopyInto()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_copy_into_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_copy_into_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_copy_into (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_source_filenames,
+    const gchar *arg_target_filename,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "CopyInto",
+    g_variant_new ("(s^assss)",
+                   arg_working_directory,
+                   arg_source_filenames,
+                   arg_target_filename,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_copy_into_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_copy_into().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_copy_into().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_copy_into_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_copy_into_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_source_filenames: Argument to pass with the method invocation.
+ * @arg_target_filename: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.CopyInto">CopyInto()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_copy_into() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_copy_into_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_source_filenames,
+    const gchar *arg_target_filename,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "CopyInto",
+    g_variant_new ("(s^assss)",
+                   arg_working_directory,
+                   arg_source_filenames,
+                   arg_target_filename,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_move_into:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_source_filenames: Argument to pass with the method invocation.
+ * @arg_target_filename: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.MoveInto">MoveInto()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_move_into_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_move_into_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_move_into (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_source_filenames,
+    const gchar *arg_target_filename,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "MoveInto",
+    g_variant_new ("(s^assss)",
+                   arg_working_directory,
+                   arg_source_filenames,
+                   arg_target_filename,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_move_into_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_move_into().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_move_into().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_move_into_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_move_into_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_source_filenames: Argument to pass with the method invocation.
+ * @arg_target_filename: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.MoveInto">MoveInto()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_move_into() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_move_into_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_source_filenames,
+    const gchar *arg_target_filename,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "MoveInto",
+    g_variant_new ("(s^assss)",
+                   arg_working_directory,
+                   arg_source_filenames,
+                   arg_target_filename,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_link_into:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_source_filenames: Argument to pass with the method invocation.
+ * @arg_target_filename: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.LinkInto">LinkInto()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_link_into_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_link_into_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_link_into (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_source_filenames,
+    const gchar *arg_target_filename,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "LinkInto",
+    g_variant_new ("(s^assss)",
+                   arg_working_directory,
+                   arg_source_filenames,
+                   arg_target_filename,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_link_into_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_link_into().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_link_into().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_link_into_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_link_into_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_source_filenames: Argument to pass with the method invocation.
+ * @arg_target_filename: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.LinkInto">LinkInto()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_link_into() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_link_into_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_source_filenames,
+    const gchar *arg_target_filename,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "LinkInto",
+    g_variant_new ("(s^assss)",
+                   arg_working_directory,
+                   arg_source_filenames,
+                   arg_target_filename,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_unlink_files:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_filenames: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.UnlinkFiles">UnlinkFiles()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_unlink_files_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_unlink_files_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_unlink_files (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_filenames,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "UnlinkFiles",
+    g_variant_new ("(s^asss)",
+                   arg_working_directory,
+                   arg_filenames,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_unlink_files_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_unlink_files().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_unlink_files().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_unlink_files_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_unlink_files_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_filenames: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.UnlinkFiles">UnlinkFiles()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_unlink_files() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_unlink_files_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_filenames,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "UnlinkFiles",
+    g_variant_new ("(s^asss)",
+                   arg_working_directory,
+                   arg_filenames,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_launch_files:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_filenames: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.LaunchFiles">LaunchFiles()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_launch_files_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_launch_files_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_launch_files (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_filenames,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "LaunchFiles",
+    g_variant_new ("(s^asss)",
+                   arg_working_directory,
+                   arg_filenames,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_launch_files_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_launch_files().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_launch_files().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_launch_files_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_launch_files_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_filenames: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.LaunchFiles">LaunchFiles()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_launch_files() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_launch_files_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_filenames,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "LaunchFiles",
+    g_variant_new ("(s^asss)",
+                   arg_working_directory,
+                   arg_filenames,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_rename_file:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_filename: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.RenameFile">RenameFile()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_rename_file_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_rename_file_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_rename_file (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_filename,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "RenameFile",
+    g_variant_new ("(sss)",
+                   arg_filename,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_rename_file_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_rename_file().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_rename_file().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_rename_file_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_rename_file_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_filename: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.RenameFile">RenameFile()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_rename_file() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_rename_file_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_filename,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "RenameFile",
+    g_variant_new ("(sss)",
+                   arg_filename,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_create_file:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_parent_directory: Argument to pass with the method invocation.
+ * @arg_content_type: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.CreateFile">CreateFile()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_create_file_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_create_file_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_create_file (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_parent_directory,
+    const gchar *arg_content_type,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "CreateFile",
+    g_variant_new ("(ssss)",
+                   arg_parent_directory,
+                   arg_content_type,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_create_file_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_create_file().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_create_file().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_create_file_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_create_file_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_parent_directory: Argument to pass with the method invocation.
+ * @arg_content_type: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.CreateFile">CreateFile()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_create_file() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_create_file_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_parent_directory,
+    const gchar *arg_content_type,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "CreateFile",
+    g_variant_new ("(ssss)",
+                   arg_parent_directory,
+                   arg_content_type,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_create_file_from_template:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_parent_directory: Argument to pass with the method invocation.
+ * @arg_template_uri: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.CreateFileFromTemplate">CreateFileFromTemplate()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_call_create_file_from_template_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_call_create_file_from_template_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_file_manager_call_create_file_from_template (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_parent_directory,
+    const gchar *arg_template_uri,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "CreateFileFromTemplate",
+    g_variant_new ("(ssss)",
+                   arg_parent_directory,
+                   arg_template_uri,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_file_manager_call_create_file_from_template_finish:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_call_create_file_from_template().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_call_create_file_from_template().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_create_file_from_template_finish (
+    ThunarDBusFileManager *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_call_create_file_from_template_sync:
+ * @proxy: A #ThunarDBusFileManagerProxy.
+ * @arg_parent_directory: Argument to pass with the method invocation.
+ * @arg_template_uri: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-FileManager.CreateFileFromTemplate">CreateFileFromTemplate()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_call_create_file_from_template() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_file_manager_call_create_file_from_template_sync (
+    ThunarDBusFileManager *proxy,
+    const gchar *arg_parent_directory,
+    const gchar *arg_template_uri,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "CreateFileFromTemplate",
+    g_variant_new ("(ssss)",
+                   arg_parent_directory,
+                   arg_template_uri,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_complete_display_chooser_dialog:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.DisplayChooserDialog">DisplayChooserDialog()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_display_chooser_dialog (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_display_folder:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFolder">DisplayFolder()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_display_folder (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_display_folder_and_select:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFolderAndSelect">DisplayFolderAndSelect()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_display_folder_and_select (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_display_file_properties:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.DisplayFileProperties">DisplayFileProperties()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_display_file_properties (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_launch:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.Launch">Launch()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_launch (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_execute:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.Execute">Execute()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_execute (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_display_preferences_dialog:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.DisplayPreferencesDialog">DisplayPreferencesDialog()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_display_preferences_dialog (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_copy_to:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.CopyTo">CopyTo()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_copy_to (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_copy_into:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.CopyInto">CopyInto()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_copy_into (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_move_into:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.MoveInto">MoveInto()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_move_into (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_link_into:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.LinkInto">LinkInto()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_link_into (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_unlink_files:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.UnlinkFiles">UnlinkFiles()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_unlink_files (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_launch_files:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.LaunchFiles">LaunchFiles()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_launch_files (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_rename_file:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.RenameFile">RenameFile()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_rename_file (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_create_file:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.CreateFile">CreateFile()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_create_file (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_file_manager_complete_create_file_from_template:
+ * @object: A #ThunarDBusFileManager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-FileManager.CreateFileFromTemplate">CreateFileFromTemplate()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_file_manager_complete_create_file_from_template (
+    ThunarDBusFileManager *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * ThunarDBusFileManagerProxy:
+ *
+ * The #ThunarDBusFileManagerProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ThunarDBusFileManagerProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ThunarDBusFileManagerProxy.
+ */
+
+struct _ThunarDBusFileManagerProxyPrivate
+{
+  GData *qdata;
+};
+
+static void thunar_dbus_file_manager_proxy_iface_init (ThunarDBusFileManagerIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusFileManagerProxy, thunar_dbus_file_manager_proxy, G_TYPE_DBUS_PROXY,
+                         G_ADD_PRIVATE (ThunarDBusFileManagerProxy)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_FILE_MANAGER, thunar_dbus_file_manager_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusFileManagerProxy, thunar_dbus_file_manager_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_FILE_MANAGER, thunar_dbus_file_manager_proxy_iface_init));
+
+#endif
+static void
+thunar_dbus_file_manager_proxy_finalize (GObject *object)
+{
+  ThunarDBusFileManagerProxy *proxy = THUNAR_DBUS_FILE_MANAGER_PROXY (object);
+  g_datalist_clear (&proxy->priv->qdata);
+  G_OBJECT_CLASS (thunar_dbus_file_manager_proxy_parent_class)->finalize (object);
+}
+
+static void
+thunar_dbus_file_manager_proxy_get_property (GObject      *object,
+  guint         prop_id,
+  GValue       *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+thunar_dbus_file_manager_proxy_set_property (GObject      *object,
+  guint         prop_id,
+  const GValue *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+thunar_dbus_file_manager_proxy_g_signal (GDBusProxy *proxy,
+  const gchar *sender_name G_GNUC_UNUSED,
+  const gchar *signal_name,
+  GVariant *parameters)
+{
+  _ExtendedGDBusSignalInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint n;
+  guint signal_id;
+  info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_thunar_dbus_file_manager_interface_info.parent_struct, signal_name);
+  if (info == NULL)
+    return;
+  num_params = g_variant_n_children (parameters);
+  paramv = g_new0 (GValue, num_params + 1);
+  g_value_init (&paramv[0], THUNAR_TYPE_DBUS_FILE_MANAGER);
+  g_value_set_object (&paramv[0], proxy);
+  g_variant_iter_init (&iter, parameters);
+  n = 1;
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, THUNAR_TYPE_DBUS_FILE_MANAGER);
+  g_signal_emitv (paramv, signal_id, 0, NULL);
+  for (n = 0; n < num_params + 1; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static void
+thunar_dbus_file_manager_proxy_g_properties_changed (GDBusProxy *_proxy,
+  GVariant *changed_properties,
+  const gchar *const *invalidated_properties)
+{
+  ThunarDBusFileManagerProxy *proxy = THUNAR_DBUS_FILE_MANAGER_PROXY (_proxy);
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  _ExtendedGDBusPropertyInfo *info;
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_file_manager_interface_info.parent_struct, key);
+      g_datalist_remove_data (&proxy->priv->qdata, key);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+  g_variant_iter_free (iter);
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_file_manager_interface_info.parent_struct, invalidated_properties[n]);
+      g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+}
+
+static void
+thunar_dbus_file_manager_proxy_init (ThunarDBusFileManagerProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  proxy->priv = thunar_dbus_file_manager_proxy_get_instance_private (proxy);
+#else
+  proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, THUNAR_TYPE_DBUS_FILE_MANAGER_PROXY, ThunarDBusFileManagerProxyPrivate);
+#endif
+
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), thunar_dbus_file_manager_interface_info ());
+}
+
+static void
+thunar_dbus_file_manager_proxy_class_init (ThunarDBusFileManagerProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = thunar_dbus_file_manager_proxy_finalize;
+  gobject_class->get_property = thunar_dbus_file_manager_proxy_get_property;
+  gobject_class->set_property = thunar_dbus_file_manager_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = thunar_dbus_file_manager_proxy_g_signal;
+  proxy_class->g_properties_changed = thunar_dbus_file_manager_proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (ThunarDBusFileManagerProxyPrivate));
+#endif
+}
+
+static void
+thunar_dbus_file_manager_proxy_iface_init (ThunarDBusFileManagerIface *iface)
+{
+}
+
+/**
+ * thunar_dbus_file_manager_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-xfce-FileManager.top_of_page">org.xfce.FileManager</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_proxy_new_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+thunar_dbus_file_manager_proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (THUNAR_TYPE_DBUS_FILE_MANAGER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.xfce.FileManager", NULL);
+}
+
+/**
+ * thunar_dbus_file_manager_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_proxy_new().
+ *
+ * Returns: (transfer full) (type ThunarDBusFileManagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusFileManager *
+thunar_dbus_file_manager_proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return THUNAR_DBUS_FILE_MANAGER (ret);
+  else
+    return NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-xfce-FileManager.top_of_page">org.xfce.FileManager</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ThunarDBusFileManagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusFileManager *
+thunar_dbus_file_manager_proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (THUNAR_TYPE_DBUS_FILE_MANAGER_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.xfce.FileManager", NULL);
+  if (ret != NULL)
+    return THUNAR_DBUS_FILE_MANAGER (ret);
+  else
+    return NULL;
+}
+
+
+/**
+ * thunar_dbus_file_manager_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like thunar_dbus_file_manager_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_file_manager_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_file_manager_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+thunar_dbus_file_manager_proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (THUNAR_TYPE_DBUS_FILE_MANAGER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.xfce.FileManager", NULL);
+}
+
+/**
+ * thunar_dbus_file_manager_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_file_manager_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with thunar_dbus_file_manager_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type ThunarDBusFileManagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusFileManager *
+thunar_dbus_file_manager_proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return THUNAR_DBUS_FILE_MANAGER (ret);
+  else
+    return NULL;
+}
+
+/**
+ * thunar_dbus_file_manager_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like thunar_dbus_file_manager_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_file_manager_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ThunarDBusFileManagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusFileManager *
+thunar_dbus_file_manager_proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (THUNAR_TYPE_DBUS_FILE_MANAGER_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.xfce.FileManager", NULL);
+  if (ret != NULL)
+    return THUNAR_DBUS_FILE_MANAGER (ret);
+  else
+    return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * ThunarDBusFileManagerSkeleton:
+ *
+ * The #ThunarDBusFileManagerSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ThunarDBusFileManagerSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ThunarDBusFileManagerSkeleton.
+ */
+
+struct _ThunarDBusFileManagerSkeletonPrivate
+{
+  GValue *properties;
+  GList *changed_properties;
+  GSource *changed_properties_idle_source;
+  GMainContext *context;
+  GMutex lock;
+};
+
+static void
+_thunar_dbus_file_manager_skeleton_handle_method_call (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name,
+  const gchar *method_name,
+  GVariant *parameters,
+  GDBusMethodInvocation *invocation,
+  gpointer user_data)
+{
+  ThunarDBusFileManagerSkeleton *skeleton = THUNAR_DBUS_FILE_MANAGER_SKELETON (user_data);
+  _ExtendedGDBusMethodInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint num_extra;
+  guint n;
+  guint signal_id;
+  GValue return_value = G_VALUE_INIT;
+  info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+  g_assert (info != NULL);
+  num_params = g_variant_n_children (parameters);
+  num_extra = info->pass_fdlist ? 3 : 2;  paramv = g_new0 (GValue, num_params + num_extra);
+  n = 0;
+  g_value_init (&paramv[n], THUNAR_TYPE_DBUS_FILE_MANAGER);
+  g_value_set_object (&paramv[n++], skeleton);
+  g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+  g_value_set_object (&paramv[n++], invocation);
+  if (info->pass_fdlist)
+    {
+#ifdef G_OS_UNIX
+      g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+      g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
+#else
+      g_assert_not_reached ();
+#endif
+    }
+  g_variant_iter_init (&iter, parameters);
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, THUNAR_TYPE_DBUS_FILE_MANAGER);
+  g_value_init (&return_value, G_TYPE_BOOLEAN);
+  g_signal_emitv (paramv, signal_id, 0, &return_value);
+  if (!g_value_get_boolean (&return_value))
+    g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
+  g_value_unset (&return_value);
+  for (n = 0; n < num_params + num_extra; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static GVariant *
+_thunar_dbus_file_manager_skeleton_handle_get_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GError **error,
+  gpointer user_data)
+{
+  ThunarDBusFileManagerSkeleton *skeleton = THUNAR_DBUS_FILE_MANAGER_SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  GVariant *ret;
+  ret = NULL;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_file_manager_interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+    }
+  else
+    {
+      g_value_init (&value, pspec->value_type);
+      g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+      g_value_unset (&value);
+    }
+  return ret;
+}
+
+static gboolean
+_thunar_dbus_file_manager_skeleton_handle_set_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GVariant *variant,
+  GError **error,
+  gpointer user_data)
+{
+  ThunarDBusFileManagerSkeleton *skeleton = THUNAR_DBUS_FILE_MANAGER_SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  gboolean ret;
+  ret = FALSE;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_file_manager_interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+    }
+  else
+    {
+      if (info->use_gvariant)
+        g_value_set_variant (&value, variant);
+      else
+        g_dbus_gvariant_to_gvalue (variant, &value);
+      g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      g_value_unset (&value);
+      ret = TRUE;
+    }
+  return ret;
+}
+
+static const GDBusInterfaceVTable _thunar_dbus_file_manager_skeleton_vtable =
+{
+  _thunar_dbus_file_manager_skeleton_handle_method_call,
+  _thunar_dbus_file_manager_skeleton_handle_get_property,
+  _thunar_dbus_file_manager_skeleton_handle_set_property,
+  {NULL}
+};
+
+static GDBusInterfaceInfo *
+thunar_dbus_file_manager_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return thunar_dbus_file_manager_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+thunar_dbus_file_manager_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return (GDBusInterfaceVTable *) &_thunar_dbus_file_manager_skeleton_vtable;
+}
+
+static GVariant *
+thunar_dbus_file_manager_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+  ThunarDBusFileManagerSkeleton *skeleton = THUNAR_DBUS_FILE_MANAGER_SKELETON (_skeleton);
+
+  GVariantBuilder builder;
+  guint n;
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  if (_thunar_dbus_file_manager_interface_info.parent_struct.properties == NULL)
+    goto out;
+  for (n = 0; _thunar_dbus_file_manager_interface_info.parent_struct.properties[n] != NULL; n++)
+    {
+      GDBusPropertyInfo *info = _thunar_dbus_file_manager_interface_info.parent_struct.properties[n];
+      if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+        {
+          GVariant *value;
+          value = _thunar_dbus_file_manager_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.xfce.FileManager", info->name, NULL, skeleton);
+          if (value != NULL)
+            {
+              g_variant_take_ref (value);
+              g_variant_builder_add (&builder, "{sv}", info->name, value);
+              g_variant_unref (value);
+            }
+        }
+    }
+out:
+  return g_variant_builder_end (&builder);
+}
+
+static void
+thunar_dbus_file_manager_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void thunar_dbus_file_manager_skeleton_iface_init (ThunarDBusFileManagerIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusFileManagerSkeleton, thunar_dbus_file_manager_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_ADD_PRIVATE (ThunarDBusFileManagerSkeleton)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_FILE_MANAGER, thunar_dbus_file_manager_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusFileManagerSkeleton, thunar_dbus_file_manager_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_FILE_MANAGER, thunar_dbus_file_manager_skeleton_iface_init));
+
+#endif
+static void
+thunar_dbus_file_manager_skeleton_finalize (GObject *object)
+{
+  ThunarDBusFileManagerSkeleton *skeleton = THUNAR_DBUS_FILE_MANAGER_SKELETON (object);
+  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+  if (skeleton->priv->changed_properties_idle_source != NULL)
+    g_source_destroy (skeleton->priv->changed_properties_idle_source);
+  g_main_context_unref (skeleton->priv->context);
+  g_mutex_clear (&skeleton->priv->lock);
+  G_OBJECT_CLASS (thunar_dbus_file_manager_skeleton_parent_class)->finalize (object);
+}
+
+static void
+thunar_dbus_file_manager_skeleton_init (ThunarDBusFileManagerSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  skeleton->priv = thunar_dbus_file_manager_skeleton_get_instance_private (skeleton);
+#else
+  skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, THUNAR_TYPE_DBUS_FILE_MANAGER_SKELETON, ThunarDBusFileManagerSkeletonPrivate);
+#endif
+
+  g_mutex_init (&skeleton->priv->lock);
+  skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+thunar_dbus_file_manager_skeleton_class_init (ThunarDBusFileManagerSkeletonClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusInterfaceSkeletonClass *skeleton_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_dbus_file_manager_skeleton_finalize;
+
+  skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+  skeleton_class->get_info = thunar_dbus_file_manager_skeleton_dbus_interface_get_info;
+  skeleton_class->get_properties = thunar_dbus_file_manager_skeleton_dbus_interface_get_properties;
+  skeleton_class->flush = thunar_dbus_file_manager_skeleton_dbus_interface_flush;
+  skeleton_class->get_vtable = thunar_dbus_file_manager_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (ThunarDBusFileManagerSkeletonPrivate));
+#endif
+}
+
+static void
+thunar_dbus_file_manager_skeleton_iface_init (ThunarDBusFileManagerIface *iface)
+{
+}
+
+/**
+ * thunar_dbus_file_manager_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-xfce-FileManager.top_of_page">org.xfce.FileManager</link>.
+ *
+ * Returns: (transfer full) (type ThunarDBusFileManagerSkeleton): The skeleton object.
+ */
+ThunarDBusFileManager *
+thunar_dbus_file_manager_skeleton_new (void)
+{
+  return THUNAR_DBUS_FILE_MANAGER (g_object_new (THUNAR_TYPE_DBUS_FILE_MANAGER_SKELETON, NULL));
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.xfce.Trash
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:ThunarDBusTrash
+ * @title: ThunarDBusTrash
+ * @short_description: Generated C code for the org.xfce.Trash D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-xfce-Trash.top_of_page">org.xfce.Trash</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.xfce.Trash ---- */
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_trash_method_info_display_trash_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_trash_method_info_display_trash_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_trash_method_info_display_trash_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_trash_method_info_display_trash_IN_ARG_display,
+  &_thunar_dbus_trash_method_info_display_trash_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_trash_method_info_display_trash =
+{
+  {
+    -1,
+    (gchar *) "DisplayTrash",
+    (GDBusArgInfo **) &_thunar_dbus_trash_method_info_display_trash_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-display-trash",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_trash_method_info_empty_trash_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_trash_method_info_empty_trash_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_trash_method_info_empty_trash_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_trash_method_info_empty_trash_IN_ARG_display,
+  &_thunar_dbus_trash_method_info_empty_trash_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_trash_method_info_empty_trash =
+{
+  {
+    -1,
+    (gchar *) "EmptyTrash",
+    (GDBusArgInfo **) &_thunar_dbus_trash_method_info_empty_trash_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-empty-trash",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_trash_method_info_move_to_trash_IN_ARG_filenames =
+{
+  {
+    -1,
+    (gchar *) "filenames",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_trash_method_info_move_to_trash_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_trash_method_info_move_to_trash_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_trash_method_info_move_to_trash_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_trash_method_info_move_to_trash_IN_ARG_filenames,
+  &_thunar_dbus_trash_method_info_move_to_trash_IN_ARG_display,
+  &_thunar_dbus_trash_method_info_move_to_trash_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_trash_method_info_move_to_trash =
+{
+  {
+    -1,
+    (gchar *) "MoveToTrash",
+    (GDBusArgInfo **) &_thunar_dbus_trash_method_info_move_to_trash_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-move-to-trash",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_trash_method_info_query_trash_OUT_ARG_full =
+{
+  {
+    -1,
+    (gchar *) "full",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_trash_method_info_query_trash_OUT_ARG_pointers[] =
+{
+  &_thunar_dbus_trash_method_info_query_trash_OUT_ARG_full,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_trash_method_info_query_trash =
+{
+  {
+    -1,
+    (gchar *) "QueryTrash",
+    NULL,
+    (GDBusArgInfo **) &_thunar_dbus_trash_method_info_query_trash_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-query-trash",
+  FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _thunar_dbus_trash_method_info_pointers[] =
+{
+  &_thunar_dbus_trash_method_info_display_trash,
+  &_thunar_dbus_trash_method_info_empty_trash,
+  &_thunar_dbus_trash_method_info_move_to_trash,
+  &_thunar_dbus_trash_method_info_query_trash,
+  NULL
+};
+
+static const _ExtendedGDBusSignalInfo _thunar_dbus_trash_signal_info_trash_changed =
+{
+  {
+    -1,
+    (gchar *) "TrashChanged",
+    NULL,
+    NULL
+  },
+  "trash-changed"
+};
+
+static const _ExtendedGDBusSignalInfo * const _thunar_dbus_trash_signal_info_pointers[] =
+{
+  &_thunar_dbus_trash_signal_info_trash_changed,
+  NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _thunar_dbus_trash_interface_info =
+{
+  {
+    -1,
+    (gchar *) "org.xfce.Trash",
+    (GDBusMethodInfo **) &_thunar_dbus_trash_method_info_pointers,
+    (GDBusSignalInfo **) &_thunar_dbus_trash_signal_info_pointers,
+    NULL,
+    NULL
+  },
+  "dbus-trash",
+};
+
+
+/**
+ * thunar_dbus_trash_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-xfce-Trash.top_of_page">org.xfce.Trash</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+thunar_dbus_trash_interface_info (void)
+{
+  return (GDBusInterfaceInfo *) &_thunar_dbus_trash_interface_info.parent_struct;
+}
+
+/**
+ * thunar_dbus_trash_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #ThunarDBusTrash interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+thunar_dbus_trash_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+  return property_id_begin - 1;
+}
+
+
+
+/**
+ * ThunarDBusTrash:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-xfce-Trash.top_of_page">org.xfce.Trash</link>.
+ */
+
+/**
+ * ThunarDBusTrashIface:
+ * @parent_iface: The parent interface.
+ * @handle_display_trash: Handler for the #ThunarDBusTrash::handle-display-trash signal.
+ * @handle_empty_trash: Handler for the #ThunarDBusTrash::handle-empty-trash signal.
+ * @handle_move_to_trash: Handler for the #ThunarDBusTrash::handle-move-to-trash signal.
+ * @handle_query_trash: Handler for the #ThunarDBusTrash::handle-query-trash signal.
+ * @trash_changed: Handler for the #ThunarDBusTrash::trash-changed signal.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-xfce-Trash.top_of_page">org.xfce.Trash</link>.
+ */
+
+typedef ThunarDBusTrashIface ThunarDBusTrashInterface;
+G_DEFINE_INTERFACE (ThunarDBusTrash, thunar_dbus_trash, G_TYPE_OBJECT);
+
+static void
+thunar_dbus_trash_default_init (ThunarDBusTrashIface *iface)
+{
+  /* GObject signals for incoming D-Bus method calls: */
+  /**
+   * ThunarDBusTrash::handle-display-trash:
+   * @object: A #ThunarDBusTrash.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-Trash.DisplayTrash">DisplayTrash()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_trash_complete_display_trash() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-display-trash",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusTrashIface, handle_display_trash),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusTrash::handle-empty-trash:
+   * @object: A #ThunarDBusTrash.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-Trash.EmptyTrash">EmptyTrash()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_trash_complete_empty_trash() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-empty-trash",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusTrashIface, handle_empty_trash),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusTrash::handle-move-to-trash:
+   * @object: A #ThunarDBusTrash.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_filenames: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-Trash.MoveToTrash">MoveToTrash()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_trash_complete_move_to_trash() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-move-to-trash",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusTrashIface, handle_move_to_trash),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    4,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRV, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusTrash::handle-query-trash:
+   * @object: A #ThunarDBusTrash.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-Trash.QueryTrash">QueryTrash()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_trash_complete_query_trash() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-query-trash",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusTrashIface, handle_query_trash),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /* GObject signals for received D-Bus signals: */
+  /**
+   * ThunarDBusTrash::trash-changed:
+   * @object: A #ThunarDBusTrash.
+   *
+   * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-xfce-Trash.TrashChanged">"TrashChanged"</link> is received.
+   *
+   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+   */
+  g_signal_new ("trash-changed",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusTrashIface, trash_changed),
+    NULL,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_NONE,
+    0);
+
+}
+
+/**
+ * thunar_dbus_trash_emit_trash_changed:
+ * @object: A #ThunarDBusTrash.
+ *
+ * Emits the <link linkend="gdbus-signal-org-xfce-Trash.TrashChanged">"TrashChanged"</link> D-Bus signal.
+ */
+void
+thunar_dbus_trash_emit_trash_changed (
+    ThunarDBusTrash *object)
+{
+  g_signal_emit_by_name (object, "trash-changed");
+}
+
+/**
+ * thunar_dbus_trash_call_display_trash:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-Trash.DisplayTrash">DisplayTrash()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_trash_call_display_trash_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_trash_call_display_trash_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_trash_call_display_trash (
+    ThunarDBusTrash *proxy,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "DisplayTrash",
+    g_variant_new ("(ss)",
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_trash_call_display_trash_finish:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_trash_call_display_trash().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_trash_call_display_trash().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_trash_call_display_trash_finish (
+    ThunarDBusTrash *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_trash_call_display_trash_sync:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-Trash.DisplayTrash">DisplayTrash()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_trash_call_display_trash() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_trash_call_display_trash_sync (
+    ThunarDBusTrash *proxy,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "DisplayTrash",
+    g_variant_new ("(ss)",
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_trash_call_empty_trash:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-Trash.EmptyTrash">EmptyTrash()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_trash_call_empty_trash_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_trash_call_empty_trash_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_trash_call_empty_trash (
+    ThunarDBusTrash *proxy,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "EmptyTrash",
+    g_variant_new ("(ss)",
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_trash_call_empty_trash_finish:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_trash_call_empty_trash().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_trash_call_empty_trash().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_trash_call_empty_trash_finish (
+    ThunarDBusTrash *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_trash_call_empty_trash_sync:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-Trash.EmptyTrash">EmptyTrash()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_trash_call_empty_trash() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_trash_call_empty_trash_sync (
+    ThunarDBusTrash *proxy,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "EmptyTrash",
+    g_variant_new ("(ss)",
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_trash_call_move_to_trash:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @arg_filenames: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-Trash.MoveToTrash">MoveToTrash()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_trash_call_move_to_trash_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_trash_call_move_to_trash_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_trash_call_move_to_trash (
+    ThunarDBusTrash *proxy,
+    const gchar *const *arg_filenames,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "MoveToTrash",
+    g_variant_new ("(^asss)",
+                   arg_filenames,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_trash_call_move_to_trash_finish:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_trash_call_move_to_trash().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_trash_call_move_to_trash().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_trash_call_move_to_trash_finish (
+    ThunarDBusTrash *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_trash_call_move_to_trash_sync:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @arg_filenames: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-Trash.MoveToTrash">MoveToTrash()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_trash_call_move_to_trash() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_trash_call_move_to_trash_sync (
+    ThunarDBusTrash *proxy,
+    const gchar *const *arg_filenames,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "MoveToTrash",
+    g_variant_new ("(^asss)",
+                   arg_filenames,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_trash_call_query_trash:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-Trash.QueryTrash">QueryTrash()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_trash_call_query_trash_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_trash_call_query_trash_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_trash_call_query_trash (
+    ThunarDBusTrash *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "QueryTrash",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_trash_call_query_trash_finish:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @out_full: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_trash_call_query_trash().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_trash_call_query_trash().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_trash_call_query_trash_finish (
+    ThunarDBusTrash *proxy,
+    gboolean *out_full,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_full);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_trash_call_query_trash_sync:
+ * @proxy: A #ThunarDBusTrashProxy.
+ * @out_full: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-Trash.QueryTrash">QueryTrash()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_trash_call_query_trash() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_trash_call_query_trash_sync (
+    ThunarDBusTrash *proxy,
+    gboolean *out_full,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "QueryTrash",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(b)",
+                 out_full);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_trash_complete_display_trash:
+ * @object: A #ThunarDBusTrash.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-Trash.DisplayTrash">DisplayTrash()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_trash_complete_display_trash (
+    ThunarDBusTrash *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_trash_complete_empty_trash:
+ * @object: A #ThunarDBusTrash.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-Trash.EmptyTrash">EmptyTrash()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_trash_complete_empty_trash (
+    ThunarDBusTrash *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_trash_complete_move_to_trash:
+ * @object: A #ThunarDBusTrash.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-Trash.MoveToTrash">MoveToTrash()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_trash_complete_move_to_trash (
+    ThunarDBusTrash *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_trash_complete_query_trash:
+ * @object: A #ThunarDBusTrash.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @full: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-Trash.QueryTrash">QueryTrash()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_trash_complete_query_trash (
+    ThunarDBusTrash *object,
+    GDBusMethodInvocation *invocation,
+    gboolean full)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(b)",
+                   full));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * ThunarDBusTrashProxy:
+ *
+ * The #ThunarDBusTrashProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ThunarDBusTrashProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ThunarDBusTrashProxy.
+ */
+
+struct _ThunarDBusTrashProxyPrivate
+{
+  GData *qdata;
+};
+
+static void thunar_dbus_trash_proxy_iface_init (ThunarDBusTrashIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusTrashProxy, thunar_dbus_trash_proxy, G_TYPE_DBUS_PROXY,
+                         G_ADD_PRIVATE (ThunarDBusTrashProxy)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_TRASH, thunar_dbus_trash_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusTrashProxy, thunar_dbus_trash_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_TRASH, thunar_dbus_trash_proxy_iface_init));
+
+#endif
+static void
+thunar_dbus_trash_proxy_finalize (GObject *object)
+{
+  ThunarDBusTrashProxy *proxy = THUNAR_DBUS_TRASH_PROXY (object);
+  g_datalist_clear (&proxy->priv->qdata);
+  G_OBJECT_CLASS (thunar_dbus_trash_proxy_parent_class)->finalize (object);
+}
+
+static void
+thunar_dbus_trash_proxy_get_property (GObject      *object,
+  guint         prop_id,
+  GValue       *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+thunar_dbus_trash_proxy_set_property (GObject      *object,
+  guint         prop_id,
+  const GValue *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+thunar_dbus_trash_proxy_g_signal (GDBusProxy *proxy,
+  const gchar *sender_name G_GNUC_UNUSED,
+  const gchar *signal_name,
+  GVariant *parameters)
+{
+  _ExtendedGDBusSignalInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint n;
+  guint signal_id;
+  info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_thunar_dbus_trash_interface_info.parent_struct, signal_name);
+  if (info == NULL)
+    return;
+  num_params = g_variant_n_children (parameters);
+  paramv = g_new0 (GValue, num_params + 1);
+  g_value_init (&paramv[0], THUNAR_TYPE_DBUS_TRASH);
+  g_value_set_object (&paramv[0], proxy);
+  g_variant_iter_init (&iter, parameters);
+  n = 1;
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, THUNAR_TYPE_DBUS_TRASH);
+  g_signal_emitv (paramv, signal_id, 0, NULL);
+  for (n = 0; n < num_params + 1; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static void
+thunar_dbus_trash_proxy_g_properties_changed (GDBusProxy *_proxy,
+  GVariant *changed_properties,
+  const gchar *const *invalidated_properties)
+{
+  ThunarDBusTrashProxy *proxy = THUNAR_DBUS_TRASH_PROXY (_proxy);
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  _ExtendedGDBusPropertyInfo *info;
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_trash_interface_info.parent_struct, key);
+      g_datalist_remove_data (&proxy->priv->qdata, key);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+  g_variant_iter_free (iter);
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_trash_interface_info.parent_struct, invalidated_properties[n]);
+      g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+}
+
+static void
+thunar_dbus_trash_proxy_init (ThunarDBusTrashProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  proxy->priv = thunar_dbus_trash_proxy_get_instance_private (proxy);
+#else
+  proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, THUNAR_TYPE_DBUS_TRASH_PROXY, ThunarDBusTrashProxyPrivate);
+#endif
+
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), thunar_dbus_trash_interface_info ());
+}
+
+static void
+thunar_dbus_trash_proxy_class_init (ThunarDBusTrashProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = thunar_dbus_trash_proxy_finalize;
+  gobject_class->get_property = thunar_dbus_trash_proxy_get_property;
+  gobject_class->set_property = thunar_dbus_trash_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = thunar_dbus_trash_proxy_g_signal;
+  proxy_class->g_properties_changed = thunar_dbus_trash_proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (ThunarDBusTrashProxyPrivate));
+#endif
+}
+
+static void
+thunar_dbus_trash_proxy_iface_init (ThunarDBusTrashIface *iface)
+{
+}
+
+/**
+ * thunar_dbus_trash_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-xfce-Trash.top_of_page">org.xfce.Trash</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_trash_proxy_new_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_trash_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+thunar_dbus_trash_proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (THUNAR_TYPE_DBUS_TRASH_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.xfce.Trash", NULL);
+}
+
+/**
+ * thunar_dbus_trash_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_trash_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with thunar_dbus_trash_proxy_new().
+ *
+ * Returns: (transfer full) (type ThunarDBusTrashProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusTrash *
+thunar_dbus_trash_proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return THUNAR_DBUS_TRASH (ret);
+  else
+    return NULL;
+}
+
+/**
+ * thunar_dbus_trash_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-xfce-Trash.top_of_page">org.xfce.Trash</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_trash_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ThunarDBusTrashProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusTrash *
+thunar_dbus_trash_proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (THUNAR_TYPE_DBUS_TRASH_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.xfce.Trash", NULL);
+  if (ret != NULL)
+    return THUNAR_DBUS_TRASH (ret);
+  else
+    return NULL;
+}
+
+
+/**
+ * thunar_dbus_trash_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like thunar_dbus_trash_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_trash_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_trash_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+thunar_dbus_trash_proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (THUNAR_TYPE_DBUS_TRASH_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.xfce.Trash", NULL);
+}
+
+/**
+ * thunar_dbus_trash_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_trash_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with thunar_dbus_trash_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type ThunarDBusTrashProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusTrash *
+thunar_dbus_trash_proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return THUNAR_DBUS_TRASH (ret);
+  else
+    return NULL;
+}
+
+/**
+ * thunar_dbus_trash_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like thunar_dbus_trash_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_trash_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ThunarDBusTrashProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusTrash *
+thunar_dbus_trash_proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (THUNAR_TYPE_DBUS_TRASH_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.xfce.Trash", NULL);
+  if (ret != NULL)
+    return THUNAR_DBUS_TRASH (ret);
+  else
+    return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * ThunarDBusTrashSkeleton:
+ *
+ * The #ThunarDBusTrashSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ThunarDBusTrashSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ThunarDBusTrashSkeleton.
+ */
+
+struct _ThunarDBusTrashSkeletonPrivate
+{
+  GValue *properties;
+  GList *changed_properties;
+  GSource *changed_properties_idle_source;
+  GMainContext *context;
+  GMutex lock;
+};
+
+static void
+_thunar_dbus_trash_skeleton_handle_method_call (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name,
+  const gchar *method_name,
+  GVariant *parameters,
+  GDBusMethodInvocation *invocation,
+  gpointer user_data)
+{
+  ThunarDBusTrashSkeleton *skeleton = THUNAR_DBUS_TRASH_SKELETON (user_data);
+  _ExtendedGDBusMethodInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint num_extra;
+  guint n;
+  guint signal_id;
+  GValue return_value = G_VALUE_INIT;
+  info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+  g_assert (info != NULL);
+  num_params = g_variant_n_children (parameters);
+  num_extra = info->pass_fdlist ? 3 : 2;  paramv = g_new0 (GValue, num_params + num_extra);
+  n = 0;
+  g_value_init (&paramv[n], THUNAR_TYPE_DBUS_TRASH);
+  g_value_set_object (&paramv[n++], skeleton);
+  g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+  g_value_set_object (&paramv[n++], invocation);
+  if (info->pass_fdlist)
+    {
+#ifdef G_OS_UNIX
+      g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+      g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
+#else
+      g_assert_not_reached ();
+#endif
+    }
+  g_variant_iter_init (&iter, parameters);
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, THUNAR_TYPE_DBUS_TRASH);
+  g_value_init (&return_value, G_TYPE_BOOLEAN);
+  g_signal_emitv (paramv, signal_id, 0, &return_value);
+  if (!g_value_get_boolean (&return_value))
+    g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
+  g_value_unset (&return_value);
+  for (n = 0; n < num_params + num_extra; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static GVariant *
+_thunar_dbus_trash_skeleton_handle_get_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GError **error,
+  gpointer user_data)
+{
+  ThunarDBusTrashSkeleton *skeleton = THUNAR_DBUS_TRASH_SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  GVariant *ret;
+  ret = NULL;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_trash_interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+    }
+  else
+    {
+      g_value_init (&value, pspec->value_type);
+      g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+      g_value_unset (&value);
+    }
+  return ret;
+}
+
+static gboolean
+_thunar_dbus_trash_skeleton_handle_set_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GVariant *variant,
+  GError **error,
+  gpointer user_data)
+{
+  ThunarDBusTrashSkeleton *skeleton = THUNAR_DBUS_TRASH_SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  gboolean ret;
+  ret = FALSE;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_trash_interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+    }
+  else
+    {
+      if (info->use_gvariant)
+        g_value_set_variant (&value, variant);
+      else
+        g_dbus_gvariant_to_gvalue (variant, &value);
+      g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      g_value_unset (&value);
+      ret = TRUE;
+    }
+  return ret;
+}
+
+static const GDBusInterfaceVTable _thunar_dbus_trash_skeleton_vtable =
+{
+  _thunar_dbus_trash_skeleton_handle_method_call,
+  _thunar_dbus_trash_skeleton_handle_get_property,
+  _thunar_dbus_trash_skeleton_handle_set_property,
+  {NULL}
+};
+
+static GDBusInterfaceInfo *
+thunar_dbus_trash_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return thunar_dbus_trash_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+thunar_dbus_trash_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return (GDBusInterfaceVTable *) &_thunar_dbus_trash_skeleton_vtable;
+}
+
+static GVariant *
+thunar_dbus_trash_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+  ThunarDBusTrashSkeleton *skeleton = THUNAR_DBUS_TRASH_SKELETON (_skeleton);
+
+  GVariantBuilder builder;
+  guint n;
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  if (_thunar_dbus_trash_interface_info.parent_struct.properties == NULL)
+    goto out;
+  for (n = 0; _thunar_dbus_trash_interface_info.parent_struct.properties[n] != NULL; n++)
+    {
+      GDBusPropertyInfo *info = _thunar_dbus_trash_interface_info.parent_struct.properties[n];
+      if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+        {
+          GVariant *value;
+          value = _thunar_dbus_trash_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.xfce.Trash", info->name, NULL, skeleton);
+          if (value != NULL)
+            {
+              g_variant_take_ref (value);
+              g_variant_builder_add (&builder, "{sv}", info->name, value);
+              g_variant_unref (value);
+            }
+        }
+    }
+out:
+  return g_variant_builder_end (&builder);
+}
+
+static void
+thunar_dbus_trash_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void
+_thunar_dbus_trash_on_signal_trash_changed (
+    ThunarDBusTrash *object)
+{
+  ThunarDBusTrashSkeleton *skeleton = THUNAR_DBUS_TRASH_SKELETON (object);
+
+  GList      *connections, *l;
+  GVariant   *signal_variant;
+  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+  signal_variant = g_variant_ref_sink (g_variant_new ("()"));
+  for (l = connections; l != NULL; l = l->next)
+    {
+      GDBusConnection *connection = l->data;
+      g_dbus_connection_emit_signal (connection,
+        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.xfce.Trash", "TrashChanged",
+        signal_variant, NULL);
+    }
+  g_variant_unref (signal_variant);
+  g_list_free_full (connections, g_object_unref);
+}
+
+static void thunar_dbus_trash_skeleton_iface_init (ThunarDBusTrashIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusTrashSkeleton, thunar_dbus_trash_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_ADD_PRIVATE (ThunarDBusTrashSkeleton)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_TRASH, thunar_dbus_trash_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusTrashSkeleton, thunar_dbus_trash_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_TRASH, thunar_dbus_trash_skeleton_iface_init));
+
+#endif
+static void
+thunar_dbus_trash_skeleton_finalize (GObject *object)
+{
+  ThunarDBusTrashSkeleton *skeleton = THUNAR_DBUS_TRASH_SKELETON (object);
+  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+  if (skeleton->priv->changed_properties_idle_source != NULL)
+    g_source_destroy (skeleton->priv->changed_properties_idle_source);
+  g_main_context_unref (skeleton->priv->context);
+  g_mutex_clear (&skeleton->priv->lock);
+  G_OBJECT_CLASS (thunar_dbus_trash_skeleton_parent_class)->finalize (object);
+}
+
+static void
+thunar_dbus_trash_skeleton_init (ThunarDBusTrashSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  skeleton->priv = thunar_dbus_trash_skeleton_get_instance_private (skeleton);
+#else
+  skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, THUNAR_TYPE_DBUS_TRASH_SKELETON, ThunarDBusTrashSkeletonPrivate);
+#endif
+
+  g_mutex_init (&skeleton->priv->lock);
+  skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+thunar_dbus_trash_skeleton_class_init (ThunarDBusTrashSkeletonClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusInterfaceSkeletonClass *skeleton_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_dbus_trash_skeleton_finalize;
+
+  skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+  skeleton_class->get_info = thunar_dbus_trash_skeleton_dbus_interface_get_info;
+  skeleton_class->get_properties = thunar_dbus_trash_skeleton_dbus_interface_get_properties;
+  skeleton_class->flush = thunar_dbus_trash_skeleton_dbus_interface_flush;
+  skeleton_class->get_vtable = thunar_dbus_trash_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (ThunarDBusTrashSkeletonPrivate));
+#endif
+}
+
+static void
+thunar_dbus_trash_skeleton_iface_init (ThunarDBusTrashIface *iface)
+{
+  iface->trash_changed = _thunar_dbus_trash_on_signal_trash_changed;
+}
+
+/**
+ * thunar_dbus_trash_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-xfce-Trash.top_of_page">org.xfce.Trash</link>.
+ *
+ * Returns: (transfer full) (type ThunarDBusTrashSkeleton): The skeleton object.
+ */
+ThunarDBusTrash *
+thunar_dbus_trash_skeleton_new (void)
+{
+  return THUNAR_DBUS_TRASH (g_object_new (THUNAR_TYPE_DBUS_TRASH_SKELETON, NULL));
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.xfce.Thunar
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:ThunarDBusThunar
+ * @title: ThunarDBusThunar
+ * @short_description: Generated C code for the org.xfce.Thunar D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-xfce-Thunar.top_of_page">org.xfce.Thunar</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.xfce.Thunar ---- */
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_working_directory =
+{
+  {
+    -1,
+    (gchar *) "working_directory",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_filenames =
+{
+  {
+    -1,
+    (gchar *) "filenames",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_standalone =
+{
+  {
+    -1,
+    (gchar *) "standalone",
+    (gchar *) "b",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_display =
+{
+  {
+    -1,
+    (gchar *) "display",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_startup_id =
+{
+  {
+    -1,
+    (gchar *) "startup_id",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_pointers[] =
+{
+  &_thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_working_directory,
+  &_thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_filenames,
+  &_thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_standalone,
+  &_thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_display,
+  &_thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_startup_id,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_thunar_method_info_bulk_rename =
+{
+  {
+    -1,
+    (gchar *) "BulkRename",
+    (GDBusArgInfo **) &_thunar_dbus_thunar_method_info_bulk_rename_IN_ARG_pointers,
+    NULL,
+    NULL
+  },
+  "handle-bulk-rename",
+  FALSE
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_dbus_thunar_method_info_terminate =
+{
+  {
+    -1,
+    (gchar *) "Terminate",
+    NULL,
+    NULL,
+    NULL
+  },
+  "handle-terminate",
+  FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _thunar_dbus_thunar_method_info_pointers[] =
+{
+  &_thunar_dbus_thunar_method_info_bulk_rename,
+  &_thunar_dbus_thunar_method_info_terminate,
+  NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _thunar_dbus_thunar_interface_info =
+{
+  {
+    -1,
+    (gchar *) "org.xfce.Thunar",
+    (GDBusMethodInfo **) &_thunar_dbus_thunar_method_info_pointers,
+    NULL,
+    NULL,
+    NULL
+  },
+  "dbus-thunar",
+};
+
+
+/**
+ * thunar_dbus_thunar_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-xfce-Thunar.top_of_page">org.xfce.Thunar</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+thunar_dbus_thunar_interface_info (void)
+{
+  return (GDBusInterfaceInfo *) &_thunar_dbus_thunar_interface_info.parent_struct;
+}
+
+/**
+ * thunar_dbus_thunar_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #ThunarDBusThunar interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+thunar_dbus_thunar_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+  return property_id_begin - 1;
+}
+
+
+
+/**
+ * ThunarDBusThunar:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-xfce-Thunar.top_of_page">org.xfce.Thunar</link>.
+ */
+
+/**
+ * ThunarDBusThunarIface:
+ * @parent_iface: The parent interface.
+ * @handle_bulk_rename: Handler for the #ThunarDBusThunar::handle-bulk-rename signal.
+ * @handle_terminate: Handler for the #ThunarDBusThunar::handle-terminate signal.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-xfce-Thunar.top_of_page">org.xfce.Thunar</link>.
+ */
+
+typedef ThunarDBusThunarIface ThunarDBusThunarInterface;
+G_DEFINE_INTERFACE (ThunarDBusThunar, thunar_dbus_thunar, G_TYPE_OBJECT);
+
+static void
+thunar_dbus_thunar_default_init (ThunarDBusThunarIface *iface)
+{
+  /* GObject signals for incoming D-Bus method calls: */
+  /**
+   * ThunarDBusThunar::handle-bulk-rename:
+   * @object: A #ThunarDBusThunar.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_working_directory: Argument passed by remote caller.
+   * @arg_filenames: Argument passed by remote caller.
+   * @arg_standalone: Argument passed by remote caller.
+   * @arg_display: Argument passed by remote caller.
+   * @arg_startup_id: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-Thunar.BulkRename">BulkRename()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_thunar_complete_bulk_rename() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-bulk-rename",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusThunarIface, handle_bulk_rename),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    6,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING, G_TYPE_STRV, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING);
+
+  /**
+   * ThunarDBusThunar::handle-terminate:
+   * @object: A #ThunarDBusThunar.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-xfce-Thunar.Terminate">Terminate()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_dbus_thunar_complete_terminate() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-terminate",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarDBusThunarIface, handle_terminate),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+}
+
+/**
+ * thunar_dbus_thunar_call_bulk_rename:
+ * @proxy: A #ThunarDBusThunarProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_filenames: Argument to pass with the method invocation.
+ * @arg_standalone: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-Thunar.BulkRename">BulkRename()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_thunar_call_bulk_rename_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_thunar_call_bulk_rename_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_thunar_call_bulk_rename (
+    ThunarDBusThunar *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_filenames,
+    gboolean arg_standalone,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "BulkRename",
+    g_variant_new ("(s^asbss)",
+                   arg_working_directory,
+                   arg_filenames,
+                   arg_standalone,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_thunar_call_bulk_rename_finish:
+ * @proxy: A #ThunarDBusThunarProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_thunar_call_bulk_rename().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_thunar_call_bulk_rename().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_thunar_call_bulk_rename_finish (
+    ThunarDBusThunar *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_thunar_call_bulk_rename_sync:
+ * @proxy: A #ThunarDBusThunarProxy.
+ * @arg_working_directory: Argument to pass with the method invocation.
+ * @arg_filenames: Argument to pass with the method invocation.
+ * @arg_standalone: Argument to pass with the method invocation.
+ * @arg_display: Argument to pass with the method invocation.
+ * @arg_startup_id: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-Thunar.BulkRename">BulkRename()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_thunar_call_bulk_rename() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_thunar_call_bulk_rename_sync (
+    ThunarDBusThunar *proxy,
+    const gchar *arg_working_directory,
+    const gchar *const *arg_filenames,
+    gboolean arg_standalone,
+    const gchar *arg_display,
+    const gchar *arg_startup_id,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "BulkRename",
+    g_variant_new ("(s^asbss)",
+                   arg_working_directory,
+                   arg_filenames,
+                   arg_standalone,
+                   arg_display,
+                   arg_startup_id),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_thunar_call_terminate:
+ * @proxy: A #ThunarDBusThunarProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-xfce-Thunar.Terminate">Terminate()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_thunar_call_terminate_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_thunar_call_terminate_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_dbus_thunar_call_terminate (
+    ThunarDBusThunar *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "Terminate",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_dbus_thunar_call_terminate_finish:
+ * @proxy: A #ThunarDBusThunarProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_thunar_call_terminate().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_dbus_thunar_call_terminate().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_thunar_call_terminate_finish (
+    ThunarDBusThunar *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_thunar_call_terminate_sync:
+ * @proxy: A #ThunarDBusThunarProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-xfce-Thunar.Terminate">Terminate()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_thunar_call_terminate() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_dbus_thunar_call_terminate_sync (
+    ThunarDBusThunar *proxy,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "Terminate",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_dbus_thunar_complete_bulk_rename:
+ * @object: A #ThunarDBusThunar.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-Thunar.BulkRename">BulkRename()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_thunar_complete_bulk_rename (
+    ThunarDBusThunar *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_dbus_thunar_complete_terminate:
+ * @object: A #ThunarDBusThunar.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-xfce-Thunar.Terminate">Terminate()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_dbus_thunar_complete_terminate (
+    ThunarDBusThunar *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * ThunarDBusThunarProxy:
+ *
+ * The #ThunarDBusThunarProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ThunarDBusThunarProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ThunarDBusThunarProxy.
+ */
+
+struct _ThunarDBusThunarProxyPrivate
+{
+  GData *qdata;
+};
+
+static void thunar_dbus_thunar_proxy_iface_init (ThunarDBusThunarIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusThunarProxy, thunar_dbus_thunar_proxy, G_TYPE_DBUS_PROXY,
+                         G_ADD_PRIVATE (ThunarDBusThunarProxy)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_THUNAR, thunar_dbus_thunar_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusThunarProxy, thunar_dbus_thunar_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_THUNAR, thunar_dbus_thunar_proxy_iface_init));
+
+#endif
+static void
+thunar_dbus_thunar_proxy_finalize (GObject *object)
+{
+  ThunarDBusThunarProxy *proxy = THUNAR_DBUS_THUNAR_PROXY (object);
+  g_datalist_clear (&proxy->priv->qdata);
+  G_OBJECT_CLASS (thunar_dbus_thunar_proxy_parent_class)->finalize (object);
+}
+
+static void
+thunar_dbus_thunar_proxy_get_property (GObject      *object,
+  guint         prop_id,
+  GValue       *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+thunar_dbus_thunar_proxy_set_property (GObject      *object,
+  guint         prop_id,
+  const GValue *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+thunar_dbus_thunar_proxy_g_signal (GDBusProxy *proxy,
+  const gchar *sender_name G_GNUC_UNUSED,
+  const gchar *signal_name,
+  GVariant *parameters)
+{
+  _ExtendedGDBusSignalInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint n;
+  guint signal_id;
+  info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_thunar_dbus_thunar_interface_info.parent_struct, signal_name);
+  if (info == NULL)
+    return;
+  num_params = g_variant_n_children (parameters);
+  paramv = g_new0 (GValue, num_params + 1);
+  g_value_init (&paramv[0], THUNAR_TYPE_DBUS_THUNAR);
+  g_value_set_object (&paramv[0], proxy);
+  g_variant_iter_init (&iter, parameters);
+  n = 1;
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, THUNAR_TYPE_DBUS_THUNAR);
+  g_signal_emitv (paramv, signal_id, 0, NULL);
+  for (n = 0; n < num_params + 1; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static void
+thunar_dbus_thunar_proxy_g_properties_changed (GDBusProxy *_proxy,
+  GVariant *changed_properties,
+  const gchar *const *invalidated_properties)
+{
+  ThunarDBusThunarProxy *proxy = THUNAR_DBUS_THUNAR_PROXY (_proxy);
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  _ExtendedGDBusPropertyInfo *info;
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_thunar_interface_info.parent_struct, key);
+      g_datalist_remove_data (&proxy->priv->qdata, key);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+  g_variant_iter_free (iter);
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_thunar_interface_info.parent_struct, invalidated_properties[n]);
+      g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+}
+
+static void
+thunar_dbus_thunar_proxy_init (ThunarDBusThunarProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  proxy->priv = thunar_dbus_thunar_proxy_get_instance_private (proxy);
+#else
+  proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, THUNAR_TYPE_DBUS_THUNAR_PROXY, ThunarDBusThunarProxyPrivate);
+#endif
+
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), thunar_dbus_thunar_interface_info ());
+}
+
+static void
+thunar_dbus_thunar_proxy_class_init (ThunarDBusThunarProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = thunar_dbus_thunar_proxy_finalize;
+  gobject_class->get_property = thunar_dbus_thunar_proxy_get_property;
+  gobject_class->set_property = thunar_dbus_thunar_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = thunar_dbus_thunar_proxy_g_signal;
+  proxy_class->g_properties_changed = thunar_dbus_thunar_proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (ThunarDBusThunarProxyPrivate));
+#endif
+}
+
+static void
+thunar_dbus_thunar_proxy_iface_init (ThunarDBusThunarIface *iface)
+{
+}
+
+/**
+ * thunar_dbus_thunar_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-xfce-Thunar.top_of_page">org.xfce.Thunar</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_thunar_proxy_new_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_thunar_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+thunar_dbus_thunar_proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (THUNAR_TYPE_DBUS_THUNAR_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.xfce.Thunar", NULL);
+}
+
+/**
+ * thunar_dbus_thunar_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_thunar_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with thunar_dbus_thunar_proxy_new().
+ *
+ * Returns: (transfer full) (type ThunarDBusThunarProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusThunar *
+thunar_dbus_thunar_proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return THUNAR_DBUS_THUNAR (ret);
+  else
+    return NULL;
+}
+
+/**
+ * thunar_dbus_thunar_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-xfce-Thunar.top_of_page">org.xfce.Thunar</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_thunar_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ThunarDBusThunarProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusThunar *
+thunar_dbus_thunar_proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (THUNAR_TYPE_DBUS_THUNAR_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.xfce.Thunar", NULL);
+  if (ret != NULL)
+    return THUNAR_DBUS_THUNAR (ret);
+  else
+    return NULL;
+}
+
+
+/**
+ * thunar_dbus_thunar_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like thunar_dbus_thunar_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_dbus_thunar_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See thunar_dbus_thunar_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+thunar_dbus_thunar_proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (THUNAR_TYPE_DBUS_THUNAR_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.xfce.Thunar", NULL);
+}
+
+/**
+ * thunar_dbus_thunar_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_dbus_thunar_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with thunar_dbus_thunar_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type ThunarDBusThunarProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusThunar *
+thunar_dbus_thunar_proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return THUNAR_DBUS_THUNAR (ret);
+  else
+    return NULL;
+}
+
+/**
+ * thunar_dbus_thunar_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like thunar_dbus_thunar_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See thunar_dbus_thunar_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ThunarDBusThunarProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarDBusThunar *
+thunar_dbus_thunar_proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (THUNAR_TYPE_DBUS_THUNAR_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.xfce.Thunar", NULL);
+  if (ret != NULL)
+    return THUNAR_DBUS_THUNAR (ret);
+  else
+    return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * ThunarDBusThunarSkeleton:
+ *
+ * The #ThunarDBusThunarSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ThunarDBusThunarSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ThunarDBusThunarSkeleton.
+ */
+
+struct _ThunarDBusThunarSkeletonPrivate
+{
+  GValue *properties;
+  GList *changed_properties;
+  GSource *changed_properties_idle_source;
+  GMainContext *context;
+  GMutex lock;
+};
+
+static void
+_thunar_dbus_thunar_skeleton_handle_method_call (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name,
+  const gchar *method_name,
+  GVariant *parameters,
+  GDBusMethodInvocation *invocation,
+  gpointer user_data)
+{
+  ThunarDBusThunarSkeleton *skeleton = THUNAR_DBUS_THUNAR_SKELETON (user_data);
+  _ExtendedGDBusMethodInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint num_extra;
+  guint n;
+  guint signal_id;
+  GValue return_value = G_VALUE_INIT;
+  info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+  g_assert (info != NULL);
+  num_params = g_variant_n_children (parameters);
+  num_extra = info->pass_fdlist ? 3 : 2;  paramv = g_new0 (GValue, num_params + num_extra);
+  n = 0;
+  g_value_init (&paramv[n], THUNAR_TYPE_DBUS_THUNAR);
+  g_value_set_object (&paramv[n++], skeleton);
+  g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+  g_value_set_object (&paramv[n++], invocation);
+  if (info->pass_fdlist)
+    {
+#ifdef G_OS_UNIX
+      g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+      g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
+#else
+      g_assert_not_reached ();
+#endif
+    }
+  g_variant_iter_init (&iter, parameters);
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, THUNAR_TYPE_DBUS_THUNAR);
+  g_value_init (&return_value, G_TYPE_BOOLEAN);
+  g_signal_emitv (paramv, signal_id, 0, &return_value);
+  if (!g_value_get_boolean (&return_value))
+    g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
+  g_value_unset (&return_value);
+  for (n = 0; n < num_params + num_extra; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static GVariant *
+_thunar_dbus_thunar_skeleton_handle_get_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GError **error,
+  gpointer user_data)
+{
+  ThunarDBusThunarSkeleton *skeleton = THUNAR_DBUS_THUNAR_SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  GVariant *ret;
+  ret = NULL;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_thunar_interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+    }
+  else
+    {
+      g_value_init (&value, pspec->value_type);
+      g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+      g_value_unset (&value);
+    }
+  return ret;
+}
+
+static gboolean
+_thunar_dbus_thunar_skeleton_handle_set_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GVariant *variant,
+  GError **error,
+  gpointer user_data)
+{
+  ThunarDBusThunarSkeleton *skeleton = THUNAR_DBUS_THUNAR_SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  gboolean ret;
+  ret = FALSE;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_dbus_thunar_interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+    }
+  else
+    {
+      if (info->use_gvariant)
+        g_value_set_variant (&value, variant);
+      else
+        g_dbus_gvariant_to_gvalue (variant, &value);
+      g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      g_value_unset (&value);
+      ret = TRUE;
+    }
+  return ret;
+}
+
+static const GDBusInterfaceVTable _thunar_dbus_thunar_skeleton_vtable =
+{
+  _thunar_dbus_thunar_skeleton_handle_method_call,
+  _thunar_dbus_thunar_skeleton_handle_get_property,
+  _thunar_dbus_thunar_skeleton_handle_set_property,
+  {NULL}
+};
+
+static GDBusInterfaceInfo *
+thunar_dbus_thunar_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return thunar_dbus_thunar_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+thunar_dbus_thunar_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return (GDBusInterfaceVTable *) &_thunar_dbus_thunar_skeleton_vtable;
+}
+
+static GVariant *
+thunar_dbus_thunar_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+  ThunarDBusThunarSkeleton *skeleton = THUNAR_DBUS_THUNAR_SKELETON (_skeleton);
+
+  GVariantBuilder builder;
+  guint n;
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  if (_thunar_dbus_thunar_interface_info.parent_struct.properties == NULL)
+    goto out;
+  for (n = 0; _thunar_dbus_thunar_interface_info.parent_struct.properties[n] != NULL; n++)
+    {
+      GDBusPropertyInfo *info = _thunar_dbus_thunar_interface_info.parent_struct.properties[n];
+      if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+        {
+          GVariant *value;
+          value = _thunar_dbus_thunar_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.xfce.Thunar", info->name, NULL, skeleton);
+          if (value != NULL)
+            {
+              g_variant_take_ref (value);
+              g_variant_builder_add (&builder, "{sv}", info->name, value);
+              g_variant_unref (value);
+            }
+        }
+    }
+out:
+  return g_variant_builder_end (&builder);
+}
+
+static void
+thunar_dbus_thunar_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void thunar_dbus_thunar_skeleton_iface_init (ThunarDBusThunarIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusThunarSkeleton, thunar_dbus_thunar_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_ADD_PRIVATE (ThunarDBusThunarSkeleton)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_THUNAR, thunar_dbus_thunar_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (ThunarDBusThunarSkeleton, thunar_dbus_thunar_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_DBUS_THUNAR, thunar_dbus_thunar_skeleton_iface_init));
+
+#endif
+static void
+thunar_dbus_thunar_skeleton_finalize (GObject *object)
+{
+  ThunarDBusThunarSkeleton *skeleton = THUNAR_DBUS_THUNAR_SKELETON (object);
+  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+  if (skeleton->priv->changed_properties_idle_source != NULL)
+    g_source_destroy (skeleton->priv->changed_properties_idle_source);
+  g_main_context_unref (skeleton->priv->context);
+  g_mutex_clear (&skeleton->priv->lock);
+  G_OBJECT_CLASS (thunar_dbus_thunar_skeleton_parent_class)->finalize (object);
+}
+
+static void
+thunar_dbus_thunar_skeleton_init (ThunarDBusThunarSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  skeleton->priv = thunar_dbus_thunar_skeleton_get_instance_private (skeleton);
+#else
+  skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, THUNAR_TYPE_DBUS_THUNAR_SKELETON, ThunarDBusThunarSkeletonPrivate);
+#endif
+
+  g_mutex_init (&skeleton->priv->lock);
+  skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+thunar_dbus_thunar_skeleton_class_init (ThunarDBusThunarSkeletonClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusInterfaceSkeletonClass *skeleton_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_dbus_thunar_skeleton_finalize;
+
+  skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+  skeleton_class->get_info = thunar_dbus_thunar_skeleton_dbus_interface_get_info;
+  skeleton_class->get_properties = thunar_dbus_thunar_skeleton_dbus_interface_get_properties;
+  skeleton_class->flush = thunar_dbus_thunar_skeleton_dbus_interface_flush;
+  skeleton_class->get_vtable = thunar_dbus_thunar_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (ThunarDBusThunarSkeletonPrivate));
+#endif
+}
+
+static void
+thunar_dbus_thunar_skeleton_iface_init (ThunarDBusThunarIface *iface)
+{
+}
+
+/**
+ * thunar_dbus_thunar_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-xfce-Thunar.top_of_page">org.xfce.Thunar</link>.
+ *
+ * Returns: (transfer full) (type ThunarDBusThunarSkeleton): The skeleton object.
+ */
+ThunarDBusThunar *
+thunar_dbus_thunar_skeleton_new (void)
+{
+  return THUNAR_DBUS_THUNAR (g_object_new (THUNAR_TYPE_DBUS_THUNAR_SKELETON, NULL));
+}
+
diff --git a/thunar/thunar-dbus-service-infos.xml b/thunar/thunar-dbus-service-infos.xml
index 354a8ed..614d4eb 100644
--- a/thunar/thunar-dbus-service-infos.xml
+++ b/thunar/thunar-dbus-service-infos.xml
@@ -26,7 +26,7 @@
     File Managers.
   -->
   <interface name="org.xfce.FileManager">
-    <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="thunar_dbus_service" />
+    <annotation name="org.gtk.GDBus.C.Name" value="DBusFileManager" />
 
     <!--
       DisplayChooserDialog (uri : STRING, open : BOOLEAN, display : STRING, startup_id : STRING) : VOID
@@ -350,7 +350,7 @@
     Managers that support a trash bin.
   -->
   <interface name="org.xfce.Trash">
-    <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="thunar_dbus_service" />
+    <annotation name="org.gtk.GDBus.C.Name" value="DBusTrash" />
 
     <!--
       DisplayTrash (display : STRING, startup_id : STRING) : VOID
@@ -441,7 +441,7 @@
     do not use this interface, but use org.xfce.FileManager instead.
   -->
   <interface name="org.xfce.Thunar">
-    <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="thunar_dbus_service" />
+    <annotation name="org.gtk.GDBus.C.Name" value="DBusThunar" />
 
     <!--
       BulkRename (working_directory : STRING, filenames : ARRAY OF STRING, standalone : BOOLEAN, display : STRING, startup_id : STRING) : VOID
diff --git a/thunar/thunar-dbus-service.c b/thunar/thunar-dbus-service.c
index baf0bb7..5bf5336 100644
--- a/thunar/thunar-dbus-service.c
+++ b/thunar/thunar-dbus-service.c
@@ -30,10 +30,6 @@
 #include <string.h>
 #endif
 
-#include <dbus/dbus-glib-lowlevel.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus.h>
-
 #include <glib/gstdio.h>
 
 #include <exo/exo.h>
@@ -49,6 +45,12 @@
 #include <thunar/thunar-util.h>
 
 
+
+/* include generate dbus infos */
+#include <thunar/thunar-dbus-service-infos.h>
+
+
+
 typedef enum
 {
   THUNAR_DBUS_TRANSFER_MODE_COPY_TO,
@@ -76,131 +78,147 @@ static gboolean thunar_dbus_service_transfer_files              (ThunarDBusTrans
                                                                  GError                **error);
 static void     thunar_dbus_service_trash_bin_changed           (ThunarDBusService      *dbus_service,
                                                                  ThunarFile             *trash_bin);
-static gboolean thunar_dbus_service_display_chooser_dialog      (ThunarDBusService      *dbus_service,
+static gboolean thunar_dbus_service_display_chooser_dialog      (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *uri,
                                                                  gboolean                open,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_display_folder              (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_display_folder              (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *uri,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_display_folder_and_select   (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_display_folder_and_select   (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *uri,
                                                                  const gchar            *filename,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_display_file_properties     (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_display_file_properties     (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *uri,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_launch                      (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_launch                      (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *uri,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_execute                     (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_execute                     (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *working_directory,
                                                                  const gchar            *uri,
                                                                  const gchar           **files,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_display_preferences_dialog  (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_display_preferences_dialog  (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_display_trash               (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_display_trash               (ThunarDBusTrash        *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_empty_trash                 (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_empty_trash                 (ThunarDBusTrash        *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_move_to_trash               (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_move_to_trash               (ThunarDBusTrash        *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  gchar                 **filenames,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_query_trash                 (ThunarDBusService      *dbus_service,
-                                                                 gboolean               *empty,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_bulk_rename                 (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_query_trash                 (ThunarDBusTrash        *object,
+                                                                 GDBusMethodInvocation  *invocation,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_bulk_rename                 (ThunarDBusThunar  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *working_directory,
                                                                  gchar                 **filenames,
                                                                  gboolean                standalone,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_launch_files                (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_launch_files                (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *working_directory,
                                                                  gchar                 **filenames,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_rename_file                 (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_rename_file                 (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *uri,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_create_file                 (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_create_file                 (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *parent_directory,
                                                                  const gchar            *content_type,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_create_file_from_template   (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_create_file_from_template   (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *parent_directory,
                                                                  const gchar            *template_uri,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_copy_to                     (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_copy_to                     (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *working_directory,
                                                                  gchar                 **source_filenames,
                                                                  gchar                 **target_filenames,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_copy_into                   (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_copy_into                   (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *working_directory,
                                                                  gchar                 **source_filenames,
                                                                  const gchar            *target_filename,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_move_into                   (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_move_into                   (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *working_directory,
                                                                  gchar                 **source_filenames,
                                                                  const gchar            *target_filenames,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_link_into                   (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_link_into                   (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *working_directory,
                                                                  gchar                 **source_filenames,
                                                                  const gchar            *target_filename,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_unlink_files                (ThunarDBusService      *dbus_service,
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_unlink_files                (ThunarDBusFileManager  *object,
+                                                                 GDBusMethodInvocation  *invocation,
                                                                  const gchar            *working_directory,
                                                                  gchar                 **filenames,
                                                                  const gchar            *display,
                                                                  const gchar            *startup_id,
-                                                                 GError                **error);
-static gboolean thunar_dbus_service_terminate                   (ThunarDBusService      *dbus_service,
-                                                                 GError                **error);
-
-
-
-/* include generate dbus infos */
-#include <thunar/thunar-dbus-service-infos.h>
+                                                                 ThunarDBusService      *dbus_service);
+static gboolean thunar_dbus_service_terminate                   (ThunarDBusThunar       *object,
+                                                                 GDBusMethodInvocation  *invocation,
+                                                                 ThunarDBusService      *dbus_service);
 
 
 
@@ -213,7 +231,10 @@ struct _ThunarDBusService
 {
   GObject __parent__;
 
-  DBusGConnection *connection;
+  ThunarDBusFileManager *file_manager;
+  ThunarDBusTrash       *trash;
+  ThunarDBusThunar      *thunar;
+
   ThunarFile      *trash_bin;
 };
 
@@ -230,75 +251,70 @@ thunar_dbus_service_class_init (ThunarDBusServiceClass *klass)
 
   gobject_class = G_OBJECT_CLASS (klass);
   gobject_class->finalize = thunar_dbus_service_finalize;
-
-  /* install the D-BUS info for our class */
-  dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass), 
-                                   &dbus_glib_thunar_dbus_service_object_info);
-
-  /**
-   * ThunarDBusService::trash-changed:
-   * @dbus_service : a #ThunarDBusService.
-   * @full         : %TRUE if the trash bin now contains at least
-   *                 one item, %FALSE otherwise.
-   *
-   * This signal is emitted whenever the state of the trash bin
-   * changes. Note that this signal is only emitted after the
-   * trash has previously been queried by a D-BUS client.
-   **/
-  g_signal_new (I_("trash-changed"),
-                G_TYPE_FROM_CLASS (klass),
-                G_SIGNAL_RUN_LAST,
-                0, NULL, NULL,
-                g_cclosure_marshal_VOID__BOOLEAN,
-                G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
 }
 
 
 
-static void
-thunar_dbus_service_init (ThunarDBusService *dbus_service)
+static void connect_signals_multiple (gpointer object,
+                                      gpointer data,
+                                      ...)
 {
-  GError         *error = NULL;
-  DBusConnection *dbus_connection;
-  gint            result;
+  va_list ap;
 
-  /* try to connect to the session bus */
-  dbus_service->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-  if (G_LIKELY (dbus_service->connection != NULL))
-    {
-      /* register the /org/xfce/FileManager object for Thunar */
-      dbus_g_connection_register_g_object (dbus_service->connection, "/org/xfce/FileManager", G_OBJECT (dbus_service));
+  const char *signal;
+  gpointer   *handler;
 
-      /* request the org.xfce.Thunar name for Thunar */
-      dbus_connection = dbus_g_connection_get_connection (dbus_service->connection);
-      result = dbus_bus_request_name (dbus_connection, "org.xfce.Thunar",
-                                      DBUS_NAME_FLAG_ALLOW_REPLACEMENT | DBUS_NAME_FLAG_DO_NOT_QUEUE, NULL);
+  va_start (ap, data);
 
-      /* check if we successfully acquired the name */
-      if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
-        {
-          g_printerr ("Thunar: D-BUS name org.xfce.Thunar already registered.\n");
+  while ((signal = va_arg (ap, const char *)))
+    {
+      handler = va_arg (ap, gpointer);
 
-          /* unset connection */
-          dbus_g_connection_unref (dbus_service->connection);
-          dbus_service->connection = NULL;
+      g_signal_connect (object, signal, G_CALLBACK (handler), data);
+    }
 
-          return;
-        }
+  va_end (ap);
+}
 
-      /* request the org.xfce.FileManager name for Thunar */
-      dbus_bus_request_name (dbus_connection, "org.xfce.FileManager", DBUS_NAME_FLAG_REPLACE_EXISTING, NULL);
 
-      /* once we registered, unset dbus variables (bug #8800) */
-      g_unsetenv ("DBUS_STARTER_ADDRESS");
-      g_unsetenv ("DBUS_STARTER_BUS_TYPE");
-    }
-  else
-    {
-      /* notify the user that D-BUS service won't be available */
-      g_printerr ("Thunar: Failed to connect to the D-BUS session bus: %s\n", error->message);
-      g_error_free (error);
-    }
+
+static void
+thunar_dbus_service_init (ThunarDBusService *dbus_service)
+{
+  dbus_service->file_manager = thunar_dbus_file_manager_skeleton_new ();
+  dbus_service->trash        = thunar_dbus_trash_skeleton_new ();
+  dbus_service->thunar       = thunar_dbus_thunar_skeleton_new ();
+
+  connect_signals_multiple (dbus_service->file_manager, dbus_service,
+                            "handle-display-chooser-dialog", thunar_dbus_service_display_chooser_dialog,
+                            "handle-display-folder", thunar_dbus_service_display_folder,
+                            "handle-display-folder-and-select", thunar_dbus_service_display_folder_and_select,
+                            "handle-launch", thunar_dbus_service_launch,
+                            "handle-execute", thunar_dbus_service_execute,
+                            "handle-display-preferences-dialog", thunar_dbus_service_display_preferences_dialog,
+                            "handle-copy-to", thunar_dbus_service_copy_to,
+                            "handle-copy-into", thunar_dbus_service_copy_into,
+                            "handle-move-into", thunar_dbus_service_move_into,
+                            "handle-link-into", thunar_dbus_service_link_into,
+                            "handle-unlink-files", thunar_dbus_service_unlink_files,
+                            "handle-launch-files", thunar_dbus_service_launch_files,
+                            "handle-rename-file", thunar_dbus_service_rename_file,
+                            "handle-create-file", thunar_dbus_service_create_file,
+                            "handle-create-file-from-template", thunar_dbus_service_create_file_from_template,
+                            NULL);
+
+  connect_signals_multiple (dbus_service->trash, dbus_service,
+                            "handle-display-trash", thunar_dbus_service_display_trash,
+                            "handle-empty-trash", thunar_dbus_service_empty_trash,
+                            "handle-move-to-trash", thunar_dbus_service_move_to_trash,
+                            "handle-query-trash", thunar_dbus_service_query_trash,
+                            NULL);
+
+  connect_signals_multiple (dbus_service->thunar, dbus_service,
+                            "handle-bulk-rename", thunar_dbus_service_bulk_rename,
+                            "handle-terminate",
+                            thunar_dbus_service_terminate,
+                            NULL);
 }
 
 
@@ -307,29 +323,13 @@ static void
 thunar_dbus_service_finalize (GObject *object)
 {
   ThunarDBusService *dbus_service = THUNAR_DBUS_SERVICE (object);
-  DBusConnection    *dbus_connection;
 
-  /* release the D-BUS connection object */
-  if (G_LIKELY (dbus_service->connection != NULL))
-    {
-      /* release the names */
-      dbus_connection = dbus_g_connection_get_connection (dbus_service->connection);
-      dbus_bus_release_name (dbus_connection, "org.xfce.Thunar", NULL);
-      dbus_bus_release_name (dbus_connection, "org.xfce.FileManager", NULL);
+  g_object_unref (dbus_service->file_manager);
+  g_object_unref (dbus_service->trash);
+  g_object_unref (dbus_service->thunar);
 
-      dbus_g_connection_unref (dbus_service->connection);
-    }
-
-  /* check if we are connected to the trash bin */
-  if (G_LIKELY (dbus_service->trash_bin != NULL))
-    {
-      /* unwatch the trash bin */
-      thunar_file_unwatch (dbus_service->trash_bin);
-
-      /* release the trash bin */
-      g_signal_handlers_disconnect_by_func (G_OBJECT (dbus_service->trash_bin), thunar_dbus_service_trash_bin_changed, dbus_service);
-      g_object_unref (G_OBJECT (dbus_service->trash_bin));
-    }
+  if (dbus_service->trash_bin)
+    g_object_unref (dbus_service->trash_bin);
 
   (*G_OBJECT_CLASS (thunar_dbus_service_parent_class)->finalize) (object);
 }
@@ -402,26 +402,27 @@ thunar_dbus_service_trash_bin_changed (ThunarDBusService *dbus_service,
   _thunar_return_if_fail (THUNAR_IS_FILE (trash_bin));
 
   /* emit the "trash-changed" signal with the new state */
-  g_signal_emit_by_name (G_OBJECT (dbus_service), "trash-changed", 
-                         thunar_file_get_item_count (trash_bin) > 0);
+  thunar_dbus_trash_emit_trash_changed (dbus_service->trash);
 }
 
 
 
 static gboolean
-thunar_dbus_service_display_chooser_dialog (ThunarDBusService *dbus_service,
-                                            const gchar       *uri,
-                                            gboolean           open,
-                                            const gchar       *display,
-                                            const gchar       *startup_id,
-                                            GError           **error)
+thunar_dbus_service_display_chooser_dialog (ThunarDBusFileManager  *object,
+                                            GDBusMethodInvocation  *invocation,
+                                            const gchar            *uri,
+                                            gboolean                open,
+                                            const gchar            *display,
+                                            const gchar            *startup_id,
+                                            ThunarDBusService      *dbus_service)
 {
   ThunarFile *file;
   GdkScreen  *screen;
+  GError     *error = NULL;
 
   /* parse uri and display parameters */
-  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, error))
-    return FALSE;
+  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, &error))
+    goto out;
 
   /* popup the chooser dialog */
   /* TODO use the startup id! */
@@ -431,24 +432,32 @@ thunar_dbus_service_display_chooser_dialog (ThunarDBusService *dbus_service,
   g_object_unref (G_OBJECT (screen));
   g_object_unref (G_OBJECT (file));
 
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_display_chooser_dialog (object, invocation);
+
   return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_display_folder (ThunarDBusService *dbus_service,
-                                    const gchar       *uri,
-                                    const gchar       *display,
-                                    const gchar       *startup_id,
-                                    GError           **error)
+thunar_dbus_service_display_folder (ThunarDBusFileManager  *object,
+                                    GDBusMethodInvocation  *invocation,
+                                    const gchar            *uri,
+                                    const gchar            *display,
+                                    const gchar            *startup_id,
+                                    ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   ThunarFile        *file;
   GdkScreen         *screen;
+  GError            *error = NULL;
 
   /* parse uri and display parameters */
-  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, error))
+  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, &error))
     return FALSE;
 
   /* popup a new window for the folder */
@@ -460,18 +469,25 @@ thunar_dbus_service_display_folder (ThunarDBusService *dbus_service,
   g_object_unref (G_OBJECT (screen));
   g_object_unref (G_OBJECT (file));
 
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_display_folder (object, invocation);
+
   return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_display_folder_and_select (ThunarDBusService *dbus_service,
-                                               const gchar       *uri,
-                                               const gchar       *filename,
-                                               const gchar       *display,
-                                               const gchar       *startup_id,
-                                               GError           **error)
+thunar_dbus_service_display_folder_and_select (ThunarDBusFileManager  *object,
+                                               GDBusMethodInvocation  *invocation,
+                                               const gchar            *uri,
+                                               const gchar            *filename,
+                                               const gchar            *display,
+                                               const gchar            *startup_id,
+                                               ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   ThunarFile        *file;
@@ -479,17 +495,18 @@ thunar_dbus_service_display_folder_and_select (ThunarDBusService *dbus_service,
   GdkScreen         *screen;
   GtkWidget         *window;
   GFile             *path;
+  GError            *error = NULL;
 
   /* verify that filename is valid */
   if (G_UNLIKELY (filename == NULL || *filename == '\0' || strchr (filename, '/') != NULL))
     {
-      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("Invalid filename \"%s\""), filename);
-      return FALSE;
+      g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("Invalid filename \"%s\""), filename);
+      goto out;
     }
 
   /* parse uri and display parameters */
-  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &folder, &screen, error))
-    return FALSE;
+  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &folder, &screen, &error))
+    goto out;
 
   /* popup a new window for the folder */
   application = thunar_application_get ();
@@ -519,26 +536,34 @@ thunar_dbus_service_display_folder_and_select (ThunarDBusService *dbus_service,
   g_object_unref (screen);
   g_object_unref (folder);
 
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_display_folder_and_select (object, invocation);
+
   return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_display_file_properties (ThunarDBusService *dbus_service,
-                                             const gchar       *uri,
-                                             const gchar       *display,
-                                             const gchar       *startup_id,
-                                             GError           **error)
+thunar_dbus_service_display_file_properties (ThunarDBusFileManager  *object,
+                                             GDBusMethodInvocation  *invocation,
+                                             const gchar            *uri,
+                                             const gchar            *display,
+                                             const gchar            *startup_id,
+                                             ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   ThunarFile        *file;
   GdkScreen         *screen;
   GtkWidget         *dialog;
+  GError            *error = NULL;
 
   /* parse uri and display parameters */
-  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, error))
-    return FALSE;
+  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, &error))
+    goto out;
 
   /* popup the file properties dialog */
   dialog = thunar_properties_dialog_new (NULL);
@@ -556,50 +581,63 @@ thunar_dbus_service_display_file_properties (ThunarDBusService *dbus_service,
   g_object_unref (G_OBJECT (screen));
   g_object_unref (G_OBJECT (file));
 
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_display_file_properties (object, invocation);
+
   return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_launch (ThunarDBusService *dbus_service,
-                            const gchar       *uri,
-                            const gchar       *display,
-                            const gchar       *startup_id,
-                            GError           **error)
+thunar_dbus_service_launch (ThunarDBusFileManager  *object,
+                            GDBusMethodInvocation  *invocation,
+                            const gchar            *uri,
+                            const gchar            *display,
+                            const gchar            *startup_id,
+                            ThunarDBusService      *dbus_service)
 {
   ThunarFile *file;
   GdkScreen  *screen;
-  gboolean    result = FALSE;
+  GError     *error = NULL;
 
   /* parse uri and display parameters */
-  if (thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, error))
+  if (thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, &error))
     {
       /* try to launch the file on the given screen */
-      result = thunar_file_launch (file, screen, startup_id, error);
+      thunar_file_launch (file, screen, startup_id, &error);
 
       /* cleanup */
       g_object_unref (G_OBJECT (screen));
       g_object_unref (G_OBJECT (file));
     }
 
-  return result;
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_launch (object, invocation);
+
+  return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_execute (ThunarDBusService *dbus_service,
-                             const gchar       *working_directory,
-                             const gchar       *uri,
-                             const gchar      **files,
-                             const gchar       *display,
-                             const gchar       *startup_id,
-                             GError           **error)
+thunar_dbus_service_execute (ThunarDBusFileManager  *object,
+                             GDBusMethodInvocation  *invocation,
+                             const gchar            *working_directory,
+                             const gchar            *uri,
+                             const gchar           **files,
+                             const gchar            *display,
+                             const gchar            *startup_id,
+                             ThunarDBusService      *dbus_service)
 {
   ThunarFile *file;
   GdkScreen  *screen;
-  gboolean    result = FALSE;
+  GError     *error = NULL;
   GFile      *working_dir;
   GList      *file_list = NULL;
   gchar      *tmp_working_dir = NULL;
@@ -607,7 +645,7 @@ thunar_dbus_service_execute (ThunarDBusService *dbus_service,
   guint       n;
 
   /* parse uri and display parameters */
-  if (thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, error))
+  if (thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, &error))
     {
       if (working_directory != NULL && *working_directory != '\0')
         old_working_dir = thunar_util_change_working_directory (working_directory);
@@ -626,7 +664,7 @@ thunar_dbus_service_execute (ThunarDBusService *dbus_service,
 
       /* try to launch the file on the given screen */
       working_dir = g_file_new_for_commandline_arg (working_directory);
-      result = thunar_file_execute (file, working_dir, screen, file_list, startup_id, error);
+      thunar_file_execute (file, working_dir, screen, file_list, startup_id, &error);
       g_object_unref (working_dir);
 
       /* cleanup */
@@ -635,25 +673,32 @@ thunar_dbus_service_execute (ThunarDBusService *dbus_service,
       g_object_unref (file);
     }
 
-  return result;
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_launch (object, invocation);
+
+  return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_display_preferences_dialog (ThunarDBusService *dbus_service,
-                                                const gchar       *display,
-                                                const gchar       *startup_id,
-                                                GError           **error)
+thunar_dbus_service_display_preferences_dialog (ThunarDBusFileManager  *object,
+                                                GDBusMethodInvocation  *invocation,
+                                                const gchar            *display,
+                                                const gchar            *startup_id,
+                                                ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   GdkScreen         *screen;
   GtkWidget         *dialog;
+  GError            *error = NULL;
 
   /* try to open the screen for the display name */
-  screen = thunar_gdk_screen_open (display, error);
+  screen = thunar_gdk_screen_open (display, &error);
   if (G_UNLIKELY (screen == NULL))
-    return FALSE;
+    goto out;
 
   /* popup the preferences dialog... */
   dialog = thunar_preferences_dialog_new (NULL);
@@ -669,26 +714,34 @@ thunar_dbus_service_display_preferences_dialog (ThunarDBusService *dbus_service,
   /* cleanup */
   g_object_unref (G_OBJECT (screen));
 
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_display_preferences_dialog (object, invocation);
+
   return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_display_trash (ThunarDBusService *dbus_service,
-                                   const gchar       *display,
-                                   const gchar       *startup_id,
-                                   GError           **error)
+thunar_dbus_service_display_trash (ThunarDBusTrash        *object,
+                                   GDBusMethodInvocation  *invocation,
+                                   const gchar            *display,
+                                   const gchar            *startup_id,
+                                   ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   GdkScreen         *screen;
+  GError            *error = NULL;
 
   /* connect to the trash bin on-demand */
-  if (!thunar_dbus_service_connect_trash_bin (dbus_service, error))
-    return FALSE;
+  if (!thunar_dbus_service_connect_trash_bin (dbus_service, &error))
+    goto out;
 
   /* try to open the screen for the display name */
-  screen = thunar_gdk_screen_open (display, error);
+  screen = thunar_gdk_screen_open (display, &error);
   if (G_LIKELY (screen != NULL))
     {
       /* tell the application to display the trash bin */
@@ -698,25 +751,32 @@ thunar_dbus_service_display_trash (ThunarDBusService *dbus_service,
 
       /* release the screen */
       g_object_unref (G_OBJECT (screen));
-      return TRUE;
     }
 
-  return FALSE;
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_trash_complete_display_trash (object, invocation);
+
+  return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_empty_trash (ThunarDBusService *dbus_service,
-                                 const gchar       *display,
-                                 const gchar       *startup_id,
-                                 GError           **error)
+thunar_dbus_service_empty_trash (ThunarDBusTrash        *object,
+                                 GDBusMethodInvocation  *invocation,
+                                 const gchar            *display,
+                                 const gchar            *startup_id,
+                                 ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   GdkScreen         *screen;
+  GError            *error = NULL;
 
   /* try to open the screen for the display name */
-  screen = thunar_gdk_screen_open (display, error);
+  screen = thunar_gdk_screen_open (display, &error);
   if (G_LIKELY (screen != NULL))
     {
       /* tell the application to empty the trash bin */
@@ -726,20 +786,26 @@ thunar_dbus_service_empty_trash (ThunarDBusService *dbus_service,
 
       /* release the screen */
       g_object_unref (G_OBJECT (screen));
-      return TRUE;
     }
 
-  return FALSE;
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_trash_complete_empty_trash (object, invocation);
+
+  return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_move_to_trash (ThunarDBusService *dbus_service,
-                                   gchar            **filenames,
-                                   const gchar       *display,
-                                   const gchar       *startup_id,
-                                   GError           **error)
+thunar_dbus_service_move_to_trash (ThunarDBusTrash        *object,
+                                   GDBusMethodInvocation  *invocation,
+                                   gchar                 **filenames,
+                                   const gchar            *display,
+                                   const gchar            *startup_id,
+                                   ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   GFile             *file;
@@ -786,12 +852,11 @@ thunar_dbus_service_move_to_trash (ThunarDBusService *dbus_service,
     }
 
   /* check if we failed */
-  if (G_UNLIKELY (err != NULL))
-    {
-      /* propagate the error */
-      g_propagate_error (error, err);
-      return FALSE;
-    }
+out:
+  if (err)
+    g_dbus_method_invocation_take_error (invocation, err);
+  else
+    thunar_dbus_trash_complete_move_to_trash (object, invocation);
 
   return TRUE;
 }
@@ -799,36 +864,45 @@ thunar_dbus_service_move_to_trash (ThunarDBusService *dbus_service,
 
 
 static gboolean
-thunar_dbus_service_query_trash (ThunarDBusService *dbus_service,
-                                 gboolean          *full,
-                                 GError           **error)
+thunar_dbus_service_query_trash (ThunarDBusTrash        *object,
+                                 GDBusMethodInvocation  *invocation,
+                                 ThunarDBusService      *dbus_service)
 {
+  GError *error = NULL;
+  gboolean full = FALSE;
+
   /* connect to the trash bin on-demand */
-  if (thunar_dbus_service_connect_trash_bin (dbus_service, error))
+  if (thunar_dbus_service_connect_trash_bin (dbus_service, &error))
     {
       /* check whether the trash bin is not empty */
-      *full = (thunar_file_get_item_count (dbus_service->trash_bin) > 0);
-      return TRUE;
+      full = (thunar_file_get_item_count (dbus_service->trash_bin) > 0);
     }
 
-  return FALSE;
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_trash_complete_query_trash (object, invocation, full);
+
+  return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_bulk_rename (ThunarDBusService *dbus_service,
-                                 const gchar       *working_directory,
-                                 gchar            **filenames,
-                                 gboolean           standalone,
-                                 const gchar       *display,
-                                 const gchar       *startup_id,
-                                 GError           **error)
+thunar_dbus_service_bulk_rename (ThunarDBusThunar  *object,
+                                 GDBusMethodInvocation  *invocation,
+                                 const gchar            *working_directory,
+                                 gchar                 **filenames,
+                                 gboolean                standalone,
+                                 const gchar            *display,
+                                 const gchar            *startup_id,
+                                 ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   GdkScreen         *screen;
-  gboolean           result = FALSE;
   gchar             *cwd;
+  GError            *error = NULL;
 
   /* determine a proper working directory */
   cwd = (working_directory != NULL && *working_directory != '\0')
@@ -836,12 +910,12 @@ thunar_dbus_service_bulk_rename (ThunarDBusService *dbus_service,
       : g_get_current_dir ();
 
   /* try to open the screen for the display name */
-  screen = thunar_gdk_screen_open (display, error);
+  screen = thunar_gdk_screen_open (display, &error);
   if (G_LIKELY (screen != NULL))
     {
       /* tell the application to display the bulk rename dialog */
       application = thunar_application_get ();
-      result = thunar_application_bulk_rename (application, cwd, filenames, standalone, screen, startup_id, error);
+      thunar_application_bulk_rename (application, cwd, filenames, standalone, screen, startup_id, &error);
       g_object_unref (G_OBJECT (application));
 
       /* release the screen */
@@ -851,71 +925,86 @@ thunar_dbus_service_bulk_rename (ThunarDBusService *dbus_service,
   /* release the cwd */
   g_free (cwd);
 
-  return result;
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_thunar_complete_bulk_rename (object, invocation);
+
+  return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_launch_files (ThunarDBusService *dbus_service,
-                                  const gchar       *working_directory,
-                                  gchar            **filenames,
-                                  const gchar       *display,
-                                  const gchar       *startup_id,
-                                  GError           **error)
+thunar_dbus_service_launch_files (ThunarDBusFileManager  *object,
+                                  GDBusMethodInvocation  *invocation,
+                                  const gchar            *working_directory,
+                                  gchar                 **filenames,
+                                  const gchar            *display,
+                                  const gchar            *startup_id,
+                                  ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   GdkScreen         *screen;
-  gboolean           result = FALSE;
+  GError            *error = NULL;
 
   /* verify that a valid working directory is given */
   if (G_UNLIKELY (!g_path_is_absolute (working_directory)))
     {
       /* LaunchFiles() invoked without a valid working directory */
-      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("The working directory must be an absolute path"));
-      return FALSE;
+      g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("The working directory must be an absolute path"));
+      goto out;
     }
 
   /* verify that at least one filename is given */
   if (G_UNLIKELY (filenames == NULL || *filenames == NULL))
     {
       /* LaunchFiles() invoked with an empty filename list */
-      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("At least one filename must be specified"));
-      return FALSE;
+      g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("At least one filename must be specified"));
+      goto out;
     }
 
   /* try to open the screen for the display name */
-  screen = thunar_gdk_screen_open (display, error);
+  screen = thunar_gdk_screen_open (display, &error);
   if (G_LIKELY (screen != NULL))
     {
       /* let the application process the filenames */
       application = thunar_application_get ();
-      result = thunar_application_process_filenames (application, working_directory, filenames, screen, startup_id, error);
+      thunar_application_process_filenames (application, working_directory, filenames, screen, startup_id, &error);
       g_object_unref (G_OBJECT (application));
 
       /* release the screen */
       g_object_unref (G_OBJECT (screen));
     }
 
-  return result;
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_launch_files (object, invocation);
+
+  return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_rename_file (ThunarDBusService *dbus_service,
-                                 const gchar       *uri,
-                                 const gchar       *display,
-                                 const gchar       *startup_id,
-                                 GError           **error)
+thunar_dbus_service_rename_file (ThunarDBusFileManager  *object,
+                                 GDBusMethodInvocation  *invocation,
+                                 const gchar            *uri,
+                                 const gchar            *display,
+                                 const gchar            *startup_id,
+                                 ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   ThunarFile        *file;
   GdkScreen         *screen;
+  GError            *error = NULL;
 
   /* parse uri and display parameters */
-  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, error))
-    return FALSE;
+  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, uri, display, &file, &screen, &error))
+    goto out;
 
   /* popup a new window for the folder */
   application = thunar_application_get ();
@@ -926,26 +1015,34 @@ thunar_dbus_service_rename_file (ThunarDBusService *dbus_service,
   g_object_unref (G_OBJECT (screen));
   g_object_unref (G_OBJECT (file));
 
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_rename_file (object, invocation);
+
   return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_create_file (ThunarDBusService *dbus_service,
-                                 const gchar       *parent_directory,
-                                 const gchar       *content_type,
-                                 const gchar       *display,
-                                 const gchar       *startup_id,
-                                 GError           **error)
+thunar_dbus_service_create_file (ThunarDBusFileManager  *object,
+                                 GDBusMethodInvocation  *invocation,
+                                 const gchar            *parent_directory,
+                                 const gchar            *content_type,
+                                 const gchar            *display,
+                                 const gchar            *startup_id,
+                                 ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   ThunarFile        *file;
   GdkScreen         *screen;
+  GError            *error = NULL;
 
   /* parse uri and display parameters */
-  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, parent_directory, display, &file, &screen, error))
-    return FALSE;
+  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, parent_directory, display, &file, &screen, &error))
+    goto out;
 
   /* fall back to plain text file if no content type is provided */
   if (content_type == NULL || *content_type == '\0')
@@ -960,32 +1057,40 @@ thunar_dbus_service_create_file (ThunarDBusService *dbus_service,
   g_object_unref (G_OBJECT (screen));
   g_object_unref (G_OBJECT (file));
 
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_create_file (object, invocation);
+
   return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_create_file_from_template (ThunarDBusService *dbus_service,
-                                               const gchar       *parent_directory,
-                                               const gchar       *template_uri,
-                                               const gchar       *display,
-                                               const gchar       *startup_id,
-                                               GError           **error)
+thunar_dbus_service_create_file_from_template (ThunarDBusFileManager  *object,
+                                               GDBusMethodInvocation  *invocation,
+                                               const gchar            *parent_directory,
+                                               const gchar            *template_uri,
+                                               const gchar            *display,
+                                               const gchar            *startup_id,
+                                               ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   ThunarFile        *file;
   ThunarFile        *template_file;
   GdkScreen         *screen;
+  GError            *error = NULL;
 
   /* parse uri and display parameters */
-  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, parent_directory, display, &file, &screen, error))
-    return FALSE;
+  if (!thunar_dbus_service_parse_uri_and_display (dbus_service, parent_directory, display, &file, &screen, &error))
+    goto out;
 
   /* try to determine the file for the template URI */
-  template_file = thunar_file_get_for_uri (template_uri, error);
+  template_file = thunar_file_get_for_uri (template_uri, &error);
   if(template_file == NULL)
-    return FALSE;
+    goto out;
 
   /* popup a new window for the folder */
   application = thunar_application_get ();
@@ -996,6 +1101,12 @@ thunar_dbus_service_create_file_from_template (ThunarDBusService *dbus_service,
   g_object_unref (G_OBJECT (screen));
   g_object_unref (G_OBJECT (file));
 
+out:
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_create_file_from_template (object, invocation);
+
   return TRUE;
 }
 
@@ -1141,97 +1252,135 @@ thunar_dbus_service_transfer_files (ThunarDBusTransferMode transfer_mode,
 
 
 static gboolean
-thunar_dbus_service_copy_to (ThunarDBusService *dbus_service,
-                             const gchar       *working_directory,
-                             gchar            **source_filenames,
-                             gchar            **target_filenames,
-                             const gchar       *display,
-                             const gchar       *startup_id,
-                             GError           **error)
+thunar_dbus_service_copy_to (ThunarDBusFileManager  *object,
+                             GDBusMethodInvocation  *invocation,
+                             const gchar            *working_directory,
+                             gchar                 **source_filenames,
+                             gchar                 **target_filenames,
+                             const gchar            *display,
+                             const gchar            *startup_id,
+                             ThunarDBusService      *dbus_service)
 {
-  return thunar_dbus_service_transfer_files (THUNAR_DBUS_TRANSFER_MODE_COPY_TO,
-                                             working_directory,
-                                             (const gchar * const *)source_filenames,
-                                             (const gchar * const *)target_filenames,
-                                             display,
-                                             startup_id,
-                                             error);
+  GError *error = NULL;
+
+  thunar_dbus_service_transfer_files (THUNAR_DBUS_TRANSFER_MODE_COPY_TO,
+                                      working_directory,
+                                      (const gchar * const *)source_filenames,
+                                      (const gchar * const *)target_filenames,
+                                      display,
+                                      startup_id,
+                                      &error);
+
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_copy_to (object, invocation);
+
+  return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_copy_into (ThunarDBusService *dbus_service,
-                               const gchar       *working_directory,
-                               gchar            **source_filenames,
-                               const gchar       *target_filename,
-                               const gchar       *display,
-                               const gchar       *startup_id,
-                               GError           **error)
+thunar_dbus_service_copy_into (ThunarDBusFileManager  *object,
+                               GDBusMethodInvocation  *invocation,
+                               const gchar            *working_directory,
+                               gchar                 **source_filenames,
+                               const gchar            *target_filename,
+                               const gchar            *display,
+                               const gchar            *startup_id,
+                               ThunarDBusService      *dbus_service)
 {
   const gchar *target_filenames[2] = { target_filename, NULL };
+  GError *error = NULL;
+
+  thunar_dbus_service_transfer_files (THUNAR_DBUS_TRANSFER_MODE_COPY_INTO,
+                                      working_directory,
+                                      (const gchar * const *)source_filenames,
+                                      target_filenames,
+                                      display,
+                                      startup_id,
+                                      &error);
+
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_copy_into (object, invocation);
 
-  return thunar_dbus_service_transfer_files (THUNAR_DBUS_TRANSFER_MODE_COPY_INTO,
-                                             working_directory,
-                                             (const gchar * const *)source_filenames,
-                                             target_filenames,
-                                             display,
-                                             startup_id,
-                                             error);
+  return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_move_into (ThunarDBusService *dbus_service,
-                               const gchar       *working_directory,
-                               gchar            **source_filenames,
-                               const gchar       *target_filename,
-                               const gchar       *display,
-                               const gchar       *startup_id,
-                               GError           **error)
+thunar_dbus_service_move_into (ThunarDBusFileManager  *object,
+                               GDBusMethodInvocation  *invocation,
+                               const gchar            *working_directory,
+                               gchar                 **source_filenames,
+                               const gchar            *target_filename,
+                               const gchar            *display,
+                               const gchar            *startup_id,
+                               ThunarDBusService      *dbus_service)
 {
   const gchar *target_filenames[2] = { target_filename, NULL };
+  GError *error = NULL;
+
+  thunar_dbus_service_transfer_files (THUNAR_DBUS_TRANSFER_MODE_MOVE_INTO,
+                                      working_directory,
+                                      (const gchar * const *)source_filenames,
+                                      target_filenames,
+                                      display,
+                                      startup_id,
+                                      &error);
+
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_move_into (object, invocation);
 
-  return thunar_dbus_service_transfer_files (THUNAR_DBUS_TRANSFER_MODE_MOVE_INTO,
-                                             working_directory,
-                                             (const gchar * const *)source_filenames,
-                                             target_filenames,
-                                             display,
-                                             startup_id,
-                                             error);
+  return TRUE;
 }
 
 
 
 static gboolean
-thunar_dbus_service_link_into (ThunarDBusService *dbus_service,
-                               const gchar       *working_directory,
-                               gchar            **source_filenames,
-                               const gchar       *target_filename,
-                               const gchar       *display,
-                               const gchar       *startup_id,
-                               GError           **error)
+thunar_dbus_service_link_into (ThunarDBusFileManager  *object,
+                               GDBusMethodInvocation  *invocation,
+                               const gchar            *working_directory,
+                               gchar                 **source_filenames,
+                               const gchar            *target_filename,
+                               const gchar            *display,
+                               const gchar            *startup_id,
+                               ThunarDBusService      *dbus_service)
 {
   const gchar *target_filenames[2] = { target_filename, NULL };
+  GError *error = NULL;
+
+  thunar_dbus_service_transfer_files (THUNAR_DBUS_TRANSFER_MODE_LINK_INTO,
+                                      working_directory,
+                                      (const gchar * const *)source_filenames,
+                                      target_filenames,
+                                      display,
+                                      startup_id,
+                                      &error);
+
+  if (error)
+    g_dbus_method_invocation_take_error (invocation, error);
+  else
+    thunar_dbus_file_manager_complete_link_into (object, invocation);
 
-  return thunar_dbus_service_transfer_files (THUNAR_DBUS_TRANSFER_MODE_LINK_INTO,
-                                             working_directory,
-                                             (const gchar * const *)source_filenames,
-                                             target_filenames,
-                                             display,
-                                             startup_id,
-                                             error);
+  return TRUE;
 }
 
 
 static gboolean
-thunar_dbus_service_unlink_files (ThunarDBusService  *dbus_service,
-                                  const gchar        *working_directory,
-                                  gchar             **filenames,
-                                  const gchar        *display,
-                                  const gchar        *startup_id,
-                                  GError            **error)
+thunar_dbus_service_unlink_files (ThunarDBusFileManager  *object,
+                                  GDBusMethodInvocation  *invocation,
+                                  const gchar            *working_directory,
+                                  gchar                 **filenames,
+                                  const gchar            *display,
+                                  const gchar            *startup_id,
+                                  ThunarDBusService      *dbus_service)
 {
   ThunarApplication *application;
   ThunarFile        *thunar_file;
@@ -1247,8 +1396,8 @@ thunar_dbus_service_unlink_files (ThunarDBusService  *dbus_service,
   /* verify that atleast one filename is given */
   if (filenames == NULL || *filenames == NULL)
     {
-      g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("At least one filename must be specified"));
-      return FALSE;
+      g_set_error (&err, G_FILE_ERROR, G_FILE_ERROR_INVAL, _("At least one filename must be specified"));
+      goto out;
     }
 
   /* try to open the screen for the display name */
@@ -1302,11 +1451,11 @@ thunar_dbus_service_unlink_files (ThunarDBusService  *dbus_service,
       g_object_unref (screen);
     }
 
-  if (err != NULL)
-    {
-      g_propagate_error (error, err);
-      return FALSE;
-    }
+out:
+  if (err)
+    g_dbus_method_invocation_take_error (invocation, err);
+  else
+    thunar_dbus_file_manager_complete_unlink_files (object, invocation);
 
   return TRUE;
 }
@@ -1314,21 +1463,51 @@ thunar_dbus_service_unlink_files (ThunarDBusService  *dbus_service,
 
 
 static gboolean
-thunar_dbus_service_terminate (ThunarDBusService *dbus_service,
-                               GError           **error)
+thunar_dbus_service_terminate (ThunarDBusThunar       *object,
+                               GDBusMethodInvocation  *invocation,
+                               ThunarDBusService      *dbus_service)
 {
   /* leave the Gtk main loop as soon as possible */
-  gtk_main_quit ();
+  ThunarApplication *app = thunar_application_get ();
+  g_application_quit (G_APPLICATION (app));
+  g_object_unref (app);
 
   /* we cannot fail */
+  thunar_dbus_thunar_complete_terminate (object, invocation);
+
   return TRUE;
 }
 
 
 
-gboolean
-thunar_dbus_service_has_connection (ThunarDBusService *dbus_service)
+gboolean thunar_dbus_service_export_on_connection (ThunarDBusService *service,
+                                                   GDBusConnection   *connection,
+                                                   GError           **error)
 {
-  _thunar_return_val_if_fail (THUNAR_IS_DBUS_SERVICE (dbus_service), FALSE);
-  return dbus_service->connection != NULL;
+  if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (service->file_manager),
+                                         connection,
+                                         "/org/xfce/FileManager",
+                                         error))
+    goto fail;
+
+  if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (service->trash),
+                                         connection,
+                                         "/org/xfce/FileManager",
+                                         error))
+    goto fail;
+
+  if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (service->thunar),
+                                         connection,
+                                         "/org/xfce/FileManager",
+                                         error))
+    goto fail;
+
+  return TRUE;
+
+fail:
+  /* export either all or nothing */
+  g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (service->file_manager), connection);
+  g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (service->trash), connection);
+  g_dbus_interface_skeleton_unexport_from_connection (G_DBUS_INTERFACE_SKELETON (service->thunar), connection);
+  return FALSE;
 }
diff --git a/thunar/thunar-dbus-service.h b/thunar/thunar-dbus-service.h
index 7044000..e2900bd 100644
--- a/thunar/thunar-dbus-service.h
+++ b/thunar/thunar-dbus-service.h
@@ -36,7 +36,9 @@ typedef struct _ThunarDBusService      ThunarDBusService;
 
 GType    thunar_dbus_service_get_type       (void) G_GNUC_CONST;
 
-gboolean thunar_dbus_service_has_connection (ThunarDBusService *dbus_service);
+gboolean thunar_dbus_service_export_on_connection (ThunarDBusService *service,
+                                                   GDBusConnection   *connection,
+                                                   GError           **error);
 
 G_END_DECLS;
 
diff --git a/thunar/thunar-thumbnail-cache-dbus.xml b/thunar/thunar-thumbnail-cache-dbus.xml
index 92ffa42..db06d32 100644
--- a/thunar/thunar-thumbnail-cache-dbus.xml
+++ b/thunar/thunar-thumbnail-cache-dbus.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <node name="/org/freedesktop/thumbnails/Cache1">
   <interface name="org.freedesktop.thumbnails.Cache1">
+    <annotation name="org.gtk.GDBus.C.Name" value="ThumbnailCacheDBus" />
     <method name="Move">
       <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
       <arg type="as" name="from_uris" direction="in" />
diff --git a/thunar/thunar-thumbnail-cache-proxy.c b/thunar/thunar-thumbnail-cache-proxy.c
new file mode 100644
index 0000000..dee22ac
--- /dev/null
+++ b/thunar/thunar-thumbnail-cache-proxy.c
@@ -0,0 +1,1663 @@
+/*
+ * Generated by gdbus-codegen 2.44.1. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "thunar-thumbnail-cache-proxy.h"
+
+#include <string.h>
+#ifdef G_OS_UNIX
+#  include <gio/gunixfdlist.h>
+#endif
+
+typedef struct
+{
+  GDBusArgInfo parent_struct;
+  gboolean use_gvariant;
+} _ExtendedGDBusArgInfo;
+
+typedef struct
+{
+  GDBusMethodInfo parent_struct;
+  const gchar *signal_name;
+  gboolean pass_fdlist;
+} _ExtendedGDBusMethodInfo;
+
+typedef struct
+{
+  GDBusSignalInfo parent_struct;
+  const gchar *signal_name;
+} _ExtendedGDBusSignalInfo;
+
+typedef struct
+{
+  GDBusPropertyInfo parent_struct;
+  const gchar *hyphen_name;
+  gboolean use_gvariant;
+} _ExtendedGDBusPropertyInfo;
+
+typedef struct
+{
+  GDBusInterfaceInfo parent_struct;
+  const gchar *hyphen_name;
+} _ExtendedGDBusInterfaceInfo;
+
+typedef struct
+{
+  const _ExtendedGDBusPropertyInfo *info;
+  guint prop_id;
+  GValue orig_value; /* the value before the change */
+} ChangedProperty;
+
+static void
+_changed_property_free (ChangedProperty *data)
+{
+  g_value_unset (&data->orig_value);
+  g_free (data);
+}
+
+static gboolean
+_g_strv_equal0 (gchar **a, gchar **b)
+{
+  gboolean ret = FALSE;
+  guint n;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  if (g_strv_length (a) != g_strv_length (b))
+    goto out;
+  for (n = 0; a[n] != NULL; n++)
+    if (g_strcmp0 (a[n], b[n]) != 0)
+      goto out;
+  ret = TRUE;
+out:
+  return ret;
+}
+
+static gboolean
+_g_variant_equal0 (GVariant *a, GVariant *b)
+{
+  gboolean ret = FALSE;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  ret = g_variant_equal (a, b);
+out:
+  return ret;
+}
+
+G_GNUC_UNUSED static gboolean
+_g_value_equal (const GValue *a, const GValue *b)
+{
+  gboolean ret = FALSE;
+  g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
+  switch (G_VALUE_TYPE (a))
+    {
+      case G_TYPE_BOOLEAN:
+        ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
+        break;
+      case G_TYPE_UCHAR:
+        ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
+        break;
+      case G_TYPE_INT:
+        ret = (g_value_get_int (a) == g_value_get_int (b));
+        break;
+      case G_TYPE_UINT:
+        ret = (g_value_get_uint (a) == g_value_get_uint (b));
+        break;
+      case G_TYPE_INT64:
+        ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
+        break;
+      case G_TYPE_UINT64:
+        ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
+        break;
+      case G_TYPE_DOUBLE:
+        {
+          /* Avoid -Wfloat-equal warnings by doing a direct bit compare */
+          gdouble da = g_value_get_double (a);
+          gdouble db = g_value_get_double (b);
+          ret = memcmp (&da, &db, sizeof (gdouble)) == 0;
+        }
+        break;
+      case G_TYPE_STRING:
+        ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
+        break;
+      case G_TYPE_VARIANT:
+        ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
+        break;
+      default:
+        if (G_VALUE_TYPE (a) == G_TYPE_STRV)
+          ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
+        else
+          g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
+        break;
+    }
+  return ret;
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.freedesktop.thumbnails.Cache1
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:ThunarThumbnailCacheDBus
+ * @title: ThunarThumbnailCacheDBus
+ * @short_description: Generated C code for the org.freedesktop.thumbnails.Cache1 D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-freedesktop-thumbnails-Cache1.top_of_page">org.freedesktop.thumbnails.Cache1</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.freedesktop.thumbnails.Cache1 ---- */
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnail_cache_dbus_method_info_move_IN_ARG_from_uris =
+{
+  {
+    -1,
+    (gchar *) "from_uris",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnail_cache_dbus_method_info_move_IN_ARG_to_uris =
+{
+  {
+    -1,
+    (gchar *) "to_uris",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnail_cache_dbus_method_info_move_IN_ARG_pointers[] =
+{
+  &_thunar_thumbnail_cache_dbus_method_info_move_IN_ARG_from_uris,
+  &_thunar_thumbnail_cache_dbus_method_info_move_IN_ARG_to_uris,
+  NULL
+};
+
+static const GDBusAnnotationInfo _thunar_thumbnail_cache_dbus_method_move_annotation_info_0 =
+{
+  -1,
+  (gchar *) "org.freedesktop.DBus.GLib.Async",
+  (gchar *) "true",
+  NULL
+};
+
+static const GDBusAnnotationInfo * const _thunar_thumbnail_cache_dbus_method_move_annotation_info_pointers[] =
+{
+  &_thunar_thumbnail_cache_dbus_method_move_annotation_info_0,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_thumbnail_cache_dbus_method_info_move =
+{
+  {
+    -1,
+    (gchar *) "Move",
+    (GDBusArgInfo **) &_thunar_thumbnail_cache_dbus_method_info_move_IN_ARG_pointers,
+    NULL,
+    (GDBusAnnotationInfo **) &_thunar_thumbnail_cache_dbus_method_move_annotation_info_pointers
+  },
+  "handle-move",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnail_cache_dbus_method_info_copy_IN_ARG_from_uris =
+{
+  {
+    -1,
+    (gchar *) "from_uris",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnail_cache_dbus_method_info_copy_IN_ARG_to_uris =
+{
+  {
+    -1,
+    (gchar *) "to_uris",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnail_cache_dbus_method_info_copy_IN_ARG_pointers[] =
+{
+  &_thunar_thumbnail_cache_dbus_method_info_copy_IN_ARG_from_uris,
+  &_thunar_thumbnail_cache_dbus_method_info_copy_IN_ARG_to_uris,
+  NULL
+};
+
+static const GDBusAnnotationInfo _thunar_thumbnail_cache_dbus_method_copy_annotation_info_0 =
+{
+  -1,
+  (gchar *) "org.freedesktop.DBus.GLib.Async",
+  (gchar *) "true",
+  NULL
+};
+
+static const GDBusAnnotationInfo * const _thunar_thumbnail_cache_dbus_method_copy_annotation_info_pointers[] =
+{
+  &_thunar_thumbnail_cache_dbus_method_copy_annotation_info_0,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_thumbnail_cache_dbus_method_info_copy =
+{
+  {
+    -1,
+    (gchar *) "Copy",
+    (GDBusArgInfo **) &_thunar_thumbnail_cache_dbus_method_info_copy_IN_ARG_pointers,
+    NULL,
+    (GDBusAnnotationInfo **) &_thunar_thumbnail_cache_dbus_method_copy_annotation_info_pointers
+  },
+  "handle-copy",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnail_cache_dbus_method_info_delete_IN_ARG_uris =
+{
+  {
+    -1,
+    (gchar *) "uris",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnail_cache_dbus_method_info_delete_IN_ARG_pointers[] =
+{
+  &_thunar_thumbnail_cache_dbus_method_info_delete_IN_ARG_uris,
+  NULL
+};
+
+static const GDBusAnnotationInfo _thunar_thumbnail_cache_dbus_method_delete_annotation_info_0 =
+{
+  -1,
+  (gchar *) "org.freedesktop.DBus.GLib.Async",
+  (gchar *) "true",
+  NULL
+};
+
+static const GDBusAnnotationInfo * const _thunar_thumbnail_cache_dbus_method_delete_annotation_info_pointers[] =
+{
+  &_thunar_thumbnail_cache_dbus_method_delete_annotation_info_0,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_thumbnail_cache_dbus_method_info_delete =
+{
+  {
+    -1,
+    (gchar *) "Delete",
+    (GDBusArgInfo **) &_thunar_thumbnail_cache_dbus_method_info_delete_IN_ARG_pointers,
+    NULL,
+    (GDBusAnnotationInfo **) &_thunar_thumbnail_cache_dbus_method_delete_annotation_info_pointers
+  },
+  "handle-delete",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnail_cache_dbus_method_info_cleanup_IN_ARG_base_uris =
+{
+  {
+    -1,
+    (gchar *) "base_uris",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnail_cache_dbus_method_info_cleanup_IN_ARG_since =
+{
+  {
+    -1,
+    (gchar *) "since",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnail_cache_dbus_method_info_cleanup_IN_ARG_pointers[] =
+{
+  &_thunar_thumbnail_cache_dbus_method_info_cleanup_IN_ARG_base_uris,
+  &_thunar_thumbnail_cache_dbus_method_info_cleanup_IN_ARG_since,
+  NULL
+};
+
+static const GDBusAnnotationInfo _thunar_thumbnail_cache_dbus_method_cleanup_annotation_info_0 =
+{
+  -1,
+  (gchar *) "org.freedesktop.DBus.GLib.Async",
+  (gchar *) "true",
+  NULL
+};
+
+static const GDBusAnnotationInfo * const _thunar_thumbnail_cache_dbus_method_cleanup_annotation_info_pointers[] =
+{
+  &_thunar_thumbnail_cache_dbus_method_cleanup_annotation_info_0,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_thumbnail_cache_dbus_method_info_cleanup =
+{
+  {
+    -1,
+    (gchar *) "Cleanup",
+    (GDBusArgInfo **) &_thunar_thumbnail_cache_dbus_method_info_cleanup_IN_ARG_pointers,
+    NULL,
+    (GDBusAnnotationInfo **) &_thunar_thumbnail_cache_dbus_method_cleanup_annotation_info_pointers
+  },
+  "handle-cleanup",
+  FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _thunar_thumbnail_cache_dbus_method_info_pointers[] =
+{
+  &_thunar_thumbnail_cache_dbus_method_info_move,
+  &_thunar_thumbnail_cache_dbus_method_info_copy,
+  &_thunar_thumbnail_cache_dbus_method_info_delete,
+  &_thunar_thumbnail_cache_dbus_method_info_cleanup,
+  NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _thunar_thumbnail_cache_dbus_interface_info =
+{
+  {
+    -1,
+    (gchar *) "org.freedesktop.thumbnails.Cache1",
+    (GDBusMethodInfo **) &_thunar_thumbnail_cache_dbus_method_info_pointers,
+    NULL,
+    NULL,
+    NULL
+  },
+  "thumbnail-cache-dbus",
+};
+
+
+/**
+ * thunar_thumbnail_cache_dbus_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-freedesktop-thumbnails-Cache1.top_of_page">org.freedesktop.thumbnails.Cache1</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+thunar_thumbnail_cache_dbus_interface_info (void)
+{
+  return (GDBusInterfaceInfo *) &_thunar_thumbnail_cache_dbus_interface_info.parent_struct;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #ThunarThumbnailCacheDBus interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+thunar_thumbnail_cache_dbus_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+  return property_id_begin - 1;
+}
+
+
+
+/**
+ * ThunarThumbnailCacheDBus:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-thumbnails-Cache1.top_of_page">org.freedesktop.thumbnails.Cache1</link>.
+ */
+
+/**
+ * ThunarThumbnailCacheDBusIface:
+ * @parent_iface: The parent interface.
+ * @handle_cleanup: Handler for the #ThunarThumbnailCacheDBus::handle-cleanup signal.
+ * @handle_copy: Handler for the #ThunarThumbnailCacheDBus::handle-copy signal.
+ * @handle_delete: Handler for the #ThunarThumbnailCacheDBus::handle-delete signal.
+ * @handle_move: Handler for the #ThunarThumbnailCacheDBus::handle-move signal.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-thumbnails-Cache1.top_of_page">org.freedesktop.thumbnails.Cache1</link>.
+ */
+
+typedef ThunarThumbnailCacheDBusIface ThunarThumbnailCacheDBusInterface;
+G_DEFINE_INTERFACE (ThunarThumbnailCacheDBus, thunar_thumbnail_cache_dbus, G_TYPE_OBJECT);
+
+static void
+thunar_thumbnail_cache_dbus_default_init (ThunarThumbnailCacheDBusIface *iface)
+{
+  /* GObject signals for incoming D-Bus method calls: */
+  /**
+   * ThunarThumbnailCacheDBus::handle-move:
+   * @object: A #ThunarThumbnailCacheDBus.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_from_uris: Argument passed by remote caller.
+   * @arg_to_uris: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Move">Move()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_thumbnail_cache_dbus_complete_move() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-move",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailCacheDBusIface, handle_move),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRV, G_TYPE_STRV);
+
+  /**
+   * ThunarThumbnailCacheDBus::handle-copy:
+   * @object: A #ThunarThumbnailCacheDBus.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_from_uris: Argument passed by remote caller.
+   * @arg_to_uris: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Copy">Copy()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_thumbnail_cache_dbus_complete_copy() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-copy",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailCacheDBusIface, handle_copy),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRV, G_TYPE_STRV);
+
+  /**
+   * ThunarThumbnailCacheDBus::handle-delete:
+   * @object: A #ThunarThumbnailCacheDBus.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_uris: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Delete">Delete()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_thumbnail_cache_dbus_complete_delete() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-delete",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailCacheDBusIface, handle_delete),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRV);
+
+  /**
+   * ThunarThumbnailCacheDBus::handle-cleanup:
+   * @object: A #ThunarThumbnailCacheDBus.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_base_uris: Argument passed by remote caller.
+   * @arg_since: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Cleanup">Cleanup()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_thumbnail_cache_dbus_complete_cleanup() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-cleanup",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailCacheDBusIface, handle_cleanup),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    3,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRV, G_TYPE_UINT);
+
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_move:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @arg_from_uris: Argument to pass with the method invocation.
+ * @arg_to_uris: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Move">Move()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnail_cache_dbus_call_move_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnail_cache_dbus_call_move_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_thumbnail_cache_dbus_call_move (
+    ThunarThumbnailCacheDBus *proxy,
+    const gchar *const *arg_from_uris,
+    const gchar *const *arg_to_uris,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "Move",
+    g_variant_new ("(^as^as)",
+                   arg_from_uris,
+                   arg_to_uris),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_move_finish:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnail_cache_dbus_call_move().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_thumbnail_cache_dbus_call_move().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnail_cache_dbus_call_move_finish (
+    ThunarThumbnailCacheDBus *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_move_sync:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @arg_from_uris: Argument to pass with the method invocation.
+ * @arg_to_uris: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Move">Move()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnail_cache_dbus_call_move() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnail_cache_dbus_call_move_sync (
+    ThunarThumbnailCacheDBus *proxy,
+    const gchar *const *arg_from_uris,
+    const gchar *const *arg_to_uris,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "Move",
+    g_variant_new ("(^as^as)",
+                   arg_from_uris,
+                   arg_to_uris),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_copy:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @arg_from_uris: Argument to pass with the method invocation.
+ * @arg_to_uris: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Copy">Copy()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnail_cache_dbus_call_copy_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnail_cache_dbus_call_copy_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_thumbnail_cache_dbus_call_copy (
+    ThunarThumbnailCacheDBus *proxy,
+    const gchar *const *arg_from_uris,
+    const gchar *const *arg_to_uris,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "Copy",
+    g_variant_new ("(^as^as)",
+                   arg_from_uris,
+                   arg_to_uris),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_copy_finish:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnail_cache_dbus_call_copy().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_thumbnail_cache_dbus_call_copy().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnail_cache_dbus_call_copy_finish (
+    ThunarThumbnailCacheDBus *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_copy_sync:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @arg_from_uris: Argument to pass with the method invocation.
+ * @arg_to_uris: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Copy">Copy()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnail_cache_dbus_call_copy() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnail_cache_dbus_call_copy_sync (
+    ThunarThumbnailCacheDBus *proxy,
+    const gchar *const *arg_from_uris,
+    const gchar *const *arg_to_uris,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "Copy",
+    g_variant_new ("(^as^as)",
+                   arg_from_uris,
+                   arg_to_uris),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_delete:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @arg_uris: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Delete">Delete()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnail_cache_dbus_call_delete_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnail_cache_dbus_call_delete_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_thumbnail_cache_dbus_call_delete (
+    ThunarThumbnailCacheDBus *proxy,
+    const gchar *const *arg_uris,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "Delete",
+    g_variant_new ("(^as)",
+                   arg_uris),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_delete_finish:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnail_cache_dbus_call_delete().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_thumbnail_cache_dbus_call_delete().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnail_cache_dbus_call_delete_finish (
+    ThunarThumbnailCacheDBus *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_delete_sync:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @arg_uris: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Delete">Delete()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnail_cache_dbus_call_delete() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnail_cache_dbus_call_delete_sync (
+    ThunarThumbnailCacheDBus *proxy,
+    const gchar *const *arg_uris,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "Delete",
+    g_variant_new ("(^as)",
+                   arg_uris),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_cleanup:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @arg_base_uris: Argument to pass with the method invocation.
+ * @arg_since: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Cleanup">Cleanup()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnail_cache_dbus_call_cleanup_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnail_cache_dbus_call_cleanup_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_thumbnail_cache_dbus_call_cleanup (
+    ThunarThumbnailCacheDBus *proxy,
+    const gchar *const *arg_base_uris,
+    guint arg_since,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "Cleanup",
+    g_variant_new ("(^asu)",
+                   arg_base_uris,
+                   arg_since),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_cleanup_finish:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnail_cache_dbus_call_cleanup().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_thumbnail_cache_dbus_call_cleanup().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnail_cache_dbus_call_cleanup_finish (
+    ThunarThumbnailCacheDBus *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_call_cleanup_sync:
+ * @proxy: A #ThunarThumbnailCacheDBusProxy.
+ * @arg_base_uris: Argument to pass with the method invocation.
+ * @arg_since: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Cleanup">Cleanup()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnail_cache_dbus_call_cleanup() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnail_cache_dbus_call_cleanup_sync (
+    ThunarThumbnailCacheDBus *proxy,
+    const gchar *const *arg_base_uris,
+    guint arg_since,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "Cleanup",
+    g_variant_new ("(^asu)",
+                   arg_base_uris,
+                   arg_since),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_complete_move:
+ * @object: A #ThunarThumbnailCacheDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Move">Move()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_thumbnail_cache_dbus_complete_move (
+    ThunarThumbnailCacheDBus *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_complete_copy:
+ * @object: A #ThunarThumbnailCacheDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Copy">Copy()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_thumbnail_cache_dbus_complete_copy (
+    ThunarThumbnailCacheDBus *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_complete_delete:
+ * @object: A #ThunarThumbnailCacheDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Delete">Delete()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_thumbnail_cache_dbus_complete_delete (
+    ThunarThumbnailCacheDBus *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_complete_cleanup:
+ * @object: A #ThunarThumbnailCacheDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-thumbnails-Cache1.Cleanup">Cleanup()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_thumbnail_cache_dbus_complete_cleanup (
+    ThunarThumbnailCacheDBus *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * ThunarThumbnailCacheDBusProxy:
+ *
+ * The #ThunarThumbnailCacheDBusProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ThunarThumbnailCacheDBusProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ThunarThumbnailCacheDBusProxy.
+ */
+
+struct _ThunarThumbnailCacheDBusProxyPrivate
+{
+  GData *qdata;
+};
+
+static void thunar_thumbnail_cache_dbus_proxy_iface_init (ThunarThumbnailCacheDBusIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (ThunarThumbnailCacheDBusProxy, thunar_thumbnail_cache_dbus_proxy, G_TYPE_DBUS_PROXY,
+                         G_ADD_PRIVATE (ThunarThumbnailCacheDBusProxy)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_THUMBNAIL_CACHE_DBUS, thunar_thumbnail_cache_dbus_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (ThunarThumbnailCacheDBusProxy, thunar_thumbnail_cache_dbus_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_THUMBNAIL_CACHE_DBUS, thunar_thumbnail_cache_dbus_proxy_iface_init));
+
+#endif
+static void
+thunar_thumbnail_cache_dbus_proxy_finalize (GObject *object)
+{
+  ThunarThumbnailCacheDBusProxy *proxy = THUNAR_THUMBNAIL_CACHE_DBUS_PROXY (object);
+  g_datalist_clear (&proxy->priv->qdata);
+  G_OBJECT_CLASS (thunar_thumbnail_cache_dbus_proxy_parent_class)->finalize (object);
+}
+
+static void
+thunar_thumbnail_cache_dbus_proxy_get_property (GObject      *object,
+  guint         prop_id,
+  GValue       *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+thunar_thumbnail_cache_dbus_proxy_set_property (GObject      *object,
+  guint         prop_id,
+  const GValue *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+thunar_thumbnail_cache_dbus_proxy_g_signal (GDBusProxy *proxy,
+  const gchar *sender_name G_GNUC_UNUSED,
+  const gchar *signal_name,
+  GVariant *parameters)
+{
+  _ExtendedGDBusSignalInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint n;
+  guint signal_id;
+  info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_thunar_thumbnail_cache_dbus_interface_info.parent_struct, signal_name);
+  if (info == NULL)
+    return;
+  num_params = g_variant_n_children (parameters);
+  paramv = g_new0 (GValue, num_params + 1);
+  g_value_init (&paramv[0], THUNAR_TYPE_THUMBNAIL_CACHE_DBUS);
+  g_value_set_object (&paramv[0], proxy);
+  g_variant_iter_init (&iter, parameters);
+  n = 1;
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, THUNAR_TYPE_THUMBNAIL_CACHE_DBUS);
+  g_signal_emitv (paramv, signal_id, 0, NULL);
+  for (n = 0; n < num_params + 1; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static void
+thunar_thumbnail_cache_dbus_proxy_g_properties_changed (GDBusProxy *_proxy,
+  GVariant *changed_properties,
+  const gchar *const *invalidated_properties)
+{
+  ThunarThumbnailCacheDBusProxy *proxy = THUNAR_THUMBNAIL_CACHE_DBUS_PROXY (_proxy);
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  _ExtendedGDBusPropertyInfo *info;
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_thumbnail_cache_dbus_interface_info.parent_struct, key);
+      g_datalist_remove_data (&proxy->priv->qdata, key);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+  g_variant_iter_free (iter);
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_thumbnail_cache_dbus_interface_info.parent_struct, invalidated_properties[n]);
+      g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+}
+
+static void
+thunar_thumbnail_cache_dbus_proxy_init (ThunarThumbnailCacheDBusProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  proxy->priv = thunar_thumbnail_cache_dbus_proxy_get_instance_private (proxy);
+#else
+  proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, THUNAR_TYPE_THUMBNAIL_CACHE_DBUS_PROXY, ThunarThumbnailCacheDBusProxyPrivate);
+#endif
+
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), thunar_thumbnail_cache_dbus_interface_info ());
+}
+
+static void
+thunar_thumbnail_cache_dbus_proxy_class_init (ThunarThumbnailCacheDBusProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = thunar_thumbnail_cache_dbus_proxy_finalize;
+  gobject_class->get_property = thunar_thumbnail_cache_dbus_proxy_get_property;
+  gobject_class->set_property = thunar_thumbnail_cache_dbus_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = thunar_thumbnail_cache_dbus_proxy_g_signal;
+  proxy_class->g_properties_changed = thunar_thumbnail_cache_dbus_proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (ThunarThumbnailCacheDBusProxyPrivate));
+#endif
+}
+
+static void
+thunar_thumbnail_cache_dbus_proxy_iface_init (ThunarThumbnailCacheDBusIface *iface)
+{
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-thumbnails-Cache1.top_of_page">org.freedesktop.thumbnails.Cache1</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnail_cache_dbus_proxy_new_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnail_cache_dbus_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+thunar_thumbnail_cache_dbus_proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (THUNAR_TYPE_THUMBNAIL_CACHE_DBUS_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.freedesktop.thumbnails.Cache1", NULL);
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnail_cache_dbus_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with thunar_thumbnail_cache_dbus_proxy_new().
+ *
+ * Returns: (transfer full) (type ThunarThumbnailCacheDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarThumbnailCacheDBus *
+thunar_thumbnail_cache_dbus_proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return THUNAR_THUMBNAIL_CACHE_DBUS (ret);
+  else
+    return NULL;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-thumbnails-Cache1.top_of_page">org.freedesktop.thumbnails.Cache1</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnail_cache_dbus_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ThunarThumbnailCacheDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarThumbnailCacheDBus *
+thunar_thumbnail_cache_dbus_proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (THUNAR_TYPE_THUMBNAIL_CACHE_DBUS_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.freedesktop.thumbnails.Cache1", NULL);
+  if (ret != NULL)
+    return THUNAR_THUMBNAIL_CACHE_DBUS (ret);
+  else
+    return NULL;
+}
+
+
+/**
+ * thunar_thumbnail_cache_dbus_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like thunar_thumbnail_cache_dbus_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnail_cache_dbus_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnail_cache_dbus_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+thunar_thumbnail_cache_dbus_proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (THUNAR_TYPE_THUMBNAIL_CACHE_DBUS_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.freedesktop.thumbnails.Cache1", NULL);
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnail_cache_dbus_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with thunar_thumbnail_cache_dbus_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type ThunarThumbnailCacheDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarThumbnailCacheDBus *
+thunar_thumbnail_cache_dbus_proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return THUNAR_THUMBNAIL_CACHE_DBUS (ret);
+  else
+    return NULL;
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like thunar_thumbnail_cache_dbus_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnail_cache_dbus_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ThunarThumbnailCacheDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarThumbnailCacheDBus *
+thunar_thumbnail_cache_dbus_proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (THUNAR_TYPE_THUMBNAIL_CACHE_DBUS_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.freedesktop.thumbnails.Cache1", NULL);
+  if (ret != NULL)
+    return THUNAR_THUMBNAIL_CACHE_DBUS (ret);
+  else
+    return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * ThunarThumbnailCacheDBusSkeleton:
+ *
+ * The #ThunarThumbnailCacheDBusSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ThunarThumbnailCacheDBusSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ThunarThumbnailCacheDBusSkeleton.
+ */
+
+struct _ThunarThumbnailCacheDBusSkeletonPrivate
+{
+  GValue *properties;
+  GList *changed_properties;
+  GSource *changed_properties_idle_source;
+  GMainContext *context;
+  GMutex lock;
+};
+
+static void
+_thunar_thumbnail_cache_dbus_skeleton_handle_method_call (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name,
+  const gchar *method_name,
+  GVariant *parameters,
+  GDBusMethodInvocation *invocation,
+  gpointer user_data)
+{
+  ThunarThumbnailCacheDBusSkeleton *skeleton = THUNAR_THUMBNAIL_CACHE_DBUS_SKELETON (user_data);
+  _ExtendedGDBusMethodInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint num_extra;
+  guint n;
+  guint signal_id;
+  GValue return_value = G_VALUE_INIT;
+  info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+  g_assert (info != NULL);
+  num_params = g_variant_n_children (parameters);
+  num_extra = info->pass_fdlist ? 3 : 2;  paramv = g_new0 (GValue, num_params + num_extra);
+  n = 0;
+  g_value_init (&paramv[n], THUNAR_TYPE_THUMBNAIL_CACHE_DBUS);
+  g_value_set_object (&paramv[n++], skeleton);
+  g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+  g_value_set_object (&paramv[n++], invocation);
+  if (info->pass_fdlist)
+    {
+#ifdef G_OS_UNIX
+      g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+      g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
+#else
+      g_assert_not_reached ();
+#endif
+    }
+  g_variant_iter_init (&iter, parameters);
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, THUNAR_TYPE_THUMBNAIL_CACHE_DBUS);
+  g_value_init (&return_value, G_TYPE_BOOLEAN);
+  g_signal_emitv (paramv, signal_id, 0, &return_value);
+  if (!g_value_get_boolean (&return_value))
+    g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
+  g_value_unset (&return_value);
+  for (n = 0; n < num_params + num_extra; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static GVariant *
+_thunar_thumbnail_cache_dbus_skeleton_handle_get_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GError **error,
+  gpointer user_data)
+{
+  ThunarThumbnailCacheDBusSkeleton *skeleton = THUNAR_THUMBNAIL_CACHE_DBUS_SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  GVariant *ret;
+  ret = NULL;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_thumbnail_cache_dbus_interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+    }
+  else
+    {
+      g_value_init (&value, pspec->value_type);
+      g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+      g_value_unset (&value);
+    }
+  return ret;
+}
+
+static gboolean
+_thunar_thumbnail_cache_dbus_skeleton_handle_set_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GVariant *variant,
+  GError **error,
+  gpointer user_data)
+{
+  ThunarThumbnailCacheDBusSkeleton *skeleton = THUNAR_THUMBNAIL_CACHE_DBUS_SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  gboolean ret;
+  ret = FALSE;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_thumbnail_cache_dbus_interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+    }
+  else
+    {
+      if (info->use_gvariant)
+        g_value_set_variant (&value, variant);
+      else
+        g_dbus_gvariant_to_gvalue (variant, &value);
+      g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      g_value_unset (&value);
+      ret = TRUE;
+    }
+  return ret;
+}
+
+static const GDBusInterfaceVTable _thunar_thumbnail_cache_dbus_skeleton_vtable =
+{
+  _thunar_thumbnail_cache_dbus_skeleton_handle_method_call,
+  _thunar_thumbnail_cache_dbus_skeleton_handle_get_property,
+  _thunar_thumbnail_cache_dbus_skeleton_handle_set_property,
+  {NULL}
+};
+
+static GDBusInterfaceInfo *
+thunar_thumbnail_cache_dbus_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return thunar_thumbnail_cache_dbus_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+thunar_thumbnail_cache_dbus_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return (GDBusInterfaceVTable *) &_thunar_thumbnail_cache_dbus_skeleton_vtable;
+}
+
+static GVariant *
+thunar_thumbnail_cache_dbus_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+  ThunarThumbnailCacheDBusSkeleton *skeleton = THUNAR_THUMBNAIL_CACHE_DBUS_SKELETON (_skeleton);
+
+  GVariantBuilder builder;
+  guint n;
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  if (_thunar_thumbnail_cache_dbus_interface_info.parent_struct.properties == NULL)
+    goto out;
+  for (n = 0; _thunar_thumbnail_cache_dbus_interface_info.parent_struct.properties[n] != NULL; n++)
+    {
+      GDBusPropertyInfo *info = _thunar_thumbnail_cache_dbus_interface_info.parent_struct.properties[n];
+      if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+        {
+          GVariant *value;
+          value = _thunar_thumbnail_cache_dbus_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.thumbnails.Cache1", info->name, NULL, skeleton);
+          if (value != NULL)
+            {
+              g_variant_take_ref (value);
+              g_variant_builder_add (&builder, "{sv}", info->name, value);
+              g_variant_unref (value);
+            }
+        }
+    }
+out:
+  return g_variant_builder_end (&builder);
+}
+
+static void
+thunar_thumbnail_cache_dbus_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void thunar_thumbnail_cache_dbus_skeleton_iface_init (ThunarThumbnailCacheDBusIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (ThunarThumbnailCacheDBusSkeleton, thunar_thumbnail_cache_dbus_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_ADD_PRIVATE (ThunarThumbnailCacheDBusSkeleton)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_THUMBNAIL_CACHE_DBUS, thunar_thumbnail_cache_dbus_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (ThunarThumbnailCacheDBusSkeleton, thunar_thumbnail_cache_dbus_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_THUMBNAIL_CACHE_DBUS, thunar_thumbnail_cache_dbus_skeleton_iface_init));
+
+#endif
+static void
+thunar_thumbnail_cache_dbus_skeleton_finalize (GObject *object)
+{
+  ThunarThumbnailCacheDBusSkeleton *skeleton = THUNAR_THUMBNAIL_CACHE_DBUS_SKELETON (object);
+  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+  if (skeleton->priv->changed_properties_idle_source != NULL)
+    g_source_destroy (skeleton->priv->changed_properties_idle_source);
+  g_main_context_unref (skeleton->priv->context);
+  g_mutex_clear (&skeleton->priv->lock);
+  G_OBJECT_CLASS (thunar_thumbnail_cache_dbus_skeleton_parent_class)->finalize (object);
+}
+
+static void
+thunar_thumbnail_cache_dbus_skeleton_init (ThunarThumbnailCacheDBusSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  skeleton->priv = thunar_thumbnail_cache_dbus_skeleton_get_instance_private (skeleton);
+#else
+  skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, THUNAR_TYPE_THUMBNAIL_CACHE_DBUS_SKELETON, ThunarThumbnailCacheDBusSkeletonPrivate);
+#endif
+
+  g_mutex_init (&skeleton->priv->lock);
+  skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+thunar_thumbnail_cache_dbus_skeleton_class_init (ThunarThumbnailCacheDBusSkeletonClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusInterfaceSkeletonClass *skeleton_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_thumbnail_cache_dbus_skeleton_finalize;
+
+  skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+  skeleton_class->get_info = thunar_thumbnail_cache_dbus_skeleton_dbus_interface_get_info;
+  skeleton_class->get_properties = thunar_thumbnail_cache_dbus_skeleton_dbus_interface_get_properties;
+  skeleton_class->flush = thunar_thumbnail_cache_dbus_skeleton_dbus_interface_flush;
+  skeleton_class->get_vtable = thunar_thumbnail_cache_dbus_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (ThunarThumbnailCacheDBusSkeletonPrivate));
+#endif
+}
+
+static void
+thunar_thumbnail_cache_dbus_skeleton_iface_init (ThunarThumbnailCacheDBusIface *iface)
+{
+}
+
+/**
+ * thunar_thumbnail_cache_dbus_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-thumbnails-Cache1.top_of_page">org.freedesktop.thumbnails.Cache1</link>.
+ *
+ * Returns: (transfer full) (type ThunarThumbnailCacheDBusSkeleton): The skeleton object.
+ */
+ThunarThumbnailCacheDBus *
+thunar_thumbnail_cache_dbus_skeleton_new (void)
+{
+  return THUNAR_THUMBNAIL_CACHE_DBUS (g_object_new (THUNAR_TYPE_THUMBNAIL_CACHE_DBUS_SKELETON, NULL));
+}
+
diff --git a/thunar/thunar-thumbnail-cache.c b/thunar/thunar-thumbnail-cache.c
index 348ec53..b5f1526 100644
--- a/thunar/thunar-thumbnail-cache.c
+++ b/thunar/thunar-thumbnail-cache.c
@@ -22,12 +22,7 @@
 #include <config.h>
 #endif
 
-#ifdef HAVE_DBUS
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-
 #include <thunar/thunar-thumbnail-cache-proxy.h>
-#endif
 
 #include <glib.h>
 #include <glib-object.h>
@@ -51,6 +46,13 @@ static void thunar_thumbnail_cache_finalize (GObject *object);
 
 
 
+enum
+{
+  THUNAR_THUMBNAIL_CACHE_PROXY_AVAILABLE,
+  THUNAR_THUMBNAIL_CACHE_PROXY_WAITING,
+  THUNAR_THUMBNAIL_CACHE_PROXY_FAILED
+};
+
 struct _ThunarThumbnailCacheClass
 {
   GObjectClass __parent__;
@@ -60,8 +62,8 @@ struct _ThunarThumbnailCache
 {
   GObject     __parent__;
 
-#ifdef HAVE_DBUS
-  DBusGProxy *cache_proxy;
+  ThunarThumbnailCacheDBus *cache_proxy;
+  int                       proxy_state;
 
   GList      *move_source_queue;
   GList      *move_target_queue;
@@ -82,7 +84,6 @@ struct _ThunarThumbnailCache
 #else
   GMutex     *lock;
 #endif
-#endif
 };
 
 
@@ -106,41 +107,8 @@ thunar_thumbnail_cache_class_init (ThunarThumbnailCacheClass *klass)
 
 
 static void
-thunar_thumbnail_cache_init (ThunarThumbnailCache *cache)
-{
-#ifdef HAVE_DBUS
-  DBusGConnection *connection;
-
-  /* try to connect to D-Bus */
-  connection = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
-  if (connection != NULL)
-    {
-      /* create a proxy for the thumbnail cache service */
-      cache->cache_proxy =
-        dbus_g_proxy_new_for_name (connection,
-                                   "org.freedesktop.thumbnails.Cache1",
-                                   "/org/freedesktop/thumbnails/Cache1",
-                                   "org.freedesktop.thumbnails.Cache1");
-
-      /* release the D-Bus connection */
-      dbus_g_connection_unref (connection);
-    }
-
-/* create a new mutex for accessing the cache from different threads */
-#if GLIB_CHECK_VERSION (2, 32, 0)
-  g_mutex_init (&cache->lock);
-#else
-  cache->lock = g_mutex_new ();
-#endif
-#endif
-}
-
-
-
-static void
 thunar_thumbnail_cache_finalize (GObject *object)
 {
-#ifdef HAVE_DBUS
   ThunarThumbnailCache *cache = THUNAR_THUMBNAIL_CACHE (object);
 
   /* acquire a cache lock */
@@ -181,28 +149,32 @@ thunar_thumbnail_cache_finalize (GObject *object)
 #else
   g_mutex_free (cache->lock);
 #endif
-#endif
 
   (*G_OBJECT_CLASS (thunar_thumbnail_cache_parent_class)->finalize) (object);
 }
 
 
 
-#ifdef HAVE_DBUS
 static void
-thunar_thumbnail_cache_move_copy_async_reply (DBusGProxy *proxy,
-                                              GError     *error,
-                                              gpointer    user_data)
+thunar_thumbnail_cache_copy_async_reply (ThunarThumbnailCacheDBus *proxy,
+                                         GAsyncResult             *res,
+                                         gpointer                  user_data)
 {
   GList      *li;
   ThunarFile *file;
+  GError     *error;
 
-  _thunar_return_if_fail (DBUS_IS_G_PROXY (proxy));
+  _thunar_return_if_fail (THUNAR_IS_THUMBNAIL_CACHE_DBUS (proxy));
+
+  if (!thunar_thumbnail_cache_dbus_call_copy_finish (proxy, res, &error))
+    {
+      g_printerr ("ThunarThumbnailCache: failed to call Copy(): %s\n", error->message);
+    }
+  g_clear_error (&error);
 
   for (li = user_data; li != NULL; li = li->next)
     {
       file = thunar_file_cache_lookup (G_FILE (li->data));
-      g_object_unref (G_OBJECT (li->data));
 
       if (G_LIKELY (file != NULL))
         {
@@ -212,7 +184,41 @@ thunar_thumbnail_cache_move_copy_async_reply (DBusGProxy *proxy,
         }
     }
 
-  g_list_free (user_data);
+  g_list_free_full (user_data, g_object_unref);
+}
+
+
+
+static void
+thunar_thumbnail_cache_move_async_reply (ThunarThumbnailCacheDBus *proxy,
+                                         GAsyncResult             *res,
+                                         gpointer                  user_data)
+{
+  GList      *li;
+  ThunarFile *file;
+  GError     *error;
+
+  _thunar_return_if_fail (THUNAR_IS_THUMBNAIL_CACHE_DBUS (proxy));
+
+  if (!thunar_thumbnail_cache_dbus_call_move_finish (proxy, res, &error))
+    {
+      g_printerr ("ThunarThumbnailCache: failed to call Move(): %s\n", error->message);
+    }
+  g_clear_error (&error);
+
+  for (li = user_data; li != NULL; li = li->next)
+    {
+      file = thunar_file_cache_lookup (G_FILE (li->data));
+
+      if (G_LIKELY (file != NULL))
+        {
+          /* if visible, let the view know there might be a thumb */
+          thunar_file_changed (file);
+          g_object_unref (file);
+        }
+    }
+
+  g_list_free_full (user_data, g_object_unref);
 }
 
 
@@ -228,10 +234,11 @@ thunar_thumbnail_cache_move_async (ThunarThumbnailCache *cache,
   _thunar_return_if_fail (target_uris != NULL);
 
   /* request a thumbnail cache update asynchronously */
-  thunar_thumbnail_cache_proxy_move_async (cache->cache_proxy,
-                                           source_uris, target_uris,
-                                           thunar_thumbnail_cache_move_copy_async_reply,
-                                           user_data);
+  thunar_thumbnail_cache_dbus_call_move (cache->cache_proxy,
+                                         source_uris, target_uris,
+                                         NULL,
+                                         (GAsyncReadyCallback)thunar_thumbnail_cache_move_async_reply,
+                                         user_data);
 }
 
 
@@ -247,20 +254,11 @@ thunar_thumbnail_cache_copy_async (ThunarThumbnailCache *cache,
   _thunar_return_if_fail (target_uris != NULL);
 
   /* request a thumbnail cache update asynchronously */
-  thunar_thumbnail_cache_proxy_copy_async (cache->cache_proxy,
-                                           source_uris, target_uris,
-                                           thunar_thumbnail_cache_move_copy_async_reply,
-                                           user_data);
-}
-
-
-
-static void
-thunar_thumbnail_cache_delete_async_reply (DBusGProxy *proxy,
-                                           GError     *error,
-                                           gpointer    user_data)
-{
-  _thunar_return_if_fail (DBUS_IS_G_PROXY (proxy));
+  thunar_thumbnail_cache_dbus_call_copy (cache->cache_proxy,
+                                         source_uris, target_uris,
+                                         NULL,
+                                         (GAsyncReadyCallback)thunar_thumbnail_cache_copy_async_reply,
+                                         user_data);
 }
 
 
@@ -273,19 +271,8 @@ thunar_thumbnail_cache_delete_async (ThunarThumbnailCache *cache,
   _thunar_return_if_fail (uris != NULL);
 
   /* request a thumbnail cache update asynchronously */
-  thunar_thumbnail_cache_proxy_delete_async (cache->cache_proxy, uris,
-                                             thunar_thumbnail_cache_delete_async_reply,
-                                             NULL);
-}
-
-
-
-static void
-thunar_thumbnail_cache_cleanup_async_reply (DBusGProxy *proxy,
-                                            GError     *error,
-                                            gpointer    user_data)
-{
-  _thunar_return_if_fail (DBUS_IS_G_PROXY (proxy));
+  thunar_thumbnail_cache_dbus_call_delete (cache->cache_proxy, uris,
+                                           NULL, NULL, NULL);
 }
 
 
@@ -298,10 +285,9 @@ thunar_thumbnail_cache_cleanup_async (ThunarThumbnailCache *cache,
   _thunar_return_if_fail (base_uris != NULL);
 
   /* request a thumbnail cache update asynchronously */
-  thunar_thumbnail_cache_proxy_cleanup_async (cache->cache_proxy,
-                                              (const gchar **)base_uris, 0,
-                                              thunar_thumbnail_cache_cleanup_async_reply,
-                                              NULL);
+  thunar_thumbnail_cache_dbus_call_cleanup (cache->cache_proxy,
+                                            (const gchar **)base_uris, 0,
+                                            NULL, NULL, NULL);
 }
 
 
@@ -538,7 +524,6 @@ thunar_thumbnail_cache_process_cleanup_queue (ThunarThumbnailCache *cache)
 
   return FALSE;
 }
-#endif /* HAVE_DBUS */
 
 
 
@@ -559,12 +544,20 @@ thunar_thumbnail_cache_move_file (ThunarThumbnailCache *cache,
   _thunar_return_if_fail (G_IS_FILE (source_file));
   _thunar_return_if_fail (G_IS_FILE (target_file));
 
-#ifdef HAVE_DBUS
   /* acquire a cache lock */
   _thumbnail_cache_lock (cache);
 
   /* check if we have a valid proxy for the cache service */
-  if (cache->cache_proxy != NULL)
+  if (cache->proxy_state != THUNAR_THUMBNAIL_CACHE_PROXY_FAILED)
+    {
+      /* add the files to the move queue */
+      cache->move_source_queue = g_list_prepend (cache->move_source_queue,
+                                                 g_object_ref (source_file));
+      cache->move_target_queue = g_list_prepend (cache->move_target_queue,
+                                                 g_object_ref (target_file));
+    }
+
+  if (cache->proxy_state == THUNAR_THUMBNAIL_CACHE_PROXY_AVAILABLE)
     {
       /* cancel any pending timeout to process the move queue */
       if (cache->move_queue_idle_id > 0)
@@ -573,12 +566,6 @@ thunar_thumbnail_cache_move_file (ThunarThumbnailCache *cache,
           cache->move_queue_idle_id = 0;
         }
 
-      /* add the files to the move queue */
-      cache->move_source_queue = g_list_prepend (cache->move_source_queue,
-                                                 g_object_ref (source_file));
-      cache->move_target_queue = g_list_prepend (cache->move_target_queue,
-                                                 g_object_ref (target_file));
-
       /* process the move queue in a 250ms timeout */
       cache->move_queue_idle_id =
         g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE, 250, thunar_thumbnail_cache_process_move_queue,
@@ -587,7 +574,6 @@ thunar_thumbnail_cache_move_file (ThunarThumbnailCache *cache,
 
   /* release the cache lock */
   _thumbnail_cache_unlock (cache);
-#endif
 }
 
 
@@ -601,12 +587,20 @@ thunar_thumbnail_cache_copy_file (ThunarThumbnailCache *cache,
   _thunar_return_if_fail (G_IS_FILE (source_file));
   _thunar_return_if_fail (G_IS_FILE (target_file));
 
-#ifdef HAVE_DBUS
   /* acquire a cache lock */
   _thumbnail_cache_lock (cache);
 
   /* check if we have a valid proxy for the cache service */
-  if (cache->cache_proxy != NULL)
+  if (cache->proxy_state != THUNAR_THUMBNAIL_CACHE_PROXY_FAILED)
+    {
+      /* add the files to the copy queues */
+      cache->copy_source_queue = g_list_prepend (cache->copy_source_queue,
+                                                 g_object_ref (source_file));
+      cache->copy_target_queue = g_list_prepend (cache->copy_target_queue,
+                                                 g_object_ref (target_file));
+    }
+
+  if (cache->proxy_state == THUNAR_THUMBNAIL_CACHE_PROXY_AVAILABLE)
     {
       /* cancel any pending timeout to process the copy queue */
       if (cache->copy_queue_idle_id > 0)
@@ -615,12 +609,6 @@ thunar_thumbnail_cache_copy_file (ThunarThumbnailCache *cache,
           cache->copy_queue_idle_id = 0;
         }
 
-      /* add the files to the copy queues */
-      cache->copy_source_queue = g_list_prepend (cache->copy_source_queue,
-                                                 g_object_ref (source_file));
-      cache->copy_target_queue = g_list_prepend (cache->copy_target_queue,
-                                                 g_object_ref (target_file));
-
       /* process the copy queue in a 250ms timeout */
       cache->copy_queue_idle_id =
         g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE, 500, thunar_thumbnail_cache_process_copy_queue,
@@ -629,7 +617,6 @@ thunar_thumbnail_cache_copy_file (ThunarThumbnailCache *cache,
 
   /* release the cache lock */
   _thumbnail_cache_unlock (cache);
-#endif
 }
 
 
@@ -641,12 +628,17 @@ thunar_thumbnail_cache_delete_file (ThunarThumbnailCache *cache,
   _thunar_return_if_fail (THUNAR_IS_THUMBNAIL_CACHE (cache));
   _thunar_return_if_fail (G_IS_FILE (file));
 
-#ifdef HAVE_DBUS
   /* acquire a cache lock */
   _thumbnail_cache_lock (cache);
 
   /* check if we have a valid proxy for the cache service */
-  if (cache->cache_proxy)
+  if (cache->proxy_state != THUNAR_THUMBNAIL_CACHE_PROXY_FAILED)
+    {
+      /* add the file to the delete queue */
+      cache->delete_queue = g_list_prepend (cache->delete_queue, g_object_ref (file));
+    }
+
+  if (cache->proxy_state == THUNAR_THUMBNAIL_CACHE_PROXY_AVAILABLE)
     {
       /* cancel any pending timeout to process the delete queue */
       if (cache->delete_queue_idle_id > 0)
@@ -655,9 +647,6 @@ thunar_thumbnail_cache_delete_file (ThunarThumbnailCache *cache,
           cache->delete_queue_idle_id = 0;
         }
 
-      /* add the file to the delete queue */
-      cache->delete_queue = g_list_prepend (cache->delete_queue, g_object_ref (file));
-
       /* process the delete queue in a 250ms timeout */
       cache->delete_queue_idle_id =
         g_timeout_add (500, (GSourceFunc) thunar_thumbnail_cache_process_delete_queue,
@@ -666,7 +655,6 @@ thunar_thumbnail_cache_delete_file (ThunarThumbnailCache *cache,
 
   /* release the cache lock */
   _thumbnail_cache_unlock (cache);
-#endif
 }
 
 
@@ -678,12 +666,17 @@ thunar_thumbnail_cache_cleanup_file (ThunarThumbnailCache *cache,
   _thunar_return_if_fail (THUNAR_IS_THUMBNAIL_CACHE (cache));
   _thunar_return_if_fail (G_IS_FILE (file));
 
-#ifdef HAVE_DBUS
   /* acquire a cache lock */
   _thumbnail_cache_lock (cache);
 
   /* check if we have a valid proxy for the cache service */
-  if (cache->cache_proxy)
+  if (cache->proxy_state != THUNAR_THUMBNAIL_CACHE_PROXY_FAILED)
+    {
+      /* add the file to the cleanup queue */
+      cache->cleanup_queue = g_list_prepend (cache->cleanup_queue, g_object_ref (file));
+    }
+
+  if (cache->proxy_state == THUNAR_THUMBNAIL_CACHE_PROXY_AVAILABLE)
     {
       /* cancel any pending timeout to process the cleanup queue */
       if (cache->cleanup_queue_idle_id > 0)
@@ -692,9 +685,6 @@ thunar_thumbnail_cache_cleanup_file (ThunarThumbnailCache *cache,
           cache->cleanup_queue_idle_id = 0;
         }
 
-      /* add the file to the cleanup queue */
-      cache->cleanup_queue = g_list_prepend (cache->cleanup_queue, g_object_ref (file));
-
       /* process the cleanup queue in a 250ms timeout */
       cache->cleanup_queue_idle_id =
         g_timeout_add (1000, (GSourceFunc) thunar_thumbnail_cache_process_cleanup_queue,
@@ -703,5 +693,89 @@ thunar_thumbnail_cache_cleanup_file (ThunarThumbnailCache *cache,
 
   /* release the cache lock */
   _thumbnail_cache_unlock (cache);
+}
+
+
+
+static void
+thunar_thumbnail_cache_proxy_created (GObject      *source,
+                                      GAsyncResult *res,
+                                      gpointer      userdata)
+{
+  ThunarThumbnailCache     *cache = THUNAR_THUMBNAIL_CACHE (userdata);
+  ThunarThumbnailCacheDBus *proxy;
+  GError                   *error = NULL;
+
+  _thumbnail_cache_lock (cache);
+
+  if ((proxy = thunar_thumbnail_cache_dbus_proxy_new_for_bus_finish (res, &error)))
+    {
+      cache->cache_proxy = proxy;
+      cache->proxy_state = THUNAR_THUMBNAIL_CACHE_PROXY_AVAILABLE;
+    }
+  else
+    {
+      cache->proxy_state = THUNAR_THUMBNAIL_CACHE_PROXY_FAILED;
+
+      g_printerr ("ThunarThumbnailCache: Couldn't connect to bus service: %s\n", error->message);
+    }
+
+  g_clear_error (&error);
+
+  /* process the move queue in a 250ms timeout */
+  if (cache->move_source_queue)
+      cache->move_queue_idle_id =
+        g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE, 250, thunar_thumbnail_cache_process_move_queue,
+                            cache, thunar_thumbnail_cache_process_move_queue_destroy);
+
+  /* process the copy queue in a 250ms timeout */
+  if (cache->copy_source_queue)
+      cache->copy_queue_idle_id =
+        g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE, 500, thunar_thumbnail_cache_process_copy_queue,
+                            cache, thunar_thumbnail_cache_process_copy_queue_destroy);
+
+  /* process the delete queue in a 250ms timeout */
+  if (cache->delete_queue)
+      cache->delete_queue_idle_id =
+        g_timeout_add (500, (GSourceFunc) thunar_thumbnail_cache_process_delete_queue,
+                       cache);
+
+  /* process the cleanup queue in a 250ms timeout */
+  if (cache->cleanup_queue)
+      cache->cleanup_queue_idle_id =
+        g_timeout_add (1000, (GSourceFunc) thunar_thumbnail_cache_process_cleanup_queue,
+                       cache);
+
+  _thumbnail_cache_unlock (cache);
+
+  /* drop additional reference */
+  g_object_unref (cache);
+}
+
+
+
+static void
+thunar_thumbnail_cache_init (ThunarThumbnailCache *cache)
+{
+  /* create a new mutex for accessing the cache from different threads */
+#if GLIB_CHECK_VERSION (2, 32, 0)
+  g_mutex_init (&cache->lock);
+#else
+  cache->lock = g_mutex_new ();
 #endif
+
+  /* add an additional reference to keep us alive while tre proxy initializes */
+  g_object_ref (cache);
+
+  /* try to connect to D-Bus */
+  cache->proxy_state = THUNAR_THUMBNAIL_CACHE_PROXY_WAITING;
+  thunar_thumbnail_cache_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
+                                                 0,
+                                                 "org.freedesktop.thumbnails.Cache1",
+                                                 "/org/freedesktop/thumbnails/Cache1",
+                                                 NULL,
+                                                 thunar_thumbnail_cache_proxy_created,
+                                                 cache);
 }
+
+
diff --git a/thunar/thunar-thumbnailer-dbus.xml b/thunar/thunar-thumbnailer-dbus.xml
index d0d2ada..1187a32 100644
--- a/thunar/thunar-thumbnailer-dbus.xml
+++ b/thunar/thunar-thumbnailer-dbus.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <node name="/org/freedesktop/thumbnails/Thumbnailer1">
   <interface name="org.freedesktop.thumbnails.Thumbnailer1">
+    <annotation name="org.gtk.GDBus.C.Name" value="ThumbnailerDBus" />
     <method name="Queue">
-      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
       <arg type="as" name="uris" direction="in" />
       <arg type="as" name="mime_hints" direction="in" />
       <arg type="s" name="flavor" direction="in" />
diff --git a/thunar/thunar-thumbnailer-proxy.c b/thunar/thunar-thumbnailer-proxy.c
new file mode 100644
index 0000000..0b7b690
--- /dev/null
+++ b/thunar/thunar-thumbnailer-proxy.c
@@ -0,0 +1,2149 @@
+/*
+ * Generated by gdbus-codegen 2.44.1. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "thunar-thumbnailer-proxy.h"
+
+#include <string.h>
+#ifdef G_OS_UNIX
+#  include <gio/gunixfdlist.h>
+#endif
+
+typedef struct
+{
+  GDBusArgInfo parent_struct;
+  gboolean use_gvariant;
+} _ExtendedGDBusArgInfo;
+
+typedef struct
+{
+  GDBusMethodInfo parent_struct;
+  const gchar *signal_name;
+  gboolean pass_fdlist;
+} _ExtendedGDBusMethodInfo;
+
+typedef struct
+{
+  GDBusSignalInfo parent_struct;
+  const gchar *signal_name;
+} _ExtendedGDBusSignalInfo;
+
+typedef struct
+{
+  GDBusPropertyInfo parent_struct;
+  const gchar *hyphen_name;
+  gboolean use_gvariant;
+} _ExtendedGDBusPropertyInfo;
+
+typedef struct
+{
+  GDBusInterfaceInfo parent_struct;
+  const gchar *hyphen_name;
+} _ExtendedGDBusInterfaceInfo;
+
+typedef struct
+{
+  const _ExtendedGDBusPropertyInfo *info;
+  guint prop_id;
+  GValue orig_value; /* the value before the change */
+} ChangedProperty;
+
+static void
+_changed_property_free (ChangedProperty *data)
+{
+  g_value_unset (&data->orig_value);
+  g_free (data);
+}
+
+static gboolean
+_g_strv_equal0 (gchar **a, gchar **b)
+{
+  gboolean ret = FALSE;
+  guint n;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  if (g_strv_length (a) != g_strv_length (b))
+    goto out;
+  for (n = 0; a[n] != NULL; n++)
+    if (g_strcmp0 (a[n], b[n]) != 0)
+      goto out;
+  ret = TRUE;
+out:
+  return ret;
+}
+
+static gboolean
+_g_variant_equal0 (GVariant *a, GVariant *b)
+{
+  gboolean ret = FALSE;
+  if (a == NULL && b == NULL)
+    {
+      ret = TRUE;
+      goto out;
+    }
+  if (a == NULL || b == NULL)
+    goto out;
+  ret = g_variant_equal (a, b);
+out:
+  return ret;
+}
+
+G_GNUC_UNUSED static gboolean
+_g_value_equal (const GValue *a, const GValue *b)
+{
+  gboolean ret = FALSE;
+  g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
+  switch (G_VALUE_TYPE (a))
+    {
+      case G_TYPE_BOOLEAN:
+        ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
+        break;
+      case G_TYPE_UCHAR:
+        ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
+        break;
+      case G_TYPE_INT:
+        ret = (g_value_get_int (a) == g_value_get_int (b));
+        break;
+      case G_TYPE_UINT:
+        ret = (g_value_get_uint (a) == g_value_get_uint (b));
+        break;
+      case G_TYPE_INT64:
+        ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
+        break;
+      case G_TYPE_UINT64:
+        ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
+        break;
+      case G_TYPE_DOUBLE:
+        {
+          /* Avoid -Wfloat-equal warnings by doing a direct bit compare */
+          gdouble da = g_value_get_double (a);
+          gdouble db = g_value_get_double (b);
+          ret = memcmp (&da, &db, sizeof (gdouble)) == 0;
+        }
+        break;
+      case G_TYPE_STRING:
+        ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
+        break;
+      case G_TYPE_VARIANT:
+        ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
+        break;
+      default:
+        if (G_VALUE_TYPE (a) == G_TYPE_STRV)
+          ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
+        else
+          g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
+        break;
+    }
+  return ret;
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.freedesktop.thumbnails.Thumbnailer1
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:ThunarThumbnailerDBus
+ * @title: ThunarThumbnailerDBus
+ * @short_description: Generated C code for the org.freedesktop.thumbnails.Thumbnailer1 D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-freedesktop-thumbnails-Thumbnailer1.top_of_page">org.freedesktop.thumbnails.Thumbnailer1</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.freedesktop.thumbnails.Thumbnailer1 ---- */
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_method_info_queue_IN_ARG_uris =
+{
+  {
+    -1,
+    (gchar *) "uris",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_method_info_queue_IN_ARG_mime_hints =
+{
+  {
+    -1,
+    (gchar *) "mime_hints",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_method_info_queue_IN_ARG_flavor =
+{
+  {
+    -1,
+    (gchar *) "flavor",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_method_info_queue_IN_ARG_scheduler =
+{
+  {
+    -1,
+    (gchar *) "scheduler",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_method_info_queue_IN_ARG_handle_to_unqueue =
+{
+  {
+    -1,
+    (gchar *) "handle_to_unqueue",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnailer_dbus_method_info_queue_IN_ARG_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_method_info_queue_IN_ARG_uris,
+  &_thunar_thumbnailer_dbus_method_info_queue_IN_ARG_mime_hints,
+  &_thunar_thumbnailer_dbus_method_info_queue_IN_ARG_flavor,
+  &_thunar_thumbnailer_dbus_method_info_queue_IN_ARG_scheduler,
+  &_thunar_thumbnailer_dbus_method_info_queue_IN_ARG_handle_to_unqueue,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_method_info_queue_OUT_ARG_handle =
+{
+  {
+    -1,
+    (gchar *) "handle",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnailer_dbus_method_info_queue_OUT_ARG_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_method_info_queue_OUT_ARG_handle,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_thumbnailer_dbus_method_info_queue =
+{
+  {
+    -1,
+    (gchar *) "Queue",
+    (GDBusArgInfo **) &_thunar_thumbnailer_dbus_method_info_queue_IN_ARG_pointers,
+    (GDBusArgInfo **) &_thunar_thumbnailer_dbus_method_info_queue_OUT_ARG_pointers,
+    NULL
+  },
+  "handle-queue",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_method_info_dequeue_IN_ARG_handle =
+{
+  {
+    -1,
+    (gchar *) "handle",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnailer_dbus_method_info_dequeue_IN_ARG_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_method_info_dequeue_IN_ARG_handle,
+  NULL
+};
+
+static const GDBusAnnotationInfo _thunar_thumbnailer_dbus_method_dequeue_annotation_info_0 =
+{
+  -1,
+  (gchar *) "org.freedesktop.DBus.GLib.Async",
+  (gchar *) "true",
+  NULL
+};
+
+static const GDBusAnnotationInfo * const _thunar_thumbnailer_dbus_method_dequeue_annotation_info_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_method_dequeue_annotation_info_0,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_thumbnailer_dbus_method_info_dequeue =
+{
+  {
+    -1,
+    (gchar *) "Dequeue",
+    (GDBusArgInfo **) &_thunar_thumbnailer_dbus_method_info_dequeue_IN_ARG_pointers,
+    NULL,
+    (GDBusAnnotationInfo **) &_thunar_thumbnailer_dbus_method_dequeue_annotation_info_pointers
+  },
+  "handle-dequeue",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_method_info_get_supported_OUT_ARG_uri_schemes =
+{
+  {
+    -1,
+    (gchar *) "uri_schemes",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_method_info_get_supported_OUT_ARG_mime_types =
+{
+  {
+    -1,
+    (gchar *) "mime_types",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnailer_dbus_method_info_get_supported_OUT_ARG_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_method_info_get_supported_OUT_ARG_uri_schemes,
+  &_thunar_thumbnailer_dbus_method_info_get_supported_OUT_ARG_mime_types,
+  NULL
+};
+
+static const GDBusAnnotationInfo _thunar_thumbnailer_dbus_method_get_supported_annotation_info_0 =
+{
+  -1,
+  (gchar *) "org.freedesktop.DBus.GLib.Async",
+  (gchar *) "true",
+  NULL
+};
+
+static const GDBusAnnotationInfo * const _thunar_thumbnailer_dbus_method_get_supported_annotation_info_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_method_get_supported_annotation_info_0,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_thumbnailer_dbus_method_info_get_supported =
+{
+  {
+    -1,
+    (gchar *) "GetSupported",
+    NULL,
+    (GDBusArgInfo **) &_thunar_thumbnailer_dbus_method_info_get_supported_OUT_ARG_pointers,
+    (GDBusAnnotationInfo **) &_thunar_thumbnailer_dbus_method_get_supported_annotation_info_pointers
+  },
+  "handle-get-supported",
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_method_info_get_schedulers_OUT_ARG_schedulers =
+{
+  {
+    -1,
+    (gchar *) "schedulers",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnailer_dbus_method_info_get_schedulers_OUT_ARG_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_method_info_get_schedulers_OUT_ARG_schedulers,
+  NULL
+};
+
+static const GDBusAnnotationInfo _thunar_thumbnailer_dbus_method_get_schedulers_annotation_info_0 =
+{
+  -1,
+  (gchar *) "org.freedesktop.DBus.GLib.Async",
+  (gchar *) "true",
+  NULL
+};
+
+static const GDBusAnnotationInfo * const _thunar_thumbnailer_dbus_method_get_schedulers_annotation_info_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_method_get_schedulers_annotation_info_0,
+  NULL
+};
+
+static const _ExtendedGDBusMethodInfo _thunar_thumbnailer_dbus_method_info_get_schedulers =
+{
+  {
+    -1,
+    (gchar *) "GetSchedulers",
+    NULL,
+    (GDBusArgInfo **) &_thunar_thumbnailer_dbus_method_info_get_schedulers_OUT_ARG_pointers,
+    (GDBusAnnotationInfo **) &_thunar_thumbnailer_dbus_method_get_schedulers_annotation_info_pointers
+  },
+  "handle-get-schedulers",
+  FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _thunar_thumbnailer_dbus_method_info_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_method_info_queue,
+  &_thunar_thumbnailer_dbus_method_info_dequeue,
+  &_thunar_thumbnailer_dbus_method_info_get_supported,
+  &_thunar_thumbnailer_dbus_method_info_get_schedulers,
+  NULL
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_signal_info_started_ARG_handle =
+{
+  {
+    -1,
+    (gchar *) "handle",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnailer_dbus_signal_info_started_ARG_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_signal_info_started_ARG_handle,
+  NULL
+};
+
+static const _ExtendedGDBusSignalInfo _thunar_thumbnailer_dbus_signal_info_started =
+{
+  {
+    -1,
+    (gchar *) "Started",
+    (GDBusArgInfo **) &_thunar_thumbnailer_dbus_signal_info_started_ARG_pointers,
+    NULL
+  },
+  "started"
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_signal_info_finished_ARG_handle =
+{
+  {
+    -1,
+    (gchar *) "handle",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnailer_dbus_signal_info_finished_ARG_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_signal_info_finished_ARG_handle,
+  NULL
+};
+
+static const _ExtendedGDBusSignalInfo _thunar_thumbnailer_dbus_signal_info_finished =
+{
+  {
+    -1,
+    (gchar *) "Finished",
+    (GDBusArgInfo **) &_thunar_thumbnailer_dbus_signal_info_finished_ARG_pointers,
+    NULL
+  },
+  "finished"
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_signal_info_ready_ARG_handle =
+{
+  {
+    -1,
+    (gchar *) "handle",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_signal_info_ready_ARG_uris =
+{
+  {
+    -1,
+    (gchar *) "uris",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnailer_dbus_signal_info_ready_ARG_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_signal_info_ready_ARG_handle,
+  &_thunar_thumbnailer_dbus_signal_info_ready_ARG_uris,
+  NULL
+};
+
+static const _ExtendedGDBusSignalInfo _thunar_thumbnailer_dbus_signal_info_ready =
+{
+  {
+    -1,
+    (gchar *) "Ready",
+    (GDBusArgInfo **) &_thunar_thumbnailer_dbus_signal_info_ready_ARG_pointers,
+    NULL
+  },
+  "ready"
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_signal_info_error_ARG_handle =
+{
+  {
+    -1,
+    (gchar *) "handle",
+    (gchar *) "u",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_signal_info_error_ARG_failed_uris =
+{
+  {
+    -1,
+    (gchar *) "failed_uris",
+    (gchar *) "as",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_signal_info_error_ARG_error_code =
+{
+  {
+    -1,
+    (gchar *) "error_code",
+    (gchar *) "i",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo _thunar_thumbnailer_dbus_signal_info_error_ARG_message =
+{
+  {
+    -1,
+    (gchar *) "message",
+    (gchar *) "s",
+    NULL
+  },
+  FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _thunar_thumbnailer_dbus_signal_info_error_ARG_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_signal_info_error_ARG_handle,
+  &_thunar_thumbnailer_dbus_signal_info_error_ARG_failed_uris,
+  &_thunar_thumbnailer_dbus_signal_info_error_ARG_error_code,
+  &_thunar_thumbnailer_dbus_signal_info_error_ARG_message,
+  NULL
+};
+
+static const _ExtendedGDBusSignalInfo _thunar_thumbnailer_dbus_signal_info_error =
+{
+  {
+    -1,
+    (gchar *) "Error",
+    (GDBusArgInfo **) &_thunar_thumbnailer_dbus_signal_info_error_ARG_pointers,
+    NULL
+  },
+  "error"
+};
+
+static const _ExtendedGDBusSignalInfo * const _thunar_thumbnailer_dbus_signal_info_pointers[] =
+{
+  &_thunar_thumbnailer_dbus_signal_info_started,
+  &_thunar_thumbnailer_dbus_signal_info_finished,
+  &_thunar_thumbnailer_dbus_signal_info_ready,
+  &_thunar_thumbnailer_dbus_signal_info_error,
+  NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _thunar_thumbnailer_dbus_interface_info =
+{
+  {
+    -1,
+    (gchar *) "org.freedesktop.thumbnails.Thumbnailer1",
+    (GDBusMethodInfo **) &_thunar_thumbnailer_dbus_method_info_pointers,
+    (GDBusSignalInfo **) &_thunar_thumbnailer_dbus_signal_info_pointers,
+    NULL,
+    NULL
+  },
+  "thumbnailer-dbus",
+};
+
+
+/**
+ * thunar_thumbnailer_dbus_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-freedesktop-thumbnails-Thumbnailer1.top_of_page">org.freedesktop.thumbnails.Thumbnailer1</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+thunar_thumbnailer_dbus_interface_info (void)
+{
+  return (GDBusInterfaceInfo *) &_thunar_thumbnailer_dbus_interface_info.parent_struct;
+}
+
+/**
+ * thunar_thumbnailer_dbus_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #ThunarThumbnailerDBus interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+thunar_thumbnailer_dbus_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+  return property_id_begin - 1;
+}
+
+
+
+/**
+ * ThunarThumbnailerDBus:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-thumbnails-Thumbnailer1.top_of_page">org.freedesktop.thumbnails.Thumbnailer1</link>.
+ */
+
+/**
+ * ThunarThumbnailerDBusIface:
+ * @parent_iface: The parent interface.
+ * @handle_dequeue: Handler for the #ThunarThumbnailerDBus::handle-dequeue signal.
+ * @handle_get_schedulers: Handler for the #ThunarThumbnailerDBus::handle-get-schedulers signal.
+ * @handle_get_supported: Handler for the #ThunarThumbnailerDBus::handle-get-supported signal.
+ * @handle_queue: Handler for the #ThunarThumbnailerDBus::handle-queue signal.
+ * @error: Handler for the #ThunarThumbnailerDBus::error signal.
+ * @finished: Handler for the #ThunarThumbnailerDBus::finished signal.
+ * @ready: Handler for the #ThunarThumbnailerDBus::ready signal.
+ * @started: Handler for the #ThunarThumbnailerDBus::started signal.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-thumbnails-Thumbnailer1.top_of_page">org.freedesktop.thumbnails.Thumbnailer1</link>.
+ */
+
+typedef ThunarThumbnailerDBusIface ThunarThumbnailerDBusInterface;
+G_DEFINE_INTERFACE (ThunarThumbnailerDBus, thunar_thumbnailer_dbus, G_TYPE_OBJECT);
+
+static void
+thunar_thumbnailer_dbus_default_init (ThunarThumbnailerDBusIface *iface)
+{
+  /* GObject signals for incoming D-Bus method calls: */
+  /**
+   * ThunarThumbnailerDBus::handle-queue:
+   * @object: A #ThunarThumbnailerDBus.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_uris: Argument passed by remote caller.
+   * @arg_mime_hints: Argument passed by remote caller.
+   * @arg_flavor: Argument passed by remote caller.
+   * @arg_scheduler: Argument passed by remote caller.
+   * @arg_handle_to_unqueue: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.Queue">Queue()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_thumbnailer_dbus_complete_queue() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-queue",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailerDBusIface, handle_queue),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    6,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRV, G_TYPE_STRV, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
+
+  /**
+   * ThunarThumbnailerDBus::handle-dequeue:
+   * @object: A #ThunarThumbnailerDBus.
+   * @invocation: A #GDBusMethodInvocation.
+   * @arg_handle: Argument passed by remote caller.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.Dequeue">Dequeue()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_thumbnailer_dbus_complete_dequeue() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-dequeue",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailerDBusIface, handle_dequeue),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    2,
+    G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+  /**
+   * ThunarThumbnailerDBus::handle-get-supported:
+   * @object: A #ThunarThumbnailerDBus.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.GetSupported">GetSupported()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_thumbnailer_dbus_complete_get_supported() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-supported",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailerDBusIface, handle_get_supported),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /**
+   * ThunarThumbnailerDBus::handle-get-schedulers:
+   * @object: A #ThunarThumbnailerDBus.
+   * @invocation: A #GDBusMethodInvocation.
+   *
+   * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.GetSchedulers">GetSchedulers()</link> D-Bus method.
+   *
+   * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call thunar_thumbnailer_dbus_complete_get_schedulers() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+   *
+   * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+   */
+  g_signal_new ("handle-get-schedulers",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailerDBusIface, handle_get_schedulers),
+    g_signal_accumulator_true_handled,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_BOOLEAN,
+    1,
+    G_TYPE_DBUS_METHOD_INVOCATION);
+
+  /* GObject signals for received D-Bus signals: */
+  /**
+   * ThunarThumbnailerDBus::started:
+   * @object: A #ThunarThumbnailerDBus.
+   * @arg_handle: Argument.
+   *
+   * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-freedesktop-thumbnails-Thumbnailer1.Started">"Started"</link> is received.
+   *
+   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+   */
+  g_signal_new ("started",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailerDBusIface, started),
+    NULL,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_NONE,
+    1, G_TYPE_UINT);
+
+  /**
+   * ThunarThumbnailerDBus::finished:
+   * @object: A #ThunarThumbnailerDBus.
+   * @arg_handle: Argument.
+   *
+   * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-freedesktop-thumbnails-Thumbnailer1.Finished">"Finished"</link> is received.
+   *
+   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+   */
+  g_signal_new ("finished",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailerDBusIface, finished),
+    NULL,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_NONE,
+    1, G_TYPE_UINT);
+
+  /**
+   * ThunarThumbnailerDBus::ready:
+   * @object: A #ThunarThumbnailerDBus.
+   * @arg_handle: Argument.
+   * @arg_uris: Argument.
+   *
+   * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-freedesktop-thumbnails-Thumbnailer1.Ready">"Ready"</link> is received.
+   *
+   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+   */
+  g_signal_new ("ready",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailerDBusIface, ready),
+    NULL,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_NONE,
+    2, G_TYPE_UINT, G_TYPE_STRV);
+
+  /**
+   * ThunarThumbnailerDBus::error:
+   * @object: A #ThunarThumbnailerDBus.
+   * @arg_handle: Argument.
+   * @arg_failed_uris: Argument.
+   * @arg_error_code: Argument.
+   * @arg_message: Argument.
+   *
+   * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-freedesktop-thumbnails-Thumbnailer1.Error">"Error"</link> is received.
+   *
+   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+   */
+  g_signal_new ("error",
+    G_TYPE_FROM_INTERFACE (iface),
+    G_SIGNAL_RUN_LAST,
+    G_STRUCT_OFFSET (ThunarThumbnailerDBusIface, error),
+    NULL,
+    NULL,
+    g_cclosure_marshal_generic,
+    G_TYPE_NONE,
+    4, G_TYPE_UINT, G_TYPE_STRV, G_TYPE_INT, G_TYPE_STRING);
+
+}
+
+/**
+ * thunar_thumbnailer_dbus_emit_started:
+ * @object: A #ThunarThumbnailerDBus.
+ * @arg_handle: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-thumbnails-Thumbnailer1.Started">"Started"</link> D-Bus signal.
+ */
+void
+thunar_thumbnailer_dbus_emit_started (
+    ThunarThumbnailerDBus *object,
+    guint arg_handle)
+{
+  g_signal_emit_by_name (object, "started", arg_handle);
+}
+
+/**
+ * thunar_thumbnailer_dbus_emit_finished:
+ * @object: A #ThunarThumbnailerDBus.
+ * @arg_handle: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-thumbnails-Thumbnailer1.Finished">"Finished"</link> D-Bus signal.
+ */
+void
+thunar_thumbnailer_dbus_emit_finished (
+    ThunarThumbnailerDBus *object,
+    guint arg_handle)
+{
+  g_signal_emit_by_name (object, "finished", arg_handle);
+}
+
+/**
+ * thunar_thumbnailer_dbus_emit_ready:
+ * @object: A #ThunarThumbnailerDBus.
+ * @arg_handle: Argument to pass with the signal.
+ * @arg_uris: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-thumbnails-Thumbnailer1.Ready">"Ready"</link> D-Bus signal.
+ */
+void
+thunar_thumbnailer_dbus_emit_ready (
+    ThunarThumbnailerDBus *object,
+    guint arg_handle,
+    const gchar *const *arg_uris)
+{
+  g_signal_emit_by_name (object, "ready", arg_handle, arg_uris);
+}
+
+/**
+ * thunar_thumbnailer_dbus_emit_error:
+ * @object: A #ThunarThumbnailerDBus.
+ * @arg_handle: Argument to pass with the signal.
+ * @arg_failed_uris: Argument to pass with the signal.
+ * @arg_error_code: Argument to pass with the signal.
+ * @arg_message: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-freedesktop-thumbnails-Thumbnailer1.Error">"Error"</link> D-Bus signal.
+ */
+void
+thunar_thumbnailer_dbus_emit_error (
+    ThunarThumbnailerDBus *object,
+    guint arg_handle,
+    const gchar *const *arg_failed_uris,
+    gint arg_error_code,
+    const gchar *arg_message)
+{
+  g_signal_emit_by_name (object, "error", arg_handle, arg_failed_uris, arg_error_code, arg_message);
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_queue:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @arg_uris: Argument to pass with the method invocation.
+ * @arg_mime_hints: Argument to pass with the method invocation.
+ * @arg_flavor: Argument to pass with the method invocation.
+ * @arg_scheduler: Argument to pass with the method invocation.
+ * @arg_handle_to_unqueue: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.Queue">Queue()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnailer_dbus_call_queue_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnailer_dbus_call_queue_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_thumbnailer_dbus_call_queue (
+    ThunarThumbnailerDBus *proxy,
+    const gchar *const *arg_uris,
+    const gchar *const *arg_mime_hints,
+    const gchar *arg_flavor,
+    const gchar *arg_scheduler,
+    guint arg_handle_to_unqueue,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "Queue",
+    g_variant_new ("(^as^asssu)",
+                   arg_uris,
+                   arg_mime_hints,
+                   arg_flavor,
+                   arg_scheduler,
+                   arg_handle_to_unqueue),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_queue_finish:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @out_handle: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnailer_dbus_call_queue().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_thumbnailer_dbus_call_queue().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnailer_dbus_call_queue_finish (
+    ThunarThumbnailerDBus *proxy,
+    guint *out_handle,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(u)",
+                 out_handle);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_queue_sync:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @arg_uris: Argument to pass with the method invocation.
+ * @arg_mime_hints: Argument to pass with the method invocation.
+ * @arg_flavor: Argument to pass with the method invocation.
+ * @arg_scheduler: Argument to pass with the method invocation.
+ * @arg_handle_to_unqueue: Argument to pass with the method invocation.
+ * @out_handle: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.Queue">Queue()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnailer_dbus_call_queue() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnailer_dbus_call_queue_sync (
+    ThunarThumbnailerDBus *proxy,
+    const gchar *const *arg_uris,
+    const gchar *const *arg_mime_hints,
+    const gchar *arg_flavor,
+    const gchar *arg_scheduler,
+    guint arg_handle_to_unqueue,
+    guint *out_handle,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "Queue",
+    g_variant_new ("(^as^asssu)",
+                   arg_uris,
+                   arg_mime_hints,
+                   arg_flavor,
+                   arg_scheduler,
+                   arg_handle_to_unqueue),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(u)",
+                 out_handle);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_dequeue:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.Dequeue">Dequeue()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnailer_dbus_call_dequeue_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnailer_dbus_call_dequeue_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_thumbnailer_dbus_call_dequeue (
+    ThunarThumbnailerDBus *proxy,
+    guint arg_handle,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "Dequeue",
+    g_variant_new ("(u)",
+                   arg_handle),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_dequeue_finish:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnailer_dbus_call_dequeue().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_thumbnailer_dbus_call_dequeue().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnailer_dbus_call_dequeue_finish (
+    ThunarThumbnailerDBus *proxy,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_dequeue_sync:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.Dequeue">Dequeue()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnailer_dbus_call_dequeue() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnailer_dbus_call_dequeue_sync (
+    ThunarThumbnailerDBus *proxy,
+    guint arg_handle,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "Dequeue",
+    g_variant_new ("(u)",
+                   arg_handle),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "()");
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_get_supported:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.GetSupported">GetSupported()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnailer_dbus_call_get_supported_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnailer_dbus_call_get_supported_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_thumbnailer_dbus_call_get_supported (
+    ThunarThumbnailerDBus *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetSupported",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_get_supported_finish:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @out_uri_schemes: (out): Return location for return parameter or %NULL to ignore.
+ * @out_mime_types: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnailer_dbus_call_get_supported().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_thumbnailer_dbus_call_get_supported().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnailer_dbus_call_get_supported_finish (
+    ThunarThumbnailerDBus *proxy,
+    gchar ***out_uri_schemes,
+    gchar ***out_mime_types,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(^as^as)",
+                 out_uri_schemes,
+                 out_mime_types);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_get_supported_sync:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @out_uri_schemes: (out): Return location for return parameter or %NULL to ignore.
+ * @out_mime_types: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.GetSupported">GetSupported()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnailer_dbus_call_get_supported() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnailer_dbus_call_get_supported_sync (
+    ThunarThumbnailerDBus *proxy,
+    gchar ***out_uri_schemes,
+    gchar ***out_mime_types,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetSupported",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(^as^as)",
+                 out_uri_schemes,
+                 out_mime_types);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_get_schedulers:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.GetSchedulers">GetSchedulers()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnailer_dbus_call_get_schedulers_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnailer_dbus_call_get_schedulers_sync() for the synchronous, blocking version of this method.
+ */
+void
+thunar_thumbnailer_dbus_call_get_schedulers (
+    ThunarThumbnailerDBus *proxy,
+    GCancellable *cancellable,
+    GAsyncReadyCallback callback,
+    gpointer user_data)
+{
+  g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+    "GetSchedulers",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    callback,
+    user_data);
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_get_schedulers_finish:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @out_schedulers: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnailer_dbus_call_get_schedulers().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with thunar_thumbnailer_dbus_call_get_schedulers().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnailer_dbus_call_get_schedulers_finish (
+    ThunarThumbnailerDBus *proxy,
+    gchar ***out_schedulers,
+    GAsyncResult *res,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(^as)",
+                 out_schedulers);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnailer_dbus_call_get_schedulers_sync:
+ * @proxy: A #ThunarThumbnailerDBusProxy.
+ * @out_schedulers: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.GetSchedulers">GetSchedulers()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnailer_dbus_call_get_schedulers() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+thunar_thumbnailer_dbus_call_get_schedulers_sync (
+    ThunarThumbnailerDBus *proxy,
+    gchar ***out_schedulers,
+    GCancellable *cancellable,
+    GError **error)
+{
+  GVariant *_ret;
+  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+    "GetSchedulers",
+    g_variant_new ("()"),
+    G_DBUS_CALL_FLAGS_NONE,
+    -1,
+    cancellable,
+    error);
+  if (_ret == NULL)
+    goto _out;
+  g_variant_get (_ret,
+                 "(^as)",
+                 out_schedulers);
+  g_variant_unref (_ret);
+_out:
+  return _ret != NULL;
+}
+
+/**
+ * thunar_thumbnailer_dbus_complete_queue:
+ * @object: A #ThunarThumbnailerDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @handle: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.Queue">Queue()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_thumbnailer_dbus_complete_queue (
+    ThunarThumbnailerDBus *object,
+    GDBusMethodInvocation *invocation,
+    guint handle)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(u)",
+                   handle));
+}
+
+/**
+ * thunar_thumbnailer_dbus_complete_dequeue:
+ * @object: A #ThunarThumbnailerDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.Dequeue">Dequeue()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_thumbnailer_dbus_complete_dequeue (
+    ThunarThumbnailerDBus *object,
+    GDBusMethodInvocation *invocation)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("()"));
+}
+
+/**
+ * thunar_thumbnailer_dbus_complete_get_supported:
+ * @object: A #ThunarThumbnailerDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @uri_schemes: Parameter to return.
+ * @mime_types: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.GetSupported">GetSupported()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_thumbnailer_dbus_complete_get_supported (
+    ThunarThumbnailerDBus *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *const *uri_schemes,
+    const gchar *const *mime_types)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(^as^as)",
+                   uri_schemes,
+                   mime_types));
+}
+
+/**
+ * thunar_thumbnailer_dbus_complete_get_schedulers:
+ * @object: A #ThunarThumbnailerDBus.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @schedulers: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-freedesktop-thumbnails-Thumbnailer1.GetSchedulers">GetSchedulers()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+thunar_thumbnailer_dbus_complete_get_schedulers (
+    ThunarThumbnailerDBus *object,
+    GDBusMethodInvocation *invocation,
+    const gchar *const *schedulers)
+{
+  g_dbus_method_invocation_return_value (invocation,
+    g_variant_new ("(^as)",
+                   schedulers));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * ThunarThumbnailerDBusProxy:
+ *
+ * The #ThunarThumbnailerDBusProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ThunarThumbnailerDBusProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ThunarThumbnailerDBusProxy.
+ */
+
+struct _ThunarThumbnailerDBusProxyPrivate
+{
+  GData *qdata;
+};
+
+static void thunar_thumbnailer_dbus_proxy_iface_init (ThunarThumbnailerDBusIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (ThunarThumbnailerDBusProxy, thunar_thumbnailer_dbus_proxy, G_TYPE_DBUS_PROXY,
+                         G_ADD_PRIVATE (ThunarThumbnailerDBusProxy)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_THUMBNAILER_DBUS, thunar_thumbnailer_dbus_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (ThunarThumbnailerDBusProxy, thunar_thumbnailer_dbus_proxy, G_TYPE_DBUS_PROXY,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_THUMBNAILER_DBUS, thunar_thumbnailer_dbus_proxy_iface_init));
+
+#endif
+static void
+thunar_thumbnailer_dbus_proxy_finalize (GObject *object)
+{
+  ThunarThumbnailerDBusProxy *proxy = THUNAR_THUMBNAILER_DBUS_PROXY (object);
+  g_datalist_clear (&proxy->priv->qdata);
+  G_OBJECT_CLASS (thunar_thumbnailer_dbus_proxy_parent_class)->finalize (object);
+}
+
+static void
+thunar_thumbnailer_dbus_proxy_get_property (GObject      *object,
+  guint         prop_id,
+  GValue       *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+thunar_thumbnailer_dbus_proxy_set_property (GObject      *object,
+  guint         prop_id,
+  const GValue *value,
+  GParamSpec   *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+thunar_thumbnailer_dbus_proxy_g_signal (GDBusProxy *proxy,
+  const gchar *sender_name G_GNUC_UNUSED,
+  const gchar *signal_name,
+  GVariant *parameters)
+{
+  _ExtendedGDBusSignalInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint n;
+  guint signal_id;
+  info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_thunar_thumbnailer_dbus_interface_info.parent_struct, signal_name);
+  if (info == NULL)
+    return;
+  num_params = g_variant_n_children (parameters);
+  paramv = g_new0 (GValue, num_params + 1);
+  g_value_init (&paramv[0], THUNAR_TYPE_THUMBNAILER_DBUS);
+  g_value_set_object (&paramv[0], proxy);
+  g_variant_iter_init (&iter, parameters);
+  n = 1;
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, THUNAR_TYPE_THUMBNAILER_DBUS);
+  g_signal_emitv (paramv, signal_id, 0, NULL);
+  for (n = 0; n < num_params + 1; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static void
+thunar_thumbnailer_dbus_proxy_g_properties_changed (GDBusProxy *_proxy,
+  GVariant *changed_properties,
+  const gchar *const *invalidated_properties)
+{
+  ThunarThumbnailerDBusProxy *proxy = THUNAR_THUMBNAILER_DBUS_PROXY (_proxy);
+  guint n;
+  const gchar *key;
+  GVariantIter *iter;
+  _ExtendedGDBusPropertyInfo *info;
+  g_variant_get (changed_properties, "a{sv}", &iter);
+  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_thumbnailer_dbus_interface_info.parent_struct, key);
+      g_datalist_remove_data (&proxy->priv->qdata, key);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+  g_variant_iter_free (iter);
+  for (n = 0; invalidated_properties[n] != NULL; n++)
+    {
+      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_thumbnailer_dbus_interface_info.parent_struct, invalidated_properties[n]);
+      g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+      if (info != NULL)
+        g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+    }
+}
+
+static void
+thunar_thumbnailer_dbus_proxy_init (ThunarThumbnailerDBusProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  proxy->priv = thunar_thumbnailer_dbus_proxy_get_instance_private (proxy);
+#else
+  proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, THUNAR_TYPE_THUMBNAILER_DBUS_PROXY, ThunarThumbnailerDBusProxyPrivate);
+#endif
+
+  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), thunar_thumbnailer_dbus_interface_info ());
+}
+
+static void
+thunar_thumbnailer_dbus_proxy_class_init (ThunarThumbnailerDBusProxyClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusProxyClass *proxy_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize     = thunar_thumbnailer_dbus_proxy_finalize;
+  gobject_class->get_property = thunar_thumbnailer_dbus_proxy_get_property;
+  gobject_class->set_property = thunar_thumbnailer_dbus_proxy_set_property;
+
+  proxy_class = G_DBUS_PROXY_CLASS (klass);
+  proxy_class->g_signal = thunar_thumbnailer_dbus_proxy_g_signal;
+  proxy_class->g_properties_changed = thunar_thumbnailer_dbus_proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (ThunarThumbnailerDBusProxyPrivate));
+#endif
+}
+
+static void
+thunar_thumbnailer_dbus_proxy_iface_init (ThunarThumbnailerDBusIface *iface)
+{
+}
+
+/**
+ * thunar_thumbnailer_dbus_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-thumbnails-Thumbnailer1.top_of_page">org.freedesktop.thumbnails.Thumbnailer1</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnailer_dbus_proxy_new_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnailer_dbus_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+thunar_thumbnailer_dbus_proxy_new (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (THUNAR_TYPE_THUMBNAILER_DBUS_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.freedesktop.thumbnails.Thumbnailer1", NULL);
+}
+
+/**
+ * thunar_thumbnailer_dbus_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnailer_dbus_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with thunar_thumbnailer_dbus_proxy_new().
+ *
+ * Returns: (transfer full) (type ThunarThumbnailerDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarThumbnailerDBus *
+thunar_thumbnailer_dbus_proxy_new_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return THUNAR_THUMBNAILER_DBUS (ret);
+  else
+    return NULL;
+}
+
+/**
+ * thunar_thumbnailer_dbus_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-thumbnails-Thumbnailer1.top_of_page">org.freedesktop.thumbnails.Thumbnailer1</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnailer_dbus_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ThunarThumbnailerDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarThumbnailerDBus *
+thunar_thumbnailer_dbus_proxy_new_sync (
+    GDBusConnection     *connection,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (THUNAR_TYPE_THUMBNAILER_DBUS_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.freedesktop.thumbnails.Thumbnailer1", NULL);
+  if (ret != NULL)
+    return THUNAR_THUMBNAILER_DBUS (ret);
+  else
+    return NULL;
+}
+
+
+/**
+ * thunar_thumbnailer_dbus_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like thunar_thumbnailer_dbus_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call thunar_thumbnailer_dbus_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See thunar_thumbnailer_dbus_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+thunar_thumbnailer_dbus_proxy_new_for_bus (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GAsyncReadyCallback  callback,
+    gpointer             user_data)
+{
+  g_async_initable_new_async (THUNAR_TYPE_THUMBNAILER_DBUS_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.freedesktop.thumbnails.Thumbnailer1", NULL);
+}
+
+/**
+ * thunar_thumbnailer_dbus_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to thunar_thumbnailer_dbus_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with thunar_thumbnailer_dbus_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type ThunarThumbnailerDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarThumbnailerDBus *
+thunar_thumbnailer_dbus_proxy_new_for_bus_finish (
+    GAsyncResult        *res,
+    GError             **error)
+{
+  GObject *ret;
+  GObject *source_object;
+  source_object = g_async_result_get_source_object (res);
+  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+  g_object_unref (source_object);
+  if (ret != NULL)
+    return THUNAR_THUMBNAILER_DBUS (ret);
+  else
+    return NULL;
+}
+
+/**
+ * thunar_thumbnailer_dbus_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like thunar_thumbnailer_dbus_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See thunar_thumbnailer_dbus_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ThunarThumbnailerDBusProxy): The constructed proxy object or %NULL if @error is set.
+ */
+ThunarThumbnailerDBus *
+thunar_thumbnailer_dbus_proxy_new_for_bus_sync (
+    GBusType             bus_type,
+    GDBusProxyFlags      flags,
+    const gchar         *name,
+    const gchar         *object_path,
+    GCancellable        *cancellable,
+    GError             **error)
+{
+  GInitable *ret;
+  ret = g_initable_new (THUNAR_TYPE_THUMBNAILER_DBUS_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.freedesktop.thumbnails.Thumbnailer1", NULL);
+  if (ret != NULL)
+    return THUNAR_THUMBNAILER_DBUS (ret);
+  else
+    return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * ThunarThumbnailerDBusSkeleton:
+ *
+ * The #ThunarThumbnailerDBusSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ThunarThumbnailerDBusSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ThunarThumbnailerDBusSkeleton.
+ */
+
+struct _ThunarThumbnailerDBusSkeletonPrivate
+{
+  GValue *properties;
+  GList *changed_properties;
+  GSource *changed_properties_idle_source;
+  GMainContext *context;
+  GMutex lock;
+};
+
+static void
+_thunar_thumbnailer_dbus_skeleton_handle_method_call (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name,
+  const gchar *method_name,
+  GVariant *parameters,
+  GDBusMethodInvocation *invocation,
+  gpointer user_data)
+{
+  ThunarThumbnailerDBusSkeleton *skeleton = THUNAR_THUMBNAILER_DBUS_SKELETON (user_data);
+  _ExtendedGDBusMethodInfo *info;
+  GVariantIter iter;
+  GVariant *child;
+  GValue *paramv;
+  guint num_params;
+  guint num_extra;
+  guint n;
+  guint signal_id;
+  GValue return_value = G_VALUE_INIT;
+  info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+  g_assert (info != NULL);
+  num_params = g_variant_n_children (parameters);
+  num_extra = info->pass_fdlist ? 3 : 2;  paramv = g_new0 (GValue, num_params + num_extra);
+  n = 0;
+  g_value_init (&paramv[n], THUNAR_TYPE_THUMBNAILER_DBUS);
+  g_value_set_object (&paramv[n++], skeleton);
+  g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+  g_value_set_object (&paramv[n++], invocation);
+  if (info->pass_fdlist)
+    {
+#ifdef G_OS_UNIX
+      g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+      g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
+#else
+      g_assert_not_reached ();
+#endif
+    }
+  g_variant_iter_init (&iter, parameters);
+  while ((child = g_variant_iter_next_value (&iter)) != NULL)
+    {
+      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+      if (arg_info->use_gvariant)
+        {
+          g_value_init (&paramv[n], G_TYPE_VARIANT);
+          g_value_set_variant (&paramv[n], child);
+          n++;
+        }
+      else
+        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+      g_variant_unref (child);
+    }
+  signal_id = g_signal_lookup (info->signal_name, THUNAR_TYPE_THUMBNAILER_DBUS);
+  g_value_init (&return_value, G_TYPE_BOOLEAN);
+  g_signal_emitv (paramv, signal_id, 0, &return_value);
+  if (!g_value_get_boolean (&return_value))
+    g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
+  g_value_unset (&return_value);
+  for (n = 0; n < num_params + num_extra; n++)
+    g_value_unset (&paramv[n]);
+  g_free (paramv);
+}
+
+static GVariant *
+_thunar_thumbnailer_dbus_skeleton_handle_get_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GError **error,
+  gpointer user_data)
+{
+  ThunarThumbnailerDBusSkeleton *skeleton = THUNAR_THUMBNAILER_DBUS_SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  GVariant *ret;
+  ret = NULL;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_thumbnailer_dbus_interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+    }
+  else
+    {
+      g_value_init (&value, pspec->value_type);
+      g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+      g_value_unset (&value);
+    }
+  return ret;
+}
+
+static gboolean
+_thunar_thumbnailer_dbus_skeleton_handle_set_property (
+  GDBusConnection *connection G_GNUC_UNUSED,
+  const gchar *sender G_GNUC_UNUSED,
+  const gchar *object_path G_GNUC_UNUSED,
+  const gchar *interface_name G_GNUC_UNUSED,
+  const gchar *property_name,
+  GVariant *variant,
+  GError **error,
+  gpointer user_data)
+{
+  ThunarThumbnailerDBusSkeleton *skeleton = THUNAR_THUMBNAILER_DBUS_SKELETON (user_data);
+  GValue value = G_VALUE_INIT;
+  GParamSpec *pspec;
+  _ExtendedGDBusPropertyInfo *info;
+  gboolean ret;
+  ret = FALSE;
+  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_thunar_thumbnailer_dbus_interface_info.parent_struct, property_name);
+  g_assert (info != NULL);
+  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+  if (pspec == NULL)
+    {
+      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+    }
+  else
+    {
+      if (info->use_gvariant)
+        g_value_set_variant (&value, variant);
+      else
+        g_dbus_gvariant_to_gvalue (variant, &value);
+      g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+      g_value_unset (&value);
+      ret = TRUE;
+    }
+  return ret;
+}
+
+static const GDBusInterfaceVTable _thunar_thumbnailer_dbus_skeleton_vtable =
+{
+  _thunar_thumbnailer_dbus_skeleton_handle_method_call,
+  _thunar_thumbnailer_dbus_skeleton_handle_get_property,
+  _thunar_thumbnailer_dbus_skeleton_handle_set_property,
+  {NULL}
+};
+
+static GDBusInterfaceInfo *
+thunar_thumbnailer_dbus_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return thunar_thumbnailer_dbus_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+thunar_thumbnailer_dbus_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+  return (GDBusInterfaceVTable *) &_thunar_thumbnailer_dbus_skeleton_vtable;
+}
+
+static GVariant *
+thunar_thumbnailer_dbus_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+  ThunarThumbnailerDBusSkeleton *skeleton = THUNAR_THUMBNAILER_DBUS_SKELETON (_skeleton);
+
+  GVariantBuilder builder;
+  guint n;
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  if (_thunar_thumbnailer_dbus_interface_info.parent_struct.properties == NULL)
+    goto out;
+  for (n = 0; _thunar_thumbnailer_dbus_interface_info.parent_struct.properties[n] != NULL; n++)
+    {
+      GDBusPropertyInfo *info = _thunar_thumbnailer_dbus_interface_info.parent_struct.properties[n];
+      if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+        {
+          GVariant *value;
+          value = _thunar_thumbnailer_dbus_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.thumbnails.Thumbnailer1", info->name, NULL, skeleton);
+          if (value != NULL)
+            {
+              g_variant_take_ref (value);
+              g_variant_builder_add (&builder, "{sv}", info->name, value);
+              g_variant_unref (value);
+            }
+        }
+    }
+out:
+  return g_variant_builder_end (&builder);
+}
+
+static void
+thunar_thumbnailer_dbus_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void
+_thunar_thumbnailer_dbus_on_signal_started (
+    ThunarThumbnailerDBus *object,
+    guint arg_handle)
+{
+  ThunarThumbnailerDBusSkeleton *skeleton = THUNAR_THUMBNAILER_DBUS_SKELETON (object);
+
+  GList      *connections, *l;
+  GVariant   *signal_variant;
+  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+  signal_variant = g_variant_ref_sink (g_variant_new ("(u)",
+                   arg_handle));
+  for (l = connections; l != NULL; l = l->next)
+    {
+      GDBusConnection *connection = l->data;
+      g_dbus_connection_emit_signal (connection,
+        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.thumbnails.Thumbnailer1", "Started",
+        signal_variant, NULL);
+    }
+  g_variant_unref (signal_variant);
+  g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_thunar_thumbnailer_dbus_on_signal_finished (
+    ThunarThumbnailerDBus *object,
+    guint arg_handle)
+{
+  ThunarThumbnailerDBusSkeleton *skeleton = THUNAR_THUMBNAILER_DBUS_SKELETON (object);
+
+  GList      *connections, *l;
+  GVariant   *signal_variant;
+  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+  signal_variant = g_variant_ref_sink (g_variant_new ("(u)",
+                   arg_handle));
+  for (l = connections; l != NULL; l = l->next)
+    {
+      GDBusConnection *connection = l->data;
+      g_dbus_connection_emit_signal (connection,
+        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.thumbnails.Thumbnailer1", "Finished",
+        signal_variant, NULL);
+    }
+  g_variant_unref (signal_variant);
+  g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_thunar_thumbnailer_dbus_on_signal_ready (
+    ThunarThumbnailerDBus *object,
+    guint arg_handle,
+    const gchar *const *arg_uris)
+{
+  ThunarThumbnailerDBusSkeleton *skeleton = THUNAR_THUMBNAILER_DBUS_SKELETON (object);
+
+  GList      *connections, *l;
+  GVariant   *signal_variant;
+  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+  signal_variant = g_variant_ref_sink (g_variant_new ("(u^as)",
+                   arg_handle,
+                   arg_uris));
+  for (l = connections; l != NULL; l = l->next)
+    {
+      GDBusConnection *connection = l->data;
+      g_dbus_connection_emit_signal (connection,
+        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.thumbnails.Thumbnailer1", "Ready",
+        signal_variant, NULL);
+    }
+  g_variant_unref (signal_variant);
+  g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_thunar_thumbnailer_dbus_on_signal_error (
+    ThunarThumbnailerDBus *object,
+    guint arg_handle,
+    const gchar *const *arg_failed_uris,
+    gint arg_error_code,
+    const gchar *arg_message)
+{
+  ThunarThumbnailerDBusSkeleton *skeleton = THUNAR_THUMBNAILER_DBUS_SKELETON (object);
+
+  GList      *connections, *l;
+  GVariant   *signal_variant;
+  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+  signal_variant = g_variant_ref_sink (g_variant_new ("(u^asis)",
+                   arg_handle,
+                   arg_failed_uris,
+                   arg_error_code,
+                   arg_message));
+  for (l = connections; l != NULL; l = l->next)
+    {
+      GDBusConnection *connection = l->data;
+      g_dbus_connection_emit_signal (connection,
+        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.freedesktop.thumbnails.Thumbnailer1", "Error",
+        signal_variant, NULL);
+    }
+  g_variant_unref (signal_variant);
+  g_list_free_full (connections, g_object_unref);
+}
+
+static void thunar_thumbnailer_dbus_skeleton_iface_init (ThunarThumbnailerDBusIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (ThunarThumbnailerDBusSkeleton, thunar_thumbnailer_dbus_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_ADD_PRIVATE (ThunarThumbnailerDBusSkeleton)
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_THUMBNAILER_DBUS, thunar_thumbnailer_dbus_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (ThunarThumbnailerDBusSkeleton, thunar_thumbnailer_dbus_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+                         G_IMPLEMENT_INTERFACE (THUNAR_TYPE_THUMBNAILER_DBUS, thunar_thumbnailer_dbus_skeleton_iface_init));
+
+#endif
+static void
+thunar_thumbnailer_dbus_skeleton_finalize (GObject *object)
+{
+  ThunarThumbnailerDBusSkeleton *skeleton = THUNAR_THUMBNAILER_DBUS_SKELETON (object);
+  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+  if (skeleton->priv->changed_properties_idle_source != NULL)
+    g_source_destroy (skeleton->priv->changed_properties_idle_source);
+  g_main_context_unref (skeleton->priv->context);
+  g_mutex_clear (&skeleton->priv->lock);
+  G_OBJECT_CLASS (thunar_thumbnailer_dbus_skeleton_parent_class)->finalize (object);
+}
+
+static void
+thunar_thumbnailer_dbus_skeleton_init (ThunarThumbnailerDBusSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+  skeleton->priv = thunar_thumbnailer_dbus_skeleton_get_instance_private (skeleton);
+#else
+  skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, THUNAR_TYPE_THUMBNAILER_DBUS_SKELETON, ThunarThumbnailerDBusSkeletonPrivate);
+#endif
+
+  g_mutex_init (&skeleton->priv->lock);
+  skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+thunar_thumbnailer_dbus_skeleton_class_init (ThunarThumbnailerDBusSkeletonClass *klass)
+{
+  GObjectClass *gobject_class;
+  GDBusInterfaceSkeletonClass *skeleton_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = thunar_thumbnailer_dbus_skeleton_finalize;
+
+  skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+  skeleton_class->get_info = thunar_thumbnailer_dbus_skeleton_dbus_interface_get_info;
+  skeleton_class->get_properties = thunar_thumbnailer_dbus_skeleton_dbus_interface_get_properties;
+  skeleton_class->flush = thunar_thumbnailer_dbus_skeleton_dbus_interface_flush;
+  skeleton_class->get_vtable = thunar_thumbnailer_dbus_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+  g_type_class_add_private (klass, sizeof (ThunarThumbnailerDBusSkeletonPrivate));
+#endif
+}
+
+static void
+thunar_thumbnailer_dbus_skeleton_iface_init (ThunarThumbnailerDBusIface *iface)
+{
+  iface->started = _thunar_thumbnailer_dbus_on_signal_started;
+  iface->finished = _thunar_thumbnailer_dbus_on_signal_finished;
+  iface->ready = _thunar_thumbnailer_dbus_on_signal_ready;
+  iface->error = _thunar_thumbnailer_dbus_on_signal_error;
+}
+
+/**
+ * thunar_thumbnailer_dbus_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-freedesktop-thumbnails-Thumbnailer1.top_of_page">org.freedesktop.thumbnails.Thumbnailer1</link>.
+ *
+ * Returns: (transfer full) (type ThunarThumbnailerDBusSkeleton): The skeleton object.
+ */
+ThunarThumbnailerDBus *
+thunar_thumbnailer_dbus_skeleton_new (void)
+{
+  return THUNAR_THUMBNAILER_DBUS (g_object_new (THUNAR_TYPE_THUMBNAILER_DBUS_SKELETON, NULL));
+}
+
diff --git a/thunar/thunar-thumbnailer.c b/thunar/thunar-thumbnailer.c
index 52daad9..a55db09 100644
--- a/thunar/thunar-thumbnailer.c
+++ b/thunar/thunar-thumbnailer.c
@@ -23,13 +23,7 @@
 #include <config.h>
 #endif
 
-#ifdef HAVE_DBUS
-#include <dbus/dbus.h>
-#include <dbus/dbus-glib.h>
-
 #include <thunar/thunar-thumbnailer-proxy.h>
-#endif
-
 #include <thunar/thunar-marshal.h>
 #include <thunar/thunar-private.h>
 #include <thunar/thunar-thumbnailer.h>
@@ -47,15 +41,19 @@
  *
  * Please note that all D-Bus calls are performed asynchronously.
  *
+ * The proxy and the supported file types are intialized asynchronously, but
+ * this is nearly completely transparent to the calling code because all requests
+ * that arrive beforehand will be cached and sent out as soon as the initialization
+ * is completed.
  *
- * When a request call is sent out, an internal request ID is created and
- * associated with the corresponding DBusGProxyCall.
+ * When a request call is sent out, an internal request ID is created and tied
+ * to the dbus call. While the call is running, an additional reference is held
+ * to the thumbnailer so it cannot be finalized.
  *
  * The D-Bus reply handler then checks if there was an delivery error or
  * not. If the request method was sent successfully, the handle returned by the
  * D-Bus thumbnailer is associated bidirectionally with the internal request ID via
- * the request and handle values in the job structure. In both cases, the
- * association of the internal request ID with the DBusGProxyCall is set to NULL.
+ * the request and handle values in the job structure.
  *
  *
  * Ready / Error
@@ -76,7 +74,6 @@
 
 
 
-#ifdef HAVE_DBUS
 typedef enum
 {
   THUNAR_THUMBNAILER_IDLE_ERROR,
@@ -85,9 +82,17 @@ typedef enum
 
 
 
+typedef enum
+{
+  THUNAR_THUMBNAILER_PROXY_WAITING = 0,
+  THUNAR_THUMBNAILER_PROXY_AVAILABLE,
+  THUNAR_THUMBNAILER_PROXY_FAILED
+} ThunarThumbnailerProxyState;
+
+
+
 typedef struct _ThunarThumbnailerJob  ThunarThumbnailerJob;
 typedef struct _ThunarThumbnailerIdle ThunarThumbnailerIdle;
-#endif
 
 /* Signal identifiers */
 enum
@@ -99,21 +104,19 @@ enum
 
 
 static void                   thunar_thumbnailer_finalize               (GObject                    *object);
-#ifdef HAVE_DBUS
-static void                   thunar_thumbnailer_init_thumbnailer_proxy (ThunarThumbnailer          *thumbnailer,
-                                                                         DBusGConnection            *connection);
+static void                   thunar_thumbnailer_init_thumbnailer_proxy (ThunarThumbnailer          *thumbnailer);
 static gboolean               thunar_thumbnailer_file_is_supported      (ThunarThumbnailer          *thumbnailer,
                                                                          ThunarFile                 *file);
-static void                   thunar_thumbnailer_thumbnailer_finished   (DBusGProxy                 *proxy,
+static void                   thunar_thumbnailer_thumbnailer_finished   (GDBusProxy                 *proxy,
                                                                          guint                       handle,
                                                                          ThunarThumbnailer          *thumbnailer);
-static void                   thunar_thumbnailer_thumbnailer_error      (DBusGProxy                 *proxy,
+static void                   thunar_thumbnailer_thumbnailer_error      (GDBusProxy                 *proxy,
                                                                          guint                       handle,
                                                                          const gchar               **uris,
                                                                          gint                        code,
                                                                          const gchar                *message,
                                                                          ThunarThumbnailer          *thumbnailer);
-static void                   thunar_thumbnailer_thumbnailer_ready      (DBusGProxy                 *proxy,
+static void                   thunar_thumbnailer_thumbnailer_ready      (GDBusProxy                 *proxy,
                                                                          guint32                     handle,
                                                                          const gchar               **uris,
                                                                          ThunarThumbnailer          *thumbnailer);
@@ -126,7 +129,6 @@ static void                   thunar_thumbnailer_idle                   (ThunarT
                                                                          const gchar               **uris);
 static gboolean               thunar_thumbnailer_idle_func              (gpointer                    user_data);
 static void                   thunar_thumbnailer_idle_free              (gpointer                    data);
-#endif
 
 #if GLIB_CHECK_VERSION (2, 32, 0)
 #define _thumbnailer_lock(thumbnailer)    g_mutex_lock (&((thumbnailer)->lock))
@@ -149,9 +151,9 @@ struct _ThunarThumbnailer
 {
   GObject __parent__;
 
-#ifdef HAVE_DBUS
   /* proxies to communicate with D-Bus services */
-  DBusGProxy *thumbnailer_proxy;
+  ThunarThumbnailerDBus      *thumbnailer_proxy;
+  ThunarThumbnailerProxyState proxy_state;
 
   /* running jobs */
   GSList     *jobs;
@@ -170,10 +172,8 @@ struct _ThunarThumbnailer
 
   /* IDs of idle functions */
   GSList     *idles;
-#endif
 };
 
-#ifdef HAVE_DBUS
 struct _ThunarThumbnailerJob
 {
   ThunarThumbnailer *thumbnailer;
@@ -181,14 +181,17 @@ struct _ThunarThumbnailerJob
   /* if this job is cancelled */
   guint              cancelled : 1;
 
+  guint              lazy_checks : 1;
+
+  /* data is saved here in case the queueing is delayed */
+  /* If this is NULL, the request has been sent off. */
+  GList             *files; /* element type: ThunarFile */
+
   /* request number returned by ThunarThumbnailer */
   guint              request;
 
   /* handle returned by the tumbler dbus service */
   guint              handle;
-
-  /* dbus call to get the handle */
-  DBusGProxyCall    *handle_call;
 };
 
 struct _ThunarThumbnailerIdle
@@ -198,8 +201,6 @@ struct _ThunarThumbnailerIdle
   guint                       id;
   gchar                     **uris;
 };
-#endif
-
 
 
 static guint thumbnailer_signals[LAST_SIGNAL];
@@ -238,27 +239,213 @@ thunar_thumbnailer_class_init (ThunarThumbnailerClass *klass)
 
 
 static void
-thunar_thumbnailer_init (ThunarThumbnailer *thumbnailer)
+thunar_thumbnailer_free_job (ThunarThumbnailerJob *job)
 {
-#ifdef HAVE_DBUS
-  DBusGConnection *connection;
+  if (job->files)
+    g_list_free_full (job->files, g_object_unref);
 
-#if GLIB_CHECK_VERSION (2, 32, 0)
+  if (job->thumbnailer && job->thumbnailer->thumbnailer_proxy && job->handle)
+    thunar_thumbnailer_dbus_call_dequeue (job->thumbnailer->thumbnailer_proxy, job->handle, NULL, NULL, NULL);
+
+  g_slice_free (ThunarThumbnailerJob, job);
+}
+
+
+
+static void
+thunar_thumbnailer_queue_async_reply (GObject      *proxy,
+                                      GAsyncResult *res,
+                                      gpointer      user_data)
+{
+  ThunarThumbnailerJob *job = user_data;
+  ThunarThumbnailer    *thumbnailer = THUNAR_THUMBNAILER (job->thumbnailer);
+  GError               *error = NULL;
+  int                   handle;
+
+  _thunar_return_if_fail (THUNAR_IS_THUMBNAILER_DBUS (proxy));
+  _thunar_return_if_fail (job != NULL);
+  _thunar_return_if_fail (THUNAR_IS_THUMBNAILER (thumbnailer));
+
+  _thumbnailer_lock (thumbnailer);
+
+  thunar_thumbnailer_dbus_call_queue_finish (THUNAR_THUMBNAILER_DBUS (proxy), &handle, res, &error);
+
+  if (job->cancelled)
+    {
+      /* job is cancelled while there was no handle jet, so dequeue it now */
+      thunar_thumbnailer_dbus_call_dequeue (THUNAR_THUMBNAILER_DBUS (proxy), handle, NULL, NULL, NULL);
+
+      /* cleanup */
+      thumbnailer->jobs = g_slist_remove (thumbnailer->jobs, job);
+      thunar_thumbnailer_free_job (job);
+    }
+  else if (error == NULL)
+    {
+      /* store the handle returned by tumbler */
+      job->handle = handle;
+    }
+  else
+    {
+      g_printerr ("ThunarThumbnailer: Queue failed: %s\n", error->message);
+    }
+
+  _thumbnailer_unlock (thumbnailer);
+  g_clear_error (&error);
+
+  /* remove the additional reference we held during the call */
+  g_object_unref (thumbnailer);
+}
+
+
+
+/* NOTE: assumes that the lock is held by the caller */
+gboolean
+thunar_thumbnailer_begin_job (ThunarThumbnailer *thumbnailer,
+                              ThunarThumbnailerJob *job)
+{
+  gboolean               success = FALSE;
+  const gchar          **mime_hints;
+  gchar                **uris;
+  GList                 *lp;
+  GList                 *supported_files = NULL;
+  guint                  n;
+  guint                  n_items = 0;
+  ThunarFileThumbState   thumb_state;
+  const gchar           *thumbnail_path;
+  gint                   request_no;
+
+  if (thumbnailer->proxy_state == THUNAR_THUMBNAILER_PROXY_WAITING)
+    {
+      /* all pending jobs will be queued automatically once the proxy is available */
+      return TRUE;
+    }
+  else if (thumbnailer->proxy_state == THUNAR_THUMBNAILER_PROXY_FAILED)
+    {
+      /* the job has no chance to be completed - ever */
+      return FALSE;
+    }
+
+  /* collect all supported files from the list that are neither in the
+   * about to be queued (wait queue), nor already queued, nor already
+   * processed (and awaiting to be refreshed) */
+  for (lp = job->files; lp != NULL; lp = lp->next)
+    {
+      /* the icon factory only loads icons for regular files */
+      if (!thunar_file_is_regular (lp->data))
+        {
+          thunar_file_set_thumb_state (lp->data, THUNAR_FILE_THUMB_STATE_NONE);
+          continue;
+        }
+
+      /* get the current thumb state */
+      thumb_state = thunar_file_get_thumb_state (lp->data);
+
+      if (job->lazy_checks)
+        {
+          /* in lazy mode, don't both for files that have already
+           * been loaded or are not supported */
+          if (thumb_state == THUNAR_FILE_THUMB_STATE_NONE
+              || thumb_state == THUNAR_FILE_THUMB_STATE_READY)
+            continue;
+        }
+
+      /* check if the file is supported, assume it is when the state was ready previously */
+      if (thumb_state == THUNAR_FILE_THUMB_STATE_READY
+          || thunar_thumbnailer_file_is_supported (thumbnailer, lp->data))
+        {
+          supported_files = g_list_prepend (supported_files, lp->data);
+          n_items++;
+        }
+      else
+        {
+          /* still a regular file, but the type is now known to tumbler but
+           * maybe the application created a thumbnail */
+          thumbnail_path = thunar_file_get_thumbnail_path (lp->data);
+
+          /* test if a thumbnail can be found */
+          if (thumbnail_path != NULL && g_file_test (thumbnail_path, G_FILE_TEST_EXISTS))
+            thunar_file_set_thumb_state (lp->data, THUNAR_FILE_THUMB_STATE_READY);
+          else
+            thunar_file_set_thumb_state (lp->data, THUNAR_FILE_THUMB_STATE_NONE);
+        }
+    }
+
+  /* check if we have any supported files */
+  if (n_items > 0)
+    {
+      /* allocate arrays for URIs and mime hints */
+      uris = g_new0 (gchar *, n_items + 1);
+      mime_hints = g_new0 (const gchar *, n_items + 1);
+
+      /* fill URI and MIME hint arrays with items from the wait queue */
+      for (lp = supported_files, n = 0; lp != NULL; lp = lp->next, ++n)
+        {
+          /* set the thumbnail state to loading */
+          thunar_file_set_thumb_state (lp->data, THUNAR_FILE_THUMB_STATE_LOADING);
+
+          /* save URI and MIME hint in the arrays */
+          uris[n] = thunar_file_dup_uri (lp->data);
+          mime_hints[n] = thunar_file_get_content_type (lp->data);
+        }
+
+      /* NULL-terminate both arrays */
+      uris[n] = NULL;
+      mime_hints[n] = NULL;
+
+      /* queue a thumbnail request for the URIs from the wait queue */
+      /* compute the next request ID, making sure it's never 0 */
+      request_no = thumbnailer->last_request + 1;
+      request_no = MAX (request_no, 1);
+
+      /* remember the ID for the next request */
+      thumbnailer->last_request = request_no;
+
+      /* save the request number */
+      job->request = request_no;
+
+      /* increase the reference count while the dbus call is running */
+      g_object_ref (thumbnailer);
+
+      /* queue the request - asynchronously, of course */
+      thunar_thumbnailer_dbus_call_queue (thumbnailer->thumbnailer_proxy,
+                                          (const gchar *const *)uris,
+                                          (const gchar *const *)mime_hints,
+                                          "normal", "foreground", 0,
+                                          NULL,
+                                          thunar_thumbnailer_queue_async_reply,
+                                          job);
+
+      /* free mime hints array */
+      g_free (mime_hints);
+      g_strfreev (uris);
+
+      /* free the list of supported files */
+      g_list_free (supported_files);
+
+      /* free the list of files passed in */
+      g_list_free_full (job->files, g_object_unref);
+      job->files = NULL;
+
+      /* we assume success if we've come so far */
+      success = TRUE;
+    }
+
+  return success;
+}
+
+
+
+static void
+thunar_thumbnailer_init (ThunarThumbnailer *thumbnailer)
+{
+  #if GLIB_CHECK_VERSION (2, 32, 0)
   g_mutex_init (&thumbnailer->lock);
 #else
   thumbnailer->lock = g_mutex_new ();
 #endif
 
-  /* try to connect to D-Bus */
-  connection = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
-
   /* initialize the proxies */
-  thunar_thumbnailer_init_thumbnailer_proxy (thumbnailer, connection);
-
-  /* release the D-Bus connection if we have one */
-  if (connection != NULL)
-    dbus_g_connection_unref (connection);
-#endif
+  thunar_thumbnailer_init_thumbnailer_proxy (thumbnailer);
 }
 
 
@@ -266,7 +453,6 @@ thunar_thumbnailer_init (ThunarThumbnailer *thumbnailer)
 static void
 thunar_thumbnailer_finalize (GObject *object)
 {
-#ifdef HAVE_DBUS
   ThunarThumbnailer     *thumbnailer = THUNAR_THUMBNAILER (object);
   ThunarThumbnailerIdle *idle;
   ThunarThumbnailerJob  *job;
@@ -292,22 +478,7 @@ thunar_thumbnailer_finalize (GObject *object)
   g_slist_free (thumbnailer->idles);
 
   /* remove all jobs */
-  for (lp = thumbnailer->jobs; lp != NULL; lp = lp->next)
-    {
-      job = lp->data;
-
-      if (thumbnailer->thumbnailer_proxy != NULL)
-        {
-          if (job->handle_call != NULL)
-            dbus_g_proxy_cancel_call (thumbnailer->thumbnailer_proxy, job->handle_call);
-
-          if (job->handle != 0)
-            thunar_thumbnailer_proxy_dequeue (thumbnailer->thumbnailer_proxy, job->handle, NULL);
-        }
-
-      g_slice_free (ThunarThumbnailerJob, job);
-    }
-  g_slist_free (thumbnailer->jobs);
+  g_slist_free_full (thumbnailer->jobs, (GDestroyNotify)thunar_thumbnailer_free_job);
 
   /* release the thumbnailer proxy */
   if (thumbnailer->thumbnailer_proxy != NULL)
@@ -326,70 +497,12 @@ thunar_thumbnailer_finalize (GObject *object)
 #else
   g_mutex_free (thumbnailer->lock);
 #endif
-#endif
 
   (*G_OBJECT_CLASS (thunar_thumbnailer_parent_class)->finalize) (object);
 }
 
 
 
-#ifdef HAVE_DBUS
-static void
-thunar_thumbnailer_init_thumbnailer_proxy (ThunarThumbnailer *thumbnailer,
-                                           DBusGConnection   *connection)
-{
-  /* we can't have a proxy without a D-Bus connection */
-  if (connection == NULL)
-    {
-      thumbnailer->thumbnailer_proxy = NULL;
-      return;
-    }
-
-  /* create the thumbnailer proxy */
-  thumbnailer->thumbnailer_proxy =
-    dbus_g_proxy_new_for_name (connection,
-                               "org.freedesktop.thumbnails.Thumbnailer1",
-                               "/org/freedesktop/thumbnails/Thumbnailer1",
-                               "org.freedesktop.thumbnails.Thumbnailer1");
-
-  /* TODO this should actually be VOID:UINT,BOXED,INT,STRING */
-  dbus_g_object_register_marshaller (_thunar_marshal_VOID__UINT_BOXED_UINT_STRING,
-                                     G_TYPE_NONE,
-                                     G_TYPE_UINT,
-                                     G_TYPE_STRV,
-                                     G_TYPE_UINT,
-                                     G_TYPE_STRING,
-                                     G_TYPE_INVALID);
-
-  dbus_g_object_register_marshaller ((GClosureMarshal) _thunar_marshal_VOID__UINT_BOXED,
-                                     G_TYPE_NONE,
-                                     G_TYPE_UINT,
-                                     G_TYPE_STRV,
-                                     G_TYPE_INVALID);
-
-  dbus_g_proxy_add_signal (thumbnailer->thumbnailer_proxy, "Error",
-                           G_TYPE_UINT, G_TYPE_STRV, G_TYPE_UINT, G_TYPE_STRING,
-                           G_TYPE_INVALID);
-  dbus_g_proxy_add_signal (thumbnailer->thumbnailer_proxy, "Finished",
-                           G_TYPE_UINT, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal (thumbnailer->thumbnailer_proxy, "Ready",
-                           G_TYPE_UINT, G_TYPE_STRV, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal (thumbnailer->thumbnailer_proxy, "Started",
-                           G_TYPE_UINT, G_TYPE_INVALID);
-
-  dbus_g_proxy_connect_signal (thumbnailer->thumbnailer_proxy, "Error",
-                               G_CALLBACK (thunar_thumbnailer_thumbnailer_error),
-                               thumbnailer, NULL);
-  dbus_g_proxy_connect_signal (thumbnailer->thumbnailer_proxy, "Finished",
-                               G_CALLBACK (thunar_thumbnailer_thumbnailer_finished),
-                               thumbnailer, NULL);
-  dbus_g_proxy_connect_signal (thumbnailer->thumbnailer_proxy, "Ready",
-                               G_CALLBACK (thunar_thumbnailer_thumbnailer_ready),
-                               thumbnailer, NULL);
-}
-
-
-
 static gint
 thunar_thumbnailer_file_schemes_compare (gconstpointer a,
                                          gconstpointer b)
@@ -426,31 +539,39 @@ thunar_thumbnailer_file_sort_schemes (gpointer mime_type,
 
 
 static void
-thunar_thumbnailer_get_supported_types (ThunarThumbnailer *thumbnailer)
+thunar_thumbnailer_received_supported_types (ThunarThumbnailerDBus  *proxy,
+                                             GAsyncResult           *result,
+                                             ThunarThumbnailer      *thumbnailer)
 {
   guint       n;
   gchar     **schemes = NULL;
   gchar     **types = NULL;
   GPtrArray  *schemes_array;
+  GSList     *lp = NULL;
+  GError     *error = NULL;
 
   _thunar_return_if_fail (THUNAR_IS_THUMBNAILER (thumbnailer));
-  _thunar_return_if_fail (DBUS_IS_G_PROXY (thumbnailer->thumbnailer_proxy));
-  _thunar_return_if_fail (!_thumbnailer_trylock (thumbnailer));
+  _thunar_return_if_fail (THUNAR_IS_THUMBNAILER_DBUS (proxy));
 
-  /* leave if there already is a hash table */
-  if (thumbnailer->supported != NULL)
-    return;
+  _thumbnailer_lock (thumbnailer);
 
-  /* prepare table */
-  thumbnailer->supported = g_hash_table_new_full (g_str_hash, g_str_equal,
-                                                  g_free,
-                                                  (GDestroyNotify) g_ptr_array_unref);
 
-  /* request the supported types from the thumbnailer D-Bus service. We only do
-   * this once, so using a non-async call should be ok */
-  thunar_thumbnailer_proxy_get_supported (thumbnailer->thumbnailer_proxy,
-                                          &schemes, &types,
-                                          NULL);
+  if (!thunar_thumbnailer_dbus_call_get_supported_finish (proxy, &schemes, &types, result, &error))
+    {
+      g_slist_free_full (thumbnailer->jobs, (GDestroyNotify)thunar_thumbnailer_free_job);
+      thumbnailer->jobs = NULL;
+
+      g_printerr ("ThunarThumbnailer: Failed to retrieve supported types: %s\n", error->message);
+      g_clear_error (&error);
+
+      thumbnailer->proxy_state = THUNAR_THUMBNAILER_PROXY_FAILED;
+      g_object_unref (proxy);
+
+      _thumbnailer_unlock (thumbnailer);
+
+      g_object_unref (thumbnailer);
+      return;
+    }
 
   if (G_LIKELY (schemes != NULL && types != NULL))
     {
@@ -482,10 +603,112 @@ thunar_thumbnailer_get_supported_types (ThunarThumbnailer *thumbnailer)
       /* sort array to optimize for local files */
       g_hash_table_foreach (thumbnailer->supported, thunar_thumbnailer_file_sort_schemes, NULL);
     }
+
+  thumbnailer->proxy_state = THUNAR_THUMBNAILER_PROXY_AVAILABLE;
+  thumbnailer->thumbnailer_proxy = proxy;
+
+  /* now start delayed jobs */
+  for (lp = thumbnailer->jobs; lp; lp = lp->next)
+    {
+      if (!thunar_thumbnailer_begin_job (thumbnailer, lp->data))
+        {
+          thunar_thumbnailer_free_job (lp->data);
+          lp->data = NULL;
+        }
+    }
+  thumbnailer->jobs = g_slist_remove_all (thumbnailer->jobs, NULL);
+
+  g_clear_error (&error);
+
+  _thumbnailer_unlock (thumbnailer);
+
+  g_object_unref (thumbnailer);
+}
+
+
+
+static void
+thunar_thumbnailer_proxy_created (GObject       *object,
+                                  GAsyncResult  *result,
+                                  gpointer       userdata)
+{
+  ThunarThumbnailer     *thumbnailer = THUNAR_THUMBNAILER (userdata);
+  GError                *error = NULL;
+  ThunarThumbnailerDBus *proxy;
+
+  proxy = thunar_thumbnailer_dbus_proxy_new_finish (result, &error);
+
+  if (!proxy)
+    {
+      _thumbnailer_lock (thumbnailer);
+
+      thumbnailer->proxy_state = THUNAR_THUMBNAILER_PROXY_FAILED;
+      g_printerr ("ThunarThumbnailer: failed to create proxy: %s", error->message);
+      g_clear_error (&error);
+
+      g_slist_free_full (thumbnailer->jobs, (GDestroyNotify)thunar_thumbnailer_free_job);
+      thumbnailer->jobs = NULL;
+
+      _thumbnailer_unlock (thumbnailer);
+
+      g_object_unref (thumbnailer);
+
+      return;
+    }
+
+  /* setup signals */
+  g_signal_connect (proxy, "error",
+                    G_CALLBACK (thunar_thumbnailer_thumbnailer_error), thumbnailer);
+  g_signal_connect (proxy, "finished",
+                    G_CALLBACK (thunar_thumbnailer_thumbnailer_finished), thumbnailer);
+  g_signal_connect (proxy, "ready",
+                    G_CALLBACK (thunar_thumbnailer_thumbnailer_ready), thumbnailer);
+
+  /* begin retrieving supported file types */
+
+  _thumbnailer_lock (thumbnailer);
+
+  /* prepare table */
+  g_clear_pointer (&thumbnailer->supported, g_hash_table_unref);
+  thumbnailer->supported = g_hash_table_new_full (g_str_hash, g_str_equal,
+                                                  g_free,
+                                                  (GDestroyNotify) g_ptr_array_unref);
+
+  /* request the supported types from the thumbnailer D-Bus service. */
+  thunar_thumbnailer_dbus_call_get_supported (proxy, NULL,
+                                              (GAsyncReadyCallback)thunar_thumbnailer_received_supported_types,
+                                              thumbnailer);
+
+  _thumbnailer_unlock (thumbnailer);
+}
+
+
+
+static void
+thunar_thumbnailer_init_thumbnailer_proxy (ThunarThumbnailer *thumbnailer)
+{
+  GError *error = NULL;
+
+  _thumbnailer_lock (thumbnailer);
+
+  thumbnailer->thumbnailer_proxy = NULL;
+  thumbnailer->proxy_state = THUNAR_THUMBNAILER_PROXY_WAITING;
+
+  /* create the thumbnailer proxy */
+  thunar_thumbnailer_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
+                                             G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+                                             "org.freedesktop.thumbnails.Thumbnailer1",
+                                             "/org/freedesktop/thumbnails/Thumbnailer1",
+                                             NULL,
+                                             (GAsyncReadyCallback)thunar_thumbnailer_proxy_created,
+                                             thumbnailer);
+
+  _thumbnailer_unlock (thumbnailer);
 }
 
 
 
+/* NOTE: assumes the lock is being held by the caller*/
 static gboolean
 thunar_thumbnailer_file_is_supported (ThunarThumbnailer *thumbnailer,
                                       ThunarFile        *file)
@@ -498,9 +721,8 @@ thunar_thumbnailer_file_is_supported (ThunarThumbnailer *thumbnailer,
 
   _thunar_return_val_if_fail (THUNAR_IS_THUMBNAILER (thumbnailer), FALSE);
   _thunar_return_val_if_fail (THUNAR_IS_FILE (file), FALSE);
-  _thunar_return_val_if_fail (DBUS_IS_G_PROXY (thumbnailer->thumbnailer_proxy), FALSE);
+  _thunar_return_val_if_fail (THUNAR_IS_THUMBNAILER_DBUS (thumbnailer->thumbnailer_proxy), FALSE);
   _thunar_return_val_if_fail (thumbnailer->supported != NULL, FALSE);
-  _thunar_return_val_if_fail (!_thumbnailer_trylock (thumbnailer), FALSE);
 
   /* determine the content type of the passed file */
   content_type = thunar_file_get_content_type (file);
@@ -529,14 +751,14 @@ thunar_thumbnailer_file_is_supported (ThunarThumbnailer *thumbnailer,
 
 
 static void
-thunar_thumbnailer_thumbnailer_error (DBusGProxy        *proxy,
+thunar_thumbnailer_thumbnailer_error (GDBusProxy        *proxy,
                                       guint              handle,
                                       const gchar      **uris,
                                       gint               code,
                                       const gchar       *message,
                                       ThunarThumbnailer *thumbnailer)
 {
-  _thunar_return_if_fail (DBUS_IS_G_PROXY (proxy));
+  _thunar_return_if_fail (G_IS_DBUS_PROXY (proxy));
   _thunar_return_if_fail (THUNAR_IS_THUMBNAILER (thumbnailer));
 
   /* check if we have any ready URIs */
@@ -549,12 +771,12 @@ thunar_thumbnailer_thumbnailer_error (DBusGProxy        *proxy,
 
 
 static void
-thunar_thumbnailer_thumbnailer_ready (DBusGProxy        *proxy,
+thunar_thumbnailer_thumbnailer_ready (GDBusProxy        *proxy,
                                       guint32            handle,
                                       const gchar      **uris,
                                       ThunarThumbnailer *thumbnailer)
 {
-  _thunar_return_if_fail (DBUS_IS_G_PROXY (proxy));
+  _thunar_return_if_fail (G_IS_DBUS_PROXY (proxy));
   _thunar_return_if_fail (THUNAR_IS_THUMBNAILER (thumbnailer));
 
   thunar_thumbnailer_idle (thumbnailer,
@@ -566,16 +788,18 @@ thunar_thumbnailer_thumbnailer_ready (DBusGProxy        *proxy,
 
 
 static void
-thunar_thumbnailer_thumbnailer_finished (DBusGProxy        *proxy,
+thunar_thumbnailer_thumbnailer_finished (GDBusProxy        *proxy,
                                          guint              handle,
                                          ThunarThumbnailer *thumbnailer)
 {
   ThunarThumbnailerJob *job;
   GSList               *lp;
 
-  _thunar_return_if_fail (DBUS_IS_G_PROXY (proxy));
+  _thunar_return_if_fail (G_IS_DBUS_PROXY (proxy));
   _thunar_return_if_fail (THUNAR_IS_THUMBNAILER (thumbnailer));
 
+  _thumbnailer_lock (thumbnailer);
+
   for (lp = thumbnailer->jobs; lp != NULL; lp = lp->next)
     {
       job = lp->data;
@@ -589,98 +813,18 @@ thunar_thumbnailer_thumbnailer_finished (DBusGProxy        *proxy,
           g_signal_emit (G_OBJECT (thumbnailer), thumbnailer_signals[REQUEST_FINISHED], 0, job->request);
 
           /* remove job from the list */
-          _thumbnailer_lock (thumbnailer);
           thumbnailer->jobs = g_slist_delete_link (thumbnailer->jobs, lp);
-          _thumbnailer_unlock (thumbnailer);
 
-          g_slice_free (ThunarThumbnailerJob, job);
+          thunar_thumbnailer_free_job (job);
           break;
         }
     }
-}
-
-
-
-static void
-thunar_thumbnailer_queue_async_reply (DBusGProxy *proxy,
-                                      guint       handle,
-                                      GError     *error,
-                                      gpointer    user_data)
-{
-  ThunarThumbnailerJob *job = user_data;
-  ThunarThumbnailer    *thumbnailer = THUNAR_THUMBNAILER (job->thumbnailer);
-
-  _thunar_return_if_fail (DBUS_IS_G_PROXY (proxy));
-  _thunar_return_if_fail (job != NULL);
-  _thunar_return_if_fail (THUNAR_IS_THUMBNAILER (thumbnailer));
-
-  _thumbnailer_lock (thumbnailer);
-
-  /* the queue call is finished, we can forget about its proxy call */
-  job->handle_call = NULL;
-
-  if (job->cancelled)
-    {
-      /* job is cancelled while there was no handle jet, so dequeue it now */
-      thunar_thumbnailer_proxy_dequeue (proxy, handle, NULL);
-
-      /* cleanup */
-      thumbnailer->jobs = g_slist_remove (thumbnailer->jobs, job);
-      g_slice_free (ThunarThumbnailerJob, job);
-    }
-  else if (error == NULL)
-    {
-      /* store the handle returned by tumbler */
-      job->handle = handle;
-    }
 
   _thumbnailer_unlock (thumbnailer);
 }
 
 
 
-static guint
-thunar_thumbnailer_queue_async (ThunarThumbnailer *thumbnailer,
-                                gchar            **uris,
-                                const gchar      **mime_hints)
-{
-  ThunarThumbnailerJob *job;
-  guint                 request_no;
-
-  _thunar_return_val_if_fail (THUNAR_IS_THUMBNAILER (thumbnailer), 0);
-  _thunar_return_val_if_fail (uris != NULL, 0);
-  _thunar_return_val_if_fail (mime_hints != NULL, 0);
-  _thunar_return_val_if_fail (DBUS_IS_G_PROXY (thumbnailer->thumbnailer_proxy), 0);
-  _thunar_return_val_if_fail (!_thumbnailer_trylock (thumbnailer), 0);
-
-  /* compute the next request ID, making sure it's never 0 */
-  request_no = thumbnailer->last_request + 1;
-  request_no = MAX (request_no, 1);
-
-  /* remember the ID for the next request */
-  thumbnailer->last_request = request_no;
-
-  /* allocate a new struct to follow this job until finished */
-  job = g_slice_new0 (ThunarThumbnailerJob);
-  job->thumbnailer = thumbnailer;
-  job->request = request_no;
-
-  /* store the job */
-  thumbnailer->jobs = g_slist_prepend (thumbnailer->jobs, job);
-
-  /* queue thumbnails for the given URIs asynchronously */
-  job->handle_call = thunar_thumbnailer_proxy_queue_async (thumbnailer->thumbnailer_proxy,
-                                                           (const gchar **)uris, mime_hints,
-                                                           "normal", "foreground", 0,
-                                                           thunar_thumbnailer_queue_async_reply,
-                                                           job);
-
-  /* return the request ID used for this request */
-  return request_no;
-}
-
-
-
 static void
 thunar_thumbnailer_idle (ThunarThumbnailer          *thumbnailer,
                          guint                       handle,
@@ -695,6 +839,8 @@ thunar_thumbnailer_idle (ThunarThumbnailer          *thumbnailer,
   if (G_UNLIKELY (uris == NULL))
     return;
 
+  _thumbnailer_lock (thumbnailer);
+
   /* look for the job so we don't emit unknown handles, the reason
    * we do this is when you have multiple windows opened, you don't
    * want each window (because they all have a connection to the
@@ -715,9 +861,7 @@ thunar_thumbnailer_idle (ThunarThumbnailer          *thumbnailer,
           idle->uris = g_strdupv ((gchar **)uris);
 
           /* remember the idle struct because we might have to remove it in finalize() */
-          _thumbnailer_lock (thumbnailer);
           thumbnailer->idles = g_slist_prepend (thumbnailer->idles, idle);
-          _thumbnailer_unlock (thumbnailer);
 
           /* call the idle function when we have the time */
           idle->id = g_idle_add_full (G_PRIORITY_LOW,
@@ -727,6 +871,8 @@ thunar_thumbnailer_idle (ThunarThumbnailer          *thumbnailer,
           break;
         }
     }
+
+  _thumbnailer_unlock (thumbnailer);
 }
 
 
@@ -802,7 +948,6 @@ thunar_thumbnailer_idle_free (gpointer data)
   /* free the struct */
   g_slice_free (ThunarThumbnailerIdle, idle);
 }
-#endif /* HAVE_DBUS */
 
 
 
@@ -827,12 +972,8 @@ thunar_thumbnailer_get (void)
       thumbnailer = g_object_new (THUNAR_TYPE_THUMBNAILER, NULL);
       g_object_add_weak_pointer (G_OBJECT (thumbnailer), (gpointer) &thumbnailer);
     }
-  else
-    {
-      g_object_ref (G_OBJECT (thumbnailer));
-    }
 
-  return thumbnailer;
+  return g_object_ref_sink (thumbnailer);
 }
 
 
@@ -865,126 +1006,35 @@ thunar_thumbnailer_queue_files (ThunarThumbnailer *thumbnailer,
                                 guint             *request)
 {
   gboolean               success = FALSE;
-#ifdef HAVE_DBUS
-  const gchar          **mime_hints;
-  gchar                **uris;
-  GList                 *lp;
-  GList                 *supported_files = NULL;
-  guint                  n;
-  guint                  n_items = 0;
-  ThunarFileThumbState   thumb_state;
-  const gchar           *thumbnail_path;
-#endif
+  ThunarThumbnailerJob  *job = NULL;
 
   _thunar_return_val_if_fail (THUNAR_IS_THUMBNAILER (thumbnailer), FALSE);
   _thunar_return_val_if_fail (files != NULL, FALSE);
 
-#ifdef HAVE_DBUS
   /* acquire the thumbnailer lock */
   _thumbnailer_lock (thumbnailer);
 
-  if (thumbnailer->thumbnailer_proxy == NULL)
+  /* allocate a job */
+  job = g_slice_new0 (ThunarThumbnailerJob);
+  job->thumbnailer = thumbnailer;
+  job->files = g_list_copy_deep (files, (GCopyFunc)g_object_ref, NULL);
+  job->lazy_checks = lazy_checks ? 1 : 0;
+
+  success = thunar_thumbnailer_begin_job (thumbnailer, job);
+  if (success)
     {
-      /* release the lock and abort */
-      _thumbnailer_unlock (thumbnailer);
-      return FALSE;
+      thumbnailer->jobs = g_slist_prepend (thumbnailer->jobs, job);
+      if (*request)
+        *request = job->request;
     }
-
-  /* make sure there is a hash table with supported files */
-  thunar_thumbnailer_get_supported_types (thumbnailer);
-
-  /* collect all supported files from the list that are neither in the
-   * about to be queued (wait queue), nor already queued, nor already
-   * processed (and awaiting to be refreshed) */
-  for (lp = files; lp != NULL; lp = lp->next)
+  else
     {
-      /* the icon factory only loads icons for regular files */
-      if (!thunar_file_is_regular (lp->data))
-        {
-          thunar_file_set_thumb_state (lp->data, THUNAR_FILE_THUMB_STATE_NONE);
-          continue;
-        }
-
-      /* get the current thumb state */
-      thumb_state = thunar_file_get_thumb_state (lp->data);
-
-      if (lazy_checks)
-        {
-          /* in lazy mode, don't both for files that have already
-           * been loaded or are not supported */
-          if (thumb_state == THUNAR_FILE_THUMB_STATE_NONE
-              || thumb_state == THUNAR_FILE_THUMB_STATE_READY)
-            continue;
-        }
-
-      /* check if the file is supported, assume it is when the state was ready previously */
-      if (thumb_state == THUNAR_FILE_THUMB_STATE_READY
-          || thunar_thumbnailer_file_is_supported (thumbnailer, lp->data))
-        {
-          supported_files = g_list_prepend (supported_files, lp->data);
-          n_items++;
-        }
-      else
-        {
-          /* still a regular file, but the type is now known to tumbler but
-           * maybe the application created a thumbnail */
-          thumbnail_path = thunar_file_get_thumbnail_path (lp->data);
-
-          /* test if a thumbnail can be found */
-          if (thumbnail_path != NULL && g_file_test (thumbnail_path, G_FILE_TEST_EXISTS))
-            thunar_file_set_thumb_state (lp->data, THUNAR_FILE_THUMB_STATE_READY);
-          else
-            thunar_file_set_thumb_state (lp->data, THUNAR_FILE_THUMB_STATE_NONE);
-        }
+      thunar_thumbnailer_free_job (job);
     }
 
-  /* release the thumbnailer lock */
+  /* release the lock */
   _thumbnailer_unlock (thumbnailer);
 
-  /* check if we have any supported files */
-  if (n_items > 0)
-    {
-      /* allocate arrays for URIs and mime hints */
-      uris = g_new0 (gchar *, n_items + 1);
-      mime_hints = g_new0 (const gchar *, n_items + 1);
-
-      /* fill URI and MIME hint arrays with items from the wait queue */
-      for (lp = supported_files, n = 0; lp != NULL; lp = lp->next, ++n)
-        {
-          /* set the thumbnail state to loading */
-          thunar_file_set_thumb_state (lp->data, THUNAR_FILE_THUMB_STATE_LOADING);
-
-          /* save URI and MIME hint in the arrays */
-          uris[n] = thunar_file_dup_uri (lp->data);
-          mime_hints[n] = thunar_file_get_content_type (lp->data);
-        }
-
-      /* NULL-terminate both arrays */
-      uris[n] = NULL;
-      mime_hints[n] = NULL;
-
-      _thumbnailer_lock (thumbnailer);
-
-      /* queue a thumbnail request for the URIs from the wait queue */
-      if (request != NULL)
-        *request = thunar_thumbnailer_queue_async (thumbnailer, uris, mime_hints);
-      else
-        thunar_thumbnailer_queue_async (thumbnailer, uris, mime_hints);
-
-      _thumbnailer_unlock (thumbnailer);
-
-      /* free mime hints array */
-      g_free (mime_hints);
-      g_strfreev (uris);
-
-      /* free the list of supported files */
-      g_list_free (supported_files);
-
-      /* we assume success if we've come so far */
-      success = TRUE;
-    }
-#endif /* HAVE_DBUS */
-
   return success;
 }
 
@@ -994,14 +1044,11 @@ void
 thunar_thumbnailer_dequeue (ThunarThumbnailer *thumbnailer,
                             guint              request)
 {
-#ifdef HAVE_DBUS
   ThunarThumbnailerJob *job;
   GSList               *lp;
-#endif
 
   _thunar_return_if_fail (THUNAR_IS_THUMBNAILER (thumbnailer));
 
-#ifdef HAVE_DBUS
   /* acquire the thumbnailer lock */
   _thumbnailer_lock (thumbnailer);
 
@@ -1017,13 +1064,10 @@ thunar_thumbnailer_dequeue (ThunarThumbnailer *thumbnailer,
 
           if (job->handle != 0)
             {
-              /* dequeue the tumbler request */
-              if (thumbnailer->thumbnailer_proxy != NULL)
-                thunar_thumbnailer_proxy_dequeue (thumbnailer->thumbnailer_proxy, job->handle, NULL);
-
               /* remove job */
               thumbnailer->jobs = g_slist_delete_link (thumbnailer->jobs, lp);
-              g_slice_free (ThunarThumbnailerJob, job);
+
+              thunar_thumbnailer_free_job (job);
             }
 
           break;
@@ -1032,5 +1076,4 @@ thunar_thumbnailer_dequeue (ThunarThumbnailer *thumbnailer,
 
   /* release the thumbnailer lock */
   _thumbnailer_unlock (thumbnailer);
-#endif
 }

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


More information about the Xfce4-commits mailing list