summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuentin Glidic <sardemff7+git@sardemff7.net>2017-03-29 02:12:57 +0200
committerQuentin Glidic <sardemff7+git@sardemff7.net>2017-03-29 02:12:57 +0200
commitc4892f5d40898d140eaf6c18c4db9d9ca9ec2597 (patch)
tree39a1cefbce5d216b5c06534321515eaaeb2108bf
parentb25439c63390850c5a756dafe00015f46a05cbe2 (diff)
xkb: Fix modmask computation
Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net>
-rw-r--r--include/xkb.h2
-rw-r--r--source/wayland.c10
-rw-r--r--source/xcb.c14
-rw-r--r--source/xkb.c4
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);