Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- dwm.c.orig 2012-03-12 21:32:42.245999322 +0100
- +++ src/dwm-6.0/dwm.c 2012-03-12 21:32:17.512666559 +0100
- @@ -142,9 +141,19 @@
- Monitor *next;
- Window barwin;
- const Layout *lt[2];
- + int curtag;
- + int prevtag;
- + const Layout **lts;
- + double *mfacts;
- };
- typedef struct {
- + const char *name;
- + const Layout *layout;
- + float mfact;
- +} Tag;
- +
- +typedef struct {
- const char *class;
- const char *instance;
- const char *title;
- @@ -439,9 +449,9 @@
- }
- if(ev->window == selmon->barwin) {
- i = x = 0;
- - do
- - x += TEXTW(tags[i]);
- - while(ev->x >= x && ++i < LENGTH(tags));
- + do {
- + x += TEXTW(tags[i].name);
- + } while(ev->x >= x && ++i < LENGTH(tags));
- if(i < LENGTH(tags)) {
- click = ClkTagBar;
- arg.ui = 1 << i;
- @@ -512,6 +522,8 @@
- }
- XUnmapWindow(dpy, mon->barwin);
- XDestroyWindow(dpy, mon->barwin);
- + free(mon->mfacts);
- + free(mon->lts);
- free(mon);
- }
- @@ -642,19 +654,29 @@
- XSync(dpy, False);
- }
- +/* TODO Check how many times createmon is called */
- Monitor *
- createmon(void) {
- Monitor *m;
- + int i, numtags = LENGTH(tags) + 1;
- if(!(m = (Monitor *)calloc(1, sizeof(Monitor))))
- die("fatal: could not malloc() %u bytes\n", sizeof(Monitor));
- + if(!(m->mfacts = calloc(sizeof(double), numtags)))
- + die("fatal: could not malloc() %u bytes\n", sizeof(double) * numtags);
- + if(!(m->lts = calloc(sizeof(Layout *), numtags)))
- + die("fatal: could not malloc() %u bytes\n", sizeof(Layout *) * numtags);
- m->tagset[0] = m->tagset[1] = 1;
- - m->mfact = mfact;
- m->showbar = showbar;
- m->topbar = topbar;
- - m->lt[0] = &layouts[0];
- + m->curtag = m->prevtag = 1;
- + for(i = 1; i < numtags; i++) {
- + m->mfacts[i] = tags[i - 1].mfact < 0 ? mfact : tags[i - 1].mfact;
- + m->lts[i] = tags[i - 1].layout;
- + }
- + m->lt[0] = m->lts[m->curtag];
- m->lt[1] = &layouts[1 % LENGTH(layouts)];
- - strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
- + strncpy(m->ltsymbol, m->lt[0]->symbol, sizeof m->ltsymbol);
- return m;
- }
- @@ -727,9 +749,9 @@
- }
- dc.x = 0;
- for(i = 0; i < LENGTH(tags); i++) {
- - dc.w = TEXTW(tags[i]);
- + dc.w = TEXTW(tags[i].name);
- col = m->tagset[m->seltags] & 1 << i ? dc.sel : dc.norm;
- - drawtext(tags[i], col, urg & 1 << i);
- + drawtext(tags[i].name, col, urg & 1 << i);
- drawsquare(m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
- occ & 1 << i, urg & 1 << i, col);
- dc.x += dc.w;
- @@ -1556,7 +1578,7 @@
- if(!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
- selmon->sellt ^= 1;
- if(arg && arg->v)
- - selmon->lt[selmon->sellt] = (Layout *)arg->v;
- + selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag] = (Layout *)arg->v;
- strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
- if(selmon->sel)
- arrange(selmon);
- @@ -1571,10 +1593,10 @@
- if(!arg || !selmon->lt[selmon->sellt]->arrange)
- return;
- - f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
- + f = arg->f < 1.0 ? arg->f + selmon->mfacts[selmon->curtag] : arg->f - 1.0;
- if(f < 0.1 || f > 0.9)
- return;
- - selmon->mfact = f;
- + selmon->mfacts[selmon->curtag] = f;
- arrange(selmon);
- }
- @@ -1751,13 +1773,24 @@
- void
- toggletag(const Arg *arg) {
- unsigned int newtags;
- -
- + unsigned int i;
- +
- if(!selmon->sel)
- return;
- newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
- if(newtags) {
- selmon->sel->tags = newtags;
- - focus(NULL);
- + if(newtags == ~0) {
- + selmon->prevtag = selmon->curtag;
- + selmon->curtag = 0;
- + }
- + if(!(newtags & 1 << (selmon->curtag - 1))) {
- + selmon->prevtag = selmon->curtag;
- + for (i=0; !(newtags & 1 << i); i++);
- + selmon->curtag = i + 1;
- + }
- + selmon->sel->tags = newtags;
- + selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
- arrange(selmon);
- }
- }
- @@ -2045,12 +2078,26 @@
- void
- view(const Arg *arg) {
- + unsigned int i;
- +
- if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
- return;
- selmon->seltags ^= 1; /* toggle sel tagset */
- - if(arg->ui & TAGMASK)
- + if(arg->ui & TAGMASK) {
- selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
- - focus(NULL);
- + selmon->prevtag = selmon->curtag;
- + if(arg->ui == ~0)
- + selmon->curtag = 0;
- + else {
- + for (i=0; !(arg->ui & 1 << i); i++);
- + selmon->curtag = i + 1;
- + }
- + } else {
- + selmon->prevtag= selmon->curtag ^ selmon->prevtag;
- + selmon->curtag^= selmon->prevtag;
- + selmon->prevtag= selmon->curtag ^ selmon->prevtag;
- + }
- + selmon->lt[selmon->sellt] = selmon->lts[selmon->curtag];
- arrange(selmon);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement