summaryrefslogtreecommitdiff
path: root/mate-settings-daemon
diff options
context:
space:
mode:
Diffstat (limited to 'mate-settings-daemon')
-rw-r--r--mate-settings-daemon/main.c2
-rw-r--r--mate-settings-daemon/mate-settings-manager.c38
-rw-r--r--mate-settings-daemon/mate-settings-plugin-info.c26
-rw-r--r--mate-settings-daemon/mate-settings-plugin.h126
4 files changed, 61 insertions, 131 deletions
diff --git a/mate-settings-daemon/main.c b/mate-settings-daemon/main.c
index fadf69a..b17e1a3 100644
--- a/mate-settings-daemon/main.c
+++ b/mate-settings-daemon/main.c
@@ -493,7 +493,7 @@ main (int argc, char *argv[])
daemon_terminate_parent ();
if (do_timed_exit) {
- g_timeout_add (1000 * 30, (GSourceFunc) timed_exit_cb, NULL);
+ g_timeout_add_seconds (30, (GSourceFunc) timed_exit_cb, NULL);
}
gtk_main ();
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);
diff --git a/mate-settings-daemon/mate-settings-plugin-info.c b/mate-settings-daemon/mate-settings-plugin-info.c
index 9936fb7..17bc0d6 100644
--- a/mate-settings-daemon/mate-settings-plugin-info.c
+++ b/mate-settings-daemon/mate-settings-plugin-info.c
@@ -117,7 +117,9 @@ mate_settings_plugin_info_finalize (GObject *object)
g_free (info->priv->copyright);
g_strfreev (info->priv->authors);
- g_object_unref (info->priv->settings);
+ if (info->priv->settings != NULL) {
+ g_object_unref (info->priv->settings);
+ }
G_OBJECT_CLASS (mate_settings_plugin_info_parent_class)->finalize (object);
}
@@ -288,8 +290,8 @@ mate_settings_plugin_info_fill_from_file (MateSettingsPluginInfo *info,
}
static void
-plugin_enabled_cb (GSettings *settings,
- gchar *key,
+plugin_enabled_cb (GSettings *settings,
+ gchar *key,
MateSettingsPluginInfo *info)
{
if (g_settings_get_boolean (info->priv->settings, key)) {
@@ -596,11 +598,17 @@ void
mate_settings_plugin_info_set_schema (MateSettingsPluginInfo *info,
gchar *schema)
{
- g_return_if_fail (MATE_IS_SETTINGS_PLUGIN_INFO (info));
+ int priority;
+
+ g_return_if_fail (MATE_IS_SETTINGS_PLUGIN_INFO (info));
+
+ info->priv->settings = g_settings_new (schema);
+ info->priv->enabled = g_settings_get_boolean (info->priv->settings, "active");
+
+ priority = g_settings_get_int (info->priv->settings, "priority");
+ if (priority > 0)
+ info->priv->priority = priority;
- info->priv->settings = g_settings_new (schema);
- info->priv->priority = g_settings_get_int(info->priv->settings, "priority");
- info->priv->enabled = g_settings_get_boolean(info->priv->settings, "active");
-
- g_signal_connect (info->priv->settings, "changed::active", G_CALLBACK (plugin_enabled_cb), info);
+ g_signal_connect (G_OBJECT (info->priv->settings), "changed::active",
+ G_CALLBACK (plugin_enabled_cb), info);
}
diff --git a/mate-settings-daemon/mate-settings-plugin.h b/mate-settings-daemon/mate-settings-plugin.h
index 0f90567..534034f 100644
--- a/mate-settings-daemon/mate-settings-plugin.h
+++ b/mate-settings-daemon/mate-settings-plugin.h
@@ -59,123 +59,19 @@ void mate_settings_plugin_deactivate (MateSettingsPlugin *pl
*
* use: MATE_SETTINGS_PLUGIN_REGISTER (PluginName, plugin_name)
*/
-#define MATE_SETTINGS_PLUGIN_REGISTER(PluginName, plugin_name) \
- \
-static GType plugin_name##_type = 0; \
-static GTypeModule *plugin_module_type = 0; \
- \
-GType \
-plugin_name##_get_type (void) \
-{ \
- return plugin_name##_type; \
-} \
- \
-static void plugin_name##_init (PluginName *self); \
-static void plugin_name##_class_init (PluginName##Class *klass); \
-static gpointer plugin_name##_parent_class = NULL; \
-static void plugin_name##_class_intern_init (gpointer klass) \
-{ \
- plugin_name##_parent_class = g_type_class_peek_parent (klass); \
- plugin_name##_class_init ((PluginName##Class *) klass); \
-} \
- \
-G_MODULE_EXPORT GType \
-register_mate_settings_plugin (GTypeModule *module) \
-{ \
- static const GTypeInfo our_info = \
- { \
- sizeof (PluginName##Class), \
- NULL, /* base_init */ \
- NULL, /* base_finalize */ \
- (GClassInitFunc) plugin_name##_class_intern_init, \
- NULL, \
- NULL, /* class_data */ \
- sizeof (PluginName), \
- 0, /* n_preallocs */ \
- (GInstanceInitFunc) plugin_name##_init \
- }; \
- \
- g_debug ("Registering " #PluginName); \
- \
- /* Initialise the i18n stuff */ \
- bindtextdomain (GETTEXT_PACKAGE, MATE_SETTINGS_LOCALEDIR); \
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); \
- \
- plugin_module_type = module; \
- plugin_name##_type = g_type_module_register_type (module, \
- MATE_TYPE_SETTINGS_PLUGIN, \
- #PluginName, \
- &our_info, \
- 0); \
- \
- return plugin_name##_type; \
+#define MATE_SETTINGS_PLUGIN_REGISTER(PluginName, plugin_name) \
+ G_DEFINE_DYNAMIC_TYPE (PluginName, \
+ plugin_name, \
+ MATE_TYPE_SETTINGS_PLUGIN) \
+ \
+G_MODULE_EXPORT GType \
+register_mate_settings_plugin (GTypeModule *type_module) \
+{ \
+ plugin_name##_register_type (type_module); \
+ \
+ return plugin_name##_get_type(); \
}
-/*
- * Utility macro used to register gobject types in plugins with additional code
- *
- * use: MATE_SETTINGS_PLUGIN_DEFINE_TYPE_WITH_CODE(ObjectName, object_name, PARENT_TYPE, CODE)
- */
-#define MATE_SETTINGS_PLUGIN_DEFINE_TYPE_WITH_CODE(ObjectName, object_name, PARENT_TYPE, CODE) \
-static void object_name##_init (ObjectName *self); \
-static void object_name##_class_init (ObjectName##Class *klass); \
-static gpointer object_name##_parent_class = ((void *)0); \
-static GType ojbect_name##_type_id = 0; \
- \
-static void object_name##_class_intern_init (gpointer klass) \
-{ \
- object_name##_parent_class = g_type_class_peek_parent (klass); \
- object_name##_class_init ((ObjectName##Class *) klass); \
-} \
- \
- \
-GType \
-object_name##_get_type (void) \
-{ \
- g_assert (object_name##_type_id != 0); \
- \
- return object_name##_type_id; \
-} \
- \
-GType \
-object_name##_register_type (GTypeModule *module) \
-{ \
- if ((object_name##_type_id == 0)) { \
- const GTypeInfo g_define_type_info = { \
- sizeof (ObjectName##Class), \
- (GBaseInitFunc) ((void *)0), \
- (GBaseFinalizeFunc) ((void *)0), \
- (GClassInitFunc) object_name##_class_intern_init, \
- (GClassFinalizeFunc) ((void *)0), \
- ((void *)0), \
- sizeof (ObjectName), \
- 0, \
- (GInstanceInitFunc) object_name##_init, \
- ((void *)0) \
- }; \
- object_name##_type_id = \
- g_type_module_register_type (module, \
- PARENT_TYPE, \
- #ObjectName, \
- &g_define_type_info, \
- (GTypeFlags) 0); \
- } \
- \
- g_debug ("Registering " #ObjectName); \
- \
- CODE \
- \
- return type_name##_type_id; \
-}
-
-/*
- * Utility macro used to register gobject types in plugins
- *
- * use: MATE_SETTINGS_PLUGIN_DEFINE_TYPE(ObjectName, object_name, PARENT_TYPE)
- */
-#define MATE_SETTINGS_PLUGIN_DEFINE_TYPE(ObjectName, object_name, PARENT_TYPE) \
- MATE_SETTINGS_PLUGIN_DEFINE_TYPE_WITH_CODE(ObjectName, object_name, PARENT_TYPE, ;)
-
#ifdef __cplusplus
}
#endif