[nautilus] sidebar: Use dbus-launcher to open gnome disks



commit 12be10d3313c887081d19548aa7d927ac0821aac
Author: Corey Berla <corey berla me>
Date:   Fri Jun 10 10:21:15 2022 -0700

    sidebar: Use dbus-launcher to open gnome disks
    
    When running Nautilus in a flatpak, the format option
    is not available on the sidebar.  Use dbus_launcher
    to check / run gnome disks for stability and flatpak
    integration.

 src/gtk/nautilusgtkplacessidebar.c | 48 ++++++++++++++++----------------------
 1 file changed, 20 insertions(+), 28 deletions(-)
---
diff --git a/src/gtk/nautilusgtkplacessidebar.c b/src/gtk/nautilusgtkplacessidebar.c
index 163a680bd..967897769 100644
--- a/src/gtk/nautilusgtkplacessidebar.c
+++ b/src/gtk/nautilusgtkplacessidebar.c
@@ -36,6 +36,7 @@
 #include "gdk/gdkkeysyms.h"
 #include "nautilusgtkbookmarksmanagerprivate.h"
 #include "nautilus-dnd.h"
+#include "nautilus-dbus-launcher.h"
 #include "nautilus-file.h"
 #include "nautilus-file-operations.h"
 #include "nautilus-global-preferences.h"
@@ -3118,27 +3119,28 @@ on_key_pressed (GtkEventControllerKey *controller,
 
 static void
 format_cb (GSimpleAction *action,
-               GVariant      *variant,
-               gpointer       data)
+           GVariant      *variant,
+           gpointer       data)
 {
     NautilusGtkPlacesSidebar *sidebar = data;
     g_autoptr (GVolume) volume = NULL;
-    GAppInfo *app_info;
-    gchar *cmdline, *device_identifier;
+    g_autofree gchar *device_identifier = NULL;
+    GVariant *parameters;
 
     g_object_get (sidebar->context_row, "volume", &volume, NULL);
     device_identifier = g_volume_get_identifier (volume,
                                                  G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);
-    cmdline = g_strconcat ("gnome-disks ",
-                           "--block-device ", device_identifier, " ",
-                           "--format-device ",
-                           NULL);
-    app_info = g_app_info_create_from_commandline (cmdline, NULL, 0, NULL);
-    g_app_info_launch (app_info, NULL, NULL, NULL);
 
-    g_free (cmdline);
-    g_free (device_identifier);
-    g_clear_object (&app_info);
+    parameters = g_variant_new_parsed ("(objectpath '/org/gnome/DiskUtility', @aay [], "
+                                       "{'options': <{'block-device': <%s>, "
+                                       "'format-device': <true> }> })", device_identifier);
+
+    nautilus_dbus_launcher_call (nautilus_dbus_launcher_get(),
+                                 NAUTILUS_DBUS_LAUNCHER_DISKS,
+                                 "CommandLine",
+                                 parameters,
+                                 GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (sidebar))));
+
 }
 
 static GActionEntry entries[] = {
@@ -3158,30 +3160,20 @@ static GActionEntry entries[] = {
   { "format", format_cb, NULL, NULL, NULL },
 };
 
-static gboolean
-check_have_gnome_disks (void)
-{
-    gchar *disks_path;
-    gboolean res;
-
-    disks_path = g_find_program_in_path ("gnome-disks");
-    res = (disks_path != NULL);
-    g_free (disks_path);
-
-    return res;
-}
-
 static gboolean
 should_show_format_command (GVolume *volume)
 {
     gchar *unix_device_id;
     gboolean show_format;
+    gboolean disks_available;
 
     unix_device_id = g_volume_get_identifier (volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);
-    show_format = (unix_device_id != NULL) && check_have_gnome_disks ();
+    disks_available = nautilus_dbus_launcher_is_available (nautilus_dbus_launcher_get(),
+                                                           NAUTILUS_DBUS_LAUNCHER_DISKS);
+    show_format = (unix_device_id != NULL);
     g_free (unix_device_id);
 
-    return show_format;
+    return show_format && disks_available;
 }
 
 static void


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