aewl
changeset 124:75576e44c1d8
made status bar drawing more robust, implemented togglemax and togglemode, works quite well
author | arg@10ksloc.org |
---|---|
date | Thu, 20 Jul 2006 15:07:35 +0200 |
parents | 61490330e90a |
children | b4b8b4236599 |
files | client.c draw.c dwm.h event.c tag.c |
diffstat | 5 files changed, 59 insertions(+), 33 deletions(-) [+] |
line diff
1.1 --- a/client.c Thu Jul 20 12:18:06 2006 +0200 1.2 +++ b/client.c Thu Jul 20 15:07:35 2006 +0200 1.3 @@ -70,6 +70,9 @@ 1.4 if(!sel) 1.5 return; 1.6 1.7 + if(sel->ismax) 1.8 + togglemax(NULL); 1.9 + 1.10 if(!(c = getnext(sel->next, tsel))) 1.11 c = getnext(clients, tsel); 1.12 if(c) { 1.13 @@ -87,6 +90,9 @@ 1.14 if(!sel) 1.15 return; 1.16 1.17 + if(sel->ismax) 1.18 + togglemax(NULL); 1.19 + 1.20 if((c = sel->revert && sel->revert->tags[tsel] ? sel->revert : NULL)) { 1.21 higher(c); 1.22 focus(c); 1.23 @@ -234,8 +240,6 @@ 1.24 c->next = clients; 1.25 clients = c; 1.26 1.27 - XGrabButton(dpy, Button1, ControlMask, c->win, False, ButtonPressMask, 1.28 - GrabModeAsync, GrabModeSync, None, None); 1.29 XGrabButton(dpy, Button1, MODKEY, c->win, False, ButtonPressMask, 1.30 GrabModeAsync, GrabModeSync, None, None); 1.31 XGrabButton(dpy, Button2, MODKEY, c->win, False, ButtonPressMask, 1.32 @@ -264,19 +268,6 @@ 1.33 } 1.34 1.35 void 1.36 -maximize(Arg *arg) 1.37 -{ 1.38 - if(!sel) 1.39 - return; 1.40 - sel->x = sx; 1.41 - sel->y = sy + bh; 1.42 - sel->w = sw - 2 * sel->border; 1.43 - sel->h = sh - 2 * sel->border - bh; 1.44 - higher(sel); 1.45 - resize(sel, False, TopLeft); 1.46 -} 1.47 - 1.48 -void 1.49 pop(Client *c) 1.50 { 1.51 Client **l; 1.52 @@ -405,6 +396,38 @@ 1.53 } 1.54 1.55 void 1.56 +togglemax(Arg *arg) 1.57 +{ 1.58 + int ox, oy, ow, oh; 1.59 + XEvent ev; 1.60 + 1.61 + if(!sel) 1.62 + return; 1.63 + 1.64 + if((sel->ismax = !sel->ismax)) { 1.65 + ox = sel->x; 1.66 + oy = sel->y; 1.67 + ow = sel->w; 1.68 + oh = sel->h; 1.69 + sel->x = sx; 1.70 + sel->y = sy + bh; 1.71 + sel->w = sw - 2 * sel->border; 1.72 + sel->h = sh - 2 * sel->border - bh; 1.73 + 1.74 + higher(sel); 1.75 + resize(sel, False, TopLeft); 1.76 + 1.77 + sel->x = ox; 1.78 + sel->y = oy; 1.79 + sel->w = ow; 1.80 + sel->h = oh; 1.81 + } 1.82 + else 1.83 + resize(sel, False, TopLeft); 1.84 + while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); 1.85 +} 1.86 + 1.87 +void 1.88 unmanage(Client *c) 1.89 { 1.90 Client **l;
2.1 --- a/draw.c Thu Jul 20 12:18:06 2006 +0200 2.2 +++ b/draw.c Thu Jul 20 15:07:35 2006 +0200 2.3 @@ -107,7 +107,7 @@ 2.4 void 2.5 drawstatus() 2.6 { 2.7 - int i; 2.8 + int i, x; 2.9 Bool istile = arrange == dotile; 2.10 2.11 dc.x = dc.y = 0; 2.12 @@ -123,15 +123,14 @@ 2.13 else 2.14 drawtext(tags[i], (i != tsel), True); 2.15 } 2.16 - if(sel) { 2.17 - dc.x += dc.w; 2.18 - dc.w = textw(sel->name); 2.19 - drawtext(sel->name, istile, True); 2.20 - } 2.21 + x = dc.x + dc.w; 2.22 dc.w = textw(stext); 2.23 dc.x = bx + bw - dc.w; 2.24 drawtext(stext, !istile, False); 2.25 - 2.26 + if(sel && ((dc.w = dc.x - x) >= bh)) { 2.27 + dc.x = x; 2.28 + drawtext(sel->name, istile, True); 2.29 + } 2.30 XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); 2.31 XSync(dpy, False); 2.32 }
3.1 --- a/dwm.h Thu Jul 20 12:18:06 2006 +0200 3.2 +++ b/dwm.h Thu Jul 20 15:07:35 2006 +0200 3.3 @@ -74,6 +74,7 @@ 3.4 unsigned int border; 3.5 long flags; 3.6 Bool isfloat; 3.7 + Bool ismax; 3.8 Client *next; 3.9 Client *revert; 3.10 Window win; 3.11 @@ -104,11 +105,11 @@ 3.12 extern void killclient(Arg *arg); 3.13 extern void lower(Client *c); 3.14 extern void manage(Window w, XWindowAttributes *wa); 3.15 -extern void maximize(Arg *arg); 3.16 extern void pop(Client *c); 3.17 extern void resize(Client *c, Bool inc, Corner sticky); 3.18 extern void setsize(Client *c); 3.19 extern void settitle(Client *c); 3.20 +extern void togglemax(Arg *arg); 3.21 extern void unmanage(Client *c); 3.22 extern void zoom(Arg *arg); 3.23 3.24 @@ -137,6 +138,7 @@ 3.25 extern void heretag(Arg *arg); 3.26 extern void replacetag(Arg *arg); 3.27 extern void settags(Client *c); 3.28 +extern void togglemode(Arg *arg); 3.29 extern void view(Arg *arg); 3.30 3.31 /* util.c */
4.1 --- a/event.c Thu Jul 20 12:18:06 2006 +0200 4.2 +++ b/event.c Thu Jul 20 15:07:35 2006 +0200 4.3 @@ -40,8 +40,8 @@ 4.4 { MODKEY, XK_3, view, { .i = Twork } }, 4.5 { MODKEY, XK_j, focusnext, { 0 } }, 4.6 { MODKEY, XK_k, focusprev, { 0 } }, 4.7 - { MODKEY, XK_m, maximize, { 0 } }, 4.8 - { MODKEY, XK_space, dotile, { 0 } }, 4.9 + { MODKEY, XK_m, togglemax, { 0 } }, 4.10 + { MODKEY, XK_space, togglemode, { 0 } }, 4.11 { MODKEY, XK_Return, zoom, { 0 } }, 4.12 { ControlMask|ShiftMask,XK_0, heretag, { .i = Tscratch } }, 4.13 { ControlMask|ShiftMask,XK_1, heretag, { .i = Tdev } }, 4.14 @@ -55,7 +55,6 @@ 4.15 { MODKEY|ShiftMask, XK_g, spawn, { .argv = gimp } }, 4.16 { MODKEY|ShiftMask, XK_l, spawn, { .argv = xlock } }, 4.17 { MODKEY|ShiftMask, XK_q, quit, { 0 } }, 4.18 - { MODKEY|ShiftMask, XK_space, dofloat, { 0 } }, 4.19 { MODKEY|ShiftMask, XK_w, spawn, { .argv = browse } }, 4.20 { MODKEY|ShiftMask, XK_Return, spawn, { .argv = term } }, 4.21 }; 4.22 @@ -170,11 +169,7 @@ 4.23 default: 4.24 break; 4.25 case Button1: 4.26 - if(arrange == dotile && !c->isfloat) { 4.27 - if((ev->state & ControlMask) && (ev->button == Button1)) 4.28 - zoom(NULL); 4.29 - } 4.30 - else { 4.31 + if(arrange == dofloat || c->isfloat) { 4.32 higher(c); 4.33 movemouse(c); 4.34 }
5.1 --- a/tag.c Thu Jul 20 12:18:06 2006 +0200 5.2 +++ b/tag.c Thu Jul 20 15:07:35 2006 +0200 5.3 @@ -51,8 +51,8 @@ 5.4 { 5.5 Client *c; 5.6 5.7 - arrange = dofloat; 5.8 for(c = clients; c; c = c->next) { 5.9 + c->ismax = False; 5.10 if(c->tags[tsel]) { 5.11 resize(c, True, TopLeft); 5.12 } 5.13 @@ -75,7 +75,6 @@ 5.14 Client *c; 5.15 5.16 w = sw - mw; 5.17 - arrange = dotile; 5.18 for(n = 0, c = clients; c; c = c->next) 5.19 if(c->tags[tsel] && !c->isfloat) 5.20 n++; 5.21 @@ -86,6 +85,7 @@ 5.22 h = sh - bh; 5.23 5.24 for(i = 0, c = clients; c; c = c->next) { 5.25 + c->ismax = False; 5.26 if(c->tags[tsel]) { 5.27 if(c->isfloat) { 5.28 higher(c); 5.29 @@ -213,6 +213,13 @@ 5.30 } 5.31 5.32 void 5.33 +togglemode(Arg *arg) 5.34 +{ 5.35 + arrange = arrange == dofloat ? dotile : dofloat; 5.36 + arrange(NULL); 5.37 +} 5.38 + 5.39 +void 5.40 view(Arg *arg) 5.41 { 5.42 tsel = arg->i;