]> Pileus Git - ~andy/gtk/commitdiff
Do not modify associated device for non-master devices on dispose
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 24 Jan 2011 18:55:41 +0000 (19:55 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 24 Jan 2011 18:55:41 +0000 (19:55 +0100)
Only master devices must modify the associated device to separate
a pointer/keyboard pair, slave devices must only call
_gdk_device_remove_slave().

Fixes bugĀ 639767 - password not accepted in gnome-screensaver dialog,
reported by Frederic Crozat. On VT-switch, the X server removes its
grab on HW devices, the effect on clients is that slave devices
disappear, and these were mistakenly mangling the master device
hierarchy. so gdk_device_get_associated_device() on the client
pointer wouldn't return the paired keyboard anymore.

The final effect is that gtkplug-x11 wasn't setting a keyboard to
its generated events.

gdk/gdkdevice.c

index 373dc579f20847734ea37e04841c18dfc7cacc0c..2cc3ea88c95ba00edd7d9e62f68feb816edb171f 100644 (file)
@@ -273,7 +273,9 @@ gdk_device_dispose (GObject *object)
 
   if (device->associated)
     {
-      _gdk_device_set_associated_device (device->associated, NULL);
+      if (device->type == GDK_DEVICE_TYPE_MASTER)
+        _gdk_device_set_associated_device (device->associated, NULL);
+
       g_object_unref (device->associated);
       device->associated = NULL;
     }