diff --git a/src/appicon.c b/src/appicon.c index 17e5f83b..5aefcf39 100644 --- a/src/appicon.c +++ b/src/appicon.c @@ -759,6 +759,14 @@ appIconMouseDown(WObjDescriptor *desc, XEvent *event) if (!wapp) return; + if (event->xbutton.send_event && + XGrabPointer(dpy, aicon->icon->core->window, True, ButtonMotionMask + |ButtonReleaseMask|ButtonPressMask, GrabModeAsync, + GrabModeAsync, None, None, CurrentTime) !=GrabSuccess) { + wwarning("pointer grab failed for appicon menu"); + return; + } + openApplicationMenu(wapp, event->xbutton.x_root, event->xbutton.y_root); diff --git a/src/dock.c b/src/dock.c index 9ae434b0..157b2e66 100644 --- a/src/dock.c +++ b/src/dock.c @@ -4130,6 +4130,14 @@ iconMouseDown(WObjDescriptor *desc, XEvent *event) (event->xbutton.state & ShiftMask) && aicon!=scr->clip_icon) { wClipMakeIconOmnipresent(aicon, !aicon->omnipresent); } else if (event->xbutton.button == Button3) { + if (event->xbutton.send_event && + XGrabPointer(dpy, aicon->icon->core->window, True, ButtonMotionMask + |ButtonReleaseMask|ButtonPressMask, GrabModeAsync, + GrabModeAsync, None, None, CurrentTime) !=GrabSuccess) { + wwarning("pointer grab failed for dockicon menu"); + return; + } + openDockMenu(dock, aicon, event); } } diff --git a/src/event.c b/src/event.c index 627d0653..c790c911 100644 --- a/src/event.c +++ b/src/event.c @@ -1380,14 +1380,16 @@ doWindozeCycle(WWindow *wwin, XEvent *event, Bool next) } XFree(keymap); - /* restore order */ - CommitStacking(scr); - XUngrabKeyboard(dpy, CurrentTime); wSetFocusTo(scr, newFocused); - if (wPreferences.circ_raise) + if (wPreferences.circ_raise) { wRaiseFrame(newFocused->frame->core); + CommitStacking(scr); + } else { + /* restore order */ + CommitStacking(scr); + } scr->flags.doing_alt_tab = 0; if (openedSwitchMenu)