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);
return MIR_SERVER (server)->priv->vt;
}
-static gboolean
-mir_server_start (DisplayServer *display_server)
-{
- return DISPLAY_SERVER_CLASS (mir_server_parent_class)->start (display_server);
-}
-
static void
mir_server_setup_session (DisplayServer *display_server, Session *session)
{
DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
display_server_class->get_vt = mir_server_local_get_vt;
- display_server_class->start = mir_server_start;
display_server_class->setup_session = mir_server_setup_session;
object_class->finalize = mir_server_finalize;
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 (seat->priv->share_display_server && display_server_get_can_share (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) &&
+ seat->priv->share_display_server &&
+ display_server_get_can_share (display_server) &&
greeter_get_start_session (GREETER (session)))
{
GList *link;
}
/* If can re-use the display server, stop the greeter first */
- if (seat->priv->share_display_server)
+ if (seat->priv->share_display_server && display_server_get_can_share (session_get_display_server (SESSION (greeter))))
{
/* Run on the same display server after the greeter has stopped */
session_set_display_server (session, session_get_display_server (SESSION (greeter)));
DisplayServer *display_server;
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;
- session_set_display_server (session, display_server);
-
return TRUE;
}
}
server->priv->mir_socket = g_strdup (socket);
}
+static gboolean
+x_server_local_get_can_share (DisplayServer *server)
+{
+ return TRUE;
+}
+
static gint
x_server_local_get_vt (DisplayServer *server)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
+ display_server_class->get_can_share = x_server_local_get_can_share;
display_server_class->get_vt = x_server_local_get_vt;
display_server_class->start = x_server_local_start;
display_server_class->stop = x_server_local_stop;
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;