static GHashTable *seat_modules = NULL;
// FIXME: Make a get_display_server() that re-uses display servers if supported
-static DisplayServer *create_display_server (Seat *seat);
+static DisplayServer *create_display_server (Seat *seat, const gchar *session_type);
static Greeter *create_greeter_session (Seat *seat);
static void start_session (Seat *seat, Session *session);
{
DisplayServer *display_server;
- display_server = create_display_server (seat);
+ display_server = create_display_server (seat, session_get_session_type (session));
if (!display_server_start (display_server))
{
g_debug ("Failed to start display server for greeter");
gchar **argv;
session = create_session (seat, TRUE);
+ session_set_session_type (session, session_config_get_session_type (session_config));
session_set_env (session, "DESKTOP_SESSION", session_name);
session_set_env (session, "GDMSESSION", session_name);
if (language && language[0] != '\0')
else
g_debug ("Can't find session '%s'", seat_get_string_property (seat, "user-session"));
+
g_object_unref (user);
return session;
}
session = create_session (seat, TRUE);
+ session_set_session_type (session, session_config_get_session_type (session_config));
session_set_do_authenticate (session, TRUE);
session_set_is_guest (session, TRUE);
argv = get_session_argv (session_config, seat_get_string_property (seat, "session-wrapper"));
Session *session;
session = create_session (seat, FALSE);
+ session_set_session_type (session, session_get_session_type (SESSION (greeter)));
session_set_display_server (session, session_get_display_server (SESSION (greeter)));
return g_object_ref (session);
{
DisplayServer *display_server;
- display_server = create_display_server (seat);
+ display_server = create_display_server (seat, session_get_session_type (session));
if (!display_server_start (display_server))
return FALSE;
}
greeter_session = SEAT_GET_CLASS (seat)->create_greeter_session (seat);
+ session_set_session_type (SESSION (greeter_session), session_config_get_session_type (session_config));
seat->priv->sessions = g_list_append (seat->priv->sessions, SESSION (greeter_session));
g_signal_connect (greeter_session, "authentication-complete", G_CALLBACK (session_authentication_complete_cb), seat);
g_signal_connect (greeter_session, "stopped", G_CALLBACK (session_stopped_cb), seat);
}
static DisplayServer *
-create_display_server (Seat *seat)
+create_display_server (Seat *seat, const gchar *session_type)
{
DisplayServer *display_server;
- display_server = SEAT_GET_CLASS (seat)->create_display_server (seat);
+ display_server = SEAT_GET_CLASS (seat)->create_display_server (seat, session_type);
seat->priv->display_servers = g_list_append (seat->priv->display_servers, display_server);
g_signal_connect (display_server, "ready", G_CALLBACK (display_server_ready_cb), seat);
g_signal_connect (display_server, "stopped", G_CALLBACK (display_server_stopped_cb), seat);
g_object_unref (seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (greeter_session);
- display_server = create_display_server (seat);
+ display_server = create_display_server (seat, session_get_session_type (SESSION (greeter_session)));
session_set_display_server (SESSION (greeter_session), display_server);
if (!display_server_start (display_server))
return FALSE;
seat->priv->session_to_activate = g_object_ref (session);
session_set_pam_service (session, USER_SERVICE);
- display_server = create_display_server (seat);
+ display_server = create_display_server (seat, session_get_session_type (session));
session_set_display_server (session, display_server);
if (!display_server_start (display_server))
return FALSE;
return TRUE;
}
- display_server = create_display_server (seat);
- if (!display_server_start (display_server))
- return FALSE;
-
session = create_guest_session (seat);
if (!session)
return FALSE;
+
+ display_server = create_display_server (seat, session_get_session_type (session));
+ if (!display_server_start (display_server))
+ return FALSE;
+
if (seat->priv->session_to_activate)
g_object_unref (seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (session);
return TRUE;
}
- display_server = create_display_server (seat);
+ greeter_session = create_greeter_session (seat);
+ if (!greeter_session)
+ return FALSE;
+
+ display_server = create_display_server (seat, session_get_session_type (SESSION (greeter_session)));
if (!display_server_start (display_server))
return FALSE;
- greeter_session = create_greeter_session (seat);
if (seat->priv->session_to_activate)
g_object_unref (seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (greeter_session);
int autologin_timeout;
gboolean autologin_guest;
gboolean autologin_in_background;
- Session *session = NULL;
+ Session *session = NULL, *background_session = NULL;
DisplayServer *display_server;
g_debug ("Starting seat");
- display_server = create_display_server (seat);
-
/* If this display server doesn't have a session running on it, just start it */
if (!get_start_local_sessions (seat))
+ {
+ display_server = create_display_server (seat, "x"); // FIXME: Not necessarily an X seat, but not sure what to put here
return display_server_start (display_server);
+ }
/* Get autologin settings */
autologin_username = seat_get_string_property (seat, "autologin-user");
/* Load in background if required */
if (autologin_in_background && session)
{
- DisplayServer *background_display_server;
-
- background_display_server = create_display_server (seat);
- session_set_display_server (session, background_display_server);
- if (!display_server_start (background_display_server))
- return FALSE;
-
- /* Start a greeter as well */
+ background_session = session;
session = NULL;
}
}
return FALSE;
}
+ display_server = create_display_server (seat, session_get_session_type (session));
+ if (!display_server)
+ return FALSE;
+
/* Start display server to show session on */
session_set_display_server (session, display_server);
if (!display_server_start (display_server))
return FALSE;
+ /* Start background session */
+ if (background_session)
+ {
+ DisplayServer *background_display_server;
+
+ background_display_server = create_display_server (seat, session_get_session_type (background_session));
+ session_set_display_server (background_session, background_display_server);
+ if (!display_server_start (background_display_server))
+ g_warning ("Failed to start display server for background session");
+ }
+
return TRUE;
}
+static Greeter *
+seat_real_create_greeter_session (Seat *seat)
+{
+ return greeter_new ();
+}
+
+static Session *
+seat_real_create_session (Seat *seat)
+{
+ return session_new ();
+}
+
static void
seat_real_set_active_session (Seat *seat, Session *session)
{
klass->get_start_local_sessions = seat_real_get_start_local_sessions;
klass->setup = seat_real_setup;
klass->start = seat_real_start;
+ klass->create_greeter_session = seat_real_create_greeter_session;
+ klass->create_session = seat_real_create_session;
klass->set_active_session = seat_real_set_active_session;
klass->get_active_session = seat_real_get_active_session;
klass->run_script = seat_real_run_script;