only pass thru events when the menu is open, don't for other stuff
Dana Jansens danakj@orodu.net
7 files changed,
23 insertions(+),
24 deletions(-)
M
openbox/action.c
→
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 @@ {
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;
M
openbox/event.c
→
openbox/event.c
@@ -393,9 +393,6 @@
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)) {
M
openbox/grab.c
→
openbox/grab.c
@@ -26,8 +26,7 @@
#include <glib.h> #include <X11/Xlib.h> -#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 @@
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 @@ }
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 @@ {
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)); }
M
openbox/grab.h
→
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();
M
openbox/keyboard.c
→
openbox/keyboard.c
@@ -166,7 +166,7 @@
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 @@ interactive_states = g_slist_remove(interactive_states, s);
if (!interactive_states) { grab_keyboard(FALSE); - grab_pointer(FALSE, OB_CURSOR_NONE); + grab_pointer(FALSE, FALSE, OB_CURSOR_NONE); keyboard_reset_chains(); } }
M
openbox/moveresize.c
→
openbox/moveresize.c
@@ -164,14 +164,14 @@ cur = OB_CURSOR_MOVE;
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);