[gnome-session] Use "session-name" property which specifies which session to use
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-session] Use "session-name" property which specifies which session to use
- Date: Mon, 14 Feb 2011 15:33:07 +0000 (UTC)
commit 71cc0cde1a3fe81639ad86dde11ee4b2be42955e
Author: Alexander Larsson <alexl redhat com>
Date: Mon Feb 14 16:29:13 2011 +0100
Use "session-name" property which specifies which session to use
Currently we have two sessions:
"gnome"
"gnome-fallback"
This adds a GSetting (actual key defined in gsettings-desktop-schemacs)
which allows choosing between these, and potentially any arbitrary
.desktop file that a fork or embed may write.
This key will be toggled by gnome-control-center to implement
the "always fall back" preference.
gnome-session/gsm-manager.c | 36 ++++++++++++++++++++++++++++++++++++
gnome-session/gsm-manager.h | 5 +++++
gnome-session/gsm-session-fill.c | 25 +++++++++++++++++--------
3 files changed, 58 insertions(+), 8 deletions(-)
---
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index f6c5399..e5559cf 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -74,6 +74,7 @@
#define SESSION_SCHEMA "org.gnome.desktop.session"
#define KEY_IDLE_DELAY "idle-delay"
+#define KEY_SESSION_NAME "session-name"
#define GSM_MANAGER_SCHEMA "org.gnome.SessionManager"
#define KEY_AUTOSAVE "auto-save-session"
@@ -102,6 +103,8 @@ struct GsmManagerPrivate
GsmStore *apps;
GsmPresence *presence;
+ gboolean is_fallback_session : 1;
+
/* Current status */
GsmManagerPhase phase;
guint phase_timeout_id;
@@ -141,6 +144,7 @@ struct GsmManagerPrivate
enum {
PROP_0,
PROP_CLIENT_STORE,
+ PROP_FALLBACK,
PROP_FAILSAFE
};
@@ -1431,6 +1435,21 @@ gsm_manager_start (GsmManager *manager)
start_phase (manager);
}
+const char *
+_gsm_manager_get_default_session (GsmManager *manager)
+{
+ return g_settings_get_string (manager->priv->session_settings,
+ KEY_SESSION_NAME);
+}
+
+void
+_gsm_manager_set_is_fallback (GsmManager *manager,
+ gboolean is_fallback)
+{
+ manager->priv->is_fallback_session = is_fallback;
+}
+
+
static gboolean
_app_has_app_id (const char *id,
GsmApp *app,
@@ -2179,6 +2198,9 @@ gsm_manager_get_property (GObject *object,
case PROP_FAILSAFE:
g_value_set_boolean (value, self->priv->failsafe);
break;
+ case PROP_FALLBACK:
+ g_value_set_boolean (value, self->priv->is_fallback_session);
+ break;
case PROP_CLIENT_STORE:
g_value_set_object (value, self->priv->clients);
break;
@@ -2387,6 +2409,20 @@ gsm_manager_class_init (GsmManagerClass *klass)
NULL,
FALSE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ /**
+ * GsmManager::fallback
+ *
+ * If %TRUE, the current session is running in the "fallback" mode;
+ * this is distinct from whether or not it was configured as default.
+ */
+ g_object_class_install_property (object_class,
+ PROP_FALLBACK,
+ g_param_spec_boolean ("fallback",
+ NULL,
+ NULL,
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
g_object_class_install_property (object_class,
PROP_CLIENT_STORE,
g_param_spec_object ("client-store",
diff --git a/gnome-session/gsm-manager.h b/gnome-session/gsm-manager.h
index e34308a..406af8f 100644
--- a/gnome-session/gsm-manager.h
+++ b/gnome-session/gsm-manager.h
@@ -126,6 +126,11 @@ gboolean gsm_manager_add_legacy_session_apps (GsmManager *
void gsm_manager_start (GsmManager *manager);
+const char * _gsm_manager_get_default_session (GsmManager *manager);
+
+void _gsm_manager_set_is_fallback (GsmManager *manager,
+ gboolean is_fallback);
+
/* exported methods */
diff --git a/gnome-session/gsm-session-fill.c b/gnome-session/gsm-session-fill.c
index 80aa5ea..f1c61a2 100644
--- a/gnome-session/gsm-session-fill.c
+++ b/gnome-session/gsm-session-fill.c
@@ -28,8 +28,6 @@
#include "gsm-process-helper.h"
#include "gsm-util.h"
-#define GSM_DEFAULT_SESSION "gnome"
-
#define GSM_KEYFILE_SESSION_GROUP "GNOME Session"
#define GSM_KEYFILE_RUNNABLE_KEY "IsRunnableHelper"
#define GSM_KEYFILE_FALLBACK_KEY "FallbackSession"
@@ -361,7 +359,8 @@ find_valid_session_keyfile (const char *session)
}
static GKeyFile *
-get_session_keyfile (const char *session)
+get_session_keyfile (const char *session,
+ gboolean *is_fallback)
{
GKeyFile *keyfile;
gboolean session_runnable;
@@ -389,8 +388,11 @@ get_session_keyfile (const char *session)
session_runnable = check_required_components (keyfile);
}
- if (session_runnable)
+ if (session_runnable) {
+ if (is_fallback)
+ *is_fallback = FALSE;
return keyfile;
+ }
g_debug ("fill: *** Session is not runnable");
@@ -402,8 +404,11 @@ get_session_keyfile (const char *session)
g_key_file_free (keyfile);
keyfile = NULL;
- if (!IS_STRING_EMPTY (value))
- keyfile = get_session_keyfile (value);
+ if (!IS_STRING_EMPTY (value)) {
+ if (is_fallback)
+ *is_fallback = TRUE;
+ keyfile = get_session_keyfile (value, NULL);
+ }
g_free (value);
return keyfile;
@@ -415,6 +420,7 @@ gsm_session_fill (GsmManager *manager,
const char *session)
{
GKeyFile *keyfile;
+ gboolean is_fallback;
if (override_autostart_dirs != NULL) {
load_override_apps (manager, override_autostart_dirs);
@@ -422,13 +428,16 @@ gsm_session_fill (GsmManager *manager,
}
if (IS_STRING_EMPTY (session))
- session = GSM_DEFAULT_SESSION;
+ session = _gsm_manager_get_default_session (manager);
- keyfile = get_session_keyfile (session);
+ keyfile = get_session_keyfile (session, &is_fallback);
if (!keyfile)
return FALSE;
+ if (is_fallback)
+ _gsm_manager_set_is_fallback (manager, TRUE);
+
load_standard_apps (manager, keyfile);
g_key_file_free (keyfile);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]