aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorokan2009-04-15 14:10:07 +0000
committerokan2009-04-15 14:10:07 +0000
commita291ccfe373f681d2b7d59f9734092e776942378 (patch)
tree25f34bd9cd82dd8ec6e5dce4afb2cd4442723b55
parentf6aa4602b88478c1e947f4e7add29dfb36584d41 (diff)
downloadcwm-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.c28
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;
}