[nautilus/wip/muktupavels/delete: 3/4] dbus-manager: add and implement FileOperations2 interface



commit 23644d17ca3ce88334191b4cd309b7aa91373433
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Thu Dec 19 00:10:18 2019 +0200

    dbus-manager: add and implement FileOperations2 interface
    
    https://gitlab.gnome.org/GNOME/nautilus/merge_requests/504

 data/dbus-interfaces2.xml   |  60 +++++++
 src/meson.build             |   8 +
 src/nautilus-dbus-manager.c | 377 ++++++++++++++++++++++++++++++++++++++++----
 3 files changed, 412 insertions(+), 33 deletions(-)
---
diff --git a/data/dbus-interfaces2.xml b/data/dbus-interfaces2.xml
new file mode 100644
index 000000000..2b09c4ece
--- /dev/null
+++ b/data/dbus-interfaces2.xml
@@ -0,0 +1,60 @@
+<!DOCTYPE node PUBLIC
+"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd";>
+
+<!--
+ Copyright (C) 2011 Red Hat, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General
+ Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
+
+ Author: Alexander Larsson <alexl redhat com>
+-->
+
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd";>
+  <interface name='org.gnome.Nautilus.FileOperations2'>
+    <method name='CopyURIs'>
+      <arg type='as' name='SourceFilesURIList' direction='in'/>
+      <arg type='s' name='DestinationDirectoryURI' direction='in'/>
+      <arg type='a{sv}' name='Parameters' direction='in'/>
+    </method>
+    <method name='MoveURIs'>
+      <arg type='as' name='SourceFilesURIList' direction='in'/>
+      <arg type='s' name='DestinationDirectoryURI' direction='in'/>
+      <arg type='a{sv}' name='Parameters' direction='in'/>
+    </method>
+    <method name='EmptyTrash'>
+      <arg type='a{sv}' name='Parameters' direction='in'/>
+    </method>
+    <method name='TrashFiles'>
+      <arg type='as' name='URIs' direction='in'/>
+      <arg type='a{sv}' name='Parameters' direction='in'/>
+    </method>
+    <method name='CreateFolder'>
+      <arg type='s' name='URI' direction='in'/>
+      <arg type='a{sv}' name='Parameters' direction='in'/>
+    </method>
+    <method name='RenameFile'>
+      <arg type='s' name='URI' direction='in'/>
+      <arg type='s' name='NewName' direction='in'/>
+      <arg type='a{sv}' name='Parameters' direction='in'/>
+    </method>
+    <method name='Undo'>
+      <arg type='a{sv}' name='Parameters' direction='in'/>
+    </method>
+    <method name='Redo'>
+      <arg type='a{sv}' name='Parameters' direction='in'/>
+    </method>
+    <property name="UndoStatus" type="i" access="read"/>
+  </interface>
+</node>
diff --git a/src/meson.build b/src/meson.build
index 86d062161..1fb7d2dde 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -37,6 +37,14 @@ libnautilus_sources = [
     interface_prefix: 'org.gnome.Nautilus',
     namespace: 'NautilusDBus'
   ),
+  gnome.gdbus_codegen(
+    'nautilus-generated2',
+    join_paths(
+      meson.source_root(), 'data', 'dbus-interfaces2.xml'
+    ),
+    interface_prefix: 'org.gnome.Nautilus',
+    namespace: 'NautilusDBus'
+  ),
   gnome.gdbus_codegen(
     'nautilus-shell-search-provider-generated',
     join_paths(
diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c
index e0075d94b..eb43c1b8a 100644
--- a/src/nautilus-dbus-manager.c
+++ b/src/nautilus-dbus-manager.c
@@ -24,6 +24,7 @@
 
 #include "nautilus-dbus-manager.h"
 #include "nautilus-generated.h"
+#include "nautilus-generated2.h"
 
 #include "nautilus-file-operations.h"
 #include "nautilus-file-undo-manager.h"
@@ -37,6 +38,7 @@ struct _NautilusDBusManager
     GObject parent;
 
     NautilusDBusFileOperations *file_operations;
+    NautilusDBusFileOperations2 *file_operations2;
 };
 
 G_DEFINE_TYPE (NautilusDBusManager, nautilus_dbus_manager, G_TYPE_OBJECT);
@@ -52,6 +54,12 @@ nautilus_dbus_manager_dispose (GObject *object)
         self->file_operations = NULL;
     }
 
