return server->priv->name;
}
+gboolean
+display_server_get_can_share (DisplayServer *server)
+{
+ return DISPLAY_SERVER_GET_CLASS (server)->get_can_share (server);
+}
+
+static gboolean
+display_server_real_get_can_share (DisplayServer *server)
+{
+ return FALSE;
+}
+
gint
display_server_get_vt (DisplayServer *server)
{
static void
display_server_class_init (DisplayServerClass *klass)
{
+ klass->get_can_share = display_server_real_get_can_share;
klass->get_vt = display_server_real_get_vt;
klass->start = display_server_real_start;
klass->setup_session = display_server_real_setup_session;
void (*ready)(DisplayServer *server);
void (*stopped)(DisplayServer *server);
+ gboolean (*get_can_share)(DisplayServer *server);
gint (*get_vt)(DisplayServer *server);
gboolean (*start)(DisplayServer *server);
void (*setup_session)(DisplayServer *server, Session *session);
const gchar *display_server_get_name (DisplayServer *server);
+gboolean display_server_get_can_share (DisplayServer *server);
+
gint display_server_get_vt (DisplayServer *server);
gboolean display_server_start (DisplayServer *server);
g_object_unref (display_server);
}
+static gboolean
+can_share_display_server (Seat *seat, DisplayServer *display_server)
+{
+ return seat->priv->share_display_server && display_server_get_can_share (display_server);
+}
+
static void
switch_to_greeter_from_failed_session (Seat *seat, Session *session)
{
g_object_unref (seat->priv->session_to_activate);
seat->priv->session_to_activate = g_object_ref (greeter_session);
- if (seat->priv->share_display_server)
+ if (can_share_display_server (seat, session_get_display_server (session)))
session_set_display_server (SESSION (greeter_session), session_get_display_server (session));
else
{
}
/* If this is the greeter session then re-use this display server */
- if (IS_GREETER (session) && seat->priv->share_display_server &&
+ if (IS_GREETER (session) &&
+ can_share_display_server (seat, display_server) &&
greeter_get_start_session (GREETER (session)))
{
GList *link;
User *user;
gchar *sessions_dir = NULL;
gchar **argv;
+ DisplayServer *display_server;
/* Get the session to use */
if (greeter_get_guest_authenticated (greeter))
}
/* If can re-use the display server, stop the greeter first */
- if (seat->priv->share_display_server)
+ display_server = session_get_display_server (SESSION (greeter));
+ if (can_share_display_server (seat, display_server))
{
/* Run on the same display server after the greeter has stopped */
- session_set_display_server (session, session_get_display_server (SESSION (greeter)));
+ session_set_display_server (session, display_server);
g_debug ("Stopping greeter");
session_stop (SESSION (greeter));
/* Otherwise start a new display server for this session */
else
{
- DisplayServer *display_server;
-
display_server = create_display_server (seat);
if (!display_server_start (display_server))
return FALSE;
DISPLAY_SERVER_CLASS (x_server_xvnc_parent_class)->stop (DISPLAY_SERVER (server));
}
+static gboolean
+x_server_xvnc_get_can_share (DisplayServer *server)
+{
+ return TRUE;
+}
+
static gboolean
x_server_xvnc_start (DisplayServer *display_server)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
+ display_server_class->get_can_share = x_server_xvnc_get_can_share;
display_server_class->start = x_server_xvnc_start;
display_server_class->stop = x_server_xvnc_stop;
object_class->finalize = x_server_xvnc_finalize;
return server->priv->authority;
}
+static gboolean
+x_server_get_can_share (DisplayServer *server)
+{
+ return TRUE;
+}
+
static gboolean
x_server_start (DisplayServer *display_server)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
+ display_server_class->get_can_share = x_server_get_can_share;
display_server_class->start = x_server_start;
display_server_class->setup_session = x_server_setup_session;
object_class->finalize = x_server_finalize;