diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2020-01-31 00:01:25 +0200 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2020-04-06 21:19:15 +0300 |
commit | 1a26621dbdfc783e5765967fc1a00fc0242e5e99 (patch) | |
tree | 38fc11764ceaa423f3e16f5bc8b53b6aa38d1a35 | |
parent | dce530aa878478be05de4c716563ef98ed524384 (diff) | |
download | nautilus-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.xml | 4 | ||||
-rw-r--r-- | src/nautilus-dbus-manager.c | 47 |
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), |