diff options
Diffstat (limited to 'mate-settings-daemon/mate-settings-manager.c')
-rw-r--r-- | mate-settings-daemon/mate-settings-manager.c | 38 |
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); |