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

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

index 34aa720..01eafc2 100644 (file)
@@ -431,6 +431,12 @@ pointer_handle_sprite_destroy(struct wl_listener *listener, void *data)
        pointer->sprite = NULL;
 }
 
+static void
+weston_pointer_reset_state(struct weston_pointer *pointer)
+{
+       pointer->button_count = 0;
+}
+
 WL_EXPORT struct weston_pointer *
 weston_pointer_create(struct weston_seat *seat)
 {
@@ -2013,6 +2019,7 @@ weston_seat_release_pointer(struct weston_seat *seat)
                if (pointer->sprite)
                        pointer_unmap_sprite(pointer);
 
+               weston_pointer_reset_state(pointer);
                seat_send_updated_caps(seat);
        }
 }