X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fkeyboard.c;h=9b74c2848a3a2046edaa9b7e212cc9339402fda7;hb=aeac3b735bf4caf7c014c58c1271b2cbe5aedd80;hp=410eb6e0aaa139bd66967afb6ffae8414a75dafa;hpb=6d0c4d7fadd2d67760ef62e11385fd261ba6a3c4;p=chaz%2Fopenbox diff --git a/openbox/keyboard.c b/openbox/keyboard.c index 410eb6e0..9b74c284 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 @@ -78,7 +79,7 @@ static void set_curpos(KeyBindingTree *newpos) if (curpos != NULL) { gchar *text = NULL; GList *it; - Rect *a; + Rect const *a; for (it = curpos->keylist; it; it = g_list_next(it)) { gchar *oldtext = text; @@ -89,12 +90,11 @@ static void set_curpos(KeyBindingTree *newpos) g_free(oldtext); } - a = screen_physical_area_active(); + a = screen_physical_area_primary(FALSE); popup_position(popup, NorthWestGravity, a->x + 10, a->y + 10); /* 1 second delay for the popup to show */ popup_delay_show(popup, G_USEC_PER_SEC, text); g_free(text); - g_free(a); } else { popup_hide(popup); } @@ -175,9 +175,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) { @@ -204,34 +207,37 @@ gboolean keyboard_process_interactive_grab(const XEvent *e, ObClient **client) } #endif -void keyboard_event(ObClient *client, const XEvent *e) +gboolean keyboard_event(ObClient *client, const XEvent *e) { KeyBindingTree *p; + gboolean used; + guint mods; if (e->type == KeyRelease) { grab_key_passive_count(-1); - return; + return FALSE; } 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); - return; + return TRUE; } + used = FALSE; if (curpos == NULL) p = keyboard_firstnode; 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(); @@ -258,9 +264,11 @@ void keyboard_event(ObClient *client, const XEvent *e) 0, OB_FRAME_CONTEXT_NONE, client); } break; + used = TRUE; } p = p->next_sibling; } + return used; } static void node_rebind(KeyBindingTree *node)