From c4892f5d40898d140eaf6c18c4db9d9ca9ec2597 Mon Sep 17 00:00:00 2001 From: Quentin Glidic Date: Wed, 29 Mar 2017 02:12:57 +0200 Subject: xkb: Fix modmask computation Signed-off-by: Quentin Glidic --- include/xkb.h | 2 +- source/wayland.c | 10 +++++----- source/xcb.c | 14 +++++++------- source/xkb.c | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/xkb.h b/include/xkb.h index 3675f826..042fffd0 100644 --- a/include/xkb.h +++ b/include/xkb.h @@ -27,6 +27,6 @@ typedef struct { void xkb_common_init ( xkb_stuff *xkb ); -widget_modifier_mask xkb_get_modmask(xkb_stuff *xkb, xkb_keysym_t key); +widget_modifier_mask xkb_get_modmask(xkb_stuff *xkb, xkb_keycode_t key); xkb_keysym_t xkb_handle_key ( xkb_stuff *xkb, xkb_keycode_t keycode, char **text, int *length); #endif diff --git a/source/wayland.c b/source/wayland.c index ca68c9f6..23a3c92f 100644 --- a/source/wayland.c +++ b/source/wayland.c @@ -354,7 +354,7 @@ wayland_keyboard_enter(void *data, struct wl_keyboard *keyboard, uint32_t serial uint32_t *key, *kend; for ( key = keys->data, kend = key + keys->size ; key < kend ; ++key ) { xkb_keysym_t keysym = xkb_state_key_get_one_sym ( self->xkb.state, *key + 8 ); - widget_modifier_mask modstate = xkb_get_modmask ( &self->xkb, keysym ); + widget_modifier_mask modstate = xkb_get_modmask ( &self->xkb, *key + 8 ); abe_find_action ( modstate, keysym ); } } @@ -378,15 +378,15 @@ wayland_keyboard_key(void *data, struct wl_keyboard *keyboard, uint32_t serial, wayland->last_seat = self; self->serial = serial; - keysym = xkb_handle_key(&self->xkb, key + 8, &text, &len); - modmask = xkb_get_modmask(&self->xkb, keysym); - if ( state == WL_KEYBOARD_KEY_STATE_RELEASED ) { + modmask = xkb_get_modmask(&self->xkb, 0); if ( modmask != 0 ) return; abe_trigger_release (); } else { + keysym = xkb_handle_key(&self->xkb, key + 8, &text, &len); + modmask = xkb_get_modmask(&self->xkb, key + 8); rofi_view_handle_keypress ( modmask, keysym, text, len ); } @@ -454,7 +454,7 @@ wayland_cursor_frame_callback(void *data, struct wl_callback *callback, uint32_t static void wayland_pointer_send_events(wayland_seat *self) { - widget_modifier_mask modmask = xkb_get_modmask(&self->xkb, XKB_KEY_NoSymbol); + widget_modifier_mask modmask = xkb_get_modmask(&self->xkb, 0); if ( self->motion.x > -1 || self->motion.y > -1 ) { diff --git a/source/xcb.c b/source/xcb.c index 1e591568..b0767450 100644 --- a/source/xcb.c +++ b/source/xcb.c @@ -162,7 +162,7 @@ static gboolean xcb_callback(xcb_generic_event_t *ev, G_GNUC_UNUSED gpointer use ksne->baseGroup, ksne->latchedGroup, ksne->lockedGroup ); - modmask = xkb_get_modmask ( &xcb->xkb, XKB_KEY_NoSymbol ); + modmask = xkb_get_modmask ( &xcb->xkb, 0 ); if ( modmask == 0 ) { abe_trigger_release ( ); @@ -277,9 +277,10 @@ static gboolean xcb_callback(xcb_generic_event_t *ev, G_GNUC_UNUSED gpointer use for ( gint8 bi = 0; bi < 7; ++bi ) { if ( kne->keys[by] & ( 1 << bi ) ) { // X11 keycodes starts at 8 - xkb_keysym_t key = xkb_state_key_get_one_sym ( xcb->xkb.state, ( 8 * by + bi ) + 8 ); - widget_modifier_mask modstate = xkb_get_modmask ( &xcb->xkb, key); - abe_find_action ( modstate, key ); + xkb_keycode_t key = ( 8 * by + bi ) + 8; + xkb_keysym_t keysym = xkb_state_key_get_one_sym ( xcb->xkb.state, key ); + widget_modifier_mask modstate = xkb_get_modmask ( &xcb->xkb, key ); + abe_find_action ( modstate, keysym ); } } } @@ -294,7 +295,7 @@ static gboolean xcb_callback(xcb_generic_event_t *ev, G_GNUC_UNUSED gpointer use int len = 0; keysym = xkb_handle_key(&xcb->xkb, xkpe->detail, &text, &len); - modmask = xkb_get_modmask(&xcb->xkb, keysym); + modmask = xkb_get_modmask(&xcb->xkb, 0 ); rofi_view_handle_keypress ( modmask, keysym, text, len ); break; @@ -307,8 +308,7 @@ static gboolean xcb_callback(xcb_generic_event_t *ev, G_GNUC_UNUSED gpointer use char *text; int len = 0; - keysym = xkb_handle_key(&xcb->xkb, xkre->detail, &text, &len); - modmask = xkb_get_modmask(&xcb->xkb, keysym); + modmask = xkb_get_modmask(&xcb->xkb, 0 ); if ( modmask != 0 ) return G_SOURCE_CONTINUE; diff --git a/source/xkb.c b/source/xkb.c index 4bd5ba7d..01a4a5b7 100644 --- a/source/xkb.c +++ b/source/xkb.c @@ -72,7 +72,7 @@ void xkb_common_init ( xkb_stuff *xkb ) } widget_modifier_mask -xkb_get_modmask(xkb_stuff *xkb, xkb_keysym_t key) +xkb_get_modmask(xkb_stuff *xkb, xkb_keycode_t key) { widget_modifier_mask mask = 0; widget_modifier mod; @@ -80,7 +80,7 @@ xkb_get_modmask(xkb_stuff *xkb, xkb_keysym_t key) for ( mod = 0; mod < NUM_WIDGET_MOD; ++mod ) { gboolean found = FALSE; for ( i = xkb->mods[mod] ; ! found && *i != XKB_MOD_INVALID ; ++i ) { - found = ( xkb_state_mod_index_is_active(xkb->state, *i, XKB_STATE_MODS_EFFECTIVE) && ! xkb_state_mod_index_is_consumed(xkb->state, key, *i) ); + found = ( xkb_state_mod_index_is_active(xkb->state, *i, XKB_STATE_MODS_EFFECTIVE) && xkb_state_mod_index_is_consumed(xkb->state, key, *i) != 1 ); } if ( found ) mask |= (1 << mod); -- cgit v1.2.3