[hackers] [wmii] Allow Mod+Mouse3 to resize windows and columns unidirectionally. || Kris Maglione

From: <hg_AT_suckless.org>
Date: Thu, 15 Sep 2011 20:07:59 +0200 (CEST)

changeset: 2796:20c7437a92cb
tag: tip
user: Kris Maglione <kris_AT_suckless.org>
date: Thu Sep 15 14:07:51 2011 -0400
files: cmd/wmii/mouse.c lib/libstuff/geom/quadrant.c
description:
Allow Mod+Mouse3 to resize windows and columns unidirectionally.

diff -r bae38beabff6 -r 20c7437a92cb cmd/wmii/mouse.c
--- a/cmd/wmii/mouse.c Thu Sep 15 13:35:37 2011 -0400
+++ b/cmd/wmii/mouse.c Thu Sep 15 14:07:51 2011 -0400
@@ -223,7 +223,7 @@
 
 static void
 mouse_resizecolframe(Frame *f, Align align) {
- Window *cwin, *hwin;
+ Window *cwin, *hwin = nil;
         Divide *d;
         View *v;
         Area *a;
@@ -245,7 +245,7 @@
                 d = d->next;
         }
 
- if(align&East)
+ if(align & East)
                 d = d->next;
 
         min.x = column_minwidth();
@@ -263,72 +263,82 @@
                         r.rmax.xy = r.rmin.xy plus 1; \
                 })
 
+ r = f->r;
         if(align & North)
                 frob(f->aprev, f, aprev, min, max, +, -, y, false);
- else
+ else if(align & South)
                 frob(f->anext, f, anext, max, min, -, +, y, false);
         if(align & West)
                 frob(a->prev, a, prev, min, max, +, -, x, true);
- else
+ else if(align & East)
                 frob(a->next, a, next, max, min, -, +, x, true);
 #undef frob
 
         cwin = constraintwin(r);
 
         r = f->r;
- if(align&North)
+ if(align & North)
                 r.min.y--;
- else
+ else if(align & South)
                 r.min.y = r.max.y - 1;
         r.max.y = r.min.y + 2;
 
- hwin = gethsep(r);
+ if(align & (North|South))
+ hwin = gethsep(r);
 
         if(!grabpointer(&scr.root, cwin, cursor[CurSizing], MouseMask))
                 goto done;
 
- pt.x = ((align&West) ? f->r.min.x : f->r.max.x);
- pt.y = ((align&North) ? f->r.min.y : f->r.max.y);
+ pt.x = (align & West ? f->r.min.x : f->r.max.x);
+ pt.y = (align & North ? f->r.min.y : f->r.max.y);
         warppointer(pt);
 
         while(readmotion(&pt)) {
- if(align&West)
+ if(align & West)
                         r.min.x = pt.x;
- else
+ else if(align & East)
                         r.max.x = pt.x;
- r.min.y = ((align&South) ? pt.y : pt.y-1);
+
+ if(align & South)
+ r.min.y = pt.y;
+ else if(align & North)
+ r.min.y = pt.y - 1;
                 r.max.y = r.min.y+2;
 
- div_set(d, pt.x);
- reshapewin(hwin, r);
+ if(align & (East|West))
+ div_set(d, pt.x);
+ if(hwin)
+ reshapewin(hwin, r);
         }
 
         r = f->r;
- if(align&West)
+ if(align & West)
                 r.min.x = pt.x;
- else
+ else if(align & East)
                 r.max.x = pt.x;
- if(align&North)
+ if(align & North)
                 r.min.y = pt.y;
- else
+ else if(align & South)
                 r.max.y = pt.y;
         column_resizeframe(f, r);
 
         /* XXX: Magic number... */
- if(align&West)
+ if(align & West)
                 pt.x = f->r.min.x + 4;
- else
+ else if(align & East)
                 pt.x = f->r.max.x - 4;
- if(align&North)
+
+ if(align & North)
                 pt.y = f->r.min.y + 4;
- else
+ else if(align & South)
                 pt.y = f->r.max.y - 4;
         warppointer(pt);
 
 done:
         ungrabpointer();
         destroyconstraintwin(cwin);
- destroywindow(hwin);
+ if (hwin)
+ destroywindow(hwin);
 }
 
 void
diff -r bae38beabff6 -r 20c7437a92cb lib/libstuff/geom/quadrant.c
--- a/lib/libstuff/geom/quadrant.c Thu Sep 15 13:35:37 2011 -0400
+++ b/lib/libstuff/geom/quadrant.c Thu Sep 15 14:07:51 2011 -0400
@@ -8,10 +8,10 @@
         Align ret;
 
         pt = subpt(pt, r.min);
- ret = East * (pt.x >= Dx(r) * .5)
- | West * (pt.x < Dx(r) * .5)
- | South * (pt.y >= Dy(r) * .5)
- | North * (pt.y < Dy(r) * .5);
+ ret = East * (pt.x >= Dx(r) * .7)
+ | West * (pt.x <= Dx(r) * .3)
+ | South * (pt.y >= Dy(r) * .7)
+ | North * (pt.y <= Dy(r) * .3);
 
         return ret;
 }
Received on Thu Sep 15 2011 - 20:07:59 CEST

This archive was generated by hypermail 2.2.0 : Thu Sep 15 2011 - 20:12:04 CEST