#include "configuration.h"
#include "xserver-local.h"
#include "xsession.h"
+#include "mir-server.h"
#include "vt.h"
G_DEFINE_TYPE (SeatXLocal, seat_xlocal, SEAT_TYPE);
}
static DisplayServer *
-seat_xlocal_create_display_server (Seat *seat)
+create_x_server (Seat *seat)
{
XServerLocal *xserver;
const gchar *command = NULL, *layout = NULL, *config_file = NULL, *xdmcp_manager = NULL, *key_name = NULL;
return DISPLAY_SERVER (xserver);
}
+static DisplayServer *
+create_mir_server (Seat *seat)
+{
+ MirServer *mir_server;
+
+ mir_server = mir_server_new ();
+ // FIXME: Set VT
+
+ return DISPLAY_SERVER (mir_server);
+}
+
+static DisplayServer *
+seat_xlocal_create_display_server (Seat *seat, const gchar *session_type)
+{
+ if (strcmp (session_type, "x") == 0)
+ return create_x_server (seat);
+ else if (strcmp (session_type, "mir") == 0)
+ return create_mir_server (seat);
+ else
+ {
+ g_warning ("Can't create unsupported display server '%s'", session_type);
+ return NULL;
+ }
+}
+
static Session *
seat_xlocal_create_session (Seat *seat, Display *display)
{
} SeatModule;
static GHashTable *seat_modules = NULL;
-static Display *create_display (Seat *seat);
+static Display *create_display (Seat *seat, const gchar *session_type);
void
seat_register_module (const gchar *name, GType type)
{
Display *d;
- d = create_display (seat);
+ d = create_display (seat, session_get_session_type (session));
g_signal_connect (d, "ready", G_CALLBACK (display_ready_cb), seat);
g_signal_emit (seat, signals[DISPLAY_ADDED], 0, d);
}
static Display *
-create_display (Seat *seat)
+create_display (Seat *seat, const gchar *session_type)
{
Display *display;
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);
display = display_new (display_server);
g_object_unref (display_server);
g_debug ("Starting new display for greeter");
- display = create_display (seat);
+ display = create_display (seat, "x" /*FIXME greeter_type */);
g_signal_connect (display, "ready", G_CALLBACK (display_ready_cb), seat);
return start_display (seat, display);
else
g_debug ("Starting new display for greeter");
- display = create_display (seat);
+ display = create_display (seat, "x" /* FIXME greeter_type */);
g_signal_connect (display, "ready", G_CALLBACK (display_ready_cb), seat);
display_set_select_user_hint (display, username, FALSE, TRUE);
if (session_name != NULL)
g_debug ("Starting new display for automatic guest login");
- display = create_display (seat);
+ display = create_display (seat, "x" /* FIXME guest_type */);
g_signal_connect (display, "ready", G_CALLBACK (display_ready_cb), seat);
display_set_autologin_user (display, NULL, TRUE, 0);
if (session_name != NULL)
g_debug ("Starting new display for greeter (lock screen)");
- display = create_display (seat);
+ display = create_display (seat, "x" /* FIXMEgreeter_type */);
g_signal_connect (display, "ready", G_CALLBACK (display_ready_cb), seat);
display_set_lock_hint (display, TRUE);
display_set_select_user_hint (display, username, FALSE, FALSE);
else if (autologin_username)
g_debug ("Starting new display for automatic login as user %s", autologin_username);
- autologin_display = create_display (seat);
+ autologin_display = create_display (seat, "x" /* FIXMEsession_type */);
display_set_autologin_user (autologin_display, autologin_username, autologin_guest, 0);
start_display (seat, autologin_display);
if (do_autologin && autologin_in_background && !switch_to_user (seat, NULL, FALSE))
{
g_debug ("Autologin in background, opening greeter first");
- display = create_display (seat);
+ display = create_display (seat, "x" /* FIXMEgreeter_type */);
g_signal_connect (display, "ready", G_CALLBACK (autologin_greeter_ready_cb), seat);
if (autologin_timeout > 0)
display_set_autologin_user (display, autologin_username, autologin_guest, autologin_timeout);
else
g_debug ("Starting new display for greeter");
- display = create_display (seat);
+ display = create_display (seat, "x" /* FIXMEsession_type */);
g_signal_connect (display, "ready", G_CALLBACK (display_ready_cb), seat);
display_set_autologin_user (display, autologin_username, autologin_guest, autologin_timeout);
return start_display (seat, display);
}
+static DisplayServer *
+seat_real_create_display_server (Seat *seat, const gchar *session_type)
+{
+ return NULL;
+}
+
static void
seat_real_set_active_display (Seat *seat, Display *display)
{
klass->setup = seat_real_setup;
klass->start = seat_real_start;
+ klass->create_display_server = seat_real_create_display_server;
klass->set_active_display = seat_real_set_active_display;
klass->get_active_display = seat_real_get_active_display;
klass->run_script = seat_real_run_script;