X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=client.c;h=3aae7e0add6d381c9905ef978e01b941a1d14f73;hb=eb756ee169ad0c94167ff41a9ab2712b348afe4f;hp=b2318ab4618794e00a1de612bec7c477537b8f09;hpb=86d9851427710ca0f3ab95ae9b6c20361b56e516;p=dwm.git diff --git a/client.c b/client.c index b2318ab..3aae7e0 100644 --- a/client.c +++ b/client.c @@ -49,9 +49,9 @@ max(Arg *arg) if(!sel) return; sel->x = sx; - sel->y = sy; + sel->y = sy + bh; sel->w = sw - 2 * sel->border; - sel->h = sh - 2 * sel->border; + sel->h = sh - 2 * sel->border - bh; craise(sel); resize(sel, False); discard_events(EnterWindowMask); @@ -67,6 +67,7 @@ view(Arg *arg) for(c = clients; c; c = next(c->next)) draw_client(c); + draw_bar(); } void @@ -131,7 +132,10 @@ tiling(Arg *arg) if(c->tags[tsel] && !c->floating) n++; - h = (n > 1) ? sh / (n - 1) : sh; + if(n > 1) + h = (sh - bh) / (n - 1); + else + h = sh - bh; for(i = 0, c = clients; c; c = c->next) { if(c->tags[tsel]) { @@ -142,19 +146,19 @@ tiling(Arg *arg) } if(n == 1) { c->x = sx; - c->y = sy; + c->y = sy + bh; c->w = sw - 2 * c->border; - c->h = sh - 2 * c->border; + c->h = sh - 2 * c->border - bh; } else if(i == 0) { c->x = sx; - c->y = sy; + c->y = sy + bh; c->w = mw - 2 * c->border; - c->h = sh - 2 * c->border; + c->h = sh - 2 * c->border - bh; } else { c->x = sx + mw; - c->y = sy + (i - 1) * h; + c->y = sy + (i - 1) * h + bh; c->w = w - 2 * c->border; c->h = h - 2 * c->border; } @@ -373,9 +377,11 @@ manage(Window w, XWindowAttributes *wa) c->win = w; c->tx = c->x = wa->x; c->ty = c->y = wa->y; + if(c->y < bh) + c->ty = c->y += bh; c->tw = c->w = wa->width; c->h = wa->height; - c->th = th; + c->th = bh; c->border = 1; c->proto = win_proto(c->win); update_size(c); @@ -398,9 +404,6 @@ manage(Window w, XWindowAttributes *wa) c->next = *l; /* *l == nil */ *l = c; - XSetWindowBorderWidth(dpy, c->win, 1); - XMapRaised(dpy, c->win); - XMapRaised(dpy, c->title); XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button2, Mod1Mask, c->win, False, ButtonPressMask, @@ -413,10 +416,17 @@ manage(Window w, XWindowAttributes *wa) || ((c->maxw == c->minw) && (c->maxh == c->minh)); arrange(NULL); - if(c->tags[tsel]) + /* mapping the window now prevents flicker */ + if(c->tags[tsel]) { + XMapRaised(dpy, c->win); + XMapRaised(dpy, c->title); focus(c); - else + } + else { ban_client(c); + XMapRaised(dpy, c->win); + XMapRaised(dpy, c->title); + } } void @@ -495,6 +505,7 @@ resize(Client *c, Bool inc) if(c->maxh && c->h > c->maxh) c->h = c->maxh; resize_title(c); + XSetWindowBorderWidth(dpy, c->win, 1); XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); e.type = ConfigureNotify; e.event = c->win; @@ -570,6 +581,7 @@ draw_client(Client *c) { int i; if(c == sel) { + draw_bar(); XUnmapWindow(dpy, c->title); XSetWindowBorder(dpy, c->win, dc.fg); return; @@ -579,19 +591,18 @@ draw_client(Client *c) XMapWindow(dpy, c->title); dc.x = dc.y = 0; - dc.h = c->th; dc.w = 0; for(i = 0; i < TLast; i++) { if(c->tags[i]) { dc.x += dc.w; dc.w = textw(c->tags[i]) + dc.font.height; - draw(True, c->tags[i]); + drawtext(c->tags[i], True); } } dc.x += dc.w; dc.w = textw(c->name) + dc.font.height; - draw(True, c->name); + drawtext(c->name, True); XCopyArea(dpy, dc.drawable, c->title, dc.gc, 0, 0, c->tw, c->th, 0, 0); XFlush(dpy);