Imported Debian patch 2:1.11.4-0ubuntu10
[glsdk/xserver.git] / debian / patches / 502_indirect_touch_window_set.patch
1 From d128edad09452246e18b38cef151cad226f1c5f5 Mon Sep 17 00:00:00 2001
2 From: Chase Douglas <chase.douglas@canonical.com>
3 Date: Wed, 7 Mar 2012 15:20:12 -0800
4 Subject: [PATCH 2/2] Use a new sprite trace for indirect touches when all
5  touches have physically ended
7 All touches of an indirect device, such as a trackpad, are sent to the
8 same window set. When there are no active touches, a new window set is
9 created; otherwise, the window set of an existing touch is copied.
11 The current code checks for any logically active touches. This includes
12 touches that have physically ended but are still logically active due to
13 unhandled touch grabs. Instead, we want a new window set whenever there
14 are no physically active touches.
16 This change skips over logically active but pending end touches, which
17 are touches that have physically ended.
19 Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
20 ---
21  dix/touch.c |    3 ++-
22  1 files changed, 2 insertions(+), 1 deletions(-)
24 diff --git a/dix/touch.c b/dix/touch.c
25 index d04801c..0aa24f2 100644
26 --- a/dix/touch.c
27 +++ b/dix/touch.c
28 @@ -524,7 +524,8 @@ TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite)
29      /* All touches should have the same sprite trace, so find and reuse an
30       * existing touch's sprite if possible, else use the device's sprite. */
31      for (i = 0; i < t->num_touches; i++)
32 -        if (t->touches[i].sprite.spriteTraceGood > 0)
33 +        if (!t->touches[i].pending_finish &&
34 +            t->touches[i].sprite.spriteTraceGood > 0)
35              break;
36      if (i < t->num_touches)
37          srcsprite = &t->touches[i].sprite;
38 -- 
39 1.7.9