Allow receiving input events even if the X-server grabbed the device.
authorMichael Büsch <mb@bu3sch.de>
Fri, 10 Sep 2010 21:40:12 +0000 (21:40 +0000)
committerMichael Büsch <mb@bu3sch.de>
Fri, 10 Sep 2010 21:40:12 +0000 (21:40 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22999 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/omap24xx/patches-2.6.35/710-evdev-events-without-grab.patch [new file with mode: 0644]

diff --git a/target/linux/omap24xx/patches-2.6.35/710-evdev-events-without-grab.patch b/target/linux/omap24xx/patches-2.6.35/710-evdev-events-without-grab.patch
new file mode 100644 (file)
index 0000000..870cb8a
--- /dev/null
@@ -0,0 +1,31 @@
+---
+ drivers/input/evdev.c |   10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+--- linux-2.6.35.4.orig/drivers/input/evdev.c
++++ linux-2.6.35.4/drivers/input/evdev.c
+@@ -70,7 +70,7 @@ static void evdev_event(struct input_han
+                       unsigned int type, unsigned int code, int value)
+ {
+       struct evdev *evdev = handle->private;
+-      struct evdev_client *client;
++      struct evdev_client *client, *c;
+       struct input_event event;
+       do_gettimeofday(&event.time);
+@@ -81,9 +81,13 @@ static void evdev_event(struct input_han
+       rcu_read_lock();
+       client = rcu_dereference(evdev->grab);
+-      if (client)
++      if (client) {
+               evdev_pass_event(client, &event);
+-      else
++              /* Also pass events to clients that did not grab the device. */
++              list_for_each_entry_rcu(c, &evdev->client_list, node)
++                      if (c != client)
++                              evdev_pass_event(c, &event);
++      } else
+               list_for_each_entry_rcu(client, &evdev->client_list, node)
+                       evdev_pass_event(client, &event);