diff options
| author | Dana Jansens <danakj@orodu.net> | 2010-02-11 13:23:54 -0500 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2010-02-11 13:34:46 -0500 |
| commit | 43d62990e407f409f76f60a405c529f9b15d33f6 (patch) | |
| tree | 66f551a32e8b8afb1764c28ab49308f042f26d35 /openbox/actions/directionalwindows.c | |
| parent | 8f1ea42bb147e2a65cf43dfe7aea864d01faedcd (diff) | |
don't strip the state for keyboard events
this allows translation of keys not in the base keyboard layout
Diffstat (limited to 'openbox/actions/directionalwindows.c')
| -rw-r--r-- | openbox/actions/directionalwindows.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/openbox/actions/directionalwindows.c b/openbox/actions/directionalwindows.c index 2cca450c..c5b908bb 100644 --- a/openbox/actions/directionalwindows.c +++ b/openbox/actions/directionalwindows.c @@ -6,6 +6,7 @@ #include "openbox/openbox.h" #include "openbox/misc.h" #include "gettext.h" +#include "obt/keyboard.h" typedef struct { gboolean interactive; @@ -256,6 +257,15 @@ static gboolean i_input_func(guint initial_state, gpointer options, gboolean *used) { + guint mods; + + mods = obt_keyboard_only_modmasks(e->xkey.state); + if (e->type == KeyRelease) { + /* remove from the state the mask of the modifier key being + released, if it is a modifier key being released that is */ + mods &= ~obt_keyboard_keycode_to_modmask(e->xkey.keycode); + } + if (e->type == KeyPress) { /* Escape cancels no matter what */ if (ob_keycode_match(e->xkey.keycode, OB_KEY_ESCAPE)) { @@ -272,8 +282,7 @@ static gboolean i_input_func(guint initial_state, } } /* They released the modifiers */ - else if (e->type == KeyRelease && initial_state && - (e->xkey.state & initial_state) == 0) + else if (e->type == KeyRelease && initial_state && !(mods & initial_state)) { end_cycle(FALSE, e->xkey.state, options); return FALSE; |
