evdev: Discard events from a touchscreen paired with an unplugged output
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Thu, 24 Apr 2014 12:11:15 +0000 (15:11 +0300)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 25 Apr 2014 21:55:28 +0000 (14:55 -0700)
Commit 17bccaed intended to make the events coming from a touchscreen
paired with an unplugged output to be discarded, while an unpaired one
would just choose a different output. However, the logic was inverted
causing the opposite to happen.

Later in commit 161c6c56, the default behavior was changed to map an
output to a default output if the one specified via udev is not
present. This change is reverted by this patch.

v2: undo the change from commit 161c6c56.

v3: deal with libinput too.

src/evdev.c
src/libinput-device.c
src/libinput-seat.c
src/udev-seat.c

index bc8e5ef..9d97c87 100644 (file)
@@ -602,7 +602,7 @@ notify_output_destroy(struct wl_listener *listener, void *data)
        struct weston_compositor *c = device->seat->compositor;
        struct weston_output *output;
 
-       if (device->output_name) {
+       if (!device->output_name) {
                output = container_of(c->output_list.next,
                                      struct weston_output, link);
                evdev_device_set_output(device, output);
index a67c119..753583a 100644 (file)
@@ -264,7 +264,7 @@ notify_output_destroy(struct wl_listener *listener, void *data)
        struct weston_compositor *c = device->seat->compositor;
        struct weston_output *output;
 
-       if (device->output_name) {
+       if (!device->output_name) {
                output = container_of(c->output_list.next,
                                      struct weston_output, link);
                evdev_device_set_output(device, output);
index acb29d7..e92834f 100644 (file)
@@ -84,9 +84,7 @@ device_added(struct udev_input *input, struct libinput_device *libinput_device)
                wl_list_for_each(output, &c->output_list, link)
                        if (strcmp(output->name, device->output_name) == 0)
                                evdev_device_set_output(device, output);
-       }
-
-       if (device->output == NULL) {
+       } else if (device->output == NULL) {
                output = container_of(c->output_list.next,
                                      struct weston_output, link);
                evdev_device_set_output(device, output);
index cd2f6a9..c846898 100644 (file)
@@ -125,9 +125,7 @@ device_added(struct udev_device *udev_device, struct udev_input *input)
                wl_list_for_each(output, &c->output_list, link)
                        if (strcmp(output->name, device->output_name) == 0)
                                evdev_device_set_output(device, output);
-       }
-
-       if (device->output == NULL) {
+       } else if (device->output == NULL) {
                output = container_of(c->output_list.next,
                                      struct weston_output, link);
                evdev_device_set_output(device, output);