input: Reset touch state when last touch device was removed
authorJonas Ådahl <jadahl@gmail.com>
Mon, 2 Dec 2013 21:05:04 +0000 (22:05 +0100)
committerKristian Høgsberg <krh@bitplanet.net>
Mon, 2 Dec 2013 23:24:22 +0000 (15:24 -0800)
Reset the touch point count in case the driver did not emit appropriate
number of touch up events.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
src/input.c

index 1b8dbae..34aa720 100644 (file)
@@ -517,6 +517,12 @@ weston_keyboard_destroy(struct weston_keyboard *keyboard)
        free(keyboard);
 }
 
        free(keyboard);
 }
 
+static void
+weston_touch_reset_state(struct weston_touch *touch)
+{
+       touch->num_tp = 0;
+}
+
 WL_EXPORT struct weston_touch *
 weston_touch_create(void)
 {
 WL_EXPORT struct weston_touch *
 weston_touch_create(void)
 {
@@ -2041,6 +2047,7 @@ weston_seat_release_touch(struct weston_seat *seat)
        if (seat->touch_device_count == 0) {
                weston_touch_set_focus(seat, NULL);
                weston_touch_cancel_grab(seat->touch);
        if (seat->touch_device_count == 0) {
                weston_touch_set_focus(seat, NULL);
                weston_touch_cancel_grab(seat->touch);
+               weston_touch_reset_state(seat->touch);
                seat_send_updated_caps(seat);
        }
 }
                seat_send_updated_caps(seat);
        }
 }