[gdm] Fix XDMCP show it shows the greeter again after logout. Patch by Halton Huo. Part of the fix for #6



commit fb2b3df0125c1cfdf130ab065645daf4104b57fd
Author: Brian Cameron <Brian Cameron sun com>
Date:   Thu Apr 22 16:11:19 2010 -0500

    Fix XDMCP show it shows the greeter again after logout.  Patch by Halton Huo.
    Part of the fix for #606724.

 daemon/gdm-xdmcp-display-factory.c |   37 ++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)
---
diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c
index 7b5fb53..447833d 100644
--- a/daemon/gdm-xdmcp-display-factory.c
+++ b/daemon/gdm-xdmcp-display-factory.c
@@ -2025,6 +2025,38 @@ on_hostname_selected (GdmXdmcpChooserDisplay *display,
         freeaddrinfo (ai_list);
 }
 
+static void
+on_display_status_changed (GdmDisplay             *display,
+                           GParamSpec             *arg1,
+                           GdmXdmcpDisplayFactory *factory)
+{
+        int              status;
+        GdmDisplayStore *store;
+
+        store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
+
+        status = gdm_display_get_status (display);
+
+        g_debug ("GdmXdmcpDisplayFactory: xdmcp display status changed: %d", status);
+        switch (status) {
+        case GDM_DISPLAY_FINISHED:
+                gdm_display_store_remove (store, display);
+                break;
+        case GDM_DISPLAY_FAILED:
+                gdm_display_store_remove (store, display);
+                break;
+        case GDM_DISPLAY_UNMANAGED:
+                break;
+        case GDM_DISPLAY_PREPARED:
+                break;
+        case GDM_DISPLAY_MANAGED:
+                break;
+        default:
+                g_assert_not_reached ();
+                break;
+        }
+}
+
 static GdmDisplay *
 gdm_xdmcp_display_create (GdmXdmcpDisplayFactory *factory,
                           const char             *hostname,
@@ -2075,6 +2107,11 @@ gdm_xdmcp_display_create (GdmXdmcpDisplayFactory *factory,
                 goto out;
         }
 
+        g_signal_connect (display,
+                          "notify::status",
+                          G_CALLBACK (on_display_status_changed),
+                          factory);
+
         store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
         gdm_display_store_add (store, display);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]