]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Add a share xserver seat property
authorRobert Ancell <robert.ancell@canonical.com>
Sun, 30 Jun 2013 08:43:01 +0000 (20:43 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Sun, 30 Jun 2013 08:43:01 +0000 (20:43 +1200)
data/lightdm.conf
src/lightdm.c
src/seat-xlocal.c
src/seat.c
src/seat.h

index d25fa189eab960ee987bed3e15d7b15478f9a233..e9d2f88080b967a16be44f87ad144de6184a9d6d 100644 (file)
@@ -40,6 +40,7 @@
 # xserver-layout = Layout to pass to X server
 # xserver-config = Config file to pass to X server
 # xserver-allow-tcp = True if TCP/IP connections are allowed to this X server
+# xserver-share = True if the X server is shared for both greeter and session
 # xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true)
 # xdmcp-port = XDMCP UDP/IP port to communicate on
 # xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf)
@@ -70,6 +71,7 @@
 #xserver-layout=
 #xserver-config=
 #xserver-allow-tcp=false
+#xserver-share=true
 #xdmcp-manager=
 #xdmcp-port=177
 #xdmcp-key=
index 11a51e3c284a2da5e8cd08b5c14407bfc68891bc..01ec727360d5e634ecaefacca18ec5ba9df87dfa 100644 (file)
@@ -1040,6 +1040,8 @@ main (int argc, char **argv)
         config_set_string (config_get_instance (), "SeatDefaults", "type", "xlocal");
     if (!config_has_key (config_get_instance (), "SeatDefaults", "xserver-command"))
         config_set_string (config_get_instance (), "SeatDefaults", "xserver-command", "X");
+    if (!config_has_key (config_get_instance (), "SeatDefaults", "xserver-share"))
+        config_set_boolean (config_get_instance (), "SeatDefaults", "xserver-share", TRUE);
     if (!config_has_key (config_get_instance (), "SeatDefaults", "start-session"))
         config_set_boolean (config_get_instance (), "SeatDefaults", "start-session", TRUE);
     if (!config_has_key (config_get_instance (), "SeatDefaults", "allow-guest"))
index d1c240c47e6679c18225a38ab42226ae7d8ab74c..5181c05f5a835c49b74fb75b6b4233798be108ea 100644 (file)
@@ -23,6 +23,7 @@ static void
 seat_xlocal_setup (Seat *seat)
 {
     seat_set_can_switch (seat, TRUE);
+    seat_set_share_display_server (seat, seat_get_boolean_property (seat, "xserver-share"));
     SEAT_CLASS (seat_xlocal_parent_class)->setup (seat);
 }
 
index 7c3b961e5b72597c5a941cc6b10a93131b269a4f..a39bc1b8663c4180970dd697c3e725feb8263e74 100644 (file)
@@ -32,6 +32,9 @@ struct SeatPrivate
     /* TRUE if able to switch users */
     gboolean can_switch;
 
+    /* TRUE if display server can be shared for sessions */
+    gboolean share_display_server;
+
     /* Name of guest account */
     gchar *guest_username;
 
@@ -134,6 +137,14 @@ seat_set_can_switch (Seat *seat, gboolean can_switch)
     seat->priv->can_switch = can_switch;
 }
 
+void
+seat_set_share_display_server (Seat *seat, gboolean share_display_server)
+{
+    g_return_if_fail (seat != NULL);
+
+    seat->priv->share_display_server = share_display_server;
+}
+
 gboolean
 seat_start (Seat *seat)
 {
@@ -518,6 +529,7 @@ create_display (Seat *seat)
     display_set_allow_guest (display, seat_get_allow_guest (seat));
     display_set_greeter_allow_guest (display, seat_get_greeter_allow_guest (seat));
     display_set_user_session (display, SESSION_TYPE_LOCAL, seat_get_string_property (seat, "user-session"));
+    display_set_share_display_server (display, seat->priv->share_display_server);
 
     seat->priv->displays = g_list_append (seat->priv->displays, display);
 
@@ -795,6 +807,7 @@ seat_init (Seat *seat)
 {
     seat->priv = G_TYPE_INSTANCE_GET_PRIVATE (seat, SEAT_TYPE, SeatPrivate);
     seat->priv->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+    seat->priv->share_display_server = TRUE;
 }
 
 static void
index 5ca0e3e4bb2e32d403cf879ed2ba4728e9c47273..0c2f3ccf1d1c2c8dfb396c654c3c864b316d6b80 100644 (file)
@@ -67,6 +67,8 @@ gint seat_get_integer_property (Seat *seat, const gchar *name);
 
 void seat_set_can_switch (Seat *seat, gboolean can_switch);
 
+void seat_set_share_display_server (Seat *seat, gboolean share_display_server);
+
 gboolean seat_start (Seat *seat);
 
 GList *seat_get_displays (Seat *seat);