/* Command to run the X server */
gchar *command;
+ /* Display number to use */
+ guint display_number;
+
/* Config file to use */
gchar *config_file;
self = g_object_new (X_SERVER_LOCAL_TYPE, NULL);
- x_server_set_display_number (X_SERVER (self), x_server_local_get_unused_display_number ());
-
number = g_strdup_printf ("%d", x_server_get_display_number (X_SERVER (self)));
cookie = x_authority_new_local_cookie (number);
x_server_set_authority (X_SERVER (self), cookie);
server->priv->mir_socket = g_strdup (socket);
}
+static guint
+x_server_local_get_display_number (XServer *server)
+{
+ return X_SERVER_LOCAL (server)->priv->display_number;
+}
+
static gint
x_server_local_get_vt (DisplayServer *server)
{
if (signum == SIGUSR1 && !server->priv->got_signal)
{
server->priv->got_signal = TRUE;
- l_debug (server, "Got signal from X server :%d", x_server_get_display_number (X_SERVER (server)));
+ l_debug (server, "Got signal from X server :%d", server->priv->display_number);
// FIXME: Check return value
DISPLAY_SERVER_CLASS (x_server_local_parent_class)->start (DISPLAY_SERVER (server));
vt_unref (server->priv->vt);
server->priv->have_vt_ref = FALSE;
}
- x_server_local_release_display_number (x_server_get_display_number (X_SERVER (server)));
+ x_server_local_release_display_number (server->priv->display_number);
if (x_server_get_authority (X_SERVER (server)) && server->priv->authority_file)
{
command = g_string_new (absolute_command);
g_free (absolute_command);
- g_string_append_printf (command, " :%d", x_server_get_display_number (X_SERVER (server)));
+ g_string_append_printf (command, " :%d", server->priv->display_number);
if (server->priv->config_file)
g_string_append_printf (command, " -config %s", server->priv->config_file);
result = process_start (server->priv->x_server_process, FALSE);
if (result)
- l_debug (display_server, "Waiting for ready signal from X server :%d", x_server_get_display_number (X_SERVER (server)));
+ l_debug (display_server, "Waiting for ready signal from X server :%d", server->priv->display_number);
if (!result)
stopped_cb (server->priv->x_server_process, X_SERVER_LOCAL (server));
server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, X_SERVER_LOCAL_TYPE, XServerLocalPrivate);
server->priv->vt = -1;
server->priv->command = g_strdup ("X");
+ server->priv->display_number = x_server_local_get_unused_display_number ();
}
static void
x_server_local_class_init (XServerLocalClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ XServerClass *x_server_class = X_SERVER_CLASS (klass);
DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
+ x_server_class->get_display_number = x_server_local_get_display_number;
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;
#include "x-server-remote.h"
+struct XServerRemotePrivate
+{
+ /* Display number to use */
+ guint display_number;
+};
+
G_DEFINE_TYPE (XServerRemote, x_server_remote, X_SERVER_TYPE);
XServerRemote *
XServerRemote *self = g_object_new (X_SERVER_REMOTE_TYPE, NULL);
gchar *name;
+ self->priv->display_number = number;
+
x_server_set_hostname (X_SERVER (self), hostname);
- x_server_set_display_number (X_SERVER (self), number);
x_server_set_authority (X_SERVER (self), authority);
name = g_strdup_printf ("x-%s-%d", hostname, number);
return self;
}
+static guint
+x_server_remote_get_display_number (XServer *server)
+{
+ return X_SERVER_REMOTE (server)->priv->display_number;
+}
+
static void
x_server_remote_init (XServerRemote *server)
{
+ server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, X_SERVER_REMOTE_TYPE, XServerRemotePrivate);
}
static void
x_server_remote_class_init (XServerRemoteClass *klass)
{
+ XServerClass *x_server_class = X_SERVER_CLASS (klass);
+
+ x_server_class->get_display_number = x_server_remote_get_display_number;
+
+ g_type_class_add_private (klass, sizeof (XServerRemotePrivate));
}
#define X_SERVER_REMOTE_TYPE (x_server_remote_get_type())
#define X_SERVER_REMOTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), X_SERVER_REMOTE_TYPE, XServerRemote))
+typedef struct XServerRemotePrivate XServerRemotePrivate;
+
typedef struct
{
- XServer parent_instance;
+ XServer parent_instance;
+ XServerRemotePrivate *priv;
} XServerRemote;
typedef struct
/* Command to run the X server */
gchar *command;
+ /* Display number to use */
+ guint display_number;
+
/* Authority file */
gchar *authority_file;
XServerXVNC *self = g_object_new (X_SERVER_XVNC_TYPE, NULL);
gchar *name;
- x_server_set_display_number (X_SERVER (self), x_server_local_get_unused_display_number ());
-
name = g_strdup_printf ("xvnc-%d", x_server_get_display_number (X_SERVER (self)));
display_server_set_name (DISPLAY_SERVER (self), name);
g_free (name);
return server->priv->authority_file;
}
+static guint
+x_server_xvnc_get_display_number (XServer *server)
+{
+ return X_SERVER_XVNC (server)->priv->display_number;
+}
+
static gchar *
get_absolute_command (const gchar *command)
{
{
server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, X_SERVER_XVNC_TYPE, XServerXVNCPrivate);
server->priv->command = g_strdup ("Xvnc");
+ server->priv->display_number = x_server_local_get_unused_display_number ();
server->priv->width = 1024;
server->priv->height = 768;
server->priv->depth = 8;
x_server_xvnc_class_init (XServerXVNCClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ XServerClass *x_server_class = X_SERVER_CLASS (klass);
DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
+ x_server_class->get_display_number = x_server_xvnc_get_display_number;
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;
/* 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;
typedef struct
{
DisplayServerClass parent_class;
+ guint (*get_display_number) (XServer *server);
} XServerClass;
GType x_server_get_type (void);
gchar *x_server_get_hostname (XServer *server);
-void x_server_set_display_number (XServer *server, guint number);
-
guint x_server_get_display_number (XServer *server);
const gchar *x_server_get_address (XServer *server);