summaryrefslogtreecommitdiff
path: root/daemon/gdm-xdmcp-display-factory.c
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2008-12-03 01:49:35 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2008-12-03 01:49:35 +0000
commit816c5872dd488903bef2af5385bb72691d918eca (patch)
tree23a97a021027ff7245f25bfb63c368ba50809155 /daemon/gdm-xdmcp-display-factory.c
parente259c339df3e9d09b43d2e3fdc49ce1cf1a96ea3 (diff)
downloadgdm-816c5872dd488903bef2af5385bb72691d918eca.tar.gz
Correctly handle changes in the xdmcp enabled property. Add a display
2008-12-02 William Jon McCann <jmccann@redhat.com> * daemon/gdm-display.c (gdm_display_real_prepare), (gdm_display_prepare), (gdm_display_real_manage), (gdm_display_class_init): * daemon/gdm-display.h: * daemon/gdm-local-display-factory.c (on_static_display_status_changed): * daemon/gdm-manager.c (gdm_manager_stop), (gdm_manager_start), (gdm_manager_set_xdmcp_enabled): * daemon/gdm-manager.h: * daemon/gdm-xdmcp-display-factory.c (gdm_xdmcp_display_create), (gdm_xdmcp_handle_manage): Correctly handle changes in the xdmcp enabled property. Add a display state called prepared that sets up the display before actually managing (starting) it. This is required for the XDMCP Request phase to work. Fixes #561396 svn path=/trunk/; revision=6610
Diffstat (limited to 'daemon/gdm-xdmcp-display-factory.c')
-rw-r--r--daemon/gdm-xdmcp-display-factory.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c
index 57695a1d..58cdf59c 100644
--- a/daemon/gdm-xdmcp-display-factory.c
+++ b/daemon/gdm-xdmcp-display-factory.c
@@ -2041,6 +2041,13 @@ gdm_xdmcp_display_create (GdmXdmcpDisplayFactory *factory,
goto out;
}
+ if (! gdm_display_prepare (display)) {
+ gdm_display_unmanage (display);
+ g_object_unref (display);
+ display = NULL;
+ goto out;
+ }
+
store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
gdm_display_store_add (store, display);
@@ -2507,7 +2514,7 @@ gdm_xdmcp_handle_manage (GdmXdmcpDisplayFactory *factory,
display = gdm_xdmcp_display_lookup (factory, clnt_sessid);
if (display != NULL &&
- gdm_display_get_status (display) == GDM_DISPLAY_UNMANAGED) {
+ gdm_display_get_status (display) == GDM_DISPLAY_PREPARED) {
char *name;
name = NULL;