summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-04-22 14:07:29 +0000
committerDana Jansens <danakj@orodu.net>2007-04-22 14:07:29 +0000
commitff43372da760c84e92ca7a7e9648d09fcfba2cf0 (patch)
tree138ab9559dd512ea0d6e998bcf1ee2baab0497d9
parenta70633d42af849e4de2288ec48fa6abe726a484e (diff)
only pass thru events when the menu is open, don't for other stuff
-rw-r--r--openbox/action.c4
-rw-r--r--openbox/event.c3
-rw-r--r--openbox/grab.c21
-rw-r--r--openbox/grab.h5
-rw-r--r--openbox/keyboard.c4
-rw-r--r--openbox/menuframe.c6
-rw-r--r--openbox/moveresize.c4
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 <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 @@ 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);