[gnome-builder] libide-core: add settings sandwich to API



commit 8dd7f31729d374ea183379b938483e01de3a68e4
Author: Christian Hergert <chergert redhat com>
Date:   Mon Jul 11 16:31:51 2022 -0700

    libide-core: add settings sandwich to API
    
    I still hate the name of this, but we need it for the time being to do our
    layered settings. Work still to be done on this before 43, however.

 src/libide/core/ide-settings-sandwich-private.h |  84 ++++
 src/libide/core/ide-settings-sandwich.c         | 491 ++++++++++++++++++++++++
 src/libide/core/ide-settings.c                  |  48 ++-
 src/libide/core/ide-settings.h                  |  44 +--
 src/libide/core/meson.build                     |   6 +
 5 files changed, 625 insertions(+), 48 deletions(-)
---
diff --git a/src/libide/core/ide-settings-sandwich-private.h b/src/libide/core/ide-settings-sandwich-private.h
new file mode 100644
index 000000000..c2a1cba20
--- /dev/null
+++ b/src/libide/core/ide-settings-sandwich-private.h
@@ -0,0 +1,84 @@
+/* ide-settings-sandwich.h
+ *
+ * Copyright (C) 2015 Christian Hergert <christian hergert me>
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_SETTINGS_SANDWICH (ide_settings_sandwich_get_type())
+
+G_DECLARE_FINAL_TYPE (IdeSettingsSandwich, ide_settings_sandwich, IDE, SETTINGS_SANDWICH, GObject)
+
+IdeSettingsSandwich *ide_settings_sandwich_new               (const gchar             *schema_id,
+                                                              const gchar             *path);
+GVariant            *ide_settings_sandwich_get_default_value (IdeSettingsSandwich     *self,
+                                                              const gchar             *key);
+GVariant            *ide_settings_sandwich_get_user_value    (IdeSettingsSandwich     *self,
+                                                              const gchar             *key);
+GVariant            *ide_settings_sandwich_get_value         (IdeSettingsSandwich     *self,
+                                                              const gchar             *key);
+void                 ide_settings_sandwich_set_value         (IdeSettingsSandwich     *self,
+                                                              const gchar             *key,
+                                                              GVariant                *value);
+gboolean             ide_settings_sandwich_get_boolean       (IdeSettingsSandwich     *self,
+                                                              const gchar             *key);
+gdouble              ide_settings_sandwich_get_double        (IdeSettingsSandwich     *self,
+                                                              const gchar             *key);
+gint                 ide_settings_sandwich_get_int           (IdeSettingsSandwich     *self,
+                                                              const gchar             *key);
+gchar               *ide_settings_sandwich_get_string        (IdeSettingsSandwich     *self,
+                                                              const gchar             *key);
+guint                ide_settings_sandwich_get_uint          (IdeSettingsSandwich     *self,
+                                                              const gchar             *key);
+void                 ide_settings_sandwich_set_boolean       (IdeSettingsSandwich     *self,
+                                                              const gchar             *key,
+                                                              gboolean                 val);
+void                 ide_settings_sandwich_set_double        (IdeSettingsSandwich     *self,
+                                                              const gchar             *key,
+                                                              gdouble                  val);
+void                 ide_settings_sandwich_set_int           (IdeSettingsSandwich     *self,
+                                                              const gchar             *key,
+                                                              gint                     val);
+void                 ide_settings_sandwich_set_string        (IdeSettingsSandwich     *self,
+                                                              const gchar             *key,
+                                                              const gchar             *val);
+void                 ide_settings_sandwich_set_uint          (IdeSettingsSandwich     *self,
+                                                              const gchar             *key,
+                                                              guint                    val);
+void                 ide_settings_sandwich_append            (IdeSettingsSandwich     *self,
+                                                              GSettings               *settings);
+void                 ide_settings_sandwich_bind              (IdeSettingsSandwich     *self,
+                                                              const gchar             *key,
+                                                              gpointer                 object,
+                                                              const gchar             *property,
+                                                              GSettingsBindFlags       flags);
+void                 ide_settings_sandwich_bind_with_mapping (IdeSettingsSandwich     *self,
+                                                              const gchar             *key,
+                                                              gpointer                 object,
+                                                              const gchar             *property,
+                                                              GSettingsBindFlags       flags,
+                                                              GSettingsBindGetMapping  get_mapping,
+                                                              GSettingsBindSetMapping  set_mapping,
+                                                              gpointer                 user_data,
+                                                              GDestroyNotify           destroy);
+void                 ide_settings_sandwich_unbind            (IdeSettingsSandwich     *self,
+                                                              const gchar             *property);
+
+G_END_DECLS
diff --git a/src/libide/core/ide-settings-sandwich.c b/src/libide/core/ide-settings-sandwich.c
new file mode 100644
index 000000000..5827b6b91
--- /dev/null
+++ b/src/libide/core/ide-settings-sandwich.c
@@ -0,0 +1,491 @@
+/* ide-settings-sandwich.c
+ *
+ * Copyright (C) 2015 Christian Hergert <christian hergert me>
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define G_LOG_DOMAIN "ide-settings-sandwich"
+#define G_SETTINGS_ENABLE_BACKEND
+
+#include "config.h"
+
+#include <gio/gsettingsbackend.h>
+#include <glib/gi18n.h>
+
+#include "ide-settings-sandwich-private.h"
+
+struct _IdeSettingsSandwich
+{
+  GObject           parent_instance;
+  GPtrArray        *settings;
+  GSettingsBackend *memory_backend;
+  GSettings        *memory_settings;
+  gchar            *schema_id;
+  gchar            *path;
+};
+
+G_DEFINE_TYPE (IdeSettingsSandwich, ide_settings_sandwich, G_TYPE_OBJECT)
+
+enum {
+  PROP_0,
+  PROP_PATH,
+  PROP_SCHEMA_ID,
+  LAST_PROP
+};
+
+static GParamSpec *properties [LAST_PROP];
+
+static GSettings *
+ide_settings_sandwich_get_primary_settings (IdeSettingsSandwich *self)
+{
+  g_assert (IDE_IS_SETTINGS_SANDWICH (self));
+
+  if (self->settings->len == 0)
+    {
+      g_error ("No settings have been loaded. Aborting.");
+      g_assert_not_reached ();
+      return NULL;
+    }
+
+  return g_ptr_array_index (self->settings, 0);
+}
+
+static void
+ide_settings_sandwich_cache_key (IdeSettingsSandwich *self,
+                                 const gchar         *key)
+{
+  GSettings *settings;
+  g_autoptr(GVariant) value = NULL;
+  gsize i;
+
+  g_assert (IDE_IS_SETTINGS_SANDWICH (self));
+  g_assert (key != NULL);
+  g_assert (self->settings->len > 0);
+
+  for (i = 0; i < self->settings->len; i++)
+    {
+      settings = g_ptr_array_index (self->settings, i);
+      value = g_settings_get_user_value (settings, key);
+
+      if (value != NULL)
+        {
+          g_settings_set_value (self->memory_settings, key, value);
+          return;
+        }
+    }
+
+  settings = g_ptr_array_index (self->settings, 0);
+  value = g_settings_get_value (settings, key);
+  g_settings_set_value (self->memory_settings, key, value);
+}
+
+static void
+ide_settings_sandwich_update_cache (IdeSettingsSandwich *self)
+{
+  GSettingsSchemaSource *source;
+  GSettingsSchema *schema;
+  gchar **keys;
+  gsize i;
+
+  g_assert (IDE_IS_SETTINGS_SANDWICH (self));
+
+  source = g_settings_schema_source_get_default ();
+  schema = g_settings_schema_source_lookup (source, self->schema_id, TRUE);
+
+  if (schema == NULL)
+    {
+      g_error ("Failed to locate schema: %s", self->schema_id);
+      return;
+    }
+
+  keys = g_settings_schema_list_keys (schema);
+
+  for (i = 0; keys [i]; i++)
+    ide_settings_sandwich_cache_key (self, keys [i]);
+
+  g_settings_schema_unref (schema);
+  g_strfreev (keys);
+}
+
+static void
+ide_settings_sandwich__settings_changed (IdeSettingsSandwich *self,
+                                         const gchar         *key,
+                                         GSettings           *settings)
+{
+  g_assert (IDE_IS_SETTINGS_SANDWICH (self));
+  g_assert (key != NULL);
+  g_assert (G_IS_SETTINGS (settings));
+
+  ide_settings_sandwich_cache_key (self, key);
+}
+
+static void
+ide_settings_sandwich_constructed (GObject *object)
+{
+  IdeSettingsSandwich *self = (IdeSettingsSandwich *)object;
+
+  g_assert (IDE_IS_SETTINGS_SANDWICH (self));
+  g_assert (self->schema_id != NULL);
+  g_assert (self->path != NULL);
+
+  self->memory_settings = g_settings_new_with_backend_and_path (self->schema_id,
+                                                                self->memory_backend,
+                                                                self->path);
+
+  G_OBJECT_CLASS (ide_settings_sandwich_parent_class)->constructed (object);
+}
+
+static void
+ide_settings_sandwich_finalize (GObject *object)
+{
+  IdeSettingsSandwich *self = (IdeSettingsSandwich *)object;
+
+  g_clear_pointer (&self->settings, g_ptr_array_unref);
+  g_clear_pointer (&self->schema_id, g_free);
+  g_clear_pointer (&self->path, g_free);
+  g_clear_object (&self->memory_backend);
+
+  G_OBJECT_CLASS (ide_settings_sandwich_parent_class)->finalize (object);
+}
+
+static void
+ide_settings_sandwich_get_property (GObject    *object,
+                                    guint       prop_id,
+                                    GValue     *value,
+                                    GParamSpec *pspec)
+{
+  IdeSettingsSandwich *self = IDE_SETTINGS_SANDWICH (object);
+
+  switch (prop_id)
+    {
+    case PROP_SCHEMA_ID:
+      g_value_set_string (value, self->schema_id);
+      break;
+
+    case PROP_PATH:
+      g_value_set_string (value, self->path);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+ide_settings_sandwich_set_property (GObject      *object,
+                                    guint         prop_id,
+                                    const GValue *value,
+                                    GParamSpec   *pspec)
+{
+  IdeSettingsSandwich *self = IDE_SETTINGS_SANDWICH (object);
+
+  switch (prop_id)
+    {
+    case PROP_SCHEMA_ID:
+      self->schema_id = g_value_dup_string (value);
+      break;
+
+    case PROP_PATH:
+      self->path = g_value_dup_string (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+ide_settings_sandwich_class_init (IdeSettingsSandwichClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->constructed = ide_settings_sandwich_constructed;
+  object_class->finalize = ide_settings_sandwich_finalize;
+  object_class->get_property = ide_settings_sandwich_get_property;
+  object_class->set_property = ide_settings_sandwich_set_property;
+
+  properties [PROP_SCHEMA_ID] =
+    g_param_spec_string ("schema-id",
+                         "Schema Id",
+                         "Schema Id",
+                         NULL,
+                         (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+  properties [PROP_PATH] =
+    g_param_spec_string ("path",
+                         "Settings Path",
+                         "Settings Path",
+                         NULL,
+                         (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_properties (object_class, LAST_PROP, properties);
+}
+
+static void
+ide_settings_sandwich_init (IdeSettingsSandwich *self)
+{
+  self->settings = g_ptr_array_new_with_free_func (g_object_unref);
+  self->memory_backend = g_memory_settings_backend_new ();
+}
+
+IdeSettingsSandwich *
+ide_settings_sandwich_new (const gchar *schema_id,
+                           const gchar *path)
+{
+  g_return_val_if_fail (schema_id != NULL, NULL);
+  g_return_val_if_fail (path != NULL, NULL);
+
+  return g_object_new (IDE_TYPE_SETTINGS_SANDWICH,
+                       "schema-id", schema_id,
+                       "path", path,
+                       NULL);
+}
+
+GVariant *
+ide_settings_sandwich_get_default_value (IdeSettingsSandwich *self,
+                                         const gchar         *key)
+{
+  GSettings *settings;
+  GVariant *ret;
+
+  g_return_val_if_fail (IDE_IS_SETTINGS_SANDWICH (self), NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  settings = ide_settings_sandwich_get_primary_settings (self);
+  ret = g_settings_get_default_value (settings, key);
+
+  return ret;
+}
+
+GVariant *
+ide_settings_sandwich_get_user_value (IdeSettingsSandwich *self,
+                                      const gchar         *key)
+{
+  gsize i;
+
+  g_return_val_if_fail (IDE_IS_SETTINGS_SANDWICH (self), NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  for (i = 0; i < self->settings->len; i++)
+    {
+      GSettings *settings;
+      GVariant *value;
+
+      settings = g_ptr_array_index (self->settings, i);
+      value = g_settings_get_user_value (settings, key);
+      if (value != NULL)
+        return value;
+    }
+
+  return NULL;
+}
+
+GVariant *
+ide_settings_sandwich_get_value (IdeSettingsSandwich *self,
+                                 const gchar         *key)
+{
+  GSettings *settings;
+  GVariant *ret;
+  gsize i;
+
+  g_return_val_if_fail (IDE_IS_SETTINGS_SANDWICH (self), NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+
+  for (i = 0; i < self->settings->len; i++)
+    {
+      settings = g_ptr_array_index (self->settings, i);
+      ret = g_settings_get_user_value (settings, key);
+      if (ret != NULL)
+        return ret;
+    }
+
+  settings = ide_settings_sandwich_get_primary_settings (self);
+  ret = g_settings_get_value (settings, key);
+
+  return ret;
+}
+
+void
+ide_settings_sandwich_set_value (IdeSettingsSandwich *self,
+                                 const gchar         *key,
+                                 GVariant            *value)
+{
+  GSettings *settings;
+
+  g_return_if_fail (IDE_IS_SETTINGS_SANDWICH (self));
+  g_return_if_fail (key != NULL);
+
+  settings = ide_settings_sandwich_get_primary_settings (self);
+  g_settings_set_value (settings, key, value);
+}
+
+#define DEFINE_GETTER(name, ret_type, func, ...)                        \
+ret_type                                                                \
+ide_settings_sandwich_get_##name (IdeSettingsSandwich *self,            \
+                                  const gchar         *key)             \
+{                                                                       \
+  GVariant *value;                                                      \
+  ret_type ret;                                                         \
+                                                                        \
+  g_return_val_if_fail (IDE_IS_SETTINGS_SANDWICH (self), (ret_type)0);  \
+  g_return_val_if_fail (key != NULL, (ret_type)0);                      \
+                                                                        \
+  value = ide_settings_sandwich_get_value (self, key);                  \
+  ret = g_variant_##func (value, ##__VA_ARGS__);                        \
+  g_variant_unref (value);                                              \
+                                                                        \
+  return ret;                                                           \
+}
+
+DEFINE_GETTER (boolean, gboolean, get_boolean)
+DEFINE_GETTER (double,  gdouble,  get_double)
+DEFINE_GETTER (int,     gint,     get_int32)
+DEFINE_GETTER (string,  gchar *,  dup_string, NULL)
+DEFINE_GETTER (uint,    guint,    get_uint32)
+
+#define DEFINE_SETTER(name, param_type, func)                           \
+void                                                                    \
+ide_settings_sandwich_set_##name (IdeSettingsSandwich *self,            \
+                                  const gchar         *key,             \
+                                  param_type           val)             \
+{                                                                       \
+  GVariant *value;                                                      \
+                                                                        \
+  g_return_if_fail (IDE_IS_SETTINGS_SANDWICH (self));                   \
+  g_return_if_fail (key != NULL);                                       \
+                                                                        \
+  value = g_variant_##func (val);                                       \
+  ide_settings_sandwich_set_value (self, key, value);                   \
+}
+
+DEFINE_SETTER (boolean, gboolean,      new_boolean)
+DEFINE_SETTER (double,  gdouble,       new_double)
+DEFINE_SETTER (int,     gint,          new_int32)
+DEFINE_SETTER (string,  const gchar *, new_string)
+DEFINE_SETTER (uint,    guint,         new_uint32)
+
+void
+ide_settings_sandwich_append (IdeSettingsSandwich *self,
+                              GSettings           *settings)
+{
+  g_return_if_fail (IDE_IS_SETTINGS_SANDWICH (self));
+  g_return_if_fail (G_IS_SETTINGS (settings));
+
+  g_ptr_array_add (self->settings, g_object_ref (settings));
+
+#if 0
+  {
+    g_autofree gchar *schema_id = NULL;
+    g_autofree gchar *path = NULL;
+
+    g_object_get (settings,
+                  "schema-id", &schema_id,
+                  "path", &path,
+                  NULL);
+  }
+#endif
+
+  g_signal_connect_object (settings,
+                           "changed",
+                           G_CALLBACK (ide_settings_sandwich__settings_changed),
+                           self,
+                           G_CONNECT_SWAPPED);
+
+  ide_settings_sandwich_update_cache (self);
+}
+
+void
+ide_settings_sandwich_bind (IdeSettingsSandwich *self,
+                            const gchar         *key,
+                            gpointer             object,
+                            const gchar         *property,
+                            GSettingsBindFlags   flags)
+{
+  g_return_if_fail (IDE_IS_SETTINGS_SANDWICH (self));
+  g_return_if_fail (key != NULL);
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (property != NULL);
+
+  ide_settings_sandwich_bind_with_mapping (self, key, object, property, flags,
+                                           NULL, NULL, NULL, NULL);
+}
+
+/**
+ * ide_settings_sandwich_bind_with_mapping:
+ * @self: An #IdeSettingsSandwich.
+ * @key: the settings key to bind.
+ * @object (type GObject.Object): the target object.
+ * @property: the property on @object to apply.
+ * @flags: flags for the binding.
+ * @get_mapping: (scope notified) (closure user_data) (destroy destroy): the get mapping function
+ * @set_mapping: (scope notified) (closure user_data) (destroy destroy): the set mapping function
+ * @user_data: user data for @get_mapping and @set_mapping.
+ * @destroy: destroy notify for @user_data.
+ *
+ * Creates a new binding similar to g_settings_bind_with_mapping() but applying
+ * from the resolved value via the settings sandwich.
+ */
+void
+ide_settings_sandwich_bind_with_mapping (IdeSettingsSandwich     *self,
+                                         const gchar             *key,
+                                         gpointer                 object,
+                                         const gchar             *property,
+                                         GSettingsBindFlags       flags,
+                                         GSettingsBindGetMapping  get_mapping,
+                                         GSettingsBindSetMapping  set_mapping,
+                                         gpointer                 user_data,
+                                         GDestroyNotify           destroy)
+{
+  GSettings *settings;
+
+  g_return_if_fail (IDE_IS_SETTINGS_SANDWICH (self));
+  g_return_if_fail (key != NULL);
+  g_return_if_fail (G_IS_OBJECT (object));
+  g_return_if_fail (property != NULL);
+
+  /*
+   * Our memory backend/settings are compiling the values from all of the layers of our
+   * sandwich. Therefore, we only want to map reads from the memory backend. We want to direct
+   * all writes to the topmost layer of the sandwich (found at index 0).
+   */
+  if ((flags & G_SETTINGS_BIND_GET) != 0)
+    g_settings_bind_with_mapping (self->memory_settings, key, object, property,
+                                  (flags & ~G_SETTINGS_BIND_SET),
+                                  get_mapping, set_mapping, user_data, destroy);
+
+  /*
+   * We bind writability directly to our toplevel layer of the sandwich.
+   */
+  settings = ide_settings_sandwich_get_primary_settings (self);
+  if ((flags & G_SETTINGS_BIND_SET) != 0)
+    g_settings_bind_with_mapping (settings, key, object, property, (flags & ~G_SETTINGS_BIND_GET),
+                                  get_mapping, set_mapping, user_data, destroy);
+}
+
+void
+ide_settings_sandwich_unbind (IdeSettingsSandwich *self,
+                              const gchar         *property)
+{
+  GSettings *settings;
+
+  g_return_if_fail (IDE_IS_SETTINGS_SANDWICH (self));
+  g_return_if_fail (property != NULL);
+
+  settings = ide_settings_sandwich_get_primary_settings (self);
+
+  g_settings_unbind (settings, property);
+  g_settings_unbind (self->memory_backend, property);
+}
diff --git a/src/libide/core/ide-settings.c b/src/libide/core/ide-settings.c
index 5cd1f1506..1d4a1e552 100644
--- a/src/libide/core/ide-settings.c
+++ b/src/libide/core/ide-settings.c
@@ -22,11 +22,11 @@
 
 #include "config.h"
 
