summaryrefslogtreecommitdiff
path: root/mate-settings-daemon/mate-settings-manager.c
diff options
context:
space:
mode:
authorJasmine Hassan <[email protected]>2012-12-04 19:03:17 +0200
committerJasmine Hassan <[email protected]>2012-12-05 04:26:40 +0200
commitca7b6632c336ee7fa991ffaa8b851491d558e70b (patch)
treebd034e4591326baf739e4342be6cfb31ed1db3a8 /mate-settings-daemon/mate-settings-manager.c
parenta279b02b4d563d2300ccb588e5969c7dfac8108e (diff)
downloadmate-settings-daemon-ca7b6632c336ee7fa991ffaa8b851491d558e70b.tar.bz2
mate-settings-daemon-ca7b6632c336ee7fa991ffaa8b851491d558e70b.tar.xz
[daemon] quick 'n dirty initial review of gsettings port
1. import: Don't choke if there are old plugins laying around http://git.gnome.org/browse/gnome-settings-daemon/commit/?id=18e57e126ff6a6ab2980c119aebef087227e2a54 2. Alleviate #23 -- no more "g_object_unref: assertion 'G_IS_OBJECT (object)' failed" when starting m-c-c "Appearance" properties.
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);