[gnome-builder] language-defaults: add support for strv gsettings



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]