From 5863e7ed29e7d2d719f4c2119e8b1edb0eef1a01 Mon Sep 17 00:00:00 2001 From: okan Date: Tue, 22 Mar 2011 13:50:40 +0000 Subject: 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@ --- menu.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/menu.c b/menu.c index 1771cc0..e757665 100644 --- a/menu.c +++ b/menu.c @@ -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); -- cgit v1.2.3-2-gb3c3