Updated to also support toggle layout per tag.
/Fredrik
On 9/13/08, Fredrik Ternerot <[EMAIL PROTECTED]> wrote:
> Updated pertag patch for dwm-5.2.
>
--- a/dwm.c 2008-09-14 17:20:52.382689970 +0200
+++ b/dwm.c 2008-09-14 17:26:40.875771413 +0200
@@ -240,6 +240,12 @@ 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][2];
+static unsigned int sellts[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]; };
@@ -1270,9 +1276,9 @@ setclientstate(Client *c, long state) {
void
setlayout(const Arg *arg) {
if(!arg || !arg->v || arg->v != lt[sellt])
- sellt ^= 1;
+ sellt = sellts[curtag] ^= 1;
if(arg && arg->v)
- lt[sellt] = (Layout *)arg->v;
+ lt[sellt] = lts[curtag][sellt] = (Layout *)arg->v;
if(sel)
arrange();
else
@@ -1289,7 +1295,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();
}
@@ -1337,12 +1343,27 @@ 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][0] = lt[0];
+ lts[i][1] = lt[1];
+ sellts[i] = 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;
wa.event_mask = ButtonPressMask|ExposureMask;
@@ -1457,7 +1478,7 @@ tile(void) {
void
togglebar(const Arg *arg) {
- showbar = !showbar;
+ showbar = showbars[curtag] = !showbar;
updategeom();
updatebar();
arrange();
@@ -1490,9 +1511,25 @@ toggletag(const Arg *arg) {
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;
+ sellt = sellts[curtag];
+ lt[0] = lts[curtag][0];
+ lt[1] = lts[curtag][1];
+ mfact = mfacts[curtag];
+ if (showbar != showbars[curtag])
+ togglebar(NULL);
clearurgent();
arrange();
}
@@ -1661,11 +1698,31 @@ 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;
+ }
+ sellt = sellts[curtag];
+ lt[0]= lts[curtag][0];
+ lt[1]= lts[curtag][1];
+ mfact = mfacts[curtag];
+ if(showbar != showbars[curtag])
+ togglebar(NULL);
clearurgent();
arrange();
}