结构体

GioSettingsSchema

以来:2.32

描述 [源代码]

struct GSettingsSchema {
  /* No available fields */
}

GSettingsSchemaSourceGSettingsSchema API 提供了一种机制,用于高级控制架构的加载以及对其内容的内省。

想要为插件提供访问设置的插件加载系统会遇到一个问题,那就是如何使这些设置的架构对 GSettings 可见。通常,插件会希望将架构与其自身一起分发,而不会将其安装到标准系统架构目录中。

GSettingsSchemaSource 通过允许创建一个新的“架构源”,从而获得这种机制。然后,该架构源可以成为与插件相关联的元数据的一部分,并在需要访问某些设置时进行查询。

考虑以下示例

typedef struct
{
   
   GSettingsSchemaSource *schema_source;
   
} Plugin;

Plugin *
initialise_plugin (const gchar *dir)
{
  Plugin *plugin;

  

  plugin->schema_source =
    g_settings_schema_source_new_from_directory (dir,
      g_settings_schema_source_get_default (), FALSE, NULL);

  

  return plugin;
}



GSettings *
plugin_get_settings (Plugin      *plugin,
                     const gchar *schema_id)
{
  GSettingsSchema *schema;

  if (schema_id == NULL)
    schema_id = plugin->identifier;

  schema = g_settings_schema_source_lookup (plugin->schema_source,
                                            schema_id, FALSE);

  if (schema == NULL)
    {
       disable the plugin or abort, etc 
    }

  return g_settings_new_full (schema, NULL, NULL);
}

上述代码展示了如何向初始化(或启用)插件的代码中添加钩子,以创建架构源,以及如何将 API 添加到插件系统中,以便插件能够方便地使用所分发的架构访问其设置。

从插件的角度看,它需要确保将 gschemas.compiled 文件作为自身的一部分分发,然后只需做以下操作

{
  GSettings *settings;
  gint some_value;

  settings = plugin_get_settings (self, NULL);
  some_value = g_settings_get_int (settings, "some-value");
  
}

也有可能插件系统期望的是架构源文件(即 .gschema.xml 文件),而不是 gschemas.compiled 文件。在这种情况下,插件加载系统必须在尝试创建设置源之前自行编译架构。

以来:2.32

实例方法

g_settings_schema_get_id

获取 schema 的 ID。

g_settings_schema_get_key

schema 获取名为 name 的键。

以来:2.40

g_settings_schema_get_path

获取与 schema 关联的路径,或 NULL

以来:2.32

g_settings_schema_has_key

检查 schema 是否有名为 name 的键。

以来:2.40

g_settings_schema_list_children

获取 schema 中子元素的列表。

以来:2.44

g_settings_schema_list_keys

schema 上的键进行内省。

以来:2.46

g_settings_schema_ref

增加 schema 的引用计数,返回新的引用。

以来:2.32

g_settings_schema_unref

减少 schema 的引用计数,可能会释放它。

以来:2.32