[gnome-session] Make the current session name a property on the session manager



commit 3de35f663d1a3cb188fe662ca8aed0fa5af1ebeb
Author: Alexander Larsson <alexl redhat com>
Date:   Wed Feb 16 12:25:15 2011 +0100

    Make the current session name a property on the session manager
    
    This way this is introspectable via dbus, and its also useful internally
    as a change notification if it changes at runtime.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=642368

 gnome-session/gsm-manager.c      |   28 +++++++++++++++++++++++++---
 gnome-session/gsm-manager.h      |    4 ++--
 gnome-session/gsm-session-fill.c |   14 ++++++++++----
 3 files changed, 37 insertions(+), 9 deletions(-)
---
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index e5559cf..9ca2e73 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -103,6 +103,7 @@ struct GsmManagerPrivate
         GsmStore               *apps;
         GsmPresence            *presence;
 
+        char                   *session_name;
         gboolean                is_fallback_session : 1;
 
         /* Current status */
@@ -144,6 +145,7 @@ struct GsmManagerPrivate
 enum {
         PROP_0,
         PROP_CLIENT_STORE,
+        PROP_SESSION_NAME,
         PROP_FALLBACK,
         PROP_FAILSAFE
 };
@@ -1443,13 +1445,15 @@ _gsm_manager_get_default_session (GsmManager     *manager)
 }
 
 void
-_gsm_manager_set_is_fallback (GsmManager     *manager,
-                              gboolean        is_fallback)
+_gsm_manager_set_active_session (GsmManager     *manager,
+                                 const char     *session_name,
+                                 gboolean        is_fallback)
 {
+        g_free (manager->priv->session_name);
+        manager->priv->session_name = g_strdup (session_name);
         manager->priv->is_fallback_session = is_fallback;
 }
 
-
 static gboolean
 _app_has_app_id (const char   *id,
                  GsmApp       *app,
@@ -2198,6 +2202,9 @@ gsm_manager_get_property (GObject    *object,
         case PROP_FAILSAFE:
                 g_value_set_boolean (value, self->priv->failsafe);
                 break;
+        case PROP_SESSION_NAME:
+                g_value_set_string (value, self->priv->session_name);
+                break;
         case PROP_FALLBACK:
                 g_value_set_boolean (value, self->priv->is_fallback_session);
                 break;
@@ -2410,6 +2417,21 @@ gsm_manager_class_init (GsmManagerClass *klass)
                                                                FALSE,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
         /**
+         * GsmManager::session-name
+         *
+         * Then name of the currently active session, typically "gnome" or "gnome-fallback".
+         * This may be the name of the configured default session, or the name of a fallback
+         * session in case we fell back.
+         */
+        g_object_class_install_property (object_class,
+                                         PROP_SESSION_NAME,
+                                         g_param_spec_string ("session-name",
+                                                              NULL,
+                                                              NULL,
+                                                              NULL,
+                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+        /**
          * GsmManager::fallback
          *
          * If %TRUE, the current session is running in the "fallback" mode;
diff --git a/gnome-session/gsm-manager.h b/gnome-session/gsm-manager.h
index 406af8f..942b895 100644
--- a/gnome-session/gsm-manager.h
+++ b/gnome-session/gsm-manager.h
@@ -128,10 +128,10 @@ void                gsm_manager_start                          (GsmManager     *
 
 const char *        _gsm_manager_get_default_session           (GsmManager     *manager);
 
-void                _gsm_manager_set_is_fallback               (GsmManager     *manager,
+void                _gsm_manager_set_active_session            (GsmManager     *manager,
+                                                                const char     *session_name,
                                                                 gboolean        is_fallback);
 
-
 /* exported methods */
 
 gboolean            gsm_manager_register_client                (GsmManager            *manager,
diff --git a/gnome-session/gsm-session-fill.c b/gnome-session/gsm-session-fill.c
index f1c61a2..106e2f5 100644
--- a/gnome-session/gsm-session-fill.c
+++ b/gnome-session/gsm-session-fill.c
@@ -360,12 +360,15 @@ find_valid_session_keyfile (const char *session)
 
 static GKeyFile *
 get_session_keyfile (const char *session,
+                     char      **actual_session,
                      gboolean   *is_fallback)
 {
         GKeyFile *keyfile;
         gboolean  session_runnable;
         char     *value;
 
+        *actual_session = NULL;
+
         g_debug ("fill: *** Getting session '%s'", session);
 
         keyfile = find_valid_session_keyfile (session);
@@ -389,6 +392,7 @@ get_session_keyfile (const char *session,
         }
 
         if (session_runnable) {
+                *actual_session = g_strdup (session);
                 if (is_fallback)
                         *is_fallback = FALSE;
                 return keyfile;
@@ -407,7 +411,7 @@ get_session_keyfile (const char *session,
         if (!IS_STRING_EMPTY (value)) {
                 if (is_fallback)
                         *is_fallback = TRUE;
-                keyfile = get_session_keyfile (value, NULL);
+                keyfile = get_session_keyfile (value, actual_session, NULL);
         }
         g_free (value);
 
@@ -421,6 +425,7 @@ gsm_session_fill (GsmManager  *manager,
 {
         GKeyFile *keyfile;
         gboolean is_fallback;
+        char *actual_session;
 
         if (override_autostart_dirs != NULL) {
                 load_override_apps (manager, override_autostart_dirs);
@@ -430,13 +435,14 @@ gsm_session_fill (GsmManager  *manager,
         if (IS_STRING_EMPTY (session))
                 session = _gsm_manager_get_default_session (manager);
 
-        keyfile = get_session_keyfile (session, &is_fallback);
+        keyfile = get_session_keyfile (session, &actual_session, &is_fallback);
 
         if (!keyfile)
                 return FALSE;
 
-        if (is_fallback)
-                _gsm_manager_set_is_fallback (manager, TRUE);
+        _gsm_manager_set_active_session (manager, actual_session, is_fallback);
+
+        g_free (actual_session);
 
         load_standard_apps (manager, keyfile);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]