summaryrefslogtreecommitdiff
path: root/src/seat.c
diff options
context:
space:
mode:
authorJesús González <jgonzalez@gdr-sistemas.com>2014-12-25 10:36:37 +0100
committerJesús González <jgonzalez@gdr-sistemas.com>2014-12-25 10:36:37 +0100
commit7c0ffad5dc2ec05c8dfefb2ec1633f71e0ec26d3 (patch)
tree3c233995f901ec4c2223a4b01555fe9b2239b669 /src/seat.c
parentbec61a0484a524b5688a69ae76751974ba32b979 (diff)
downloadlightdm-git-7c0ffad5dc2ec05c8dfefb2ec1633f71e0ec26d3.tar.gz
When locking a session, if an existing greeter can't be reused, then it's stopped and its display server is reused with a new greeter.
Diffstat (limited to 'src/seat.c')
-rw-r--r--src/seat.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/seat.c b/src/seat.c
index fbb19949..16f40678 100644
--- a/src/seat.c
+++ b/src/seat.c
@@ -1532,8 +1532,9 @@ gboolean
seat_lock (Seat *seat, const gchar *username)
{
Greeter *greeter_session;
- DisplayServer *display_server;
- gboolean existing = FALSE;
+ DisplayServer *display_server = NULL;
+ gboolean reset_existing = FALSE;
+ gboolean reuse_xserver = FALSE;
g_return_val_if_fail (seat != NULL, FALSE);
@@ -1550,10 +1551,23 @@ seat_lock (Seat *seat, const gchar *username)
{
l_debug (seat, "Switching to existing greeter");
set_greeter_hints (seat, greeter_session);
- existing = TRUE;
+ reset_existing = TRUE;
}
else
{
+ /* If the existing greeter can't be reused, stop it and reuse its display server */
+ greeter_session = find_greeter_session (seat);
+ if (greeter_session)
+ {
+ display_server = session_get_display_server (SESSION (greeter_session));
+ if (!session_get_is_stopping (SESSION (greeter_session)))
+ {
+ l_debug (seat, "Stopping session");
+ session_stop (SESSION (greeter_session));
+ }
+ reuse_xserver = TRUE;
+ }
+
greeter_session = create_greeter_session (seat);
if (!greeter_session)
return FALSE;
@@ -1563,7 +1577,7 @@ seat_lock (Seat *seat, const gchar *username)
if (username)
greeter_set_hint (greeter_session, "select-user", username);
- if (existing)
+ if (reset_existing)
{
greeter_reset (greeter_session);
seat_set_active_session (seat, SESSION (greeter_session));
@@ -1571,14 +1585,18 @@ seat_lock (Seat *seat, const gchar *username)
}
else
{
- display_server = create_display_server (seat, SESSION (greeter_session));
+ if (!reuse_xserver)
+ display_server = create_display_server (seat, SESSION (greeter_session));
if (seat->priv->session_to_activate)
g_object_unref (seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (greeter_session);
session_set_display_server (SESSION (greeter_session), display_server);
- return display_server_start (display_server);
+ if (reuse_xserver)
+ return TRUE;
+ else
+ return display_server_start (display_server);
}
}