diff options
Diffstat (limited to 'mate-settings-daemon')
-rw-r--r-- | mate-settings-daemon/main.c | 17 | ||||
-rw-r--r-- | mate-settings-daemon/mate-settings-manager.c | 40 | ||||
-rw-r--r-- | mate-settings-daemon/mate-settings-manager.h | 10 |
3 files changed, 54 insertions, 13 deletions
diff --git a/mate-settings-daemon/main.c b/mate-settings-daemon/main.c index da87c36..b070361 100644 --- a/mate-settings-daemon/main.c +++ b/mate-settings-daemon/main.c @@ -519,13 +519,24 @@ main (int argc, char *argv[]) goto out; } + /* If we aren't started by dbus then load the plugins automatically during the + * Initialization phase. Otherwise, wait for an Awake etc. */ + if (g_getenv ("DBUS_STARTER_BUS_TYPE") == NULL) { + error = NULL; + res = mate_settings_manager_start (manager, PLUGIN_LOAD_INIT, &error); + if (! res) { + g_warning ("Unable to start: %s", error->message); + g_error_free (error); + } + } + set_session_over_handler (bus, manager); - /* If we aren't started by dbus then load the plugins - automatically. Otherwise, wait for an Awake etc. */ + /* If we aren't started by dbus then load the plugins automatically after + * mate-settings-daemon has registered itself. Otherwise, wait for an Awake etc. */ if (g_getenv ("DBUS_STARTER_BUS_TYPE") == NULL) { error = NULL; - res = mate_settings_manager_start (manager, &error); + res = mate_settings_manager_start (manager, PLUGIN_LOAD_DEFER, &error); if (! res) { g_warning ("Unable to start: %s", error->message); g_error_free (error); diff --git a/mate-settings-daemon/mate-settings-manager.c b/mate-settings-daemon/mate-settings-manager.c index b076951..4936c84 100644 --- a/mate-settings-daemon/mate-settings-manager.c +++ b/mate-settings-daemon/mate-settings-manager.c @@ -50,6 +50,8 @@ struct MateSettingsManagerPrivate { DBusGConnection *connection; GSList *plugins; + gint init_load_priority; + gint load_init_flag; }; enum { @@ -80,15 +82,25 @@ mate_settings_manager_error_quark (void) } static void -maybe_activate_plugin (MateSettingsPluginInfo *info, gpointer user_data) +maybe_activate_plugin (MateSettingsPluginInfo *info, + MateSettingsManager *manager) { if (mate_settings_plugin_info_get_enabled (info)) { - gboolean res; - res = mate_settings_plugin_info_activate (info); - if (res) { - g_debug ("Plugin %s: active", mate_settings_plugin_info_get_location (info)); + int plugin_priority; + plugin_priority = mate_settings_plugin_info_get_priority (info); + + if (manager->priv->load_init_flag == PLUGIN_LOAD_ALL || + (manager->priv->load_init_flag == PLUGIN_LOAD_INIT && plugin_priority <= manager->priv->init_load_priority) || + (manager->priv->load_init_flag == PLUGIN_LOAD_DEFER && plugin_priority > manager->priv->init_load_priority)) { + gboolean res; + res = mate_settings_plugin_info_activate (info); + if (res) { + g_debug ("Plugin %s: active", mate_settings_plugin_info_get_location (info)); + } else { + g_debug ("Plugin %s: activation failed", mate_settings_plugin_info_get_location (info)); + } } else { - g_debug ("Plugin %s: activation failed", mate_settings_plugin_info_get_location (info)); + g_debug ("Plugin %s: loading deferred or previously loaded", mate_settings_plugin_info_get_location (info)); } } else { g_debug ("Plugin %s: inactive", mate_settings_plugin_info_get_location (info)); @@ -262,7 +274,7 @@ _load_all (MateSettingsManager *manager) _load_dir (manager, MATE_SETTINGS_PLUGINDIR G_DIR_SEPARATOR_S); manager->priv->plugins = g_slist_sort (manager->priv->plugins, (GCompareFunc) compare_priority); - g_slist_foreach (manager->priv->plugins, (GFunc) maybe_activate_plugin, NULL); + g_slist_foreach (manager->priv->plugins, (GFunc) maybe_activate_plugin, manager); mate_settings_profile_end (NULL); } @@ -295,7 +307,7 @@ mate_settings_manager_awake (MateSettingsManager *manager, GError **error) { g_debug ("Awake called"); - return mate_settings_manager_start (manager, error); + return mate_settings_manager_start (manager, PLUGIN_LOAD_ALL, error); } static gboolean @@ -319,7 +331,8 @@ register_manager (MateSettingsManager *manager) gboolean mate_settings_manager_start (MateSettingsManager *manager, - GError **error) + gint load_init_flag, + GError **error) { gboolean ret; @@ -339,6 +352,7 @@ mate_settings_manager_start (MateSettingsManager *manager, goto out; } + manager->priv->load_init_flag = load_init_flag; _load_all (manager); ret = TRUE; @@ -405,8 +419,16 @@ mate_settings_manager_class_init (MateSettingsManagerClass *klass) static void mate_settings_manager_init (MateSettingsManager *manager) { + char *schema; + GSettings *settings; manager->priv = MATE_SETTINGS_MANAGER_GET_PRIVATE (manager); + + schema = g_strdup_printf ("%s.plugins", DEFAULT_SETTINGS_PREFIX); + if (is_schema (schema)) { + settings = g_settings_new (schema); + manager->priv->init_load_priority = g_settings_get_int (settings, "init-load-priority"); + } } static void diff --git a/mate-settings-daemon/mate-settings-manager.h b/mate-settings-daemon/mate-settings-manager.h index 3d2296f..6eaf360 100644 --- a/mate-settings-daemon/mate-settings-manager.h +++ b/mate-settings-daemon/mate-settings-manager.h @@ -57,6 +57,13 @@ typedef enum MATE_SETTINGS_MANAGER_ERROR_GENERAL } MateSettingsManagerError; +enum +{ + PLUGIN_LOAD_ALL, + PLUGIN_LOAD_INIT, + PLUGIN_LOAD_DEFER +}; + #define MATE_SETTINGS_MANAGER_ERROR mate_settings_manager_error_quark () GQuark mate_settings_manager_error_quark (void); @@ -65,7 +72,8 @@ GType mate_settings_manager_get_type (void); MateSettingsManager * mate_settings_manager_new (void); gboolean mate_settings_manager_start (MateSettingsManager *manager, - GError **error); + gint load_init_flag, + GError **error); void mate_settings_manager_stop (MateSettingsManager *manager); gboolean mate_settings_manager_awake (MateSettingsManager *manager, |