From: Peter Hutterer Date: Wed, 20 Aug 2014 01:11:28 +0000 (+1000) Subject: evdev: drop the button count when releasing keys on remove X-Git-Tag: 0.7.0~136 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bd7f7e8a08777ae3f9b9097a38ca666b948c9b3a;p=platform%2Fupstream%2Flibinput.git evdev: drop the button count when releasing keys on remove We previously called this function only before device removal, so failing to update the button state didn't matter. To make this function generic for the device suspend/resume, we need to keep track of the button/key count properly. If we have a key down multiple times on suspend though, log a bug. The dispatch should release the keys before we even get here (functionality added in a subsequent patch). Signed-off-by: Peter Hutterer Reviewed-by: Hans de Goede --- diff --git a/src/evdev.c b/src/evdev.c index 3a5d8742..44849691 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1210,20 +1210,29 @@ release_pressed_keys(struct evdev_device *device) return; for (code = 0; code < KEY_CNT; code++) { - if (get_key_down_count(device, code) > 0) { + int count = get_key_down_count(device, code); + + if (count > 1) { + log_bug_libinput(libinput, + "Key %d is down %d times.\n", + code, + count); + } + + while (get_key_down_count(device, code) > 0) { switch (get_key_type(code)) { case EVDEV_KEY_TYPE_NONE: break; case EVDEV_KEY_TYPE_KEY: - keyboard_notify_key( - &device->base, + evdev_keyboard_notify_key( + device, time, code, LIBINPUT_KEY_STATE_RELEASED); break; case EVDEV_KEY_TYPE_BUTTON: - pointer_notify_button( - &device->base, + evdev_pointer_notify_button( + device, time, code, LIBINPUT_BUTTON_STATE_RELEASED);