[PATCH] dix: IsFloating() on master devices is always false

Peter Hutterer peter.hutterer at who-t.net
Sun Feb 19 19:23:35 PST 2012


There are a few subtle bugs during startup where IsFloating() returns true
if the device is a master device that is not yet paired with its keyboard
device.

Force IsFloating() to always return FALSE for master devices, that was the
intent after all and any code that relies on the other behaviour should be
fixed instead.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
Turned out the vesa test case was another occurence of this same issue, so I
think that instaead of the previous two patches (revert + fix) it's better
to just push this one instead. After all, there may be more lingering bugs
here so we might as well squash all of them preventively. 

It's a bit more bigger than I'd like at this point in the release but given
that this is how the API was intended it should have few repercussions.

 dix/events.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/dix/events.c b/dix/events.c
index 3c7d5d0..96e3f9c 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -343,7 +343,7 @@ IsMaster(DeviceIntPtr dev)
 Bool
 IsFloating(DeviceIntPtr dev)
 {
-    return GetMaster(dev, MASTER_KEYBOARD) == NULL;
+    return !IsMaster(dev) && GetMaster(dev, MASTER_KEYBOARD) == NULL;
 }
 
 
-- 
1.7.7.5


More information about the xorg-devel mailing list