void sweep(Client *c) { XEvent ev; int old_cx = c->x; int old_cy = c->y; if (!grab_pointer(c->screen->root, MouseMask, resize_curs)) return; client_raise(c); #ifdef INFOBANNER_MOVERESIZE create_info_window(c); #endif XGrabServer(dpy); draw_outline(c); setmouse(c->window, c->width, c->height); for (;;) { XMaskEvent(dpy, MouseMask, &ev); switch (ev.type) { case MotionNotify: if (ev.xmotion.root != c->screen->root) break; draw_outline(c); /* clear */ XUngrabServer(dpy); recalculate_sweep(c, old_cx, old_cy, ev.xmotion.x, ev.xmotion.y, ev.xmotion.state & altmask); #ifdef INFOBANNER_MOVERESIZE update_info_window(c); #endif XSync(dpy, False); XGrabServer(dpy); draw_outline(c); break; case ButtonRelease: draw_outline(c); /* clear */ XUngrabServer(dpy); #ifdef INFOBANNER_MOVERESIZE remove_info_window(); #endif XUngrabPointer(dpy, CurrentTime); moveresize(c); /* In case maximise state has changed: */ ewmh_set_net_wm_state(c); return; default: break; } } }
void sweep(Client *c) { XEvent ev; int old_cx = client_to_Xcoord(c,x); int old_cy = client_to_Xcoord(c,y); if (!grab_pointer(c->screen->root, MouseMask, resize_curs)) return; client_raise(c); annotate_create(c, &annotate_sweep_ctx); setmouse(c->window, c->width, c->height); for (;;) { XMaskEvent(dpy, MouseMask, &ev); switch (ev.type) { case MotionNotify: if (ev.xmotion.root != c->screen->root) break; annotate_preupdate(c, &annotate_sweep_ctx); /* perform recalculate_sweep in Xcoordinates, then convert * back relative to the current phy */ recalculate_sweep(c, old_cx, old_cy, ev.xmotion.x, ev.xmotion.y, ev.xmotion.state & altmask); c->nx -= c->phy->xoff; c->ny -= c->phy->yoff; client_calc_cog(c); client_calc_phy(c); annotate_update(c, &annotate_sweep_ctx); break; case ButtonRelease: annotate_remove(c, &annotate_sweep_ctx); client_calc_phy(c); XUngrabPointer(dpy, CurrentTime); moveresizeraise(c); /* In case maximise state has changed: */ ewmh_set_net_wm_state(c); return; default: break; } } }