summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/org.mate.session.gschema.xml.in.in5
-rw-r--r--mate-session/msm-gnome.c41
2 files changed, 41 insertions, 5 deletions
diff --git a/data/org.mate.session.gschema.xml.in.in b/data/org.mate.session.gschema.xml.in.in
index 4ce615e..c532471 100644
--- a/data/org.mate.session.gschema.xml.in.in
+++ b/data/org.mate.session.gschema.xml.in.in
@@ -36,6 +36,11 @@
<_summary>Required session components</_summary>
<_description>List of components that are required as part of the session. (Each element names a key under "/org/mate/desktop/session/required_components"). The Startup Applications preferences tool will not normally allow users to remove a required component from the session, and the session manager will automatically add the required components back to the session at login time if they do get removed.</_description>
</key>
+ <key name="gnome-compat-startup" type="as">
+ <default>[ 'keyring', 'smproxy' ]</default>
+ <_summary>Control gnome compatibility component startup</_summary>
+ <_description>Control which compatibility components to start.</_description>
+ </key>
<child name="required-components" schema="org.mate.session.required-components"/>
</schema>
<schema id="org.mate.session.required-components" path="/org/mate/desktop/session/required-components/">
diff --git a/mate-session/msm-gnome.c b/mate-session/msm-gnome.c
index f92c45e..519d6a7 100644
--- a/mate-session/msm-gnome.c
+++ b/mate-session/msm-gnome.c
@@ -37,9 +37,13 @@
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
+#include <gio/gio.h>
#include "msm-gnome.h"
+#define GSM_SCHEMA "org.mate.session"
+#define GSM_GNOME_COMPAT_STARTUP_KEY "gnome-compat-startup"
+
#define GNOME_KEYRING_DAEMON "gnome-keyring-daemon"
@@ -222,16 +226,43 @@ msm_compat_gnome_smproxy_shutdown (void)
void
msm_gnome_start (void)
{
+ GSettings* settings;
+ gchar **array;
+ GList *startup = NULL;
+ gint i;
+
if (gnome_compat_started == TRUE)
return;
- g_debug ("MsmGnome: starting");
-
- msm_compat_gnome_smproxy_startup ();
+ settings = g_settings_new (GSM_SCHEMA);
+ array = g_settings_get_strv (settings, GSM_GNOME_COMPAT_STARTUP_KEY);
+ if (array) {
+ for (i = 0; array[i]; i++) {
+ startup = g_list_append (startup, g_strdup (array[i]));
+ }
+ }
+ g_strfreev (array);
+ g_object_unref (settings);
+
+ if (startup != NULL) {
+ if (g_list_find_custom (startup, "smproxy", (GCompareFunc) strcmp) != NULL) {
+ g_debug ("MsmGnome: starting smproxy");
+ msm_compat_gnome_smproxy_startup ();
+ gnome_compat_started = TRUE;
+ } else if (g_list_find_custom (startup, "keyring", (GCompareFunc) strcmp) != NULL) {
+ g_debug ("MsmGnome: starting keyring");
+ gnome_keyring_daemon_startup ();
+ gnome_compat_started = TRUE;
+ } else {
+ g_debug ("MsmGnome: unknown component, ignoring");
+ }
- gnome_keyring_daemon_startup ();
+ g_list_foreach (startup, (GFunc) g_free, NULL);
+ g_list_free (startup);
- gnome_compat_started = TRUE;
+ } else {
+ g_debug ("MsmGnome: No components found to start");
+ }
}