[gnome-shell] extensions-tool/uninstall: Error out for system extensions



commit 62f3457a958e35f3824b946647d267a24a8a492a
Author: Florian Müllner <fmuellner gnome org>
Date:   Sat Mar 14 11:38:38 2020 +0100

    extensions-tool/uninstall: Error out for system extensions
    
    UninstallExtensions() only returns whether the operation was successful,
    not why it failed. However we know that only user extensions can be
    uninstalled, so check that first to provide a more meaningful error.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/2391

 subprojects/extensions-tool/src/command-uninstall.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)
---
diff --git a/subprojects/extensions-tool/src/command-uninstall.c 
b/subprojects/extensions-tool/src/command-uninstall.c
index 4b902f4037..344b720b8e 100644
--- a/subprojects/extensions-tool/src/command-uninstall.c
+++ b/subprojects/extensions-tool/src/command-uninstall.c
@@ -29,14 +29,27 @@ static gboolean
 uninstall_extension (const char *uuid)
 {
   g_autoptr (GDBusProxy) proxy = NULL;
+  g_autoptr (GVariant) info = NULL;
   g_autoptr (GVariant) response = NULL;
   g_autoptr (GError) error = NULL;
   gboolean success = FALSE;
+  double type;
 
   proxy = get_shell_proxy (&error);
   if (proxy == NULL)
     return FALSE;
 
+  info = get_extension_property (proxy, uuid, "type");
+  if (info == NULL)
+    return FALSE;
+
+  type = g_variant_get_double (info);
+  if (type == TYPE_SYSTEM)
+    {
+      g_printerr (_("Cannot uninstall system extensions\n"));
+      return FALSE;
+    }
+
   response = g_dbus_proxy_call_sync (proxy,
                                      "UninstallExtension",
                                      g_variant_new ("(s)", uuid),
@@ -44,11 +57,6 @@ uninstall_extension (const char *uuid)
                                      -1,
                                      NULL,
                                      &error);
-  if (response == NULL)
-    {
-      g_printerr (_("Failed to connect to GNOME Shell"));
-      return FALSE;
-    }
 
   g_variant_get (response, "(b)", &success);
 


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