+    if (self->file_operations2)
+    {
+        g_object_unref (self->file_operations2);
+        self->file_operations2 = NULL;
+    }
+
     G_OBJECT_CLASS (nautilus_dbus_manager_parent_class)->dispose (object);
 }
 
@@ -67,9 +75,9 @@ undo_redo_on_finished (gpointer user_data)
     g_free (handler_id);
 }
 
-static gboolean
-handle_redo (NautilusDBusFileOperations *object,
-             GDBusMethodInvocation      *invocation)
+static void
+redo (const char *parent_handle,
+      guint32     timestamp)
 {
     NautilusFileUndoManager *undo_manager = NULL;
     gint *handler_id = g_new0(int, 1);
@@ -80,15 +88,45 @@ handle_redo (NautilusDBusFileOperations *object,
     *handler_id = g_signal_connect_swapped (undo_manager, "undo-changed",
                                             G_CALLBACK (undo_redo_on_finished),
                                             handler_id);
-    nautilus_file_undo_manager_redo (NULL, NULL, 0);
+    nautilus_file_undo_manager_redo (NULL, parent_handle, timestamp);
+}
+
+static gboolean
+handle_redo (NautilusDBusFileOperations *object,
+             GDBusMethodInvocation      *invocation)
+{
+    redo (NULL, 0);
 
     nautilus_dbus_file_operations_complete_redo (object, invocation);
     return TRUE; /* invocation was handled */
 }
 
 static gboolean
-handle_undo (NautilusDBusFileOperations *object,
-             GDBusMethodInvocation      *invocation)
+handle_redo2 (NautilusDBusFileOperations2 *object,
+              GDBusMethodInvocation       *invocation,
+              GVariant                    *parameters)
+{
+    GVariantDict dict;
+    const char *parent_handle;
+    guint32 timestamp;
+
+    g_variant_dict_init (&dict, parameters);
+
+    if (!g_variant_dict_lookup (&dict, "parent-handle", "&s", &parent_handle))
+        parent_handle = NULL;
+
+    if (!g_variant_dict_lookup (&dict, "timestamp", "u", &timestamp))
+        timestamp = 0;
+
+    redo (parent_handle, timestamp);
+
+    nautilus_dbus_file_operations2_complete_redo (object, invocation);
+    return TRUE; /* invocation was handled */
+}
+
+static void
+undo (const char *parent_handle,
+      guint32     timestamp)
 {
     NautilusFileUndoManager *undo_manager = NULL;
     gint *handler_id = g_new0(int, 1);
@@ -99,12 +137,42 @@ handle_undo (NautilusDBusFileOperations *object,
     *handler_id = g_signal_connect_swapped (undo_manager, "undo-changed",
                                             G_CALLBACK (undo_redo_on_finished),
                                             handler_id);
-    nautilus_file_undo_manager_undo (NULL, NULL, 0);
+    nautilus_file_undo_manager_undo (NULL, parent_handle, timestamp);
+}
+
+static gboolean
+handle_undo (NautilusDBusFileOperations *object,
+             GDBusMethodInvocation      *invocation)
+{
+    undo (NULL, 0);
 
     nautilus_dbus_file_operations_complete_undo (object, invocation);
     return TRUE; /* invocation was handled */
 }
 
+static gboolean
+handle_undo2 (NautilusDBusFileOperations2 *object,
+              GDBusMethodInvocation       *invocation,
+              GVariant                    *parameters)
+{
+    GVariantDict dict;
+    const char *parent_handle;
+    guint32 timestamp;
+
+    g_variant_dict_init (&dict, parameters);
+
+    if (!g_variant_dict_lookup (&dict, "parent-handle", "&s", &parent_handle))
+        parent_handle = NULL;
+
+    if (!g_variant_dict_lookup (&dict, "timestamp", "u", &timestamp))
+        timestamp = 0;
+
+    undo (parent_handle, timestamp);
+
+    nautilus_dbus_file_operations2_complete_undo (object, invocation);
+    return TRUE; /* invocation was handled */
+}
+
 static void
 create_folder_on_finished (GFile    *new_file,
                            gboolean  success,
@@ -113,10 +181,10 @@ create_folder_on_finished (GFile    *new_file,
     g_application_release (g_application_get_default ());
 }
 
-static gboolean
-handle_create_folder (NautilusDBusFileOperations *object,
-                      GDBusMethodInvocation      *invocation,
-                      const gchar                *uri)
+static void
+create_folder (const char *uri,
+               const char *parent_handle,
+               guint32     timestamp)
 {
     g_autoptr (GFile) file = NULL;
     g_autoptr (GFile) parent_file = NULL;
@@ -129,14 +197,46 @@ handle_create_folder (NautilusDBusFileOperations *object,
     parent_file_uri = g_file_get_uri (parent_file);
 
     g_application_hold (g_application_get_default ());
-    nautilus_file_operations_new_folder (NULL, NULL, 0,
+    nautilus_file_operations_new_folder (NULL, parent_handle, timestamp,
                                          parent_file_uri, basename,
                                          create_folder_on_finished, NULL);
+}
+
+static gboolean
+handle_create_folder (NautilusDBusFileOperations *object,
+                      GDBusMethodInvocation      *invocation,
+                      const gchar                *uri)
+{
+    create_folder (uri, NULL, 0);
 
     nautilus_dbus_file_operations_complete_create_folder (object, invocation);
     return TRUE; /* invocation was handled */
 }
 
+static gboolean
+handle_create_folder2 (NautilusDBusFileOperations2 *object,
+                       GDBusMethodInvocation       *invocation,
+                       const gchar                 *uri,
+                       GVariant                    *parameters)
+{
+    GVariantDict dict;
+    const char *parent_handle;
+    guint32 timestamp;
+
+    g_variant_dict_init (&dict, parameters);
+
+    if (!g_variant_dict_lookup (&dict, "parent-handle", "&s", &parent_handle))
+        parent_handle = NULL;
+
+    if (!g_variant_dict_lookup (&dict, "timestamp", "u", &timestamp))
+        timestamp = 0;
+
+    create_folder (uri, parent_handle, timestamp);
+
+    nautilus_dbus_file_operations2_complete_create_folder (object, invocation);
+    return TRUE; /* invocation was handled */
+}
+
 static void
 copy_move_on_finished (GHashTable *debutting_uris,
                        gboolean    success,
@@ -145,11 +245,11 @@ copy_move_on_finished (GHashTable *debutting_uris,
     g_application_release (g_application_get_default ());
 }
 
-static gboolean
-handle_copy_uris (NautilusDBusFileOperations  *object,
-                  GDBusMethodInvocation       *invocation,
-                  const gchar                **sources,
-                  const gchar                 *destination)
+static void
+copy_uris (const char **sources,
+           const char  *destination,
+           const char  *parent_handle,
+           guint32      timestamp)
 {
     GList *source_files = NULL;
     gint idx;
@@ -165,15 +265,50 @@ handle_copy_uris (NautilusDBusFileOperations  *object,
                                         copy_move_on_finished, NULL);
 
     g_list_free_full (source_files, g_free);
-    nautilus_dbus_file_operations_complete_copy_uris (object, invocation);
-    return TRUE; /* invocation was handled */
 }
 
 static gboolean
-handle_move_uris (NautilusDBusFileOperations  *object,
+handle_copy_uris (NautilusDBusFileOperations  *object,
                   GDBusMethodInvocation       *invocation,
                   const gchar                **sources,
                   const gchar                 *destination)
+{
+    copy_uris (sources, destination, NULL, 0);
+
+    nautilus_dbus_file_operations_complete_copy_uris (object, invocation);
+    return TRUE; /* invocation was handled */
+}
+
+static gboolean
+handle_copy_uris2 (NautilusDBusFileOperations2  *object,
+                   GDBusMethodInvocation        *invocation,
+                   const gchar                 **sources,
+                   const gchar                  *destination,
+                   GVariant                     *parameters)
+{
+    GVariantDict dict;
+    const char *parent_handle;
+    guint32 timestamp;
+
+    g_variant_dict_init (&dict, parameters);
+
+    if (!g_variant_dict_lookup (&dict, "parent-handle", "&s", &parent_handle))
+        parent_handle = NULL;
+
+    if (!g_variant_dict_lookup (&dict, "timestamp", "u", &timestamp))
+        timestamp = 0;
+
+    copy_uris (sources, destination, parent_handle, timestamp);
+
+    nautilus_dbus_file_operations2_complete_copy_uris (object, invocation);
+    return TRUE; /* invocation was handled */
+}
+
+static void
+move_uris (const char **sources,
+           const char  *destination,
+           const char  *parent_handle,
+           guint32      timestamp)
 {
     GList *source_files = NULL;
     gint idx;
@@ -189,21 +324,86 @@ handle_move_uris (NautilusDBusFileOperations  *object,
                                         copy_move_on_finished, NULL);
 
     g_list_free_full (source_files, g_free);
+}
+
+static gboolean
+handle_move_uris (NautilusDBusFileOperations  *object,
+                  GDBusMethodInvocation       *invocation,
+                  const gchar                **sources,
+                  const gchar                 *destination)
+{
+    move_uris (sources, destination, NULL, 0);
+
     nautilus_dbus_file_operations_complete_copy_uris (object, invocation);
     return TRUE; /* invocation was handled */
 }
 
+static gboolean
+handle_move_uris2 (NautilusDBusFileOperations2  *object,
+                   GDBusMethodInvocation        *invocation,
+                   const gchar                 **sources,
+                   const gchar                  *destination,
+                   GVariant                     *parameters)
+{
+    GVariantDict dict;
+    const char *parent_handle;
+    guint32 timestamp;
+
+    g_variant_dict_init (&dict, parameters);
+
+    if (!g_variant_dict_lookup (&dict, "parent-handle", "&s", &parent_handle))
+        parent_handle = NULL;
+
+    if (!g_variant_dict_lookup (&dict, "timestamp", "u", &timestamp))
+        timestamp = 0;
+
+    move_uris (sources, destination, parent_handle, timestamp);
+
+    nautilus_dbus_file_operations2_complete_copy_uris (object, invocation);
+    return TRUE; /* invocation was handled */
+}
+
 /* FIXME: Needs a callback for maintaining alive the application */
+static void
+empty_trash (const char *parent_handle,
+             guint32     timestamp)
+{
+    nautilus_file_operations_empty_trash (NULL, NULL, 0);
+}
+
 static gboolean
 handle_empty_trash (NautilusDBusFileOperations *object,
                     GDBusMethodInvocation      *invocation)
 {
-    nautilus_file_operations_empty_trash (NULL, NULL, 0);
+    empty_trash (NULL, 0);
 
     nautilus_dbus_file_operations_complete_empty_trash (object, invocation);
     return TRUE; /* invocation was handled */
 }
 
+static gboolean
+handle_empty_trash2 (NautilusDBusFileOperations2 *object,
+                     GDBusMethodInvocation       *invocation,
+                     GVariant                    *parameters)
+{
+    GVariantDict dict;
+    const char *parent_handle;
+    guint32 timestamp;
+
+    g_variant_dict_init (&dict, parameters);
+
+    if (!g_variant_dict_lookup (&dict, "parent-handle", "&s", &parent_handle))
+        parent_handle = NULL;
+
+    if (!g_variant_dict_lookup (&dict, "timestamp", "u", &timestamp))
+        timestamp = 0;
+
+    empty_trash (parent_handle, timestamp);
+
+    nautilus_dbus_file_operations2_complete_empty_trash (object, invocation);
+    return TRUE; /* invocation was handled */
+}
+
 static void
 trash_on_finished (GHashTable *debutting_uris,
                    gboolean    user_cancel,
@@ -212,10 +412,10 @@ trash_on_finished (GHashTable *debutting_uris,
     g_application_release (g_application_get_default ());
 }
 
-static gboolean
-handle_trash_files (NautilusDBusFileOperations  *object,
-                    GDBusMethodInvocation       *invocation,
-                    const gchar                **sources)
+static void
+trash_files (const char **sources,
+             const char  *parent_handle,
+             guint32      timestamp)
 {
     g_autolist (GFile) source_files = NULL;
     gint idx;
@@ -227,13 +427,46 @@ handle_trash_files (NautilusDBusFileOperations  *object,
     }
 
     g_application_hold (g_application_get_default ());
-    nautilus_file_operations_trash_or_delete_async (source_files, NULL, NULL, 0,
+    nautilus_file_operations_trash_or_delete_async (source_files, NULL,
+                                                    parent_handle, timestamp,
                                                     trash_on_finished, NULL);
+}
+
+static gboolean
+handle_trash_files (NautilusDBusFileOperations  *object,
+                    GDBusMethodInvocation       *invocation,
+                    const gchar                **sources)
+{
+    trash_files (sources, NULL, 0);
 
     nautilus_dbus_file_operations_complete_trash_files (object, invocation);
     return TRUE; /* invocation was handled */
 }
 
+static gboolean
+handle_trash_files2 (NautilusDBusFileOperations2  *object,
+                     GDBusMethodInvocation        *invocation,
+                     const gchar                 **sources,
+                     GVariant                     *parameters)
+{
+    GVariantDict dict;
+    const char *parent_handle;
+    guint32 timestamp;
+
+    g_variant_dict_init (&dict, parameters);
+
+    if (!g_variant_dict_lookup (&dict, "parent-handle", "&s", &parent_handle))
+        parent_handle = NULL;
+
+    if (!g_variant_dict_lookup (&dict, "timestamp", "u", &timestamp))
+        timestamp = 0;
+
+    trash_files (sources, parent_handle, timestamp);
+
+    nautilus_dbus_file_operations2_complete_trash_files (object, invocation);
+    return TRUE; /* invocation was handled */
+}
+
 static void
 rename_file_on_finished (NautilusFile *file,
                          GFile        *result_location,
@@ -243,11 +476,11 @@ rename_file_on_finished (NautilusFile *file,
     g_application_release (g_application_get_default ());
 }
 
-static gboolean
-handle_rename_file (NautilusDBusFileOperations *object,
-                    GDBusMethodInvocation      *invocation,
-                    const gchar                *uri,
-                    const gchar                *new_name)
+static void
+rename_file (const gchar *uri,
+             const gchar *new_name,
+             const char  *parent_handle,
+             guint32      timestamp)
 {
     NautilusFile *file = NULL;
 
@@ -256,12 +489,46 @@ handle_rename_file (NautilusDBusFileOperations *object,
     g_application_hold (g_application_get_default ());
     nautilus_file_rename (file, new_name,
                           rename_file_on_finished, NULL);
+}
+
+static gboolean
+handle_rename_file (NautilusDBusFileOperations *object,
+                    GDBusMethodInvocation      *invocation,
+                    const gchar                *uri,
+                    const gchar                *new_name)
+{
+    rename_file (uri, new_name, NULL, 0);
 
     nautilus_dbus_file_operations_complete_rename_file (object, invocation);
 
     return TRUE; /* invocation was handled */
 }
 
+static gboolean
+handle_rename_file2 (NautilusDBusFileOperations2 *object,
+                     GDBusMethodInvocation       *invocation,
+                     const gchar                 *uri,
+                     const gchar                 *new_name,
+                     GVariant                    *parameters)
+{
+    GVariantDict dict;
+    const char *parent_handle;
+    guint32 timestamp;
+
+    g_variant_dict_init (&dict, parameters);
+
+    if (!g_variant_dict_lookup (&dict, "parent-handle", "&s", &parent_handle))
+        parent_handle = NULL;
+
+    if (!g_variant_dict_lookup (&dict, "timestamp", "u", &timestamp))
+        timestamp = 0;
+
+    rename_file (uri, new_name, parent_handle, timestamp);
+
+    nautilus_dbus_file_operations2_complete_rename_file (object, invocation);
+
+    return TRUE; /* invocation was handled */
+}
 
 static void
 undo_manager_changed (NautilusDBusManager *self)
@@ -271,45 +538,80 @@ undo_manager_changed (NautilusDBusManager *self)
     undo_state = nautilus_file_undo_manager_get_state ();
     nautilus_dbus_file_operations_set_undo_status (self->file_operations,
                                                    undo_state);
+    nautilus_dbus_file_operations2_set_undo_status (self->file_operations2,
+                                                    undo_state);
 }
 
 static void
 nautilus_dbus_manager_init (NautilusDBusManager *self)
 {
     self->file_operations = nautilus_dbus_file_operations_skeleton_new ();
+    self->file_operations2 = nautilus_dbus_file_operations2_skeleton_new ();
 
     g_signal_connect (self->file_operations,
                       "handle-copy-uris",
                       G_CALLBACK (handle_copy_uris),
                       self);
+    g_signal_connect (self->file_operations2,
+                      "handle-copy-uris",
+                      G_CALLBACK (handle_copy_uris2),
+                      self);
     g_signal_connect (self->file_operations,
                       "handle-move-uris",
                       G_CALLBACK (handle_move_uris),
                       self);
+    g_signal_connect (self->file_operations2,
+                      "handle-move-uris",
+                      G_CALLBACK (handle_move_uris2),
+                      self);
     g_signal_connect (self->file_operations,
                       "handle-empty-trash",
                       G_CALLBACK (handle_empty_trash),
                       self);
+    g_signal_connect (self->file_operations2,
+                      "handle-empty-trash",
+                      G_CALLBACK (handle_empty_trash2),
+                      self);
     g_signal_connect (self->file_operations,
                       "handle-trash-files",
                       G_CALLBACK (handle_trash_files),
                       self);
+    g_signal_connect (self->file_operations2,
+                      "handle-trash-files",
+                      G_CALLBACK (handle_trash_files2),
+                      self);
     g_signal_connect (self->file_operations,
                       "handle-create-folder",
                       G_CALLBACK (handle_create_folder),
                       self);
+    g_signal_connect (self->file_operations2,
+                      "handle-create-folder",
+                      G_CALLBACK (handle_create_folder2),
+                      self);
     g_signal_connect (self->file_operations,
                       "handle-rename-file",
                       G_CALLBACK (handle_rename_file),
                       self);
+    g_signal_connect (self->file_operations2,
+                      "handle-rename-file",
+                      G_CALLBACK (handle_rename_file2),
+                      self);
     g_signal_connect (self->file_operations,
                       "handle-undo",
                       G_CALLBACK (handle_undo),
                       self);
+    g_signal_connect (self->file_operations2,
+                      "handle-undo",
+                      G_CALLBACK (handle_undo2),
+                      self);
     g_signal_connect (self->file_operations,
                       "handle-redo",
                       G_CALLBACK (handle_redo),
                       self);
+    g_signal_connect (self->file_operations2,
+                      "handle-redo",
+                      G_CALLBACK (handle_redo2),
+                      self);
 }
 
 static void
@@ -331,10 +633,18 @@ nautilus_dbus_manager_register (NautilusDBusManager  *self,
                                 GDBusConnection      *connection,
                                 GError              **error)
 {
+    gboolean succes1;
+    gboolean succes2;
     gboolean succes;
 
-    succes = g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->file_operations),
-                                               connection, "/org/gnome/Nautilus" PROFILE, error);
+    succes1 = g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->file_operations),
+                                                connection, "/org/gnome/Nautilus" PROFILE, error);
+
+    succes2 = g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (self->file_operations2),
+                                                connection, "/org/gnome/Nautilus" PROFILE, error);
+
+    succes = succes1 && succes2;
+
     if (succes)
     {
         g_signal_connect_object (nautilus_file_undo_manager_get (),
@@ -353,6 +663,7 @@ void
 nautilus_dbus_manager_unregister (NautilusDBusManager *self)
 {
     g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->file_operations));
+    g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->file_operations2));
 
     g_signal_handlers_disconnect_by_data (nautilus_file_undo_manager_get (), self);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]