mirror of
https://github.com/Raymo111/i3lock-color.git
synced 2025-02-17 15:55:52 -05:00
Bugfix: Handle numpad keys correctly (Thanks Pascal)
This commit is contained in:
parent
3a22727bff
commit
f891929d34
2 changed files with 24 additions and 11 deletions
31
i3lock.c
31
i3lock.c
|
@ -120,17 +120,15 @@ static void handle_key_release(xcb_key_release_event_t *event) {
|
|||
static void handle_key_press(xcb_key_press_event_t *event) {
|
||||
//printf("keypress %d, state raw = %d\n", event->detail, event->state);
|
||||
|
||||
/* fix state */
|
||||
if (modeswitch_active)
|
||||
event->state |= modeswitchmask;
|
||||
|
||||
/* Apparantly, after activating numlock once, the numlock modifier
|
||||
* stays turned on (use xev(1) to verify). So, to resolve useful
|
||||
* keysyms, we remove the numlock flag from the event state */
|
||||
event->state &= ~numlockmask;
|
||||
|
||||
xcb_keysym_t sym = xcb_key_press_lookup_keysym(symbols, event, event->state);
|
||||
switch (sym) {
|
||||
xcb_keysym_t sym0, sym1, sym;
|
||||
if (modeswitch_active) {
|
||||
sym0 = xcb_key_press_lookup_keysym(symbols, event, 4);
|
||||
sym1 = xcb_key_press_lookup_keysym(symbols, event, 5);
|
||||
} else {
|
||||
sym0 = xcb_key_press_lookup_keysym(symbols, event, 0);
|
||||
sym1 = xcb_key_press_lookup_keysym(symbols, event, 1);
|
||||
}
|
||||
switch (sym0) {
|
||||
case XK_Mode_switch:
|
||||
//printf("Mode switch enabled\n");
|
||||
modeswitch_active = true;
|
||||
|
@ -157,6 +155,17 @@ static void handle_key_press(xcb_key_press_event_t *event) {
|
|||
if ((input_position + 8) >= sizeof(password))
|
||||
return;
|
||||
|
||||
if ((event->state & numlockmask) && xcb_is_keypad_key(sym1)) {
|
||||
/* this key was a keypad key */
|
||||
if ((event->state & XCB_MOD_MASK_SHIFT))
|
||||
sym = sym0;
|
||||
else sym = sym1;
|
||||
} else {
|
||||
if ((event->state & XCB_MOD_MASK_SHIFT))
|
||||
sym = sym1;
|
||||
else sym = sym0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* FIXME: handle all of these? */
|
||||
printf("is_keypad_key = %d\n", xcb_is_keypad_key(sym));
|
||||
|
|
|
@ -825,6 +825,10 @@ long keysym2ucs(xcb_keysym_t keysym)
|
|||
(keysym >= 0x00a0 && keysym <= 0x00ff))
|
||||
return keysym;
|
||||
|
||||
/* check for numpad keys (direct mapping) */
|
||||
if ((keysym >= 0xff80 && keysym <= 0xffb9))
|
||||
return keysym & 0x7F;
|
||||
|
||||
/* also check for directly encoded 24-bit UCS characters */
|
||||
if ((keysym & 0xff000000) == 0x01000000)
|
||||
return keysym & 0x00ffffff;
|
||||
|
|
Loading…
Add table
Reference in a new issue