-#include <dazzle.h>
 #include <glib/gi18n.h>
 #include <stdlib.h>
 
 #include "ide-settings.h"
+#include "ide-settings-sandwich-private.h"
 
 /**
  * SECTION:ide-settings
@@ -41,15 +41,13 @@
  * not, the users preference will be returned. Setting a preference via
  * #IdeSettings will always modify the projects setting, not the users default
  * settings.
- *
- * Since: 3.32
  */
 
 struct _IdeSettings
 {
   GObject              parent_instance;
 
-  DzlSettingsSandwich *settings_sandwich;
+  IdeSettingsSandwich *settings_sandwich;
   gchar               *relative_path;
   gchar               *schema_id;
   gchar               *project_id;
@@ -178,7 +176,7 @@ ide_settings_constructed (GObject *object)
   g_assert ((self->relative_path [0] == 0) || g_str_has_suffix (self->relative_path, "/"));
 
   full_path = g_strdup_printf ("/org/gnome/builder/%s", self->relative_path);
-  self->settings_sandwich = dzl_settings_sandwich_new (self->schema_id, full_path);
+  self->settings_sandwich = ide_settings_sandwich_new (self->schema_id, full_path);
 
   /* Add our project relative settings */
   if (self->ignore_project_settings == FALSE)
@@ -186,14 +184,14 @@ ide_settings_constructed (GObject *object)
       path = g_strdup_printf ("/org/gnome/builder/projects/%s/%s",
                               self->project_id, self->relative_path);
       settings = g_settings_new_with_path (self->schema_id, path);
-      dzl_settings_sandwich_append (self->settings_sandwich, settings);
+      ide_settings_sandwich_append (self->settings_sandwich, settings);
       g_clear_object (&settings);
       g_free (path);
     }
 
   /* Add our application global (user defaults) settings */
   settings = g_settings_new_with_path (self->schema_id, full_path);
