summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-04-22 02:12:32 +0000
committerDana Jansens <danakj@orodu.net>2007-04-22 02:12:32 +0000
commita5caab959cc5d99ed570d7346fd022e32900c103 (patch)
tree4541de3f59ba0fc2d64facb9f270d2860cda24e9
parent05d1a86efff83851018ebf58a1f14035fa725d02 (diff)
ignore crossing events while an interactive grab is going on.
when a menu is open, use the crossing events for the menu only.
-rw-r--r--openbox/event.c17
-rw-r--r--openbox/grab.c2
2 files changed, 9 insertions, 10 deletions
diff --git a/openbox/event.c b/openbox/event.c
index 7c85e842..1f5bae13 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -387,9 +387,7 @@ static gboolean event_ignore(XEvent *e, ObClient *client)
switch(e->type) {
case EnterNotify:
case LeaveNotify:
- if (e->xcrossing.detail == NotifyInferior)
- return TRUE;
- break;
+ return keyboard_interactively_grabbed();
case FocusIn:
case FocusOut:
/* I don't think this should ever happen with our event masks, but
@@ -473,7 +471,13 @@ static void event_process(const XEvent *ec, gpointer data)
ed->ignored = FALSE;
/* deal with it in the kernel */
- if (group)
+
+ if (menu_frame_visible &&
+ (e->type == EnterNotify || e->type == LeaveNotify))
+ {
+ /* crossing events for menu */
+ event_handle_menu(e);
+ } else if (group)
event_handle_group(group, e);
else if (client)
event_handle_client(client, e);
@@ -506,11 +510,6 @@ static void event_process(const XEvent *ec, gpointer data)
xerror_set_ignore(FALSE);
}
- /* crossing events for menu */
- if (e->type == EnterNotify || e->type == LeaveNotify)
- if (menu_frame_visible)
- event_handle_menu(e);
-
/* user input (action-bound) events */
if (e->type == ButtonPress || e->type == ButtonRelease ||
e->type == MotionNotify || e->type == KeyPress ||
diff --git a/openbox/grab.c b/openbox/grab.c
index a8a6200e..9b19906a 100644
--- a/openbox/grab.c
+++ b/openbox/grab.c
@@ -72,7 +72,7 @@ gboolean grab_keyboard(gboolean grab)
if (grab) {
if (kgrabs++ == 0) {
ret = XGrabKeyboard(ob_display, RootWindow(ob_display, ob_screen),
- FALSE, GrabModeAsync, GrabModeAsync,
+ False, GrabModeAsync, GrabModeAsync,
event_curtime) == Success;
if (!ret)
--kgrabs;