From a5caab959cc5d99ed570d7346fd022e32900c103 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 22 Apr 2007 02:12:32 +0000 Subject: [PATCH] ignore crossing events while an interactive grab is going on. when a menu is open, use the crossing events for the menu only. --- openbox/event.c | 17 ++++++++--------- openbox/grab.c | 2 +- 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; -- 2.44.0