From ff43372da760c84e92ca7a7e9648d09fcfba2cf0 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 22 Apr 2007 14:07:29 +0000 Subject: [PATCH] only pass thru events when the menu is open, don't for other stuff --- openbox/action.c | 4 ++-- openbox/event.c | 3 --- openbox/grab.c | 21 +++++++++++---------- openbox/grab.h | 5 +++-- openbox/keyboard.c | 4 ++-- openbox/menuframe.c | 6 +++--- openbox/moveresize.c | 4 ++-- 7 files changed, 23 insertions(+), 24 deletions(-) diff --git a/openbox/action.c b/openbox/action.c index 5456c80e..fc6f5a78 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -41,7 +41,7 @@ inline void client_action_start(union ActionData *data) { if (config_focus_follow) if (data->any.context != OB_FRAME_CONTEXT_CLIENT && !data->any.button) - grab_pointer(TRUE, OB_CURSOR_NONE); + grab_pointer(TRUE, FALSE, OB_CURSOR_NONE); } inline void client_action_end(union ActionData *data) @@ -49,7 +49,7 @@ inline void client_action_end(union ActionData *data) if (config_focus_follow) if (data->any.context != OB_FRAME_CONTEXT_CLIENT) { if (!data->any.button) { - grab_pointer(FALSE, OB_CURSOR_NONE); + grab_pointer(FALSE, FALSE, OB_CURSOR_NONE); } else { ObClient *c; diff --git a/openbox/event.c b/openbox/event.c index 4d74284b..871b158a 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -393,9 +393,6 @@ static Bool look_for_focusin(Display *d, XEvent *e, XPointer arg) static gboolean event_ignore(XEvent *e, ObClient *client) { switch(e->type) { - case EnterNotify: - case LeaveNotify: - return keyboard_interactively_grabbed(); case FocusIn: case FocusOut: if (!wanted_focusevent(e)) { diff --git a/openbox/grab.c b/openbox/grab.c index 9b19906a..dfff9570 100644 --- a/openbox/grab.c +++ b/openbox/grab.c @@ -26,8 +26,7 @@ #include #include -#define GRAB_PTR_MASK (ButtonPressMask | ButtonReleaseMask | \ - PointerMotionMask | EnterWindowMask | LeaveWindowMask) +#define GRAB_PTR_MASK (ButtonPressMask | ButtonReleaseMask | PointerMotionMask) #define GRAB_KEY_MASK (KeyPressMask | KeyReleaseMask) #define MASK_LIST_SIZE 8 @@ -90,15 +89,15 @@ gboolean grab_keyboard(gboolean grab) return ret; } -gboolean grab_pointer(gboolean grab, ObCursor cur) +gboolean grab_pointer(gboolean grab, gboolean owner_events, ObCursor cur) { gboolean ret = FALSE; if (grab) { if (pgrabs++ == 0) { - ret = XGrabPointer(ob_display, screen_support_win, - True, GRAB_PTR_MASK, GrabModeAsync, - GrabModeAsync, None, + ret = XGrabPointer(ob_display, screen_support_win, owner_events, + GRAB_PTR_MASK, + GrabModeAsync, GrabModeAsync, None, ob_cursor(cur), event_curtime) == Success; if (!ret) --pgrabs; @@ -115,13 +114,15 @@ gboolean grab_pointer(gboolean grab, ObCursor cur) return ret; } -gboolean grab_pointer_window(gboolean grab, ObCursor cur, Window win) +gboolean grab_pointer_window(gboolean grab, gboolean owner_events, + ObCursor cur, Window win) { gboolean ret = FALSE; if (grab) { if (pgrabs++ == 0) { - ret = XGrabPointer(ob_display, win, True, GRAB_PTR_MASK, + ret = XGrabPointer(ob_display, win, owner_events, + GRAB_PTR_MASK, GrabModeAsync, GrabModeAsync, None, ob_cursor(cur), event_curtime) == Success; @@ -179,8 +180,8 @@ void grab_shutdown(gboolean reconfig) if (reconfig) return; while (grab_keyboard(FALSE)); - while (grab_pointer(FALSE, OB_CURSOR_NONE)); - while (grab_pointer_window(FALSE, OB_CURSOR_NONE, None)); + while (grab_pointer(FALSE, FALSE, OB_CURSOR_NONE)); + while (grab_pointer_window(FALSE, FALSE, OB_CURSOR_NONE, None)); while (grab_server(FALSE)); } diff --git a/openbox/grab.h b/openbox/grab.h index ca645cae..9f2cf562 100644 --- a/openbox/grab.h +++ b/openbox/grab.h @@ -28,8 +28,9 @@ void grab_startup(gboolean reconfig); void grab_shutdown(gboolean reconfig); gboolean grab_keyboard(gboolean grab); -gboolean grab_pointer(gboolean grab, ObCursor cur); -gboolean grab_pointer_window(gboolean grab, ObCursor cur, Window win); +gboolean grab_pointer(gboolean grab, gboolean owner_events, ObCursor cur); +gboolean grab_pointer_window(gboolean grab, gboolean owner_events, + ObCursor cur, Window win); gint grab_server(gboolean grab); gboolean grab_on_keyboard(); diff --git a/openbox/keyboard.c b/openbox/keyboard.c index 01b54b4c..248fd1ce 100644 --- a/openbox/keyboard.c +++ b/openbox/keyboard.c @@ -166,7 +166,7 @@ gboolean keyboard_interactive_grab(guint state, ObClient *client, if (!interactive_states) { if (!grab_keyboard(TRUE)) return FALSE; - if (!grab_pointer(TRUE, OB_CURSOR_NONE)) { + if (!grab_pointer(TRUE, FALSE, OB_CURSOR_NONE)) { grab_keyboard(FALSE); return FALSE; } @@ -195,7 +195,7 @@ void keyboard_interactive_end(ObInteractiveState *s, if (!interactive_states) { grab_keyboard(FALSE); - grab_pointer(FALSE, OB_CURSOR_NONE); + grab_pointer(FALSE, FALSE, OB_CURSOR_NONE); keyboard_reset_chains(); } } diff --git a/openbox/menuframe.c b/openbox/menuframe.c index f359c985..2e54ef88 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -681,10 +681,10 @@ static gboolean menu_frame_show(ObMenuFrame *self) if (menu_frame_visible == NULL) { /* no menus shown yet */ - if (!grab_pointer(TRUE, OB_CURSOR_POINTER)) + if (!grab_pointer(TRUE, TRUE, OB_CURSOR_POINTER)) return FALSE; if (!grab_keyboard(TRUE)) { - grab_pointer(FALSE, OB_CURSOR_POINTER); + grab_pointer(FALSE, TRUE, OB_CURSOR_POINTER); return FALSE; } } @@ -809,7 +809,7 @@ void menu_frame_hide(ObMenuFrame *self) if (menu_frame_visible == NULL) { /* last menu shown */ - grab_pointer(FALSE, OB_CURSOR_NONE); + grab_pointer(FALSE, TRUE, OB_CURSOR_NONE); grab_keyboard(FALSE); } diff --git a/openbox/moveresize.c b/openbox/moveresize.c index d078f52a..6cab5226 100644 --- a/openbox/moveresize.c +++ b/openbox/moveresize.c @@ -164,14 +164,14 @@ void moveresize_start(ObClient *c, gint x, gint y, guint b, guint32 cnr) else g_assert_not_reached(); - grab_pointer(TRUE, cur); + grab_pointer(TRUE, FALSE, cur); grab_keyboard(TRUE); } void moveresize_end(gboolean cancel) { grab_keyboard(FALSE); - grab_pointer(FALSE, OB_CURSOR_NONE); + grab_pointer(FALSE, FALSE, OB_CURSOR_NONE); popup_hide(popup); -- 2.45.2