X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=dwm.c;h=f20861e13c3cc0c97f061ef67330c5aecfb2c35d;hp=229062d9e8625dd821acef506f8021b03720e80c;hb=e408ca97d848949d5971ab70b26ebc6930c8fdd9;hpb=1ddfc571ae90b842446b0524f2a38c74868bb326 diff --git a/dwm.c b/dwm.c index 229062d..f20861e 100644 --- a/dwm.c +++ b/dwm.c @@ -600,14 +600,14 @@ detach(Client *c) { void detachstack(Client *c) { - Client **tc; + Client **tc, *t; for(tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext); *tc = c->snext; if(c == c->mon->sel) { - for(*tc = c->mon->stack; *tc && !ISVISIBLE((*tc)); *tc = (*tc)->snext); - c->mon->sel = *tc; + for(t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext); + c->mon->sel = t; } } @@ -636,7 +636,7 @@ drawbar(Monitor *m) { dc.x = 0; #ifdef XINERAMA - { + if(mons->next) { /* more than a single monitor */ char buf[2]; buf[0] = m->screen_number + '0'; buf[1] = '\0'; @@ -1046,28 +1046,38 @@ manage(Window w, XWindowAttributes *wa) { die("fatal: could not malloc() %u bytes\n", sizeof(Client)); *c = cz; c->win = w; - c->mon = selmon; + + if(XGetTransientForHint(dpy, w, &trans)) + t = wintoclient(trans); + if(t) { + c->mon = t->mon; + c->tags = t->tags; + } + else { + c->mon = selmon; + applyrules(c); + } /* geometry */ - c->x = wa->x + selmon->wx; - c->y = wa->y + selmon->wy; + c->x = wa->x + c->mon->wx; + c->y = wa->y + c->mon->wy; c->w = wa->width; c->h = wa->height; c->oldbw = wa->border_width; - if(c->w == selmon->mw && c->h == selmon->mh) { - c->x = selmon->mx; - c->y = selmon->my; + if(c->w == c->mon->mw && c->h == c->mon->mh) { + c->x = c->mon->mx; + c->y = c->mon->my; c->bw = 0; } else { - if(c->x + WIDTH(c) > selmon->mx + selmon->mw) - c->x = selmon->mx + selmon->mw - WIDTH(c); - if(c->y + HEIGHT(c) > selmon->my + selmon->mh) - c->y = selmon->my + selmon->mh - HEIGHT(c); - c->x = MAX(c->x, selmon->mx); + if(c->x + WIDTH(c) > c->mon->mx + c->mon->mw) + c->x = c->mon->mx + c->mon->mw - WIDTH(c); + if(c->y + HEIGHT(c) > c->mon->my + c->mon->mh) + c->y = c->mon->my + c->mon->mh - HEIGHT(c); + c->x = MAX(c->x, c->mon->mx); /* only fix client y-offset, if the client center might cover the bar */ c->y = MAX(c->y, ((c->mon->by == 0) && (c->x + (c->w / 2) >= c->mon->wx) - && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : selmon->my); + && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); c->bw = borderpx; } @@ -1079,12 +1089,6 @@ manage(Window w, XWindowAttributes *wa) { XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); grabbuttons(c, False); updatetitle(c); - if(XGetTransientForHint(dpy, w, &trans)) - t = wintoclient(trans); - if(t) - c->tags = t->tags; - else - applyrules(c); if(!c->isfloating) c->isfloating = trans != None || c->isfixed; if(c->isfloating)