-  dzl_settings_sandwich_append (self->settings_sandwich, settings);
+  ide_settings_sandwich_append (self->settings_sandwich, settings);
   g_clear_object (&settings);
 
   IDE_EXIT;
@@ -385,7 +383,7 @@ ide_settings_get_default_value (IdeSettings *self,
   g_return_val_if_fail (IDE_IS_SETTINGS (self), NULL);
   g_return_val_if_fail (key != NULL, NULL);
 
-  return dzl_settings_sandwich_get_default_value (self->settings_sandwich, key);
+  return ide_settings_sandwich_get_default_value (self->settings_sandwich, key);
 }
 
 GVariant *
@@ -395,7 +393,7 @@ ide_settings_get_user_value (IdeSettings *self,
   g_return_val_if_fail (IDE_IS_SETTINGS (self), NULL);
   g_return_val_if_fail (key != NULL, NULL);
 
-  return dzl_settings_sandwich_get_user_value (self->settings_sandwich, key);
+  return ide_settings_sandwich_get_user_value (self->settings_sandwich, key);
 }
 
 GVariant *
@@ -405,7 +403,7 @@ ide_settings_get_value (IdeSettings *self,
   g_return_val_if_fail (IDE_IS_SETTINGS (self), NULL);
   g_return_val_if_fail (key != NULL, NULL);
 
-  return dzl_settings_sandwich_get_value (self->settings_sandwich, key);
+  return ide_settings_sandwich_get_value (self->settings_sandwich, key);
 }
 
 void
