[gnome-builder] gsettings: use IdeSettings for layered file settings.



commit 424956499adb90bed28d7585c9b2a389422c7ab4
Author: Christian Hergert <christian hergert me>
Date:   Wed May 6 14:28:46 2015 -0700

    gsettings: use IdeSettings for layered file settings.

 libide/gsettings/ide-gsettings-file-settings.c |  163 +++++++-----------------
 1 files changed, 44 insertions(+), 119 deletions(-)
---
diff --git a/libide/gsettings/ide-gsettings-file-settings.c b/libide/gsettings/ide-gsettings-file-settings.c
index bfd749e..fb9212a 100644
--- a/libide/gsettings/ide-gsettings-file-settings.c
+++ b/libide/gsettings/ide-gsettings-file-settings.c
@@ -19,40 +19,28 @@
 #include <glib/gi18n.h>
 
 #include "ide-context.h"
+#include "ide-debug.h"
 #include "ide-file.h"
 #include "ide-gsettings-file-settings.h"
 #include "ide-language.h"
 #include "ide-language-defaults.h"
+#include "ide-settings.h"
 
 struct _IdeGsettingsFileSettings
 {
   IdeFileSettings  parent_instance;
-  GSettings       *settings;
+  IdeSettings     *language_settings;
 };
 
 typedef struct
 {
-  const gchar             *source_property;
-  const gchar             *target_property;
-  GSettingsBindGetMapping  mapping;
+  const gchar             *key;
+  const gchar             *property;
+  GSettingsBindGetMapping  get_mapping;
 } SettingsMapping;
 
 G_DEFINE_TYPE (IdeGsettingsFileSettings, ide_gsettings_file_settings, IDE_TYPE_FILE_SETTINGS)
 
