+
+       ocx = c->x;
+       ocy = c->y;
+       if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
+                       None, cursor[CurResize], CurrentTime) != GrabSuccess)
+               return;
+       c->ismax = False;
+       XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->border - 1, c->h + c->border - 1);
+       for(;;) {
+               XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask , &ev);
+               switch(ev.type) {
+               case ButtonRelease:
+                       XWarpPointer(dpy, None, c->win, 0, 0, 0, 0,
+                                       c->w + c->border - 1, c->h + c->border - 1);
+                       XUngrabPointer(dpy, CurrentTime);
+                       while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+                       return;
+               case ConfigureRequest:
+               case Expose:
+               case MapRequest:
+                       handler[ev.type](&ev);
+                       break;
+               case MotionNotify:
+                       XSync(dpy, False);
+                       if((nw = ev.xmotion.x - ocx - 2 * c->border + 1) <= 0)
+                               nw = 1;
+                       if((nh = ev.xmotion.y - ocy - 2 * c->border + 1) <= 0)
+                               nh = 1;
+                       resize(c, c->x, c->y, nw, nh, True);
+                       break;
+               }
+       }
+}
+
+static void
+buttonpress(XEvent *e) {
+       static char buf[32];
+       unsigned int i, x;
+       Client *c;
+       XButtonPressedEvent *ev = &e->xbutton;
+
+       buf[0] = 0;
+       if(barwin == ev->window) {
+               x = 0;
+               for(i = 0; i < ntags; i++) {
+                       x += textw(tags[i]);
+                       if(ev->x < x) {
+                               snprintf(buf, sizeof buf, "%d", i);
+                               if(ev->button == Button1) {
+                                       if(ev->state & MODKEY)
+                                               tag(buf);
+                                       else
+                                               view(buf);
+                               }
+                               else if(ev->button == Button3) {
+                                       if(ev->state & MODKEY)
+                                               toggletag(buf);
+                                       else
+                                               toggleview(buf);
+                               }
+                               return;
+                       }
+               }
+               if(ev->x < x + blw)
+                       switch(ev->button) {
+                       case Button1:
+                               setlayout(NULL);
+                               break;
+                       }
+       }
+       else if((c = getclient(ev->window))) {
+               focus(c);
+               if(CLEANMASK(ev->state) != MODKEY)
+                       return;
+               if(ev->button == Button1 && (lt->arrange == floating || c->isfloating)) {
+                       restack();
+                       movemouse(c);
+               }
+               else if(ev->button == Button2)
+                       zoom(NULL);
+               else if(ev->button == Button3
+               && (lt->arrange == floating || c->isfloating) && !c->isfixed)
+               {
+                       restack();
+                       resizemouse(c);
+               }
+       }