timplemented nn < n case, k-zed please recheck - dwm - [fork] customized build … | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 30fed9a211e524f2b1d7387fc62468c2225ab93d | |
parent c45d46ad9a44b9897c8c12eacb60b5cbdd31be7c | |
Author: Anselm R Garbe <[email protected]> | |
Date: Tue, 22 Sep 2009 20:33:42 +0100 | |
implemented nn < n case, k-zed please recheck | |
Diffstat: | |
M dwm.c | 44 +++++++++++++++++++++--------… | |
1 file changed, 30 insertions(+), 14 deletions(-) | |
--- | |
diff --git a/dwm.c b/dwm.c | |
t@@ -158,7 +158,7 @@ static void attachstack(Client *c); | |
static void buttonpress(XEvent *e); | |
static void checkotherwm(void); | |
static void cleanup(void); | |
-static void cleanupmons(void); | |
+static void cleanupmon(Monitor *mon); | |
static void clearurgent(Client *c); | |
static void configure(Client *c); | |
static void configurenotify(XEvent *e); | |
t@@ -480,22 +480,25 @@ cleanup(void) { | |
XFreeCursor(dpy, cursor[CurNormal]); | |
XFreeCursor(dpy, cursor[CurResize]); | |
XFreeCursor(dpy, cursor[CurMove]); | |
- cleanupmons(); | |
+ while(mons) | |
+ cleanupmon(mons); | |
XSync(dpy, False); | |
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); | |
} | |
void | |
-cleanupmons(void) { | |
+cleanupmon(Monitor *mon) { | |
Monitor *m; | |
- while(mons) { | |
- m = mons->next; | |
- XUnmapWindow(dpy, mons->barwin); | |
- XDestroyWindow(dpy, mons->barwin); | |
- free(mons); | |
- mons = m; | |
+ if(mon == mons) | |
+ mons = mons->next; | |
+ else { | |
+ for(m = mons; m && m->next != mon; m = m->next); | |
+ m->next = mon->next; | |
} | |
+ XUnmapWindow(dpy, mon->barwin); | |
+ XDestroyWindow(dpy, mon->barwin); | |
+ free(mon); | |
} | |
void | |
t@@ -1727,6 +1730,7 @@ updategeom(void) { | |
#ifdef XINERAMA | |
if(XineramaIsActive(dpy)) { | |
int i, j, n, nn; | |
+ Client *c; | |
Monitor *m; | |
XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn); | |
XineramaScreenInfo *unique = NULL; | |
t@@ -1755,7 +1759,7 @@ updategeom(void) { | |
|| unique[i].width != m->mw || unique[i].h… | |
{ | |
dirty = True; | |
- m->num = unique[i].screen_number; | |
+ m->num = i; | |
m->mx = m->wx = unique[i].x_org; | |
m->my = m->wy = unique[i].y_org; | |
m->mw = m->ww = unique[i].width; | |
t@@ -1763,10 +1767,22 @@ updategeom(void) { | |
updatebarpos(m); | |
} | |
} | |
- else { /* less monitors available */ | |
- cleanup(); | |
- setup(); | |
- scan(); | |
+ else { /* less monitors available nn < n */ | |
+ for(i = nn; i < n; i++) { | |
+ for(m = mons; m && m->next; m = m->next); | |
+ while(m->clients) { | |
+ dirty = True; | |
+ c = m->clients; | |
+ m->clients = c->next; | |
+ detachstack(c); | |
+ c->mon = mons; | |
+ attach(c); | |
+ attachstack(c); | |
+ } | |
+ if(m == selmon) | |
+ selmon = mons; | |
+ cleanupmon(m); | |
+ } | |
} | |
free(unique); | |
} |