diff --git a/subprojects/extensions-tool/src/command-prefs.c b/subprojects/extensions-tool/src/command-prefs.c index 25d1626c4..50e4b80ba 100644 --- a/subprojects/extensions-tool/src/command-prefs.c +++ b/subprojects/extensions-tool/src/command-prefs.c @@ -29,9 +29,7 @@ static gboolean launch_extension_prefs (const char *uuid) { g_autoptr (GDBusProxy) proxy = NULL; - g_autoptr (GVariant) response = NULL; - g_autoptr (GVariant) asv = NULL; - g_autoptr (GVariantDict) info = NULL; + g_autoptr (GVariant) info = NULL; g_autoptr (GError) error = NULL; gboolean has_prefs; @@ -39,29 +37,11 @@ launch_extension_prefs (const char *uuid) if (proxy == NULL) return FALSE; - response = g_dbus_proxy_call_sync (proxy, - "GetExtensionInfo", - g_variant_new ("(s)", uuid), - 0, - -1, - NULL, - &error); - if (response == NULL) - { - g_printerr (_("Failed to connect to GNOME Shell")); - return FALSE; - } + info = get_extension_property (proxy, uuid, "hasPrefs"); + if (info == NULL) + return FALSE; - asv = g_variant_get_child_value (response, 0); - info = g_variant_dict_new (asv); - - if (!g_variant_dict_contains (info, "uuid")) - { - g_printerr (_("Extension “%s” doesn't exist\n"), uuid); - return FALSE; - } - - g_variant_dict_lookup (info, "hasPrefs", "b", &has_prefs); + has_prefs = g_variant_get_boolean (info); if (!has_prefs) { g_printerr (_("Extension “%s” doesn't have preferences\n"), uuid); diff --git a/subprojects/extensions-tool/src/common.h b/subprojects/extensions-tool/src/common.h index fb23b6580..2b0448495 100644 --- a/subprojects/extensions-tool/src/common.h +++ b/subprojects/extensions-tool/src/common.h @@ -54,6 +54,10 @@ void print_extension_info (GVariantDict *info, DisplayFormat format); GDBusProxy *get_shell_proxy (GError **error); +GVariant *get_extension_property (GDBusProxy *proxy, + const char *uuid, + const char *property); + GSettings *get_shell_settings (void); gboolean settings_list_add (GSettings *settings, diff --git a/subprojects/extensions-tool/src/main.c b/subprojects/extensions-tool/src/main.c index cc7cd80cd..c33058dc6 100644 --- a/subprojects/extensions-tool/src/main.c +++ b/subprojects/extensions-tool/src/main.c @@ -124,6 +124,41 @@ get_shell_settings (void) return g_settings_new_full (schema, NULL, NULL); } +GVariant * +get_extension_property (GDBusProxy *proxy, + const char *uuid, + const char *property) +{ + g_autoptr (GVariant) response = NULL; + g_autoptr (GVariant) asv = NULL; + g_autoptr (GVariantDict) info = NULL; + g_autoptr (GError) error = NULL; + + response = g_dbus_proxy_call_sync (proxy, + "GetExtensionInfo", + g_variant_new ("(s)", uuid), + 0, + -1, + NULL, + &error); + if (response == NULL) + { + g_printerr (_("Failed to connect to GNOME Shell")); + return NULL; + } + + asv = g_variant_get_child_value (response, 0); + info = g_variant_dict_new (asv); + + if (!g_variant_dict_contains (info, "uuid")) + { + g_printerr (_("Extension “%s” doesn't exist\n"), uuid); + return NULL; + } + + return g_variant_dict_lookup_value (info, property, NULL); +} + gboolean settings_list_add (GSettings *settings, const char *key,