/*
* Copyright (C) 2010-2011 Robert Ancell.
* Author: Robert Ancell <robert.ancell@canonical.com>
- *
+ *
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
#include "configuration.h"
struct XServerPrivate
-{
+{
/* Host running the server */
gchar *hostname;
- /* Display number */
- guint number;
-
/* Cached server address */
gchar *address;
return server->priv->hostname;
}
-void
-x_server_set_display_number (XServer *server, guint number)
-{
- g_return_if_fail (server != NULL);
- server->priv->number = number;
- g_free (server->priv->address);
- server->priv->address = NULL;
-}
-
guint
x_server_get_display_number (XServer *server)
{
g_return_val_if_fail (server != NULL, 0);
- return server->priv->number;
+ return X_SERVER_GET_CLASS (server)->get_display_number (server);
}
const gchar *
if (!server->priv->address)
{
if (server->priv->hostname)
- server->priv->address = g_strdup_printf("%s:%d", server->priv->hostname, server->priv->number);
+ server->priv->address = g_strdup_printf("%s:%d", server->priv->hostname, x_server_get_display_number (server));
else
- server->priv->address = g_strdup_printf(":%d", server->priv->number);
- }
+ server->priv->address = g_strdup_printf(":%d", x_server_get_display_number (server));
+ }
return server->priv->address;
}
{
g_return_if_fail (server != NULL);
- if (server->priv->authority)
- g_object_unref (server->priv->authority);
+ g_clear_object (&server->priv->authority);
if (authority)
server->priv->authority = g_object_ref (authority);
- else
- server->priv->authority = NULL;
}
XAuthority *
return server->priv->authority;
}
+static const gchar *
+x_server_get_session_type (DisplayServer *server)
+{
+ return "x";
+}
+
static gboolean
x_server_get_can_share (DisplayServer *server)
{
auth = &a;
}
- /* Open connection */
- g_debug ("Connecting to XServer %s", x_server_get_address (server));
+ /* Open connection */
+ l_debug (server, "Connecting to XServer %s", x_server_get_address (server));
server->priv->connection = xcb_connect_to_display_with_auth_info (x_server_get_address (server), auth, NULL);
if (xcb_connection_has_error (server->priv->connection))
{
- g_debug ("Error connecting to XServer %s", x_server_get_address (server));
+ l_debug (server, "Error connecting to XServer %s", x_server_get_address (server));
return FALSE;
}
{
gint vt;
+ session_set_env (session, "XDG_SESSION_TYPE", "x11");
+
display_server = session_get_display_server (session);
vt = display_server_get_vt (display_server);
session_set_env (session, "XDG_VTNR", t);
g_free (t);
}
+ else
+ l_debug (session, "Not setting XDG_VTNR");
session_set_env (session, "DISPLAY", x_server_get_address (X_SERVER (display_server)));
- session_set_tty (session, x_server_get_address (X_SERVER (display_server)));
session_set_xdisplay (session, x_server_get_address (X_SERVER (display_server)));
session_set_remote_host_name (session, x_server_get_hostname (X_SERVER (display_server)));
session_set_x_authority (session,
static void
x_server_disconnect_session (DisplayServer *display_server, Session *session)
{
- session_set_tty (session, NULL);
- session_unset_env (session, "XDG_VTNR");
+ gint vt;
+
+ session_unset_env (session, "XDG_SESSION_TYPE");
+ vt = display_server_get_vt (display_server);
+ if (vt > 0)
+ {
+ session_set_tty (session, NULL);
+ session_unset_env (session, "XDG_VTNR");
+ }
session_unset_env (session, "DISPLAY");
session_set_xdisplay (session, NULL);
session_set_remote_host_name (session, NULL);
static void
x_server_finalize (GObject *object)
{
- XServer *self;
-
- self = X_SERVER (object);
+ XServer *self = X_SERVER (object);
g_free (self->priv->hostname);
g_free (self->priv->address);
- if (self->priv->authority)
- g_object_unref (self->priv->authority);
+ g_clear_object (&self->priv->authority);
if (self->priv->connection)
xcb_disconnect (self->priv->connection);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
+ display_server_class->get_session_type = x_server_get_session_type;
display_server_class->get_can_share = x_server_get_can_share;
display_server_class->start = x_server_start;
display_server_class->connect_session = x_server_connect_session;