mirror of
https://github.com/awesomeWM/awesome
synced 2024-11-16 07:47:22 +01:00
Merge pull request #558 from psychon/xkb-detectable-autorepeat
Xkb detectable autorepeat Closes https://github.com/awesomeWM/awesome/pull/558.
This commit is contained in:
commit
c9c60810cc
1 changed files with 25 additions and 14 deletions
39
xkb.c
39
xkb.c
|
@ -129,7 +129,7 @@ xkb_fill_state(void)
|
|||
int32_t device_id = xkb_x11_get_core_keyboard_device_id(conn);
|
||||
if (device_id == -1)
|
||||
fatal("Failed while getting XKB device id");
|
||||
|
||||
|
||||
struct xkb_keymap *xkb_keymap = xkb_x11_keymap_new_from_device(
|
||||
globalconf.xkb_ctx,
|
||||
conn,
|
||||
|
@ -139,7 +139,7 @@ xkb_fill_state(void)
|
|||
|
||||
if (!xkb_keymap)
|
||||
fatal("Failed while getting XKB keymap from device");
|
||||
|
||||
|
||||
globalconf.xkb_state = xkb_x11_state_new_from_device(xkb_keymap,
|
||||
conn,
|
||||
device_id);
|
||||
|
@ -160,7 +160,7 @@ xkb_init_keymap(void)
|
|||
globalconf.xkb_ctx = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
|
||||
if (!globalconf.xkb_ctx)
|
||||
fatal("Failed while getting XKB context");
|
||||
|
||||
|
||||
xkb_fill_state();
|
||||
}
|
||||
|
||||
|
@ -220,7 +220,7 @@ event_handle_xkb_notify(xcb_generic_event_t* event)
|
|||
{
|
||||
xcb_xkb_state_notify_event_t *state_notify_event = (void*)event;
|
||||
|
||||
xkb_state_update_mask(globalconf.xkb_state,
|
||||
xkb_state_update_mask(globalconf.xkb_state,
|
||||
state_notify_event->baseMods,
|
||||
state_notify_event->latchedMods,
|
||||
state_notify_event->lockedMods,
|
||||
|
@ -272,17 +272,28 @@ xkb_init(void)
|
|||
XCB_XKB_MAP_PART_EXPLICIT_COMPONENTS |
|
||||
XCB_XKB_MAP_PART_KEY_ACTIONS |
|
||||
XCB_XKB_MAP_PART_KEY_BEHAVIORS |
|
||||
XCB_XKB_MAP_PART_VIRTUAL_MODS |
|
||||
XCB_XKB_MAP_PART_VIRTUAL_MODS |
|
||||
XCB_XKB_MAP_PART_VIRTUAL_MOD_MAP;
|
||||
|
||||
xcb_xkb_select_events_checked(globalconf.connection,
|
||||
XCB_XKB_ID_USE_CORE_KBD,
|
||||
map,
|
||||
0,
|
||||
map,
|
||||
map_parts,
|
||||
map_parts,
|
||||
0);
|
||||
/* Enable detectable auto-repeat, but ignore failures */
|
||||
xcb_discard_reply(globalconf.connection,
|
||||
xcb_xkb_per_client_flags(globalconf.connection,
|
||||
XCB_XKB_ID_USE_CORE_KBD,
|
||||
XCB_XKB_PER_CLIENT_FLAG_DETECTABLE_AUTO_REPEAT,
|
||||
XCB_XKB_PER_CLIENT_FLAG_DETECTABLE_AUTO_REPEAT,
|
||||
0,
|
||||
0,
|
||||
0)
|
||||
.sequence);
|
||||
|
||||
xcb_xkb_select_events(globalconf.connection,
|
||||
XCB_XKB_ID_USE_CORE_KBD,
|
||||
map,
|
||||
0,
|
||||
map,
|
||||
map_parts,
|
||||
map_parts,
|
||||
0);
|
||||
|
||||
/* load keymap to use when resolving keypresses */
|
||||
xkb_init_keymap();
|
||||
|
@ -294,7 +305,7 @@ void
|
|||
xkb_free(void)
|
||||
{
|
||||
// unsubscribe from all events
|
||||
xcb_xkb_select_events_checked(globalconf.connection,
|
||||
xcb_xkb_select_events(globalconf.connection,
|
||||
XCB_XKB_ID_USE_CORE_KBD,
|
||||
0,
|
||||
0,
|
||||
|
|
Loading…
Reference in a new issue