From 9a1bfa5664a80f03cedeb89b9f8a86115a08e7af Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 20 Jul 2009 16:39:16 +1000 Subject: [PATCH] input: remove XI2 keysym grabs, use keycode grabs instead. Keysym grabs are tricky in the details, keycode grabs are known to work. So for now, provide keycode grabs only. Requires inputproto 1.9.99.15. Signed-off-by: Peter Hutterer --- Xi/xipassivegrab.c | 8 ++++---- configure.ac | 2 +- dix/events.c | 3 --- dix/grabs.c | 2 +- test/input.c | 4 ++-- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c index df0f5bedd8..1d6200f3a9 100644 --- a/Xi/xipassivegrab.c +++ b/Xi/xipassivegrab.c @@ -102,7 +102,7 @@ ProcXIPassiveGrabDevice(ClientPtr client) } if (stuff->grab_type != XIGrabtypeButton && - stuff->grab_type != XIGrabtypeKeysym && + stuff->grab_type != XIGrabtypeKeycode && stuff->grab_type != XIGrabtypeEnter && stuff->grab_type != XIGrabtypeFocusIn) { @@ -180,7 +180,7 @@ ProcXIPassiveGrabDevice(ClientPtr client) status = GrabButton(client, dev, mod_dev, stuff->detail, ¶m, GRABTYPE_XI2, &mask); break; - case XIGrabtypeKeysym: + case XIGrabtypeKeycode: status = GrabKey(client, dev, mod_dev, stuff->detail, ¶m, GRABTYPE_XI2, &mask); break; @@ -265,7 +265,7 @@ ProcXIPassiveUngrabDevice(ClientPtr client) return rc; if (stuff->grab_type != XIGrabtypeButton && - stuff->grab_type != XIGrabtypeKeysym && + stuff->grab_type != XIGrabtypeKeycode && stuff->grab_type != XIGrabtypeEnter && stuff->grab_type != XIGrabtypeFocusIn) { @@ -295,7 +295,7 @@ ProcXIPassiveUngrabDevice(ClientPtr client) switch(stuff->grab_type) { case XIGrabtypeButton: tempGrab.type = XI_ButtonPress; break; - case XIGrabtypeKeysym: tempGrab.type = XI_KeyPress; break; + case XIGrabtypeKeycode: tempGrab.type = XI_KeyPress; break; case XIGrabtypeEnter: tempGrab.type = XI_Enter; break; case XIGrabtypeFocusIn: tempGrab.type = XI_FocusIn; break; } diff --git a/configure.ac b/configure.ac index 84613cc9eb..9052398011 100644 --- a/configure.ac +++ b/configure.ac @@ -708,7 +708,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la' XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la' dnl Core modules for most extensions, et al. -REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.1] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.14] [kbproto >= 1.0.3]" +REQUIRED_MODULES="[randrproto >= 1.2.99.3] [renderproto >= 0.11] [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto [xextproto >= 7.0.99.1] [xproto >= 7.0.13] [xtrans >= 1.2.2] bigreqsproto resourceproto fontsproto [inputproto >= 1.9.99.15] [kbproto >= 1.0.3]" REQUIRED_LIBS="xfont xau fontenc [pixman-1 >= 0.15.14]" dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas diff --git a/dix/events.c b/dix/events.c index f6369f6c69..4ddf802377 100644 --- a/dix/events.c +++ b/dix/events.c @@ -117,7 +117,6 @@ of the copyright holder. #endif #include -#include #include "misc.h" #include "resource.h" #include @@ -3375,8 +3374,6 @@ CheckPassiveGrabsOnWindow( /* Check for XI2 and XI grabs first */ tempGrab.type = GetXI2Type((InternalEvent*)event); tempGrab.grabtype = GRABTYPE_XI2; - if (event->type == ET_KeyPress) - tempGrab.detail.exact = XkbGetKeysym(device, event); if (GrabMatchesSecond(&tempGrab, grab, FALSE)) match = XI2_MATCH; diff --git a/dix/grabs.c b/dix/grabs.c index 06d6d037c2..4a351d6476 100644 --- a/dix/grabs.c +++ b/dix/grabs.c @@ -451,7 +451,7 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab) any_modifier = (pMinuendGrab->grabtype == GRABTYPE_XI2) ? (unsigned int)XIAnyModifier : (unsigned int)AnyModifier; any_key = (pMinuendGrab->grabtype == GRABTYPE_XI2) ? - (unsigned int)XIAnyKeysym : (unsigned int)AnyKey; + (unsigned int)XIAnyKeycode : (unsigned int)AnyKey; ndels = nadds = nups = 0; ok = TRUE; for (grab = wPassiveGrabs(pMinuendGrab->window); diff --git a/test/input.c b/test/input.c index e2faaeff9f..8beb9fa9b6 100644 --- a/test/input.c +++ b/test/input.c @@ -643,10 +643,10 @@ static void dix_grab_matching(void) rc = GrabMatchesSecond(&b, &a, FALSE); g_assert(rc == TRUE); - /* AnyKey or XIAnyKeysym must succeed */ + /* AnyKey or XIAnyKeycode must succeed */ a.grabtype = GRABTYPE_XI2; b.grabtype = GRABTYPE_XI2; - a.detail.exact = XIAnyKeysym; + a.detail.exact = XIAnyKeycode; b.detail.exact = 1; a.modifiersDetail.exact = 1; b.modifiersDetail.exact = 1;