diff options
author | okan | 2011-03-22 13:50:40 +0000 |
---|---|---|
committer | okan | 2011-03-22 13:50:40 +0000 |
commit | 5863e7ed29e7d2d719f4c2119e8b1edb0eef1a01 (patch) | |
tree | db4dd66b25041410f1c6ef9f5df8a32743478073 | |
parent | adaa4de0e92ee3b42c3fd00f4a4b21da1557a20e (diff) | |
download | cwm-5863e7ed29e7d2d719f4c2119e8b1edb0eef1a01.tar.gz |
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@
-rw-r--r-- | menu.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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); |