[PATCH][master][1.12] Use touch state when querying pointer through core protocol

Chase Douglas chase.douglas at canonical.com
Tue Apr 3 17:31:01 PDT 2012


QueryPointer is part of the core protocol. As such, it knows nothing
about touch devices. Touches are converted to button 1 press, pointer
motion, and button 1 release for core clients, so we should ensure the
pointer state mask has button 1 set when XQueryPointer is used.

Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
---
A similar patch is needed for ProcXIQueryPointer, but I don't know what
to do there. My initial thoughts are to set the button 1 mask if the
client is XI 2.1 or earlier, and not set the button 1 mask otherwise.
Either way, I think the XI protocol needs to be updated to make it clear
what should happen.

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

diff --git a/dix/events.c b/dix/events.c
index 4470947..b9f9cfa 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -5098,8 +5098,7 @@ ProcQueryPointer(ClientPtr client)
     memset(&rep, 0, sizeof(xQueryPointerReply));
     rep.type = X_Reply;
     rep.sequenceNumber = client->sequence;
-    rep.mask = mouse->button ? (mouse->button->state) : 0;
-    rep.mask |= XkbStateFieldFromRec(&keyboard->key->xkbInfo->state);
+    rep.mask = event_get_corestate(mouse, keyboard);
     rep.length = 0;
     rep.root = (GetCurrentRootWindow(mouse))->drawable.id;
     rep.rootX = pSprite->hot.x;
-- 
1.7.9.1



More information about the xorg-devel mailing list