[gnome-builder] gsettings: use IdeSettings for layered file settings.
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] gsettings: use IdeSettings for layered file settings.
- Date: Wed, 6 May 2015 21:38:35 +0000 (UTC)
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]