diff options
author | okan | 2009-04-15 14:10:07 +0000 |
---|---|---|
committer | okan | 2009-04-15 14:10:07 +0000 |
commit | a291ccfe373f681d2b7d59f9734092e776942378 (patch) | |
tree | 25f34bd9cd82dd8ec6e5dce4afb2cd4442723b55 | |
parent | f6aa4602b88478c1e947f4e7add29dfb36584d41 (diff) | |
download | cwm-a291ccfe373f681d2b7d59f9734092e776942378.tar.gz |
don't sync more than 60 times per sec on resize and move; idea from scrotwm.
ok oga@ sometime ago
Diffstat (limited to '')
-rw-r--r-- | mousefunc.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/mousefunc.c b/mousefunc.c index 86cef8a..8dcc660 100644 --- a/mousefunc.c +++ b/mousefunc.c @@ -16,7 +16,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $Id: mousefunc.c,v 1.7 2009/01/22 19:01:56 okan Exp $ + * $Id: mousefunc.c,v 1.8 2009/04/15 14:10:07 okan Exp $ */ #include "headers.h" @@ -88,6 +88,7 @@ void mousefunc_window_resize(struct client_ctx *cc, void *arg) { XEvent ev; + Time time = 0; struct screen_ctx *sc = CCTOSC(cc); int dx, dy; int x = cc->geom.x, y = cc->geom.y; @@ -116,9 +117,19 @@ mousefunc_window_resize(struct client_ctx *cc, void *arg) ev.xmotion.x, ev.xmotion.y)) /* Recompute window output */ _mousefunc_sweep_draw(cc, dx, dy); - client_resize(cc); + + /* don't sync more than 60 times / second */ + if ((ev.xmotion.time - time) > (1000 / 60) ) { + time = ev.xmotion.time; + XSync(X_Dpy, False); + client_resize(cc); + } break; case ButtonRelease: + if (time) { + XSync(X_Dpy, False); + client_resize(cc); + } XUnmapWindow(X_Dpy, sc->menuwin); XReparentWindow(X_Dpy, sc->menuwin, sc->rootwin, 0, 0); xu_ptr_ungrab(); @@ -140,6 +151,7 @@ void mousefunc_window_move(struct client_ctx *cc, void *arg) { XEvent ev; + Time time = 0; struct screen_ctx *sc = CCTOSC(cc); int mx, my; int x = cc->geom.x, y = cc->geom.y; @@ -161,9 +173,19 @@ mousefunc_window_move(struct client_ctx *cc, void *arg) case MotionNotify: cc->geom.x = x + (ev.xmotion.x - mx); cc->geom.y = y + (ev.xmotion.y - my); - client_move(cc); + + /* don't sync more than 60 times / second */ + if ((ev.xmotion.time - time) > (1000 / 60) ) { + time = ev.xmotion.time; + XSync(X_Dpy, False); + client_move(cc); + } break; case ButtonRelease: + if (time) { + XSync(X_Dpy, False); + client_move(cc); + } xu_ptr_ungrab(); return; } |