From 43d62990e407f409f76f60a405c529f9b15d33f6 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 11 Feb 2010 13:23:54 -0500 Subject: don't strip the state for keyboard events this allows translation of keys not in the base keyboard layout --- openbox/actions/cyclewindows.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'openbox/actions/cyclewindows.c') diff --git a/openbox/actions/cyclewindows.c b/openbox/actions/cyclewindows.c index d1112242..6619b387 100644 --- a/openbox/actions/cyclewindows.c +++ b/openbox/actions/cyclewindows.c @@ -5,6 +5,7 @@ #include "openbox/focus_cycle.h" #include "openbox/openbox.h" #include "gettext.h" +#include "obt/keyboard.h" typedef struct { gboolean linear; @@ -172,6 +173,14 @@ static gboolean i_input_func(guint initial_state, gboolean *used) { Options *o = options; + 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 */ @@ -191,8 +200,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)) { o->cancel = FALSE; o->state = e->xkey.state; -- cgit v1.2.3