@@ -416,7 +414,7 @@ ide_settings_set_value (IdeSettings *self,
   g_return_if_fail (IDE_IS_SETTINGS (self));
   g_return_if_fail (key != NULL);
 
-  return dzl_settings_sandwich_set_value (self->settings_sandwich, key, value);
+  return ide_settings_sandwich_set_value (self->settings_sandwich, key, value);
 }
 
 gboolean
@@ -426,7 +424,7 @@ ide_settings_get_boolean (IdeSettings *self,
   g_return_val_if_fail (IDE_IS_SETTINGS (self), FALSE);
   g_return_val_if_fail (key != NULL, FALSE);
 
-  return dzl_settings_sandwich_get_boolean (self->settings_sandwich, key);
+  return ide_settings_sandwich_get_boolean (self->settings_sandwich, key);
 }
 
 gdouble
@@ -436,7 +434,7 @@ ide_settings_get_double (IdeSettings *self,
   g_return_val_if_fail (IDE_IS_SETTINGS (self), 0.0);
   g_return_val_if_fail (key != NULL, 0.0);
 
-  return dzl_settings_sandwich_get_double (self->settings_sandwich, key);
+  return ide_settings_sandwich_get_double (self->settings_sandwich, key);
 }
 
 gint
@@ -446,7 +444,7 @@ ide_settings_get_int (IdeSettings *self,
   g_return_val_if_fail (IDE_IS_SETTINGS (self), 0);
   g_return_val_if_fail (key != NULL, 0);
 
-  return dzl_settings_sandwich_get_int (self->settings_sandwich, key);
+  return ide_settings_sandwich_get_int (self->settings_sandwich, key);
 }
 
 gchar *
