Hi,

just removed two calls to clearurgent() to make the patch work with
5.4 :)

Valentin
diff -r add6eb26ebaa dwm.c
--- a/dwm.c	Sat Dec 20 12:02:14 2008 +0000
+++ b/dwm.c	Sun Dec 21 18:39:14 2008 +0100
@@ -240,6 +240,11 @@ static Window root, barwin;
 static Window root, barwin;
 /* configuration, allows nested code to access above variables */
 #include "config.h"
+
+static int curtag = 1, prevtag = 1;
+static Layout *lts[LENGTH(tags) + 1];
+static double mfacts[LENGTH(tags) + 1];
+static Bool showbars[LENGTH(tags) + 1];
 
 /* compile-time check if all tags fit into an unsigned int bit array. */
 struct NumTags { char limitexceeded[sizeof(unsigned int) * 8 < LENGTH(tags) ? -1 : 1]; };
@@ -1244,7 +1249,7 @@ setlayout(const Arg *arg) {
 	if(!arg || !arg->v || arg->v != lt[sellt])
 		sellt ^= 1;
 	if(arg && arg->v)
-		lt[sellt] = (Layout *)arg->v;
+		lt[sellt] = lts[curtag] = (Layout *)arg->v;
 	if(sel)
 		arrange();
 	else
@@ -1261,7 +1266,7 @@ setmfact(const Arg *arg) {
 	f = arg->f < 1.0 ? arg->f + mfact : arg->f - 1.0;
 	if(f < 0.1 || f > 0.9)
 		return;
-	mfact = f;
+	mfact = mfacts[curtag] = f;
 	arrange();
 }
 
@@ -1309,11 +1314,26 @@ setup(void) {
 	if(!dc.font.set)
 		XSetFont(dpy, dc.gc, dc.font.xfont->fid);
 
+	/* init mfacts */
+	for(i=0; i < LENGTH(tags) + 1 ; i++) {
+		mfacts[i] = mfact;
+	}
+
+	/* init layouts */
+	for(i=0; i < LENGTH(tags) + 1; i++) {
+		lts[i] = &layouts[0];
+	}
+
+
 	/* init bar */
 	for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
 		w = TEXTW(layouts[i].symbol);
 		blw = MAX(blw, w);
 	}
+
+	for(i=0; i < LENGTH(tags) + 1; i++) {
+		showbars[i] = showbar;
+ 	}
 
 	wa.override_redirect = 1;
 	wa.background_pixmap = ParentRelative;
@@ -1434,7 +1454,7 @@ tile(void) {
 
 void
 togglebar(const Arg *arg) {
-	showbar = !showbar;
+	showbar = showbars[curtag] = !showbar;
 	updategeom();
 	updatebar();
 	arrange();
@@ -1467,9 +1487,23 @@ void
 void
 toggleview(const Arg *arg) {
 	unsigned int mask = tagset[seltags] ^ (arg->ui & TAGMASK);
+        unsigned int i;
 
 	if(mask) {
+                if(mask == ~0) {
+                        prevtag = curtag;
+                        curtag = 0;
+                }
+                if(!(mask & 1 << (curtag - 1))) {
+                        prevtag = curtag;
+                        for (i=0; !(mask & 1 << i); i++);
+                        curtag = i + 1;
+                }
 		tagset[seltags] = mask;
+                lt[sellt] = lts[curtag];
+                mfact = mfacts[curtag];
+                if (showbar != showbars[curtag])
+                        togglebar(NULL);
 		arrange();
 	}
 }
@@ -1644,11 +1678,28 @@ updatewmhints(Client *c) {
 
 void
 view(const Arg *arg) {
+        unsigned int i;
 	if((arg->ui & TAGMASK) == tagset[seltags])
 		return;
 	seltags ^= 1; /* toggle sel tagset */
-	if(arg->ui & TAGMASK)
+        if(arg->ui & TAGMASK) {
 		tagset[seltags] = arg->ui & TAGMASK;
+                prevtag = curtag;
+                if(arg->ui == ~0)
+                        curtag = 0;
+                else {
+                        for (i=0; !(arg->ui & 1 << i); i++);
+                        curtag = i + 1;
+                }
+        } else {
+                prevtag= curtag ^ prevtag;
+                curtag^= prevtag;
+                prevtag= curtag ^ prevtag;
+        }
+        lt[sellt]= lts[curtag];
+        mfact = mfacts[curtag];
+        if(showbar != showbars[curtag])
+                togglebar(NULL);
 	arrange();
 }
 

Attachment: signature.asc
Description: PGP signature

Reply via email to