-static gboolean indent_style_get (GValue   *value,
-                                  GVariant *variant,
-                                  gpointer  user_data);
-
-static GSettings *gEditorSettings;
-static SettingsMapping gMappings[] = {
-  { "indent-width", "indent-width" },
-  { "insert-spaces-instead-of-tabs", "indent-style", indent_style_get },
-  { "right-margin-position", "right-margin-position" },
-  { "show-right-margin", "show-right-margin" },
-  { "tab-width", "tab-width" },
-  { "trim-trailing-whitespace", "trim-trailing-whitespace" },
-};
-
 static gboolean
 indent_style_get (GValue   *value,
                   GVariant *variant,
@@ -65,116 +53,55 @@ indent_style_get (GValue   *value,
   return TRUE;
 }
 
-static const gchar *
-get_mapped_name (const gchar *name)
-{
-  gsize i;
-
-  g_assert (name != NULL);
-
-  for (i = 0; gMappings [i].source_property; i++)
-    {
-      if (ide_str_equal0 (name, gMappings [i].source_property))
-        return gMappings [i].target_property;
-    }
-
-  g_assert_not_reached ();
-
-  return NULL;
-}
-
-static void
-ide_gsettings_file_settings_changed (IdeGsettingsFileSettings *self,
-                                     const gchar              *key,
-                                     GSettings                *settings)
-{
-  g_autoptr(GVariant) value = NULL;
-  g_autofree gchar *set_name = NULL;
-  const gchar *mapped;
-
-  g_assert (IDE_IS_GSETTINGS_FILE_SETTINGS (self));
-  g_assert (key != NULL);
-  g_assert (G_IS_SETTINGS (settings));
-
-  mapped = get_mapped_name (key);
-  if (mapped == NULL)
-    return;
-
-  set_name = g_strdup_printf ("%s-set", mapped);
-  value = g_settings_get_user_value (settings, key);
-  g_object_set (self, set_name, !!value, NULL);
-}
-
-static void
-ide_gsettings_file_settings_bind (IdeGsettingsFileSettings *self,
-                                  GSettings                *settings,
-                                  const gchar              *source_name,
-                                  const gchar              *target_name,
-                                  GSettingsBindGetMapping   get_mapping)
-{
-  g_autofree gchar *set_name = NULL;
-  g_autofree gchar *changed_name = NULL;
-  g_autoptr(GVariant) value = NULL;
-
-  g_assert (IDE_IS_GSETTINGS_FILE_SETTINGS (self));
-  g_assert (G_IS_SETTINGS (settings));
-  g_assert (source_name != NULL);
-
-  g_settings_bind_with_mapping (settings, source_name, self, target_name, G_SETTINGS_BIND_GET,
-                                get_mapping, NULL, NULL, NULL);
-
-  value = g_settings_get_user_value (settings, source_name);
-  set_name = g_strdup_printf ("%s-set", target_name);
-  g_object_set (self, set_name, !!value, NULL);
-
-  changed_name = g_strdup_printf ("changed::%s", source_name);
-
-  g_signal_connect_object (settings,
-                           changed_name,
-                           G_CALLBACK (ide_gsettings_file_settings_changed),
-                           self,
-                           G_CONNECT_SWAPPED);
-}
-
-static void
-ide_gsettings_file_settings_connect (IdeGsettingsFileSettings *self,
-                                     GSettings                *settings)
-{
-  gsize i;
-
-  g_assert (IDE_IS_GSETTINGS_FILE_SETTINGS (self));
-  g_assert (G_IS_SETTINGS (settings));
-
-  for (i = 0; gMappings [i].source_property != NULL; i++)
-    {
-      ide_gsettings_file_settings_bind (self,
-                                        settings,
-                                        gMappings [i].source_property,
-                                        gMappings [i].target_property,
-                                        gMappings [i].mapping);
-    }
-}
+static SettingsMapping gLanguageMappings [] = {
+  { "indent-width",                  "indent-width",             NULL             },
+  { "insert-spaces-instead-of-tabs", "indent-style",             indent_style_get },
+  { "right-margin-position",         "right-margin-position",    NULL             },
+  { "show-right-margin",             "show-right-margin",        NULL             },
+  { "tab-width",                     "tab-width",                NULL             },
+  { "trim-trailing-whitespace",      "trim-trailing-whitespace", NULL             },
+};
 
 static void
 ide_gsettings_file_settings_constructed (GObject *object)
 {
   IdeGsettingsFileSettings *self = (IdeGsettingsFileSettings *)object;
-  g_autoptr(GSettings) settings = NULL;
-  g_autofree gchar *path = NULL;
-  const gchar *lang_id;
+  g_autofree gchar *relative_path = NULL;
   IdeLanguage *language;
+  const gchar *lang_id;
+  IdeContext *context;
   IdeFile *file;
+  gsize i;
+
+  IDE_ENTRY;
 
   G_OBJECT_CLASS (ide_gsettings_file_settings_parent_class)->constructed (object);
 
-  file = ide_file_settings_get_file (IDE_FILE_SETTINGS (self));
-  language = ide_file_get_language (file);
-  lang_id = ide_language_get_id (language);
+  if (!(file = ide_file_settings_get_file (IDE_FILE_SETTINGS (self))) ||
+      !(language = ide_file_get_language (file)) ||
+      !(lang_id = ide_language_get_id (language)))
+    IDE_EXIT;
 
-  path = g_strdup_printf ("/org/gnome/builder/editor/language/%s/", lang_id);
-  settings = g_settings_new_with_path ("org.gnome.builder.editor.language", path);
+  context = ide_object_get_context (IDE_OBJECT (self));
+  relative_path = g_strdup_printf ("/editor/language/%s/", lang_id);
+  self->language_settings = ide_context_get_settings (context,
+                                                      "org.gnome.builder.editor.language",
+                                                      relative_path);
 
-  ide_gsettings_file_settings_connect (self, settings);
+  for (i = 0; i < G_N_ELEMENTS (gLanguageMappings); i++)
+    {
+      SettingsMapping *mapping = &gLanguageMappings [i];
+
+      ide_settings_bind_with_mapping (self->language_settings,
+                                      mapping->key,
+                                      self,
+                                      mapping->property,
+                                      G_SETTINGS_BIND_GET,
+                                      mapping->get_mapping,
+                                      NULL,
+                                      NULL,
+                                      NULL);
+    }
 }
 
 static void
@@ -182,7 +109,7 @@ ide_gsettings_file_settings_finalize (GObject *object)
 {
   IdeGsettingsFileSettings *self = (IdeGsettingsFileSettings *)object;
 
-  g_clear_object (&self->settings);
+  g_clear_object (&self->language_settings);
 
   G_OBJECT_CLASS (ide_gsettings_file_settings_parent_class)->finalize (object);
 }
@@ -194,8 +121,6 @@ ide_gsettings_file_settings_class_init (IdeGsettingsFileSettingsClass *klass)
 
   object_class->constructed = ide_gsettings_file_settings_constructed;
   object_class->finalize = ide_gsettings_file_settings_finalize;
-
-  gEditorSettings = g_settings_new ("org.gnome.builder.editor");
 }
 
 static void


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