diff options
author | Jesús González <jgonzalez@gdr-sistemas.com> | 2015-01-05 21:29:53 +0100 |
---|---|---|
committer | Jesús González <jgonzalez@gdr-sistemas.com> | 2015-01-05 21:29:53 +0100 |
commit | a8ecb0045b165026df4e93e6d5b008584c3d6cac (patch) | |
tree | 732c9b7200c6b1f1c46a298e634e5f832535ba40 | |
parent | 7c0ffad5dc2ec05c8dfefb2ec1633f71e0ec26d3 (diff) | |
download | lightdm-a8ecb0045b165026df4e93e6d5b008584c3d6cac.tar.gz |
Store in the seat the replacement greeter that shall be started when the replaced one stops
-rw-r--r-- | src/seat.c | 31 | ||||
-rw-r--r-- | tests/scripts/lock-seat-twice.conf | 13 | ||||
-rw-r--r-- | tests/scripts/lock-session-twice.conf | 14 |
3 files changed, 52 insertions, 6 deletions
@@ -65,6 +65,9 @@ struct SeatPrivate /* TRUE if stopped */ gboolean stopped; + + /* The greeter to be started to replace the current one */ + Greeter *replacement_greeter; }; static void seat_logger_iface_init (LoggerInterface *iface); @@ -740,9 +743,28 @@ session_stopped_cb (Session *session, Seat *seat) g_object_unref (session); return; } + + /* If there is a pending replacement greeter, start it */ + if (IS_GREETER (session) && seat->priv->replacement_greeter) + { + Session *s = SESSION(seat->priv->replacement_greeter); + seat->priv->replacement_greeter = NULL; + g_object_unref(s); + + if (session_get_is_authenticated (s)) + { + l_debug (seat, "Greeter stopped, running session"); + run_session (seat, s); + } + else + { + l_debug (seat, "Greeter stopped, starting session authentication"); + start_session (seat, s); + } + } /* If this is the greeter session then re-use this display server */ - if (IS_GREETER (session) && + else if (IS_GREETER (session) && can_share_display_server (seat, display_server) && greeter_get_start_session (GREETER (session))) { @@ -1587,14 +1609,19 @@ seat_lock (Seat *seat, const gchar *username) { if (!reuse_xserver) display_server = create_display_server (seat, SESSION (greeter_session)); + session_set_display_server (SESSION (greeter_session), display_server); 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); if (reuse_xserver) + { + if (seat->priv->replacement_greeter) + g_object_unref (seat->priv->replacement_greeter); + seat->priv->replacement_greeter = g_object_ref (greeter_session); return TRUE; + } else return display_server_start (display_server); } diff --git a/tests/scripts/lock-seat-twice.conf b/tests/scripts/lock-seat-twice.conf index 19128acd..c8d6dc8e 100644 --- a/tests/scripts/lock-seat-twice.conf +++ b/tests/scripts/lock-seat-twice.conf @@ -54,8 +54,17 @@ user-session=default #?*SESSION-X-0 LOCK-SEAT #?SESSION-X-0 LOCK-SEAT -# Nothing should happen... -#?*WAIT +# Old greeter is stopped +#?GREETER-X-1 TERMINATE SIGNAL=15 + +# A new greeter is started and activated on the same X server +#?LOGIN1 ACTIVATE-SESSION SESSION=c2 +#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter +#?XSERVER-1 ACCEPT-CONNECT +#?GREETER-X-1 CONNECT-XSERVER +#?GREETER-X-1 CONNECT-TO-DAEMON +#?GREETER-X-1 CONNECTED-TO-DAEMON +#?GREETER-X-1 LOCK-HINT # Cleanup #?*STOP-DAEMON diff --git a/tests/scripts/lock-session-twice.conf b/tests/scripts/lock-session-twice.conf index 6a8bda7e..e7f20c3d 100644 --- a/tests/scripts/lock-session-twice.conf +++ b/tests/scripts/lock-session-twice.conf @@ -55,8 +55,18 @@ user-session=default #?*SESSION-X-0 LOCK-SESSION #?SESSION-X-0 LOCK-SESSION -# Nothing should happen -#?*WAIT +# Old greeter is stopped +#?GREETER-X-1 TERMINATE SIGNAL=15 +#?LOGIN1 ACTIVATE-SESSION SESSION=c2 + +# A new greeter is started and activated on the same X server +#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter +#?XSERVER-1 ACCEPT-CONNECT +#?GREETER-X-1 CONNECT-XSERVER +#?GREETER-X-1 CONNECT-TO-DAEMON +#?GREETER-X-1 CONNECTED-TO-DAEMON +#?GREETER-X-1 SELECT-USER-HINT USERNAME=have-password1 +#?GREETER-X-1 LOCK-HINT # Cleanup #?*STOP-DAEMON |