case ButtonPress:
case ButtonRelease:
/* Wheel buttons don't draw because they are an instant click, so it
- is a waste of resources to go drawing it. */
- if (!(e->xbutton.button == 4 || e->xbutton.button == 5)) {
+ is a waste of resources to go drawing it.
+ if the user is doing an intereactive thing, or has a menu open then
+ the mouse is grabbed (possibly) and if we get these events we don't
+ want to deal with them
+ */
+ if (!(e->xbutton.button == 4 || e->xbutton.button == 5) &&
+ !keyboard_interactively_grabbed() &&
+ !menu_frame_visible)
+ {
con = frame_context(client, e->xbutton.window);
con = mouse_button_frame_context(con, e->xbutton.button);
switch (con) {
if (menu_frame_visible == NULL) {
/* no menus shown yet */
- if (!grab_pointer(TRUE, FALSE, OB_CURSOR_POINTER))
+ if (!grab_pointer(TRUE, TRUE, OB_CURSOR_POINTER))
return FALSE;
if (!grab_keyboard(TRUE)) {
- grab_pointer(FALSE, FALSE, OB_CURSOR_POINTER);
+ grab_pointer(FALSE, TRUE, OB_CURSOR_POINTER);
return FALSE;
}
}
if (menu_frame_visible == NULL) {
/* last menu shown */
- grab_pointer(FALSE, FALSE, OB_CURSOR_NONE);
+ grab_pointer(FALSE, TRUE, OB_CURSOR_NONE);
grab_keyboard(FALSE);
}