diff options
Diffstat (limited to 'daemon/gdm-simple-slave.c')
-rw-r--r-- | daemon/gdm-simple-slave.c | 53 |
1 files changed, 35 insertions, 18 deletions
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c index 7b9d7d8b..925378a4 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c @@ -472,6 +472,10 @@ start_session_timeout (GdmSimpleSlave *slave) goto out; } + /* Defer requests to use this display from ConsoleKit + * for the time being + */ + gdm_slave_block_console_session_requests_on_display (GDM_SLAVE (slave)); stop_greeter (slave); auth_file = NULL; @@ -487,6 +491,7 @@ start_session_timeout (GdmSimpleSlave *slave) gdm_session_start_session (GDM_SESSION (slave->priv->session), slave->priv->start_session_service_name); + gdm_slave_unblock_console_session_requests_on_display (GDM_SLAVE (slave)); out: slave->priv->start_session_id = 0; g_free (slave->priv->start_session_service_name); @@ -729,6 +734,16 @@ start_autologin_conversation_if_necessary (GdmSimpleSlave *slave) } static void +on_console_session_changed (GdmSession *session, + const char *text, + GdmSimpleSlave *slave) +{ + g_debug ("GdmSimpleSlave: Default session name changed: %s", text); + + gdm_slave_set_console_session_id (GDM_SLAVE (slave), text); +} + +static void create_new_session (GdmSimpleSlave *slave) { gboolean display_is_local; @@ -763,6 +778,7 @@ create_new_session (GdmSimpleSlave *slave) g_free (display_name); g_free (display_device); g_free (display_hostname); + g_free (display_x11_authority_file); g_signal_connect (slave->priv->session, "conversation-started", @@ -873,6 +889,11 @@ create_new_session (GdmSimpleSlave *slave) G_CALLBACK (on_default_session_name_changed), slave); + g_signal_connect (slave->priv->session, + "notify::display-console-session", + G_CALLBACK (on_console_session_changed), + slave); + start_autologin_conversation_if_necessary (slave); } @@ -992,7 +1013,7 @@ on_greeter_session_exited (GdmGreeterSession *greeter, GdmSimpleSlave *slave) { g_debug ("GdmSimpleSlave: Greeter exited: %d", code); - gdm_slave_stopped (GDM_SLAVE (slave)); + gdm_slave_failed (GDM_SLAVE (slave)); } static void @@ -1192,6 +1213,7 @@ start_greeter (GdmSimpleSlave *slave) char *display_id; char *display_name; char *seat_id; + char *session_id; char *display_device; char *display_hostname; char *auth_file; @@ -1204,6 +1226,7 @@ start_greeter (GdmSimpleSlave *slave) display_id = NULL; display_name = NULL; seat_id = NULL; + session_id = NULL; auth_file = NULL; display_device = NULL; display_hostname = NULL; @@ -1213,6 +1236,7 @@ start_greeter (GdmSimpleSlave *slave) "display-is-local", &display_is_local, "display-name", &display_name, "display-seat-id", &seat_id, + "display-session-id", &session_id, "display-hostname", &display_hostname, "display-x11-authority-file", &auth_file, NULL); @@ -1297,6 +1321,7 @@ start_greeter (GdmSimpleSlave *slave) g_debug ("GdmSimpleSlave: Creating greeter on %s %s %s", display_name, display_device, display_hostname); slave->priv->greeter = gdm_greeter_session_new (display_name, seat_id, + session_id, display_device, display_hostname, display_is_local); @@ -1385,7 +1410,11 @@ on_server_exited (GdmServer *server, { g_debug ("GdmSimpleSlave: server exited with code %d\n", exit_code); - gdm_slave_stopped (GDM_SLAVE (slave)); + if (exit_code != 0) { + gdm_slave_failed (GDM_SLAVE (slave)); + } else { + gdm_slave_stopped (GDM_SLAVE (slave)); + } } static void @@ -1403,31 +1432,20 @@ on_server_died (GdmServer *server, static gboolean gdm_simple_slave_run (GdmSimpleSlave *slave) { - char *display_name; - char *auth_file; + char *display_id; gboolean display_is_local; g_object_get (slave, + "display-id", &display_id, "display-is-local", &display_is_local, - "display-name", &display_name, - "display-x11-authority-file", &auth_file, NULL); /* if this is local display start a server if one doesn't * exist */ if (display_is_local) { gboolean res; - gboolean disable_tcp; - - slave->priv->server = gdm_server_new (display_name, auth_file); - disable_tcp = TRUE; - if (gdm_settings_client_get_boolean (GDM_KEY_DISALLOW_TCP, - &disable_tcp)) { - g_object_set (slave->priv->server, - "disable-tcp", disable_tcp, - NULL); - } + slave->priv->server = gdm_server_new (display_id); g_signal_connect (slave->priv->server, "exited", @@ -1460,8 +1478,7 @@ gdm_simple_slave_run (GdmSimpleSlave *slave) g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave); } - g_free (display_name); - g_free (auth_file); + g_free (display_id); return TRUE; } |