@@ -456,7 +454,7 @@ ide_settings_get_string (IdeSettings *self,
   g_return_val_if_fail (IDE_IS_SETTINGS (self), NULL);
   g_return_val_if_fail (key != NULL, NULL);
 
-  return dzl_settings_sandwich_get_string (self->settings_sandwich, key);
+  return ide_settings_sandwich_get_string (self->settings_sandwich, key);
 }
 
 guint
@@ -466,7 +464,7 @@ ide_settings_get_uint (IdeSettings *self,
   g_return_val_if_fail (IDE_IS_SETTINGS (self), 0);
   g_return_val_if_fail (key != NULL, 0);
 
-  return dzl_settings_sandwich_get_uint (self->settings_sandwich, key);
+  return ide_settings_sandwich_get_uint (self->settings_sandwich, key);
 }
 
 void
@@ -477,7 +475,7 @@ ide_settings_set_boolean (IdeSettings *self,
   g_return_if_fail (IDE_IS_SETTINGS (self));
   g_return_if_fail (key != NULL);
 
-  dzl_settings_sandwich_set_boolean (self->settings_sandwich, key, val);
+  ide_settings_sandwich_set_boolean (self->settings_sandwich, key, val);
 }
 
 void
@@ -488,7 +486,7 @@ ide_settings_set_double (IdeSettings *self,
   g_return_if_fail (IDE_IS_SETTINGS (self));
   g_return_if_fail (key != NULL);
 
-  dzl_settings_sandwich_set_double (self->settings_sandwich, key, val);
+  ide_settings_sandwich_set_double (self->settings_sandwich, key, val);
 }
 
 void
