summaryrefslogtreecommitdiff
path: root/src/seat.c
diff options
context:
space:
mode:
authorJesús González <jgonzalez@gdr-sistemas.com>2015-01-05 21:29:53 +0100
committerJesús González <jgonzalez@gdr-sistemas.com>2015-01-05 21:29:53 +0100
commita8ecb0045b165026df4e93e6d5b008584c3d6cac (patch)
tree732c9b7200c6b1f1c46a298e634e5f832535ba40 /src/seat.c
parent7c0ffad5dc2ec05c8dfefb2ec1633f71e0ec26d3 (diff)
downloadlightdm-git-a8ecb0045b165026df4e93e6d5b008584c3d6cac.tar.gz
Store in the seat the replacement greeter that shall be started when the replaced one stops
Diffstat (limited to 'src/seat.c')
-rw-r--r--src/seat.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/seat.c b/src/seat.c
index 16f40678..d2de0c64 100644
--- a/src/seat.c
+++ b/src/seat.c
@@ -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);
}