[hackers] [dwm] implemented nn < n case, k-zed please recheck || Anselm R Garbe

From: <hg_AT_suckless.org>
Date: Tue, 22 Sep 2009 18:34:03 +0000 (UTC)

changeset: 1497:20de01c5ff82
user: Anselm R Garbe <anselm_AT_garbe.us>
date: Tue Sep 22 20:33:42 2009 +0100
files: dwm.c
description:
implemented nn < n case, k-zed please recheck

diff -r de4a2998e1f5 -r 20de01c5ff82 dwm.c
--- a/dwm.c Tue Sep 22 09:53:11 2009 +0100
+++ b/dwm.c Tue Sep 22 20:33:42 2009 +0100
@@ -158,7 +158,7 @@
 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);
@@ -480,22 +480,25 @@
         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
@@ -1727,6 +1730,7 @@
 #ifdef XINERAMA
         if(XineramaIsActive(dpy)) {
                 int i, j, n, nn;
+ Client *c;
                 Monitor *m;
                 XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
                 XineramaScreenInfo *unique = NULL;
@@ -1755,7 +1759,7 @@
                                     || unique[i].width != m->mw || unique[i].height != m->mh))
                                 {
                                         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;
@@ -1763,10 +1767,22 @@
                                         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);
         }
Received on Tue Sep 22 2009 - 18:34:03 UTC

This archive was generated by hypermail 2.2.0 : Tue Sep 22 2009 - 18:36:16 UTC