]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Make the display number a vfunc from the X server class
authorRobert Ancell <robert.ancell@canonical.com>
Fri, 17 Jun 2016 00:33:15 +0000 (12:33 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Fri, 17 Jun 2016 00:33:15 +0000 (12:33 +1200)
src/x-server-local.c
src/x-server-remote.c
src/x-server-remote.h
src/x-server-xvnc.c
src/x-server.c
src/x-server.h

index 0860651a72eda432f32feecb80a66bc6fb5125d9..3e40c29fc9464391762ae12f7c1f51d5263ddac8 100644 (file)
@@ -30,6 +30,9 @@ struct XServerLocalPrivate
     /* Command to run the X server */
     gchar *command;
 
+    /* Display number to use */
+    guint display_number;
+
     /* Config file to use */
     gchar *config_file;
 
@@ -208,8 +211,6 @@ x_server_local_new (void)
 
     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);
@@ -345,6 +346,12 @@ x_server_local_set_mir_socket (XServerLocal *server, const gchar *socket)
     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)
 {
@@ -401,7 +408,7 @@ got_signal_cb (Process *process, int signum, XServerLocal *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));
@@ -419,7 +426,7 @@ stopped_cb (Process *process, XServerLocal *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)
     {
@@ -507,7 +514,7 @@ x_server_local_start (DisplayServer *display_server)
     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);
@@ -583,7 +590,7 @@ x_server_local_start (DisplayServer *display_server)
     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));
@@ -603,6 +610,7 @@ x_server_local_init (XServerLocal *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
@@ -635,8 +643,10 @@ 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;
index 1d1bc2a5070c1e44ef5be916810528d4eb5dcf25..1f458b15c5a9309b8edc339fdc81404bf9e08d18 100644 (file)
 
 #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 *
@@ -21,8 +27,9 @@ x_server_remote_new (const gchar *hostname, guint number, XAuthority *authority)
     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);
@@ -32,12 +39,24 @@ x_server_remote_new (const gchar *hostname, guint number, XAuthority *authority)
     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));
 }
index 024b8c3b991dc0c966b08405d07b47d7b7b13062..c1c160d3759f2093d194b4df5831be9d41701949 100644 (file)
@@ -19,9 +19,12 @@ G_BEGIN_DECLS
 #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
index ec6bbe32162f07a571f0fd6dd150904b765bf1d1..eb5f6f45a5d8dd05b4937b6e4e60bdef33ffa60f 100644 (file)
@@ -29,6 +29,9 @@ struct XServerXVNCPrivate
     /* Command to run the X server */
     gchar *command;
 
+    /* Display number to use */
+    guint display_number;
+
     /* Authority file */
     gchar *authority_file;
 
@@ -50,8 +53,6 @@ x_server_xvnc_new (void)
     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);
@@ -103,6 +104,12 @@ x_server_xvnc_get_authority_file_path (XServerXVNC *server)
     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)
 {
@@ -281,6 +288,7 @@ x_server_xvnc_init (XServerXVNC *server)
 {
     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;
@@ -302,8 +310,10 @@ static void
 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;
index d0260befcc68f9930cdc8d9ceeb90e8921939bd1..1073841e28d42012222248415fa2c97800147336 100644 (file)
@@ -21,9 +21,6 @@ struct XServerPrivate
     /* Host running the server */
     gchar *hostname;
 
-    /* Display number */
-    guint number;
-
     /* Cached server address */
     gchar *address;
 
@@ -53,20 +50,11 @@ x_server_get_hostname (XServer *server)
     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 *
@@ -77,9 +65,9 @@ x_server_get_address (XServer *server)
     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;
index 2760b8a2c23500bc446001eb6efccc43cd3caa33..d83b93299759d79c642310ecc53beef06931c156 100644 (file)
@@ -35,6 +35,7 @@ typedef struct
 typedef struct
 {
     DisplayServerClass parent_class;
+    guint (*get_display_number) (XServer *server);
 } XServerClass;
 
 GType x_server_get_type (void);
@@ -43,8 +44,6 @@ void x_server_set_hostname (XServer *server, const gchar *hostname);
 
 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);