summaryrefslogtreecommitdiff
path: root/openbox/keyboard.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2010-02-11 13:23:54 -0500
committerDana Jansens <danakj@orodu.net>2010-02-11 13:34:46 -0500
commit43d62990e407f409f76f60a405c529f9b15d33f6 (patch)
tree66f551a32e8b8afb1764c28ab49308f042f26d35 /openbox/keyboard.c
parent8f1ea42bb147e2a65cf43dfe7aea864d01faedcd (diff)
don't strip the state for keyboard events
this allows translation of keys not in the base keyboard layout
Diffstat (limited to 'openbox/keyboard.c')
-rw-r--r--openbox/keyboard.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/openbox/keyboard.c b/openbox/keyboard.c
index 5f7531e3..92945ab0 100644
--- a/openbox/keyboard.c
+++ b/openbox/keyboard.c
@@ -33,6 +33,7 @@
#include "moveresize.h"
#include "popup.h"
#include "gettext.h"
+#include "obt/keyboard.h"
#include <glib.h>
@@ -175,9 +176,12 @@ gboolean keyboard_process_interactive_grab(const XEvent *e, ObClient **client)
gboolean handled = FALSE;
gboolean done = FALSE;
gboolean cancel = FALSE;
+ guint mods;
+
+ mods = obt_keyboard_only_modmasks(ev->xkey.state);
if (istate.active) {
- if ((e->type == KeyRelease && !(istate.state & e->xkey.state))) {
+ if ((e->type == KeyRelease && !(istate.state & mods))) {
done = TRUE;
handled = TRUE;
} else if (e->type == KeyPress) {
@@ -208,6 +212,7 @@ gboolean keyboard_event(ObClient *client, const XEvent *e)
{
KeyBindingTree *p;
gboolean used;
+ guint mods;
if (e->type == KeyRelease) {
grab_key_passive_count(-1);
@@ -217,8 +222,10 @@ gboolean keyboard_event(ObClient *client, const XEvent *e)
g_assert(e->type == KeyPress);
grab_key_passive_count(1);
+ mods = obt_keyboard_only_modmasks(e->xkey.state);
+
if (e->xkey.keycode == config_keyboard_reset_keycode &&
- e->xkey.state == config_keyboard_reset_state)
+ mods == config_keyboard_reset_state)
{
obt_main_loop_timeout_remove(ob_main_loop, chain_timeout);
keyboard_reset_chains(-1);
@@ -231,9 +238,7 @@ gboolean keyboard_event(ObClient *client, const XEvent *e)
else
p = curpos->first_child;
while (p) {
- if (p->key == e->xkey.keycode &&
- p->state == e->xkey.state)
- {
+ if (p->key == e->xkey.keycode && p->state == mods) {
/* if we hit a key binding, then close any open menus and run it */
if (menu_frame_visible)
menu_frame_hide_all();