warp the pointer back, iff we don't move the mouse, once we are done
with the menu; idea and initial from Sviatoslav Chagaev. discussion with and ok oga@
This commit is contained in:
parent
9a52c582b1
commit
4c04a27385
@ -97,6 +97,7 @@ menu_filter(struct screen_ctx *sc, struct menu_q *menuq, char *prompt,
|
||||
XEvent e;
|
||||
Window focuswin;
|
||||
int evmask, focusrevert;
|
||||
int xsave, ysave, xcur, ycur;
|
||||
|
||||
TAILQ_INIT(&resultq);
|
||||
|
||||
@ -104,6 +105,9 @@ menu_filter(struct screen_ctx *sc, struct menu_q *menuq, char *prompt,
|
||||
|
||||
xu_ptr_getpos(sc->rootwin, &mc.x, &mc.y);
|
||||
|
||||
xsave = mc.x;
|
||||
ysave = mc.y;
|
||||
|
||||
if (prompt == NULL) {
|
||||
evmask = MenuMask;
|
||||
mc.promptstr[0] = '\0';
|
||||
@ -177,6 +181,10 @@ out:
|
||||
}
|
||||
|
||||
XSetInputFocus(X_Dpy, focuswin, focusrevert, CurrentTime);
|
||||
/* restore if user didn't move */
|
||||
xu_ptr_getpos(sc->rootwin, &xcur, &ycur);
|
||||
if (xcur == mc.x && ycur == mc.y)
|
||||
xu_ptr_setpos(sc->rootwin, xsave, ysave);
|
||||
xu_ptr_ungrab();
|
||||
|
||||
XUnmapWindow(X_Dpy, sc->menuwin);
|
||||
|
Loading…
Reference in New Issue
Block a user