diff --git a/dwm.c b/dwm.c index 670afbe..78ddec9 100644 --- a/dwm.c +++ b/dwm.c @@ -96,7 +96,7 @@ struct Client { }; typedef struct { - int x, y, w, h; + int x, y, w, h, dw; unsigned long norm[ColLast]; unsigned long sel[ColLast]; Drawable drawable; @@ -554,7 +554,7 @@ configurenotify(XEvent *e) { if(updategeom()) { if(dc.drawable != 0) XFreePixmap(dpy, dc.drawable); - dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen)); + dc.drawable = XCreatePixmap(dpy, root, dc.dw, bh, DefaultDepth(dpy, screen)); updatebars(); for(m = mons; m; m = m->next) XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); @@ -1550,7 +1550,7 @@ setup(void) { dc.sel[ColBorder] = getcolor(selbordercolor); dc.sel[ColBG] = getcolor(selbgcolor); dc.sel[ColFG] = getcolor(selfgcolor); - dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen)); + dc.drawable = XCreatePixmap(dpy, root, dc.dw, bh, DefaultDepth(dpy, screen)); dc.gc = XCreateGC(dpy, root, 0, NULL); XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); if(!dc.font.set) @@ -1796,9 +1796,14 @@ updategeom(void) { /* only consider unique geometries as separate screens */ if(!(unique = (XineramaScreenInfo *)malloc(sizeof(XineramaScreenInfo) * nn))) die("fatal: could not malloc() %u bytes\n", sizeof(XineramaScreenInfo) * nn); + dc.dw = 0; for(i = 0, j = 0; i < nn; i++) - if(isuniquegeom(unique, j, &info[i])) - memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo)); + if(isuniquegeom(unique, j, &info[i])) { + memcpy(&unique[j], &info[i], sizeof(XineramaScreenInfo)); + if(unique[j].width > dc.dw) + dc.dw = unique[j].width; + ++j; + } XFree(info); nn = j; if(n <= nn) { @@ -1850,6 +1855,7 @@ updategeom(void) { mons = createmon(); if(mons->mw != sw || mons->mh != sh) { dirty = True; + dc.dw = sw; mons->mw = mons->ww = sw; mons->mh = mons->wh = sh; updatebarpos(mons);