Fix active touch grabs, second touchpoint didn't get sent to client
- Fix version mismatch for XI 2.2+ clients (where a library supports > 2.2 but another version than the originally requested one).
This commit is contained in:
parent
7d6636ec81
commit
5e49381c7f
@ -0,0 +1,50 @@
|
||||
From ef54bd89b17f3dd1f854435339f66d357121c64c Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Wed, 24 Jul 2013 11:50:00 +1000
|
||||
Subject: [PATCH 1/3] dix: check the xi2mask, not the grab type for touch
|
||||
listeners
|
||||
|
||||
grab->type is only non-zero for passive grabs. We're checking an active grab
|
||||
here, so we need to check if the touch mask is set on the grab.
|
||||
|
||||
Test case: grab the device, then start two simultaneous touches. The
|
||||
grabbing client won't see the second touchpoints because grab->type is 0
|
||||
and the second touch is not an emulating pointer.
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
(cherry picked from commit 4fb686d6a6777950f0e0d55b848cd2af4cbad372)
|
||||
---
|
||||
dix/touch.c | 3 +--
|
||||
include/inputstr.h | 2 +-
|
||||
2 files changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dix/touch.c b/dix/touch.c
|
||||
index a4b6d7e..a7ea213 100644
|
||||
--- a/dix/touch.c
|
||||
+++ b/dix/touch.c
|
||||
@@ -895,8 +895,7 @@ TouchAddActiveGrabListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
||||
|
||||
if (!ti->emulate_pointer &&
|
||||
grab->grabtype == XI2 &&
|
||||
- (grab->type != XI_TouchBegin && grab->type != XI_TouchEnd &&
|
||||
- grab->type != XI_TouchUpdate))
|
||||
+ !xi2mask_isset(grab->xi2mask, dev, XI_TouchBegin))
|
||||
return;
|
||||
|
||||
TouchAddGrabListener(dev, ti, ev, grab);
|
||||
diff --git a/include/inputstr.h b/include/inputstr.h
|
||||
index 85be885..2da72c1 100644
|
||||
--- a/include/inputstr.h
|
||||
+++ b/include/inputstr.h
|
||||
@@ -195,7 +195,7 @@ typedef struct _GrabRec {
|
||||
unsigned keyboardMode:1;
|
||||
unsigned pointerMode:1;
|
||||
enum InputLevel grabtype;
|
||||
- CARD8 type; /* event type */
|
||||
+ CARD8 type; /* event type for passive grabs, 0 for active grabs */
|
||||
DetailRec modifiersDetail;
|
||||
DeviceIntPtr modifierDevice;
|
||||
DetailRec detail; /* key or button */
|
||||
--
|
||||
1.8.2.1
|
||||
|
@ -0,0 +1,68 @@
|
||||
From e6da18f67516dcee394cd0eff591a255b59fe544 Mon Sep 17 00:00:00 2001
|
||||
From: Keith Packard <keithp@keithp.com>
|
||||
Date: Wed, 10 Jul 2013 22:42:55 -0700
|
||||
Subject: [PATCH 3/3] Xi: Allow clients to ask for 2.3 and then 2.2 without
|
||||
failing
|
||||
|
||||
This allows different sub-systems within the same application to
|
||||
request different Xi versions without either getting old behaviour
|
||||
everywhere or simply failing with a BadValue.
|
||||
|
||||
Signed-off-by: Keith Packard <keithp@keithp.com>
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
(cherry picked from commit 4360514d1cc8e3132f93f56172d291074e8c770f)
|
||||
---
|
||||
Xi/xiqueryversion.c | 36 ++++++++++++++++++++++++++++++------
|
||||
1 file changed, 30 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/Xi/xiqueryversion.c b/Xi/xiqueryversion.c
|
||||
index b807a53..6c7b9c0 100644
|
||||
--- a/Xi/xiqueryversion.c
|
||||
+++ b/Xi/xiqueryversion.c
|
||||
@@ -71,13 +71,37 @@ ProcXIQueryVersion(ClientPtr client)
|
||||
pXIClient = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey);
|
||||
|
||||
if (pXIClient->major_version) {
|
||||
- if (version_compare(stuff->major_version, stuff->minor_version,
|
||||
- pXIClient->major_version, pXIClient->minor_version) < 0) {
|
||||
- client->errorValue = stuff->major_version;
|
||||
- return BadValue;
|
||||
+
|
||||
+ /* Check to see if the client has only ever asked
|
||||
+ * for version 2.2 or higher
|
||||
+ */
|
||||
+ if (version_compare(stuff->major_version, stuff->minor_version, 2, 2) >= 0 &&
|
||||
+ version_compare(pXIClient->major_version, pXIClient->minor_version, 2, 2) >= 0)
|
||||
+ {
|
||||
+
|
||||
+ /* As of version 2.2, Peter promises to never again break
|
||||
+ * backward compatibility, so we'll return the requested
|
||||
+ * version to the client but leave the server internal
|
||||
+ * version set to the highest requested value
|
||||
+ */
|
||||
+ major = stuff->major_version;
|
||||
+ minor = stuff->minor_version;
|
||||
+ if (version_compare(stuff->major_version, stuff->minor_version,
|
||||
+ pXIClient->major_version, pXIClient->minor_version) > 0)
|
||||
+ {
|
||||
+ pXIClient->major_version = stuff->major_version;
|
||||
+ pXIClient->minor_version = stuff->minor_version;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (version_compare(stuff->major_version, stuff->minor_version,
|
||||
+ pXIClient->major_version, pXIClient->minor_version) < 0) {
|
||||
+
|
||||
+ client->errorValue = stuff->major_version;
|
||||
+ return BadValue;
|
||||
+ }
|
||||
+ major = pXIClient->major_version;
|
||||
+ minor = pXIClient->minor_version;
|
||||
}
|
||||
- major = pXIClient->major_version;
|
||||
- minor = pXIClient->minor_version;
|
||||
} else {
|
||||
if (version_compare(XIVersion.major_version, XIVersion.minor_version,
|
||||
stuff->major_version, stuff->minor_version) > 0) {
|
||||
--
|
||||
1.8.2.1
|
||||
|
@ -42,7 +42,7 @@
|
||||
Summary: X.Org X11 X server
|
||||
Name: xorg-x11-server
|
||||
Version: 1.14.2
|
||||
Release: 8%{?gitdate:.%{gitdate}}%{dist}
|
||||
Release: 9%{?gitdate:.%{gitdate}}%{dist}
|
||||
URL: http://www.x.org
|
||||
License: MIT
|
||||
Group: User Interface/X
|
||||
@ -160,6 +160,13 @@ Patch8039: 0001-dix-set-the-valuator-mask-to-ensure-XI-1.x-events-ha.patch
|
||||
# Fix multiple monitors in reverse optimus configurations
|
||||
Patch8040: 0001-rrcrtc-brackets-are-hard-lets-go-shopping.patch
|
||||
Patch8041: 0001-pixmap-fix-reverse-optimus-support-with-multiple-hea.patch
|
||||
|
||||
# Fix active touch grabs
|
||||
Patch8042: 0001-dix-check-the-xi2mask-not-the-grab-type-for-touch-li.patch
|
||||
# Fix failures for XI2 clients using other XI2 libraries (with different XI2
|
||||
# version support)
|
||||
Patch8043: 0003-Xi-Allow-clients-to-ask-for-2.3-and-then-2.2-without.patch
|
||||
|
||||
# upstream in -next for 1.15, e21e183059df5975e7086850d1931edb2c1bbd06
|
||||
%if !0%{?rhel}
|
||||
Patch7071: 0001-os-use-libunwind-to-generate-backtraces.patch
|
||||
@ -637,6 +644,11 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%{xserver_source_dir}
|
||||
|
||||
%changelog
|
||||
* Tue Jul 30 2013 Peter Hutterer <peter.hutterer@redhat.com> 1.14.2-9
|
||||
- Fix active touch grabs, second touchpoint didn't get sent to client
|
||||
- Fix version mismatch for XI 2.2+ clients (where a library supports > 2.2
|
||||
but another version than the originally requested one).
|
||||
|
||||
* Tue Jul 30 2013 Dave Airlie <airlied@redhat.com> 1.14.2-8
|
||||
- fixes for multi-monitor reverse optimus
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user