mirror of
https://github.com/labwc/labwc.git
synced 2025-11-02 09:01:47 -05:00
seat: only pass on sent keys on surface-focus
Key events associated with keybindings (both pressed and released) are not
sent to clients. When using wlr_seat_keyboard_notify_enter() it it
therefore important not to send the keycodes of _all_ pressed keys, but
only those that were actually _sent_ to clients (that is, those that were
not bound).
This approach is consistent with sway's implementation in input/seat.c
cffb006feb/sway/input/seat.c (L173-L175)
Fixes issue #510
This commit is contained in:
parent
4108313f96
commit
de99a8ba33
4 changed files with 53 additions and 7 deletions
|
|
@ -2,6 +2,20 @@
|
|||
#ifndef __LABWC_KEY_STATE_H
|
||||
#define __LABWC_KEY_STATE_H
|
||||
|
||||
/*
|
||||
* All keycodes in these functions are (Linux) libinput evdev scancodes which is
|
||||
* what 'wlr_keyboard' uses (e.g. 'seat->keyboard_group->keyboard->keycodes').
|
||||
* Note: These keycodes are different to XKB scancodes by a value of 8.
|
||||
*/
|
||||
|
||||
/**
|
||||
* key_state_pressed_sent_keycodes - generate array of pressed+sent keys
|
||||
* Note: The array is generated by subtracting any bound keys from _all_ pressed
|
||||
* keys (because bound keys were not forwarded to clients).
|
||||
*/
|
||||
uint32_t *key_state_pressed_sent_keycodes(void);
|
||||
int key_state_nr_pressed_sent_keycodes(void);
|
||||
|
||||
void key_state_set_pressed(uint32_t keycode, bool ispressed);
|
||||
void key_state_store_pressed_keys_as_bound(void);
|
||||
bool key_state_corresponding_press_event_was_bound(uint32_t keycode);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue