Le jeudi 03 juin 2010 à 06:51:12, Julien Pecqueur a écrit :
> Hi,
> 
> I updated the pertag patch for the current dwm tip (5.8.2) because i had a 
> reject with the 5.7.2 version.
> 

My apologies, i forgot to remove the config.def.h from the diff file.
Please find the correct one.


-- 
Julien Pecqueur (JPEC)

Site:   http://julienpecqueur.com
Email:  [email protected]
PGP:    B1AA2389 (GNUPG)
IRC:    jpec (irc.freenode.net)

Powered by Archlinux - Keep it simple stupid !
diff -r cb309a6cea4b dwm.c
--- a/dwm.c     Wed Jun 02 18:24:24 2010 +0200
+++ b/dwm.c     Thu Jun 03 18:47:50 2010 +0200
@@ -121,26 +121,6 @@
        void (*arrange)(Monitor *);
 } Layout;
 
-struct Monitor {
-       char ltsymbol[16];
-       float mfact;
-       int num;
-       int by;               /* bar geometry */
-       int mx, my, mw, mh;   /* screen size */
-       int wx, wy, ww, wh;   /* window area  */
-       unsigned int seltags;
-       unsigned int sellt;
-       unsigned int tagset[2];
-       Bool showbar;
-       Bool topbar;
-       Client *clients;
-       Client *sel;
-       Client *stack;
-       Monitor *next;
-       Window barwin;
-       const Layout *lt[2];
-};
-
 typedef struct {
        const char *class;
        const char *instance;
@@ -275,6 +255,31 @@
 /* configuration, allows nested code to access above variables */
 #include "config.h"
 
+struct Monitor {
+       char ltsymbol[16];
+       float mfact;
+       int num;
+       int by;               /* bar geometry */
+       int mx, my, mw, mh;   /* screen size */
+       int wx, wy, ww, wh;   /* window area  */
+       unsigned int seltags;
+       unsigned int sellt;
+       unsigned int tagset[2];
+       Bool showbar;
+       Bool topbar;
+       Client *clients;
+       Client *sel;
+       Client *stack;
+       Monitor *next;
+       Window barwin;
+       const Layout *lt[2];
+       int curtag;
+       int prevtag;
+       const Layout *lts[LENGTH(tags) + 1];
+       double mfacts[LENGTH(tags) + 1];
+       Bool showbars[LENGTH(tags) + 1];
+};
+
 /* compile-time check if all tags fit into an unsigned int bit array. */
 struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
 
@@ -1467,7 +1472,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);
@@ -1485,13 +1490,15 @@
        f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
        if(f < 0.1 || f > 0.9)
                return;
-       selmon->mfact = f;
+       selmon->mfact = selmon->mfacts[selmon->curtag] = f;
        arrange(selmon);
 }
 
 void
 setup(void) {
        XSetWindowAttributes wa;
+       Monitor *m;
+       unsigned int i;
 
        /* clean up any zombies immediately */
        sigchld(0);
@@ -1527,7 +1534,27 @@
        XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter);
        if(!dc.font.set)
                XSetFont(dpy, dc.gc, dc.font.xfont->fid);
+       /* init tags */
+       for(m = mons; m; m = m->next)
+               m->curtag = m->prevtag = 1;
+       /* init mfacts */
+       for(m = mons; m; m = m->next) {
+               for(i=0; i < LENGTH(tags) + 1 ; i++) {
+                       m->mfacts[i] = m->mfact;
+               }
+       }
+       /* init layouts */
+       for(m = mons; m; m = m->next) {
+               for(i=0; i < LENGTH(tags) + 1; i++) {
+                       m->lts[i] = &layouts[0];
+               }
+       }
        /* init bars */
+       for(m = mons; m; m = m->next) {
+               for(i=0; i < LENGTH(tags) + 1; i++) {
+                       m->showbars[i] = m->showbar;
+               }
+       }
        updatebars();
        updatestatus();
        /* EWMH support per view */
@@ -1638,7 +1665,7 @@
 
 void
 togglebar(const Arg *arg) {
-       selmon->showbar = !selmon->showbar;
+       selmon->showbar = selmon->showbars[selmon->curtag] = !selmon->showbar;
        updatebarpos(selmon);
        XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, 
selmon->ww, bh);
        arrange(selmon);
@@ -1658,12 +1685,27 @@
 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;
+               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];
+               selmon->mfact = selmon->mfacts[selmon->curtag];
+               if (selmon->showbar != selmon->showbars[selmon->curtag])
+                       togglebar(NULL);
                arrange(selmon);
        }
 }
@@ -1930,11 +1972,29 @@
 
 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;
+               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];
+       selmon->mfact = selmon->mfacts[selmon->curtag];
+       if(selmon->showbar != selmon->showbars[selmon->curtag])
+               togglebar(NULL);
        arrange(selmon);
 }
 

Attachment: pgpGwNusj1vTz.pgp
Description: PGP signature

Reply via email to