URI: 
       dwm-pertag-5.1.diff - sites - public wiki contents of suckless.org
  HTML git clone git://git.suckless.org/sites
   DIR Log
   DIR Files
   DIR Refs
       ---
       dwm-pertag-5.1.diff (2938B)
       ---
            1 diff -NrU3 dwm-5.1/dwm.c dwm-5.1.playground-pertag/dwm.c
            2 --- dwm-5.1/dwm.c        2008-07-29 20:18:32.000000000 +0200
            3 +++ dwm-5.1-pertag/dwm.c        2008-08-01 18:46:49.000000000 +0200
            4 @@ -238,6 +238,11 @@
            5  /* configuration, allows nested code to access above variables */
            6  #include "config.h"
            7  
            8 +static int curtag = 1, prevtag = 1;
            9 +static Layout *lts[LENGTH(tags) + 1];
           10 +static double mfacts[LENGTH(tags) + 1];
           11 +static Bool showbars[LENGTH(tags) + 1];
           12 +
           13  /* compile-time check if all tags fit into an unsigned int bit array. */
           14  struct NumTags { char limitexceeded[sizeof(unsigned int) * 8 < LENGTH(tags) ? -1 : 1]; };
           15  
           16 @@ -1307,7 +1312,7 @@
           17          if(!arg || !arg->v || arg->v != lt[sellt])
           18                  sellt ^= 1;
           19          if(arg && arg->v)
           20 -                lt[sellt] = (Layout *)arg->v;
           21 +                lt[sellt] = lts[curtag] = (Layout *)arg->v;
           22          if(sel)
           23                  arrange();
           24          else
           25 @@ -1324,7 +1329,7 @@
           26          f = arg->f < 1.0 ? arg->f + mfact : arg->f - 1.0;
           27          if(f < 0.1 || f > 0.9)
           28                  return;
           29 -        mfact = f;
           30 +        mfact = mfacts[curtag] = f;
           31          arrange();
           32  }
           33  
           34 @@ -1373,12 +1378,27 @@
           35          if(!dc.font.set)
           36                  XSetFont(dpy, dc.gc, dc.font.xfont->fid);
           37  
           38 +        /* init mfacts */
           39 +        for(i=0; i < LENGTH(tags) + 1 ; i++) {
           40 +                mfacts[i] = mfact;
           41 +        }
           42 +
           43 +        /* init layouts */
           44 +        for(i=0; i < LENGTH(tags) + 1; i++) {
           45 +                lts[i] = &layouts[0];
           46 +        }
           47 +
           48 +
           49          /* init bar */
           50          for(blw = i = 0; LENGTH(layouts) > 1 && i < LENGTH(layouts); i++) {
           51                  w = TEXTW(layouts[i].symbol);
           52                  blw = MAX(blw, w);
           53          }
           54  
           55 +        for(i=0; i < LENGTH(tags) + 1; i++) {
           56 +                showbars[i] = showbar;
           57 +         }
           58 +
           59          wa.override_redirect = 1;
           60          wa.background_pixmap = ParentRelative;
           61          wa.event_mask = ButtonPressMask|ExposureMask;
           62 @@ -1479,7 +1499,7 @@
           63  
           64  void
           65  togglebar(const Arg *arg) {
           66 -        showbar = !showbar;
           67 +        showbar = showbars[curtag] = !showbar;
           68          updategeom();
           69          updatebar();
           70          arrange();
           71 @@ -1508,9 +1528,23 @@
           72  void
           73  toggleview(const Arg *arg) {
           74          unsigned int mask = tagset[seltags] ^ (arg->ui & TAGMASK);
           75 +        unsigned int i;
           76  
           77          if(mask) {
           78 +                if(mask == ~0) {
           79 +                        prevtag = curtag;
           80 +                        curtag = 0;
           81 +                }
           82 +                if(!(mask & 1 << (curtag - 1))) {
           83 +                        prevtag = curtag;
           84 +                        for (i=0; !(mask & 1 << i); i++);
           85 +                        curtag = i + 1;
           86 +                }
           87                  tagset[seltags] = mask;
           88 +                lt[sellt] = lts[curtag];
           89 +                mfact = mfacts[curtag];
           90 +                if (showbar != showbars[curtag])
           91 +                        togglebar(NULL);
           92                  clearurgent();
           93                  arrange();
           94          }
           95 @@ -1663,11 +1697,29 @@
           96  
           97  void
           98  view(const Arg *arg) {
           99 +        unsigned int i;
          100 +
          101          if(arg && (arg->i & TAGMASK) == tagset[seltags])
          102                  return;
          103          seltags ^= 1; /* toggle sel tagset */
          104 -        if(arg && (arg->ui & TAGMASK))
          105 +        if(arg && (arg->ui & TAGMASK)) {
          106                  tagset[seltags] = arg->i & TAGMASK;
          107 +                prevtag = curtag;
          108 +                if(arg->ui == ~0)
          109 +                        curtag = 0;
          110 +                else {
          111 +                        for (i=0; !(arg->ui & 1 << i); i++);
          112 +                        curtag = i + 1;
          113 +                }
          114 +        } else {
          115 +                prevtag= curtag ^ prevtag;
          116 +                curtag^= prevtag;
          117 +                prevtag= curtag ^ prevtag;
          118 +        }
          119 +        lt[sellt]= lts[curtag];
          120 +        mfact = mfacts[curtag];
          121 +        if(showbar != showbars[curtag])
          122 +                togglebar(NULL);
          123          clearurgent();
          124          arrange();
          125  }