xkb: only repeat keys when they're supposed to repeat
Support for this was added upstream, we can use it now. This mostly means that modifiers won't repeat anymore. Signed-off-by: Ran Benita <ran234@gmail.com> Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
44376b8daf
commit
23eebad85d
@ -126,6 +126,7 @@ int kbd_dev_process_key(struct kbd_dev *kbd,
|
|||||||
struct uterm_input_event *out)
|
struct uterm_input_event *out)
|
||||||
{
|
{
|
||||||
struct xkb_state *state;
|
struct xkb_state *state;
|
||||||
|
struct xkb_keymap *keymap;
|
||||||
xkb_keycode_t keycode;
|
xkb_keycode_t keycode;
|
||||||
const xkb_keysym_t *keysyms;
|
const xkb_keysym_t *keysyms;
|
||||||
int num_keysyms;
|
int num_keysyms;
|
||||||
@ -134,6 +135,7 @@ int kbd_dev_process_key(struct kbd_dev *kbd,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
state = kbd->state;
|
state = kbd->state;
|
||||||
|
keymap = xkb_state_get_map(state);
|
||||||
keycode = code + EVDEV_KEYCODE_OFFSET;
|
keycode = code + EVDEV_KEYCODE_OFFSET;
|
||||||
|
|
||||||
if (key_state == KEY_PRESSED)
|
if (key_state == KEY_PRESSED)
|
||||||
@ -141,13 +143,12 @@ int kbd_dev_process_key(struct kbd_dev *kbd,
|
|||||||
else if (key_state == KEY_RELEASED)
|
else if (key_state == KEY_RELEASED)
|
||||||
xkb_state_update_key(state, keycode, XKB_KEY_UP);
|
xkb_state_update_key(state, keycode, XKB_KEY_UP);
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO: Add support in xkbcommon to query whether the key
|
|
||||||
* should repeat or not.
|
|
||||||
*/
|
|
||||||
if (key_state == KEY_RELEASED)
|
if (key_state == KEY_RELEASED)
|
||||||
return -ENOKEY;
|
return -ENOKEY;
|
||||||
|
|
||||||
|
if (key_state == KEY_REPEATED && !xkb_key_repeats(keymap, keycode))
|
||||||
|
return -ENOKEY;
|
||||||
|
|
||||||
num_keysyms = xkb_key_get_syms(state, keycode, &keysyms);
|
num_keysyms = xkb_key_get_syms(state, keycode, &keysyms);
|
||||||
if (num_keysyms < 0)
|
if (num_keysyms < 0)
|
||||||
return -ENOKEY;
|
return -ENOKEY;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user