summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2020-01-31 00:01:25 +0200
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2020-04-06 21:19:15 +0300
commit1a26621dbdfc783e5765967fc1a00fc0242e5e99 (patch)
tree38fc11764ceaa423f3e16f5bc8b53b6aa38d1a35
parentdce530aa878478be05de4c716563ef98ed524384 (diff)
downloadnautilus-1a26621dbdfc783e5765967fc1a00fc0242e5e99.tar.gz
dbus-manager: add DeleteURIs method
Add DeleteURIs method to make it possible to permanently delete files avoiding trash. https://gitlab.gnome.org/GNOME/nautilus/merge_requests/504
-rw-r--r--data/dbus-interfaces2.xml4
-rw-r--r--src/nautilus-dbus-manager.c47
2 files changed, 51 insertions, 0 deletions
diff --git a/data/dbus-interfaces2.xml b/data/dbus-interfaces2.xml
index 44cf07bb0..c375b7e75 100644
--- a/data/dbus-interfaces2.xml
+++ b/data/dbus-interfaces2.xml
@@ -56,6 +56,10 @@
<arg type='as' name='uris' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
+ <method name='DeleteURIs'>
+ <arg type='as' name='uris' direction='in'/>
+ <arg type='a{sv}' name='platform_data' direction='in'/>
+ </method>
<method name='CreateFolder'>
<arg type='s' name='uri' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
diff --git a/src/nautilus-dbus-manager.c b/src/nautilus-dbus-manager.c
index 7dd9a1a7f..bb4d13963 100644
--- a/src/nautilus-dbus-manager.c
+++ b/src/nautilus-dbus-manager.c
@@ -405,6 +405,49 @@ handle_trash_uris2 (NautilusDBusFileOperations2 *object,
}
static void
+delete_on_finished (GHashTable *debutting_uris,
+ gboolean user_cancel,
+ gpointer callback_data)
+{
+ g_application_release (g_application_get_default ());
+}
+
+static void
+handle_delete_uris_internal (const char **uris,
+ NautilusFileOperationsDBusData *dbus_data)
+{
+ g_autolist (GFile) source_files = NULL;
+ gint idx;
+
+ for (idx = 0; uris[idx] != NULL; idx++)
+ {
+ source_files = g_list_prepend (source_files,
+ g_file_new_for_uri (uris[idx]));
+ }
+
+ g_application_hold (g_application_get_default ());
+ nautilus_file_operations_delete_async (source_files, NULL,
+ dbus_data,
+ delete_on_finished, NULL);
+}
+
+static gboolean
+handle_delete_uris2 (NautilusDBusFileOperations2 *object,
+ GDBusMethodInvocation *invocation,
+ const gchar **uris,
+ GVariant *platform_data)
+{
+ g_autoptr (NautilusFileOperationsDBusData) dbus_data = NULL;
+
+ dbus_data = nautilus_file_operations_dbus_data_new (platform_data);
+
+ handle_delete_uris_internal (uris, dbus_data);
+
+ nautilus_dbus_file_operations2_complete_delete_uris (object, invocation);
+ return TRUE; /* invocation was handled */
+}
+
+static void
rename_file_on_finished (NautilusFile *file,
GFile *result_location,
GError *error,
@@ -508,6 +551,10 @@ nautilus_dbus_manager_init (NautilusDBusManager *self)
"handle-trash-uris",
G_CALLBACK (handle_trash_uris2),
self);
+ g_signal_connect (self->file_operations2,
+ "handle-delete-uris",
+ G_CALLBACK (handle_delete_uris2),
+ self);
g_signal_connect (self->file_operations,
"handle-create-folder",
G_CALLBACK (handle_create_folder),