]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Half baked code before merge with trunk
authorRobert Ancell <robert.ancell@canonical.com>
Tue, 23 Jul 2013 02:10:40 +0000 (14:10 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Tue, 23 Jul 2013 02:10:40 +0000 (14:10 +1200)
src/mir-server.c
src/mir-server.h
src/seat-unity.c
src/seat-xdmcp-session.c
src/seat-xlocal.c
src/seat-xremote.c
src/seat-xvnc.c
src/seat.c
src/seat.h
src/session.c
src/session.h

index d677043c8517a40f9d74401dca8031e41dda96d8..b9469a3a92e2b1c643eab4998ebc6b1abce51bcf 100644 (file)
@@ -20,6 +20,11 @@ struct MirServerPrivate
 
 G_DEFINE_TYPE (MirServer, mir_server, DISPLAY_SERVER_TYPE);
 
+MirServer *mir_server_new (void)
+{
+    return g_object_new (MIR_SERVER_TYPE, NULL);  
+}
+
 static gboolean
 mir_server_start (DisplayServer *display_server)
 {
index 7330187983cea62d0ab45a56932d5c709213e173..bf90d97b73b8de5bde0ca3be792e6c72d2869908 100644 (file)
@@ -38,6 +38,8 @@ typedef struct
 
 GType mir_server_get_type (void);
 
+MirServer *mir_server_new (void);
+
 G_END_DECLS
 
 #endif /* MIR_SERVER_H_ */
index 6f4b15e092cc470b11e6d9b466a168c5a24e4f49..2195ec7e39410deac478259b972c628955391819 100644 (file)
@@ -17,6 +17,7 @@
 #include "configuration.h"
 #include "xserver-local.h"
 #include "xsession.h"
+#include "mir-server.h"
 #include "vt.h"
 #include "plymouth.h"
 
@@ -376,7 +377,7 @@ seat_unity_start (Seat *seat)
 }
 
 static DisplayServer *
-seat_unity_create_display_server (Seat *seat)
+create_x_server (Seat *seat)
 {
     XServerLocal *xserver;
     const gchar *command = NULL, *layout = NULL, *config_file = NULL, *xdmcp_manager = NULL, *key_name = NULL;
@@ -459,6 +460,20 @@ seat_unity_create_display_server (Seat *seat)
     return DISPLAY_SERVER (xserver);
 }
 
+static DisplayServer *
+seat_unity_create_display_server (Seat *seat, const gchar *session_type)
+{
+    if (strcmp (session_type, "x") == 0)
+        return create_x_server (seat);
+    else if (strcmp (session_type, "mir") == 0)
+        return DISPLAY_SERVER (mir_server_new ());
+    else
+    {
+        g_warning ("Can't create unsupported display server '%s'", session_type);
+        return NULL;
+    }
+}
+
 static Session *
 seat_unity_create_session (Seat *seat, Display *display)
 {
index 72d6a8cee525d6178437346c5aa736634ebcfb87..5ff08aff994f7b29151c695e8268e36194126353 100644 (file)
@@ -35,12 +35,18 @@ seat_xdmcp_session_new (XDMCPSession *session)
 }
 
 static DisplayServer *
-seat_xdmcp_session_create_display_server (Seat *seat)
+seat_xdmcp_session_create_display_server (Seat *seat, const gchar *session_type)
 {
     XAuthority *authority;
     gchar *host;
     XServerRemote *xserver;
 
+    if (strcmp (session_type, "x") != 0)
+    {
+        g_warning ("XDMCP seat only supports X display servers, not '%s'", session_type);
+        return NULL;
+    }
+
     authority = xdmcp_session_get_authority (SEAT_XDMCP_SESSION (seat)->priv->session);
     host = g_inet_address_to_string (xdmcp_session_get_address (SEAT_XDMCP_SESSION (seat)->priv->session));
     xserver = xserver_remote_new (host, xdmcp_session_get_display_number (SEAT_XDMCP_SESSION (seat)->priv->session), authority);
index e1e5cca8261a9222ab62170c0089efac21fce8ef..953e5d92b8a2b3b96dd99a38a68f8a232c13a521 100644 (file)
@@ -15,6 +15,7 @@
 #include "configuration.h"
 #include "xserver-local.h"
 #include "xsession.h"
+#include "mir-server.h"
 #include "vt.h"
 
 G_DEFINE_TYPE (SeatXLocal, seat_xlocal, SEAT_TYPE);
@@ -28,7 +29,7 @@ seat_xlocal_setup (Seat *seat)
 }
 
 static DisplayServer *
-seat_xlocal_create_display_server (Seat *seat)
+create_x_server (Seat *seat)
 {
     XServerLocal *xserver;
     const gchar *command = NULL, *layout = NULL, *config_file = NULL, *xdmcp_manager = NULL, *key_name = NULL;
@@ -105,6 +106,31 @@ seat_xlocal_create_display_server (Seat *seat)
     return DISPLAY_SERVER (xserver);
 }
 
+static DisplayServer *
+create_mir_server (Seat *seat)
+{
+    MirServer *mir_server;
+
+    mir_server = mir_server_new ();
+    // FIXME: Set VT
+
+    return DISPLAY_SERVER (mir_server);
+}
+
+static DisplayServer *
+seat_xlocal_create_display_server (Seat *seat, const gchar *session_type)
+{
+    if (strcmp (session_type, "x") == 0)
+        return create_x_server (seat);
+    else if (strcmp (session_type, "mir") == 0)
+        return create_mir_server (seat);
+    else
+    {
+        g_warning ("Can't create unsupported display server '%s'", session_type);
+        return NULL;
+    }
+}
+
 static Session *
 seat_xlocal_create_session (Seat *seat, Display *display)
 {
index 888ea122e2b39f3a599f7ec5cedc02015eba9574..462e7532ea0d3e27eb366cfc1dac941ba9e1153f 100644 (file)
@@ -26,12 +26,18 @@ seat_xremote_setup (Seat *seat)
 }
 
 static DisplayServer *
-seat_xremote_create_display_server (Seat *seat)
+seat_xremote_create_display_server (Seat *seat, const gchar *session_type)
 {
     XServerRemote *xserver;
     const gchar *hostname;
     gint number;
 
+    if (strcmp (session_type, "x") != 0)
+    {
+        g_warning ("X remote seat only supports X display servers, not '%s'", session_type);
+        return NULL;
+    }
+
     hostname = seat_get_string_property (seat, "xserver-hostname");
     if (!hostname)
         hostname = "localhost";
index 2e126f3a0a757f81154462c5d0559751ddee5f66..5dad1360dfe553a2fef48f24147f72f440f2e917 100644 (file)
@@ -33,11 +33,17 @@ SeatXVNC *seat_xvnc_new (GSocket *connection)
 }
 
 static DisplayServer *
-seat_xvnc_create_display_server (Seat *seat)
+seat_xvnc_create_display_server (Seat *seat, const gchar *session_type)
 {
     XServerXVNC *xserver;
     const gchar *command = NULL;
 
+    if (strcmp (session_type, "x") != 0)
+    {
+        g_warning ("XVNC seat only supports X display servers, not '%s'", session_type);
+        return NULL;
+    }
+  
     xserver = xserver_xvnc_new ();
     xserver_xvnc_set_socket (xserver, g_socket_get_fd (SEAT_XVNC (seat)->priv->connection));
 
index 77dbec6e2d87560660060687d1c47c724eac61f5..6015a3a683aaebeaf996baf9a962ab024ef82e74 100644 (file)
@@ -57,7 +57,7 @@ typedef struct
 } SeatModule;
 static GHashTable *seat_modules = NULL;
 
-static Display *create_display (Seat *seat);
+static Display *create_display (Seat *seat, const gchar *session_type);
 
 void
 seat_register_module (const gchar *name, GType type)
@@ -427,7 +427,7 @@ display_create_display_cb (Display *display, Session *session, Seat *seat)
 {
     Display *d;
 
-    d = create_display (seat);
+    d = create_display (seat, session_get_session_type (session));
     g_signal_connect (d, "ready", G_CALLBACK (display_ready_cb), seat);
     g_signal_emit (seat, signals[DISPLAY_ADDED], 0, d);
 
@@ -502,12 +502,12 @@ display_stopped_cb (Display *display, Seat *seat)
 }
 
 static Display *
-create_display (Seat *seat)
+create_display (Seat *seat, const gchar *session_type)
 {
     Display *display;
     DisplayServer *display_server;
 
-    display_server = SEAT_GET_CLASS (seat)->create_display_server (seat);
+    display_server = SEAT_GET_CLASS (seat)->create_display_server (seat, session_type);
     display = display_new (display_server);
     g_object_unref (display_server);
 
@@ -567,7 +567,7 @@ seat_switch_to_greeter (Seat *seat)
 
     g_debug ("Starting new display for greeter");
 
-    display = create_display (seat);
+    display = create_display (seat, "x" /*FIXME greeter_type */);
     g_signal_connect (display, "ready", G_CALLBACK (display_ready_cb), seat);
 
     return start_display (seat, display);
@@ -595,7 +595,7 @@ seat_switch_to_user (Seat *seat, const gchar *username, const gchar *session_nam
     else
         g_debug ("Starting new display for greeter");
 
-    display = create_display (seat);
+    display = create_display (seat, "x" /* FIXME greeter_type */);
     g_signal_connect (display, "ready", G_CALLBACK (display_ready_cb), seat);
     display_set_select_user_hint (display, username, FALSE, TRUE);
     if (session_name != NULL)
@@ -623,7 +623,7 @@ seat_switch_to_guest (Seat *seat, const gchar *session_name)
 
     g_debug ("Starting new display for automatic guest login");
 
-    display = create_display (seat);
+    display = create_display (seat, "x" /* FIXME guest_type */);
     g_signal_connect (display, "ready", G_CALLBACK (display_ready_cb), seat);
     display_set_autologin_user (display, NULL, TRUE, 0);
     if (session_name != NULL)
@@ -650,7 +650,7 @@ seat_lock (Seat *seat, const gchar *username)
 
     g_debug ("Starting new display for greeter (lock screen)");
 
-    display = create_display (seat);
+    display = create_display (seat, "x" /* FIXMEgreeter_type */);
     g_signal_connect (display, "ready", G_CALLBACK (display_ready_cb), seat);
     display_set_lock_hint (display, TRUE);
     display_set_select_user_hint (display, username, FALSE, FALSE);
@@ -703,7 +703,7 @@ autologin_greeter_ready_cb (Display *display, Seat *seat)
     else if (autologin_username)
         g_debug ("Starting new display for automatic login as user %s", autologin_username);
 
-    autologin_display = create_display (seat);
+    autologin_display = create_display (seat, "x" /* FIXMEsession_type */);
     display_set_autologin_user (autologin_display, autologin_username, autologin_guest, 0);
 
     start_display (seat, autologin_display);
@@ -734,7 +734,7 @@ seat_real_start (Seat *seat)
     if (do_autologin && autologin_in_background && !switch_to_user (seat, NULL, FALSE)) 
     {
         g_debug ("Autologin in background, opening greeter first");
-        display = create_display (seat);
+        display = create_display (seat, "x" /* FIXMEgreeter_type */);
         g_signal_connect (display, "ready", G_CALLBACK (autologin_greeter_ready_cb), seat);
         if (autologin_timeout > 0)
             display_set_autologin_user (display, autologin_username, autologin_guest, autologin_timeout);
@@ -748,13 +748,19 @@ seat_real_start (Seat *seat)
     else
         g_debug ("Starting new display for greeter");
 
-    display = create_display (seat);
+    display = create_display (seat, "x" /* FIXMEsession_type */);
     g_signal_connect (display, "ready", G_CALLBACK (display_ready_cb), seat);
     display_set_autologin_user (display, autologin_username, autologin_guest, autologin_timeout);
 
     return start_display (seat, display);
 }
 
+static DisplayServer *
+seat_real_create_display_server (Seat *seat, const gchar *session_type)
+{
+    return NULL;
+}
+
 static void
 seat_real_set_active_display (Seat *seat, Display *display)
 {
@@ -838,6 +844,7 @@ seat_class_init (SeatClass *klass)
 
     klass->setup = seat_real_setup;
     klass->start = seat_real_start;
+    klass->create_display_server = seat_real_create_display_server;
     klass->set_active_display = seat_real_set_active_display;
     klass->get_active_display = seat_real_get_active_display;
     klass->run_script = seat_real_run_script;
index 0c2f3ccf1d1c2c8dfb396c654c3c864b316d6b80..d8c64e57ac8b2da33d75723e361a528d9dcb7809 100644 (file)
@@ -37,7 +37,7 @@ typedef struct
 
     void (*setup)(Seat *seat);    
     gboolean (*start)(Seat *seat);
-    DisplayServer *(*create_display_server) (Seat *seat);
+    DisplayServer *(*create_display_server) (Seat *seat, const gchar *session_type);
     Session *(*create_session) (Seat *seat, Display *display);
     void (*set_active_display)(Seat *seat, Display *display);
     Display *(*get_active_display)(Seat *seat);
index 839769bb52c1b112df482c99eaa8ac300228a4eb..bd31a7369c0faa2fc1d4d38a9ed34d9eb31de9e4 100644 (file)
@@ -101,6 +101,13 @@ struct SessionPrivate
 
 G_DEFINE_TYPE (Session, session, G_TYPE_OBJECT);
 
+const gchar *
+session_get_session_type (Session *session)
+{
+    g_return_val_if_fail (session != NULL, NULL);
+    return NULL;
+}
+
 void
 session_set_log_file (Session *session, const gchar *filename)
 {
index 6d5640c99988eae651e3c60ab807e9607ef8f6f8..3b981fc477fdbaa3da8ec5f75c8d1f3dcc7beb46 100644 (file)
@@ -57,6 +57,8 @@ typedef enum
 
 GType session_get_type (void);
 
+const gchar *session_get_session_type (Session *session);
+
 void session_set_log_file (Session *session, const gchar *filename);
 
 void session_set_class (Session *session, const gchar *class);