summaryrefslogtreecommitdiff
path: root/mate-settings-daemon/mate-settings-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-settings-daemon/mate-settings-manager.c')
-rw-r--r--mate-settings-daemon/mate-settings-manager.c38
1 files changed, 32 insertions, 6 deletions
diff --git a/mate-settings-daemon/mate-settings-manager.c b/mate-settings-daemon/mate-settings-manager.c
index d0e38b2..a9c99ed 100644
--- a/mate-settings-daemon/mate-settings-manager.c
+++ b/mate-settings-daemon/mate-settings-manager.c
@@ -145,6 +145,23 @@ on_plugin_deactivated (MateSettingsPluginInfo *info,
g_signal_emit (manager, signals [PLUGIN_DEACTIVATED], 0, name);
}
+static gboolean
+is_item_in_schema (const char * const *items,
+ const char *item)
+{
+ while (*items) {
+ if (g_strcmp0 (*items++, item) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+is_schema (const char *schema)
+{
+ return is_item_in_schema (g_settings_list_schemas (), schema);
+}
+
static void
_load_file (MateSettingsManager *manager,
const char *filename)
@@ -171,16 +188,25 @@ _load_file (MateSettingsManager *manager,
manager->priv->plugins = g_slist_prepend (manager->priv->plugins,
g_object_ref (info));
- g_signal_connect (info, "activated",
- G_CALLBACK (on_plugin_activated), manager);
- g_signal_connect (info, "deactivated",
- G_CALLBACK (on_plugin_deactivated), manager);
-
schema = g_strdup_printf ("%s.plugins.%s",
DEFAULT_SETTINGS_PREFIX,
mate_settings_plugin_info_get_location (info));
- mate_settings_plugin_info_set_schema (info, schema);
+ /* Ignore unknown schemas or else we'll assert */
+ if (is_schema (schema)) {
+ manager->priv->plugins = g_slist_prepend (manager->priv->plugins,
+ g_object_ref (info));
+
+ g_signal_connect (info, "activated",
+ G_CALLBACK (on_plugin_activated), manager);
+ g_signal_connect (info, "deactivated",
+ G_CALLBACK (on_plugin_deactivated), manager);
+
+ /* Also sets priority for plugins */
+ mate_settings_plugin_info_set_schema (info, schema);
+ } else {
+ g_warning ("Ignoring unknown module '%s'", schema);
+ }
g_free (schema);