]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Allow display servers to not be able to share sessions.
authorRobert Ancell <robert.ancell@canonical.com>
Fri, 26 Jul 2013 02:14:10 +0000 (02:14 +0000)
committerTarmac <Unknown>
Fri, 26 Jul 2013 02:14:10 +0000 (02:14 +0000)
Approved by Robert Ancell, PS Jenkins bot.

1  2 
src/display-server.c
src/display-server.h
src/seat.c
src/x-server.c

index fc7eec92a61c0549d83c58bd5da58d1a8907f742,987ed3c1ac8d9f7457b0635c021a559dfa427f0d..8a83769a45b00720692f490583e0e27a375bfe03
@@@ -131,10 -132,10 +143,11 @@@ display_server_init (DisplayServer *ser
  static void
  display_server_class_init (DisplayServerClass *klass)
  {
+     klass->get_can_share = display_server_real_get_can_share;
      klass->get_vt = display_server_real_get_vt;
      klass->start = display_server_real_start;
 -    klass->setup_session = display_server_real_setup_session;
 +    klass->connect_session = display_server_real_connect_session;
 +    klass->disconnect_session = display_server_real_disconnect_session;
      klass->stop = display_server_real_stop;
  
      g_type_class_add_private (klass, sizeof (DisplayServerPrivate));
index 27fdc1c09d7b99937295fff106b923d48c4117ee,baebeff0897c4387b2d1182ae5d5f626a9bb4cb7..ec328a77a5969737e9f440ad7a315175ef85eab0
@@@ -40,10 -40,10 +40,11 @@@ typedef struc
      void (*ready)(DisplayServer *server);
      void (*stopped)(DisplayServer *server);
  
+     gboolean (*get_can_share)(DisplayServer *server);
      gint (*get_vt)(DisplayServer *server);
      gboolean (*start)(DisplayServer *server);
 -    void (*setup_session)(DisplayServer *server, Session *session);
 +    void (*connect_session)(DisplayServer *server, Session *session);
 +    void (*disconnect_session)(DisplayServer *server, Session *session);
      void (*stop)(DisplayServer *server);
  } DisplayServerClass;
  
diff --cc src/seat.c
index 9bc1e6ceba7e83ed6853d452b9cc278d794431d6,56aa0b04978b624988b977b49ab828c7ee406bb9..6ce17fee6cc2dbaba5aaa1b51f5a8e16e395a76f
@@@ -915,14 -921,13 +923,15 @@@ greeter_start_session_cb (Greeter *gree
      }
  
      /* If can re-use the display server, stop the greeter first */
-     if (seat->priv->share_display_server)
+     display_server = session_get_display_server (SESSION (greeter));
+     if (can_share_display_server (seat, display_server))
      {
 +        g_debug ("Stopping greeter; display server will be re-used for user session");
 +
          /* Run on the same display server after the greeter has stopped */
-         session_set_display_server (session, session_get_display_server (SESSION (greeter)));
+         session_set_display_server (session, display_server);
  
 -        g_debug ("Stopping greeter");
 +        /* Stop the greeter */
          session_stop (SESSION (greeter));
  
          return TRUE;
diff --cc src/x-server.c
index c8960ceb449662aeeff3b42c698a55856fec9c09,23bf0a0f586e3f20fc30e332d4fa916275847060..4a456b4fec7cc0201b4e78cf3c431eb57b7852f8
@@@ -202,9 -197,9 +208,10 @@@ x_server_class_init (XServerClass *klas
      GObjectClass *object_class = G_OBJECT_CLASS (klass);
      DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
  
+     display_server_class->get_can_share = x_server_get_can_share;
      display_server_class->start = x_server_start;
 -    display_server_class->setup_session = x_server_setup_session;
 +    display_server_class->connect_session = x_server_connect_session;
 +    display_server_class->disconnect_session = x_server_disconnect_session;
      object_class->finalize = x_server_finalize;
  
      g_type_class_add_private (klass, sizeof (XServerPrivate));