@@ -499,7 +497,7 @@ ide_settings_set_int (IdeSettings *self,
   g_return_if_fail (IDE_IS_SETTINGS (self));
   g_return_if_fail (key != NULL);
 
-  dzl_settings_sandwich_set_int (self->settings_sandwich, key, val);
+  ide_settings_sandwich_set_int (self->settings_sandwich, key, val);
 }
 
 void
@@ -510,7 +508,7 @@ ide_settings_set_string (IdeSettings *self,
   g_return_if_fail (IDE_IS_SETTINGS (self));
   g_return_if_fail (key != NULL);
 
-  dzl_settings_sandwich_set_string (self->settings_sandwich, key, val);
+  ide_settings_sandwich_set_string (self->settings_sandwich, key, val);
 }
 
 void
@@ -521,7 +519,7 @@ ide_settings_set_uint (IdeSettings *self,
   g_return_if_fail (IDE_IS_SETTINGS (self));
   g_return_if_fail (key != NULL);
 
-  dzl_settings_sandwich_set_uint (self->settings_sandwich, key, val);
+  ide_settings_sandwich_set_uint (self->settings_sandwich, key, val);
 }
 
 void
@@ -536,7 +534,7 @@ ide_settings_bind (IdeSettings        *self,
   g_return_if_fail (G_IS_OBJECT (object));
   g_return_if_fail (property != NULL);
 
-  dzl_settings_sandwich_bind (self->settings_sandwich, key, object, property, flags);
+  ide_settings_sandwich_bind (self->settings_sandwich, key, object, property, flags);
 }
 
 /**
@@ -555,8 +553,6 @@ ide_settings_bind (IdeSettings        *self,
  * @get_mapping and @set_mapping transformation functions.
  *
  * Call ide_settings_unbind() to unbind the mapping.
- *
- * Since: 3.32
  */
 void
 ide_settings_bind_with_mapping (IdeSettings             *self,
@@ -574,7 +570,7 @@ ide_settings_bind_with_mapping (IdeSettings             *self,
   g_return_if_fail (G_IS_OBJECT (object));
   g_return_if_fail (property != NULL);
 
-  dzl_settings_sandwich_bind_with_mapping (self->settings_sandwich, key, object, property, flags,
+  ide_settings_sandwich_bind_with_mapping (self->settings_sandwich, key, object, property, flags,
                                            get_mapping, set_mapping, user_data, destroy);
 }
 
@@ -585,5 +581,5 @@ ide_settings_unbind (IdeSettings *self,
   g_return_if_fail (IDE_IS_SETTINGS (self));
   g_return_if_fail (property != NULL);
 
-  dzl_settings_sandwich_unbind (self->settings_sandwich, property);
+  ide_settings_sandwich_unbind (self->settings_sandwich, property);
 }
diff --git a/src/libide/core/ide-settings.h b/src/libide/core/ide-settings.h
index ab61a0043..4ce372952 100644
--- a/src/libide/core/ide-settings.h
+++ b/src/libide/core/ide-settings.h
@@ -26,75 +26,75 @@ G_BEGIN_DECLS
 
 #define IDE_TYPE_SETTINGS (ide_settings_get_type())
 
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 G_DECLARE_FINAL_TYPE (IdeSettings, ide_settings, IDE, SETTINGS, GObject)
 
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 IdeSettings *ide_settings_new                         (const gchar             *project_id,
                                                        const gchar             *schema_id,
                                                        const gchar             *relative_path,
                                                        gboolean                 ignore_project_settings);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 const gchar *ide_settings_get_relative_path           (IdeSettings             *self);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 const gchar *ide_settings_get_schema_id               (IdeSettings             *self);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 gboolean     ide_settings_get_ignore_project_settings (IdeSettings             *self);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 GVariant    *ide_settings_get_default_value           (IdeSettings             *self,
                                                        const gchar             *key);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 GVariant    *ide_settings_get_user_value              (IdeSettings             *self,
                                                        const gchar             *key);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 GVariant    *ide_settings_get_value                   (IdeSettings             *self,
                                                        const gchar             *key);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 void         ide_settings_set_value                   (IdeSettings             *self,
                                                        const gchar             *key,
                                                        GVariant                *value);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 gboolean     ide_settings_get_boolean                 (IdeSettings             *self,
                                                        const gchar             *key);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 gdouble      ide_settings_get_double                  (IdeSettings             *self,
                                                        const gchar             *key);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 gint         ide_settings_get_int                     (IdeSettings             *self,
                                                        const gchar             *key);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 gchar       *ide_settings_get_string                  (IdeSettings             *self,
                                                        const gchar             *key);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 guint        ide_settings_get_uint                    (IdeSettings             *self,
                                                        const gchar             *key);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 void         ide_settings_set_boolean                 (IdeSettings             *self,
                                                        const gchar             *key,
                                                        gboolean                 val);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 void         ide_settings_set_double                  (IdeSettings             *self,
                                                        const gchar             *key,
                                                        gdouble                  val);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 void         ide_settings_set_int                     (IdeSettings             *self,
                                                        const gchar             *key,
                                                        gint                     val);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 void         ide_settings_set_string                  (IdeSettings             *self,
                                                        const gchar             *key,
                                                        const gchar             *val);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 void         ide_settings_set_uint                    (IdeSettings             *self,
                                                        const gchar             *key,
                                                        guint                    val);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 void         ide_settings_bind                        (IdeSettings             *self,
                                                        const gchar             *key,
                                                        gpointer                 object,
                                                        const gchar             *property,
                                                        GSettingsBindFlags       flags);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 void         ide_settings_bind_with_mapping           (IdeSettings             *self,
                                                        const gchar             *key,
                                                        gpointer                 object,
@@ -104,7 +104,7 @@ void         ide_settings_bind_with_mapping           (IdeSettings             *
                                                        GSettingsBindSetMapping  set_mapping,
                                                        gpointer                 user_data,
                                                        GDestroyNotify           destroy);
-IDE_AVAILABLE_IN_3_32
+IDE_AVAILABLE_IN_ALL
 void         ide_settings_unbind                      (IdeSettings             *self,
                                                        const gchar             *property);
 
diff --git a/src/libide/core/meson.build b/src/libide/core/meson.build
index 8534de1c8..a96fa9db1 100644
--- a/src/libide/core/meson.build
+++ b/src/libide/core/meson.build
@@ -73,6 +73,7 @@ libide_core_public_headers = [
 ]
 
 libide_core_private_headers = [
+  'ide-settings-sandwich-private.h',
   'ide-transfer-manager-private.h',
 ]
 
@@ -99,9 +100,14 @@ libide_core_public_sources = [
   'ide-transfer-manager.c',
 ]
 
+libide_core_private_sources = [
+  'ide-settings-sandwich.c',
+]
+
 libide_core_sources = []
 libide_core_sources += libide_core_generated_headers
 libide_core_sources += libide_core_public_sources
+libide_core_sources += libide_core_private_sources
 
 #
 # Library Definitions


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