swc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/swc
Log | Files | Refs | README | LICENSE

commit a4ca660359f412b7761edf1262b7db8eaf57613b
parent 1f848d1cbea3cf6bde85a85d592bc550a13ed012
Author: Michael Forney <mforney@mforney.org>
Date:   Sun, 24 Nov 2013 02:19:49 -0800

Compute modifier state in keyboard.c

Diffstat:
Mlibswc/binding.c | 30++++++------------------------
Mlibswc/keyboard.c | 13++++++++++++-
Mlibswc/keyboard.h | 2++
3 files changed, 20 insertions(+), 25 deletions(-)

diff --git a/libswc/binding.c b/libswc/binding.c @@ -52,31 +52,13 @@ static bool handle_key(struct swc_keyboard * keyboard, uint32_t time, wl_array_for_each(binding, &key_bindings) { - if (binding->value == keysym) + if (binding->value == keysym + && (binding->modifiers == keyboard->modifiers + || binding->modifiers == SWC_MOD_ANY)) { - xkb_mod_mask_t mod_mask; - uint32_t modifiers = 0; - mod_mask = xkb_state_serialize_mods(keyboard->xkb.state, - XKB_STATE_MODS_EFFECTIVE); - mod_mask = xkb_state_mod_mask_remove_consumed(keyboard->xkb.state, key + 8, - mod_mask); - - if (mod_mask & (1 << keyboard->xkb.indices.ctrl)) - modifiers |= SWC_MOD_CTRL; - if (mod_mask & (1 << keyboard->xkb.indices.alt)) - modifiers |= SWC_MOD_ALT; - if (mod_mask & (1 << keyboard->xkb.indices.super)) - modifiers |= SWC_MOD_LOGO; - if (mod_mask & (1 << keyboard->xkb.indices.shift)) - modifiers |= SWC_MOD_SHIFT; - - if (binding->modifiers == SWC_MOD_ANY - || binding->modifiers == modifiers) - { - binding->handler(time, keysym, binding->data); - printf("\t-> handled\n"); - return true; - } + binding->handler(time, keysym, binding->data); + printf("\t-> handled\n"); + return true; } } } diff --git a/libswc/keyboard.c b/libswc/keyboard.c @@ -1,3 +1,4 @@ +#include "swc.h" #include "keyboard.h" #include "util.h" @@ -47,7 +48,7 @@ bool swc_keyboard_initialize(struct swc_keyboard * keyboard) goto error1; wl_array_init(&keyboard->keys); - + keyboard->modifiers = 0; keyboard->focus_handler.enter = &enter; keyboard->focus_handler.leave = &leave; @@ -176,6 +177,16 @@ void swc_keyboard_handle_key(struct swc_keyboard * keyboard, uint32_t time, } } + keyboard->modifiers = 0; + if (mods_active & (1 << keyboard->xkb.indices.ctrl)) + keyboard->modifiers |= SWC_MOD_CTRL; + if (mods_active & (1 << keyboard->xkb.indices.alt)) + keyboard->modifiers |= SWC_MOD_ALT; + if (mods_active & (1 << keyboard->xkb.indices.super)) + keyboard->modifiers |= SWC_MOD_LOGO; + if (mods_active & (1 << keyboard->xkb.indices.shift)) + keyboard->modifiers |= SWC_MOD_SHIFT; + keyboard->mods_depressed = mods_depressed; keyboard->mods_latched = mods_latched; keyboard->mods_locked = mods_locked; diff --git a/libswc/keyboard.h b/libswc/keyboard.h @@ -34,6 +34,8 @@ struct swc_keyboard uint32_t mods_latched; uint32_t mods_locked; uint32_t group; + + uint32_t modifiers; }; bool swc_keyboard_initialize(struct swc_keyboard * keyboard);