mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-02-03 21:40:40 +01:00
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 <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
20831877d0
commit
bd7f7e8a08
1 changed files with 14 additions and 5 deletions
19
src/evdev.c
19
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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue