JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fixed XSync handling and finished man page
[dwm.git] / event.c
diff --git a/event.c b/event.c
index 2d8a728..e948cb3 100644 (file)
--- a/event.c
+++ b/event.c
@@ -51,8 +51,73 @@ Key key[] = {
 
 /* static functions */
 
-static void movemouse(Client *c);
-static void resizemouse(Client *c);
+static void
+movemouse(Client *c)
+{
+       XEvent ev;
+       int x1, y1, ocx, ocy, di;
+       unsigned int dui;
+       Window dummy;
+
+       ocx = c->x;
+       ocy = c->y;
+       if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
+                               None, cursor[CurMove], CurrentTime) != GrabSuccess)
+               return;
+       XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
+       for(;;) {
+               XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
+               switch (ev.type) {
+               default: break;
+               case Expose:
+                       handler[Expose](&ev);
+                       break;
+               case MotionNotify:
+                       XSync(dpy, False);
+                       c->x = ocx + (ev.xmotion.x - x1);
+                       c->y = ocy + (ev.xmotion.y - y1);
+                       resize(c, False);
+                       break;
+               case ButtonRelease:
+                       XUngrabPointer(dpy, CurrentTime);
+                       return;
+               }
+       }
+}
+
+static void
+resizemouse(Client *c)
+{
+       XEvent ev;
+       int ocx, ocy;
+
+       ocx = c->x;
+       ocy = c->y;
+       if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
+                               None, cursor[CurResize], CurrentTime) != GrabSuccess)
+               return;
+       XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
+       for(;;) {
+               XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
+               switch(ev.type) {
+               default: break;
+               case Expose:
+                       handler[Expose](&ev);
+                       break;
+               case MotionNotify:
+                       XSync(dpy, False);
+                       c->w = abs(ocx - ev.xmotion.x);
+                       c->h = abs(ocy - ev.xmotion.y);
+                       c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w;
+                       c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h;
+                       resize(c, True);
+                       break;
+               case ButtonRelease:
+                       XUngrabPointer(dpy, CurrentTime);
+                       return;
+               }
+       }
+}
 
 static void
 buttonpress(XEvent *e)
@@ -63,7 +128,7 @@ buttonpress(XEvent *e)
        Client *c;
 
        if(barwin == ev->window) {
-               x = (arrange == dofloat) ? textw("~") : 0;
+               x = 0;
                for(a.i = 0; a.i < TLast; a.i++) {
                        x += textw(tags[a.i]);
                        if(ev->x < x) {
@@ -126,7 +191,7 @@ configurerequest(XEvent *e)
        ev->value_mask &= ~CWStackMode;
        ev->value_mask |= CWBorderWidth;
        XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
-       XFlush(dpy);
+       XSync(dpy, False);
 }
 
 static void
@@ -214,40 +279,6 @@ maprequest(XEvent *e)
 }
 
 static void
-movemouse(Client *c)
-{
-       XEvent ev;
-       int x1, y1, ocx, ocy, di;
-       unsigned int dui;
-       Window dummy;
-
-       ocx = c->x;
-       ocy = c->y;
-       if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
-                               None, cursor[CurMove], CurrentTime) != GrabSuccess)
-               return;
-       XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
-       for(;;) {
-               XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
-               switch (ev.type) {
-               default: break;
-               case Expose:
-                       handler[Expose](&ev);
-                       break;
-               case MotionNotify:
-                       XFlush(dpy);
-                       c->x = ocx + (ev.xmotion.x - x1);
-                       c->y = ocy + (ev.xmotion.y - y1);
-                       resize(c, False);
-                       break;
-               case ButtonRelease:
-                       XUngrabPointer(dpy, CurrentTime);
-                       return;
-               }
-       }
-}
-
-static void
 propertynotify(XEvent *e)
 {
        XPropertyEvent *ev = &e->xproperty;
@@ -258,7 +289,7 @@ propertynotify(XEvent *e)
                return; /* ignore */
 
        if((c = getclient(ev->window))) {
-               if(ev->atom == wm_atom[WMProtocols]) {
+               if(ev->atom == wmatom[WMProtocols]) {
                        c->proto = getproto(c->win);
                        return;
                }
@@ -273,7 +304,7 @@ propertynotify(XEvent *e)
                                setsize(c);
                                break;
                }
-               if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) {
+               if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
                        settitle(c);
                        drawtitle(c);
                }
@@ -281,40 +312,6 @@ propertynotify(XEvent *e)
 }
 
 static void
-resizemouse(Client *c)
-{
-       XEvent ev;
-       int ocx, ocy;
-
-       ocx = c->x;
-       ocy = c->y;
-       if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
-                               None, cursor[CurResize], CurrentTime) != GrabSuccess)
-               return;
-       XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
-       for(;;) {
-               XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
-               switch(ev.type) {
-               default: break;
-               case Expose:
-                       handler[Expose](&ev);
-                       break;
-               case MotionNotify:
-                       XFlush(dpy);
-                       c->w = abs(ocx - ev.xmotion.x);
-                       c->h = abs(ocy - ev.xmotion.y);
-                       c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w;
-                       c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h;
-                       resize(c, True);
-                       break;
-               case ButtonRelease:
-                       XUngrabPointer(dpy, CurrentTime);
-                       return;
-               }
-       }
-}
-
-static void
 unmapnotify(XEvent *e)
 {
        Client *c;