[gnome-builder] language-defaults: add support for strv gsettings
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] language-defaults: add support for strv gsettings
- Date: Tue, 30 Jan 2018 00:57:09 +0000 (UTC)
commit 8dd63eb22a83a81daab5157446e2919eac8311c0
Author: Christian Hergert <chergert redhat com>
Date: Mon Jan 29 16:23:30 2018 -0800
language-defaults: add support for strv gsettings
This allows us to override strv gsetting values, as used for flags types.
We can get the nicks from gkeyfile using string_list API.
src/libide/gsettings/ide-language-defaults.c | 36 ++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
---
diff --git a/src/libide/gsettings/ide-language-defaults.c b/src/libide/gsettings/ide-language-defaults.c
index 55f7f7075..0b2606ea6 100644
--- a/src/libide/gsettings/ide-language-defaults.c
+++ b/src/libide/gsettings/ide-language-defaults.c
@@ -35,6 +35,29 @@ static GList *tasks;
G_LOCK_DEFINE (lock);
+static gboolean
+strv_equal (gchar **a,
+ gchar **b)
+{
+ if (a == b)
+ return TRUE;
+ else if (!a && b)
+ return FALSE;
+ else if (a && !b)
+ return FALSE;
+
+ for (;;)
+ {
+ if (*a == NULL && *b == NULL)
+ return TRUE;
+
+ if (g_strcmp0 (*a, *b) == 0)
+ continue;
+
+ return FALSE;
+ }
+}
+
static gboolean
ide_language_defaults_migrate (GKeyFile *key_file,
gint current_version,
@@ -135,6 +158,19 @@ ide_language_defaults_migrate (GKeyFile *key_file,
if (default_int32 == current_int32)
g_settings_set_int (settings, key, override_int32);
}
+ else if (g_variant_is_of_type (default_value, G_VARIANT_TYPE_STRING_ARRAY))
+ {
+ g_auto(GStrv) current_strv = NULL;
+ g_auto(GStrv) override_strv = NULL;
+ g_autofree const gchar **default_strv = NULL;
+
+ default_strv = g_variant_get_strv (default_value, NULL);
+ current_strv = g_settings_get_strv (settings, key);
+ override_strv = g_key_file_get_string_list (key_file, group, key, NULL, NULL);
+
+ if (strv_equal ((gchar **)default_strv, current_strv))
+ g_settings_set_strv (settings, key, (const gchar * const *)override_strv);
+ }
else
{
g_error ("Teach me about variant type: %s",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]