wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit c6d176984846648f2b63d4816380520d0e4f3f9c
parent d3b2f7a80aa50eab0fe5a7e2d377212e66897555
Author: Kris Maglione <jg@suckless.org>
Date:   Sat, 10 Feb 2007 15:13:35 -0500

Make grabbox moves opaque in floating mode. Code needs cleanup. Comments welcome.


Diffstat:
event.c | 8++++----
mouse.c | 50+++++++++++++++++++++++++++++++-------------------
wmii.h | 2+-
3 files changed, 36 insertions(+), 24 deletions(-)

diff --git a/event.c b/event.c @@ -51,13 +51,13 @@ buttonpress(XEvent *e) { if((ev->state & def.mod) == def.mod) { switch(ev->button) { case Button1: - do_mouse_resize(f->client, CENTER); + do_mouse_resize(f->client, False, CENTER); focus(f->client, True); frame_to_top(f); focus(f->client, True); break; case Button3: - do_mouse_resize(f->client, + do_mouse_resize(f->client, False, quadofcoord(&f->client->rect, ev->x, ev->y)); frame_to_top(f); focus(f->client, True); @@ -70,9 +70,9 @@ buttonpress(XEvent *e) { if(frame_to_top(f)) restack_view(f->view); if(ispointinrect(ev->x, ev->y, &f->grabbox.rect)) - do_mouse_resize(f->client, CENTER); + do_mouse_resize(f->client, True, CENTER); else if(!ispointinrect(ev->x, ev->y, &f->titlebar.rect)) - do_mouse_resize(f->client, + do_mouse_resize(f->client, False, quadofcoord(&f->client->rect, ev->x, ev->y)); if(f->client != sel_client()) focus(f->client, True); diff --git a/mouse.c b/mouse.c @@ -311,7 +311,7 @@ do_managed_move(Client *c) { } void -do_mouse_resize(Client *c, BlitzAlign align) { +do_mouse_resize(Client *c, Bool grabbox, BlitzAlign align) { BlitzAlign grav; Window dummy; Cursor cur; @@ -329,8 +329,13 @@ do_mouse_resize(Client *c, BlitzAlign align) { rects = floating ? rects_of_view(f->area->view, &num) : nil; snap = floating ? screen->rect.height / 66 : 0; cur = cursor[CurResize]; - if(align == CENTER) - cur = cursor[CurInvisible]; + + if(align == CENTER) { + if(grabbox) + cur = cursor[CurMove]; + else + cur = cursor[CurInvisible]; + } if(!floating && (align == CENTER)) { do_managed_move(c); @@ -354,7 +359,7 @@ do_mouse_resize(Client *c, BlitzAlign align) { if(align&WEST) dx -= pt_x; XWarpPointer(blz.dpy, None, c->framewin, 0, 0, 0, 0, dx, dy); } - else { + else if(!grabbox) { hr_x = screen->rect.width / 2; hr_y = screen->rect.height / 2; XWarpPointer(blz.dpy, None, blz.root, 0, 0, 0, 0, hr_x, hr_y); @@ -367,14 +372,25 @@ do_mouse_resize(Client *c, BlitzAlign align) { XQueryPointer(blz.dpy, blz.root, &dummy, &dummy, &i, &i, &pt_x, &pt_y, &di); XSync(blz.dpy, False); - XGrabServer(blz.dpy); - - draw_xor_border(&frect); + if(!grabbox) { + XGrabServer(blz.dpy); + draw_xor_border(&frect); + } for(;;) { XMaskEvent(blz.dpy, MouseMask | ExposureMask, &ev); switch (ev.type) { case ButtonRelease: - draw_xor_border(&frect); + if(!grabbox) { + draw_xor_border(&frect); + + XTranslateCoordinates(blz.dpy, c->framewin, blz.root, + frect.width * rx, frect.height * ry, + &dx, &dy, &dummy); + if(dy > screen->brect.y) + dy = screen->brect.y - 1; + XWarpPointer(blz.dpy, None, blz.root, 0, 0, 0, 0, dx, dy); + XUngrabServer(blz.dpy); + } if(!floating) resize_column(c, &frect); @@ -384,14 +400,6 @@ do_mouse_resize(Client *c, BlitzAlign align) { if(rects) free(rects); - XTranslateCoordinates(blz.dpy, c->framewin, blz.root, - frect.width * rx, frect.height * ry, - &dx, &dy, &dummy); - if(dy > screen->brect.y) - dy = screen->brect.y - 1; - XWarpPointer(blz.dpy, None, blz.root, 0, 0, 0, 0, dx, dy); - - XUngrabServer(blz.dpy); XUngrabPointer(blz.dpy, CurrentTime); XSync(blz.dpy, False); return; @@ -400,7 +408,7 @@ do_mouse_resize(Client *c, BlitzAlign align) { dx = ev.xmotion.x_root; dy = ev.xmotion.y_root; - if(align == CENTER) { + if(align == CENTER && !grabbox) { if(dx == hr_x && dy == hr_y) continue; XWarpPointer(blz.dpy, None, blz.root, 0, 0, 0, 0, hr_x, hr_y); @@ -424,8 +432,12 @@ do_mouse_resize(Client *c, BlitzAlign align) { match_sizehints(c, &frect, floating, grav); - draw_xor_border(&ofrect); - draw_xor_border(&frect); + if(grabbox) + resize_client(c, &frect); + else { + draw_xor_border(&ofrect); + draw_xor_border(&frect); + } break; case Expose: (handler[Expose])(&ev); diff --git a/wmii.h b/wmii.h @@ -358,7 +358,7 @@ extern void init_lock_keys(); extern unsigned long mod_key_of_str(char *val); /* mouse.c */ -extern void do_mouse_resize(Client *c,BlitzAlign align); +extern void do_mouse_resize(Client *c, Bool grabbox, BlitzAlign align); extern void grab_mouse(Window w, unsigned long mod, unsigned int button); extern void ungrab_mouse(Window w, unsigned long mod, unsigned int button); extern BlitzAlign snap_rect(XRectangle *rects, int num, XRectangle *current,