]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/xserver.git/blob - debian/patches/605-Check-for-proper-window-ID-when-processing-touch-all.patch
Imported Debian patch 1.11.4-0ubuntu3
[glsdk/xserver.git] / debian / patches / 605-Check-for-proper-window-ID-when-processing-touch-all.patch
1 From 656ab879f20892975510723ce8fe78faf64aadb4 Mon Sep 17 00:00:00 2001
2 From: Chase Douglas <chase.douglas@canonical.com>
3 Date: Fri, 3 Feb 2012 16:19:09 -0800
4 Subject: [PATCH] Check for proper window ID when processing touch allow
5  requests
7 Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
8 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
9 Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
10 ---
11  Xi/xiallowev.c  |    2 +-
12  dix/touch.c     |   18 ++++++++++++------
13  include/input.h |    2 +-
14  3 files changed, 14 insertions(+), 8 deletions(-)
16 diff --git a/Xi/xiallowev.c b/Xi/xiallowev.c
17 index dab3393..38967b2 100644
18 --- a/Xi/xiallowev.c
19 +++ b/Xi/xiallowev.c
20 @@ -98,7 +98,7 @@ ProcXIAllowEvents(ClientPtr client)
21      case XIRejectTouch:
22      case XIAcceptTouch:
23          ret = TouchAcceptReject(client, dev, stuff->mode, stuff->touchid,
24 -                                &client->errorValue);
25 +                                stuff->grab_window, &client->errorValue);
26          break;
27      default:
28         client->errorValue = stuff->mode;
29 diff --git a/dix/touch.c b/dix/touch.c
30 index 4a116ee..7daf81b 100644
31 --- a/dix/touch.c
32 +++ b/dix/touch.c
33 @@ -988,7 +988,7 @@ TouchListenerGone(XID resource)
34  
35  int
36  TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
37 -                  uint32_t touchid, XID *error)
38 +                  uint32_t touchid, Window grab_window, XID *error)
39  {
40      TouchPointInfoPtr ti;
41      int nev, i;
42 @@ -1003,8 +1003,6 @@ TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
43          return BadDevice;
44      }
45  
46 -    /* FIXME window is unhandled */
47 -
48      ti = TouchFindByClientID(dev, touchid);
49      if (!ti)
50      {
51 @@ -1012,9 +1010,17 @@ TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
52          return BadValue;
53      }
54  
55 -    /* FIXME: Allow for early accept */
56 -    if (ti->num_listeners == 0 ||
57 -        CLIENT_ID(ti->listeners[0].listener) != client->index)
58 +    for (i = 0; i < ti->num_listeners; i++)
59 +    {
60 +        if (CLIENT_ID(ti->listeners[i].listener) == client->index &&
61 +            ti->listeners[i].window->drawable.id == grab_window)
62 +            break;
63 +    }
64 +    if (i == ti->num_listeners)
65 +        return BadAccess;
66 +
67 +    /* FIXME: Implement early accept/reject */
68 +    if (i > 0)
69          return BadAccess;
70  
71      nev = GetTouchOwnershipEvents(events, dev, ti, mode,
72 diff --git a/include/input.h b/include/input.h
73 index 605e74d..fea5a31 100644
74 --- a/include/input.h
75 +++ b/include/input.h
76 @@ -626,7 +626,7 @@ extern int TouchGetPointerEventType(const InternalEvent *ev);
77  extern void TouchRemovePointerGrab(DeviceIntPtr dev);
78  extern void TouchListenerGone(XID resource);
79  extern int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
80 -                             uint32_t touchid, XID *error);
81 +                             uint32_t touchid, Window grab_window, XID *error);
82  
83  /* misc event helpers */
84  extern Mask GetEventMask(DeviceIntPtr dev, xEvent* ev, InputClientsPtr clients);
85 -- 
86 1.7.8.3