summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--daemon/gdm-simple-slave.c5
-rw-r--r--daemon/gdm-slave.c13
-rw-r--r--daemon/gdm-slave.h1
3 files changed, 14 insertions, 5 deletions
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index 35951c7a..1fe58bce 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -437,15 +437,18 @@ switch_to_and_unlock_session (GdmSimpleSlave *slave,
gboolean fail_if_already_switched)
{
char *username;
+ char *session_id;
gboolean res;
username = gdm_session_get_username (slave->priv->session);
+ session_id = gdm_session_get_session_id (slave->priv->session);
g_debug ("GdmSimpleSlave: trying to switch to session for user %s", username);
/* try to switch to an existing session */
- res = gdm_slave_switch_to_user_session (GDM_SLAVE (slave), username, fail_if_already_switched);
+ res = gdm_slave_switch_to_user_session (GDM_SLAVE (slave), username, session_id, fail_if_already_switched);
g_free (username);
+ g_free (session_id);
return res;
}
diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
index 128a8005..851f1ef9 100644
--- a/daemon/gdm-slave.c
+++ b/daemon/gdm-slave.c
@@ -1639,6 +1639,7 @@ session_unlock (GdmSlave *slave,
gboolean
gdm_slave_switch_to_user_session (GdmSlave *slave,
const char *username,
+ const char *session_id,
gboolean fail_if_already_switched)
{
gboolean res;
@@ -1648,10 +1649,14 @@ gdm_slave_switch_to_user_session (GdmSlave *slave,
ret = FALSE;
- ssid_to_activate = gdm_slave_get_primary_session_id_for_user (slave, username);
- if (ssid_to_activate == NULL) {
- g_debug ("GdmSlave: unable to determine session to activate");
- goto out;
+ if (session_id != NULL) {
+ ssid_to_activate = g_strdup (session_id);
+ } else {
+ ssid_to_activate = gdm_slave_get_primary_session_id_for_user (slave, username);
+ if (ssid_to_activate == NULL) {
+ g_debug ("GdmSlave: unable to determine session to activate");
+ goto out;
+ }
}
session_already_switched = session_is_active (slave, slave->priv->display_seat_id, ssid_to_activate);
diff --git a/daemon/gdm-slave.h b/daemon/gdm-slave.h
index 902de214..98084331 100644
--- a/daemon/gdm-slave.h
+++ b/daemon/gdm-slave.h
@@ -100,6 +100,7 @@ gboolean gdm_slave_add_user_authorization (GdmSlave *slave,
gboolean gdm_slave_switch_to_user_session (GdmSlave *slave,
const char *username,
+ const char *session_id,
gboolean fail_if_already_switched);
gboolean gdm_slave_connect_to_x11_display (GdmSlave *slave);