Imported Debian patch 2:1.11.4-0ubuntu10.1
[glsdk/xserver.git] / debian / patches / 506_touchscreen_pointer_emulation_checks.patch
1 From ec9c4295830c3de610e65aca17f4da4a7af3c4c5 Mon Sep 17 00:00:00 2001
2 From: Chase Douglas <chase.douglas@canonical.com>
3 Date: Wed, 18 Apr 2012 12:04:58 -0700
4 Subject: [PATCH] Check other clients' core masks properly when adding touch
5  listener
7 The current code checks the core event mask as though it were an XI
8 mask. This change fixes the checks so the proper client and event masks
9 are used.
11 Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
12 Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
13 ---
14  dix/touch.c |    8 ++++----
15  1 files changed, 4 insertions(+), 4 deletions(-)
17 diff --git a/dix/touch.c b/dix/touch.c
18 index 572bdfb..f8f26c8 100644
19 --- a/dix/touch.c
20 +++ b/dix/touch.c
21 @@ -811,6 +811,7 @@ TouchAddRegularListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
22      if (mask & EVENT_CORE_MASK) {
23          int coretype = GetCoreType(TouchGetPointerEventType(ev));
24          Mask core_filter = event_get_filter_from_type(dev, coretype);
25 +        OtherClients *oclients;
26  
27          /* window owner */
28          if (IsMaster(dev) && (win->eventMask & core_filter)) {
29 @@ -822,13 +823,12 @@ TouchAddRegularListener(DeviceIntPtr dev, TouchPointInfoPtr ti,
30          }
31  
32          /* all others */
33 -        nt_list_for_each_entry(iclients, (InputClients*)wOtherClients(win), next)
34 -        {
35 -            if (!(iclients->mask[XIAllDevices] & core_filter))
36 +        nt_list_for_each_entry(oclients, wOtherClients(win), next) {
37 +            if (!(oclients->mask & core_filter))
38                  continue;
39  
40              TouchEventHistoryAllocate(ti);
41 -            TouchAddListener(ti, iclients->resource, CORE,
42 +            TouchAddListener(ti, oclients->resource, CORE,
43                               type, LISTENER_AWAITING_BEGIN, win);
44              return TRUE;
45          }
46 -- 
47 1.7.9.1
49 From 01091806f762f6f8fc83dc1051b5f3cfb38e88b1 Mon Sep 17 00:00:00 2001
50 From: Chase Douglas <chase.douglas@canonical.com>
51 Date: Wed, 4 Apr 2012 12:57:40 -0700
52 Subject: [PATCH 2/3] Check core event mask properly for pointer emulated
53  touch events
55 The current code checks the core event mask as though it were an XI2
56 mask. This change fixes the checks so the proper client and event masks
57 are used.
59 Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
61 Conflicts:
63         Xi/exevents.c
64 ---
65  Xi/exevents.c |   13 +++++++++----
66  1 files changed, 9 insertions(+), 4 deletions(-)
68 diff --git a/Xi/exevents.c b/Xi/exevents.c
69 index f390f67..72e6d91 100644
70 --- a/Xi/exevents.c
71 +++ b/Xi/exevents.c
72 @@ -1342,6 +1342,8 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
73              BUG_WARN(!iclients);
74              if (!iclients)
75                  return FALSE;
76 +
77 +            *client = rClient(iclients);
78          } else if (listener->level == XI)
79          {
80              int xi_type = GetXIType(TouchGetPointerEventType(ev));
81 @@ -1352,19 +1354,22 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
82              BUG_WARN(!iclients);
83              if (!iclients)
84                  return FALSE;
85 +
86 +            *client = rClient(iclients);
87          } else
88          {
89              int coretype = GetCoreType(TouchGetPointerEventType(ev));
90              Mask core_filter = event_get_filter_from_type(dev, coretype);
91 +            OtherClients *oclients;
92  
93              /* all others */
94 -            nt_list_for_each_entry(iclients, (InputClients*)wOtherClients(*win), next)
95 -                if (iclients->mask[XIAllDevices] & core_filter)
96 +            nt_list_for_each_entry(oclients, (InputClients*)wOtherClients(*win), next)
97 +                if (oclients->mask & core_filter)
98                      break;
99 -            /* if owner selected, iclients is NULL */
100 +            /* if owner selected, oclients is NULL */
101 +            *client = oclients ? rClient(oclients) : wClient(*win);
102          }
103  
104 -        *client = iclients ? rClient(iclients) : wClient(*win);
105          *mask = iclients ? iclients->xi2mask : NULL;
106          *grab = NULL;
107      }
108 -- 
109 1.7.9.1
111 From 4b4c88b247c6435578c983d74a90f35472849f3a Mon Sep 17 00:00:00 2001
112 From: Chase Douglas <chase.douglas@canonical.com>
113 Date: Wed, 4 Apr 2012 12:59:55 -0700
114 Subject: [PATCH 3/3] Only set XI2 mask if pointer emulation is for XI2 client
116 The current code returns a reference to memory that may not actually be
117 an XI2 mask. Instead, only return a value when an XI2 client has
118 selected for events.
120 Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
122 Conflicts:
124         Xi/exevents.c
125 ---
126  Xi/exevents.c |    3 ++-
127  1 files changed, 2 insertions(+), 1 deletions(-)
129 diff --git a/Xi/exevents.c b/Xi/exevents.c
130 index 72e6d91..fe06efa 100644
131 --- a/Xi/exevents.c
132 +++ b/Xi/exevents.c
133 @@ -1293,6 +1293,7 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
134  {
135       int rc;
136       InputClients *iclients = NULL;
137 +     *mask = NULL;
138  
139      if (listener->type == LISTENER_GRAB ||
140          listener->type == LISTENER_POINTER_GRAB)
141 @@ -1343,6 +1344,7 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
142              if (!iclients)
143                  return FALSE;
144  
145 +            *mask = iclients->xi2mask;
146              *client = rClient(iclients);
147          } else if (listener->level == XI)
148          {
149 @@ -1370,7 +1372,6 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
150              *client = oclients ? rClient(oclients) : wClient(*win);
151          }
152  
153 -        *mask = iclients ? iclients->xi2mask : NULL;
154          *grab = NULL;
155      }
156  
157 -- 
158 1.7.9.1