extensions-tool: Split out settings_list_add/remove helpers
With the addition of the 'disabled-extensions' key in commit ce1bee727
,
the way extensions are enabled/disabled changed: Now a UUID is always
added to one list and removed from another.
Prepare for that by generalizing the relevant bits of the existing
enable/disable commands as helper functions.
https://gitlab.gnome.org/GNOME/gnome-shell/issues/1234
This commit is contained in:
parent
2df7757905
commit
7141c5be6d
@ -29,33 +29,11 @@ static gboolean
|
||||
disable_extension (const char *uuid)
|
||||
{
|
||||
g_autoptr(GSettings) settings = get_shell_settings ();
|
||||
g_auto(GStrv) extensions = NULL;
|
||||
g_auto(GStrv) new_value = NULL;
|
||||
const char **s;
|
||||
guint n_extensions;
|
||||
int i;
|
||||
|
||||
if (settings == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (!g_settings_is_writable (settings, "enabled-extensions"))
|
||||
return FALSE;
|
||||
|
||||
extensions = g_settings_get_strv (settings, "enabled-extensions");
|
||||
|
||||
if (!g_strv_contains ((const char **)extensions, uuid))
|
||||
return TRUE;
|
||||
|
||||
n_extensions = g_strv_length (extensions);
|
||||
new_value = g_new0 (char *, n_extensions);
|
||||
for (i = 0, s = (const char **)extensions; i < n_extensions; i++, s++)
|
||||
if (!g_str_equal (*s, uuid))
|
||||
new_value[i] = g_strdup (*s);
|
||||
|
||||
g_settings_set_strv (settings, "enabled-extensions", (const char **)new_value);
|
||||
g_settings_sync ();
|
||||
|
||||
return TRUE;
|
||||
return settings_list_remove (settings, "enabled-extensions", uuid);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -29,32 +29,11 @@ static gboolean
|
||||
enable_extension (const char *uuid)
|
||||
{
|
||||
g_autoptr(GSettings) settings = get_shell_settings ();
|
||||
g_auto(GStrv) extensions = NULL;
|
||||
g_auto(GStrv) new_value = NULL;
|
||||
guint n_extensions;
|
||||
int i;
|
||||
|
||||
if (settings == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (!g_settings_is_writable (settings, "enabled-extensions"))
|
||||
return FALSE;
|
||||
|
||||
extensions = g_settings_get_strv (settings, "enabled-extensions");
|
||||
|
||||
if (g_strv_contains ((const char **)extensions, uuid))
|
||||
return TRUE;
|
||||
|
||||
n_extensions = g_strv_length (extensions);
|
||||
new_value = g_new0 (char *, n_extensions + 2);
|
||||
for (i = 0; i < n_extensions; i++)
|
||||
new_value[i] = g_strdup (extensions[i]);
|
||||
new_value[i] = g_strdup (uuid);
|
||||
|
||||
g_settings_set_strv (settings, "enabled-extensions", (const char **)new_value);
|
||||
g_settings_sync ();
|
||||
|
||||
return TRUE;
|
||||
return settings_list_add (settings, "enabled-extensions", uuid);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -54,6 +54,13 @@ void print_extension_info (GVariantDict *info,
|
||||
GDBusProxy *get_shell_proxy (GError **error);
|
||||
GSettings *get_shell_settings (void);
|
||||
|
||||
gboolean settings_list_add (GSettings *settings,
|
||||
const char *key,
|
||||
const char *value);
|
||||
gboolean settings_list_remove (GSettings *settings,
|
||||
const char *key,
|
||||
const char *value);
|
||||
|
||||
gboolean file_delete_recursively (GFile *file,
|
||||
GError **error);
|
||||
|
||||
|
@ -91,6 +91,67 @@ get_shell_settings (void)
|
||||
return g_settings_new_full (schema, NULL, NULL);
|
||||
}
|
||||
|
||||
gboolean
|
||||
settings_list_add (GSettings *settings,
|
||||
const char *key,
|
||||
const char *value)
|
||||
{
|
||||
g_auto(GStrv) list = NULL;
|
||||
g_auto(GStrv) new_value = NULL;
|
||||
guint n_values;
|
||||
int i;
|
||||
|
||||
if (!g_settings_is_writable (settings, key))
|
||||
return FALSE;
|
||||
|
||||
list = g_settings_get_strv (settings, key);
|
||||
|
||||
if (g_strv_contains ((const char **)list, value))
|
||||
return TRUE;
|
||||
|
||||
n_values = g_strv_length (list);
|
||||
new_value = g_new0 (char *, n_values + 2);
|
||||
for (i = 0; i < n_values; i++)
|
||||
new_value[i] = g_strdup (list[i]);
|
||||
new_value[i] = g_strdup (value);
|
||||
|
||||
g_settings_set_strv (settings, key, (const char **)new_value);
|
||||
g_settings_sync ();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
settings_list_remove (GSettings *settings,
|
||||
const char *key,
|
||||
const char *value)
|
||||
{
|
||||
g_auto(GStrv) list = NULL;
|
||||
g_auto(GStrv) new_value = NULL;
|
||||
const char **s;
|
||||
guint n_values;
|
||||
int i;
|
||||
|
||||
if (!g_settings_is_writable (settings, key))
|
||||
return FALSE;
|
||||
|
||||
list = g_settings_get_strv (settings, key);
|
||||
|
||||
if (!g_strv_contains ((const char **)list, value))
|
||||
return TRUE;
|
||||
|
||||
n_values = g_strv_length (list);
|
||||
new_value = g_new0 (char *, n_values);
|
||||
for (i = 0, s = (const char **)list; i < n_values; i++, s++)
|
||||
if (!g_str_equal (*s, value))
|
||||
new_value[i] = g_strdup (*s);
|
||||
|
||||
g_settings_set_strv (settings, key, (const char **)new_value);
|
||||
g_settings_sync ();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
print_extension_info (GVariantDict *info,
|
||||
DisplayFormat format)
|
||||
|
Loading…
Reference in New Issue
Block a user