dwm-mark-new-6.1.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-mark-new-6.1.diff (5815B)
       ---
            1 diff -urp -x config.mk dwm-6.1/drw.h dwm-6.1-patched/drw.h
            2 --- dwm-6.1/drw.h        2015-11-09 06:39:37.000000000 +0800
            3 +++ dwm-6.1-patched/drw.h        2016-03-09 15:12:58.966751900 +0800
            4 @@ -23,6 +23,7 @@ typedef struct {
            5          Clr *fg;
            6          Clr *bg;
            7          Clr *border;
            8 +        Clr *mark;
            9  } ClrScheme;
           10  
           11  typedef struct {
           12 diff -urp -x config.mk dwm-6.1/dwm.c dwm-6.1-patched/dwm.c
           13 --- dwm-6.1/dwm.c        2015-11-09 06:39:37.000000000 +0800
           14 +++ dwm-6.1-patched/dwm.c        2016-03-09 15:55:35.723676356 +0800
           15 @@ -201,16 +201,20 @@ static void setclientstate(Client *c, lo
           16  static void setfocus(Client *c);
           17  static void setfullscreen(Client *c, int fullscreen);
           18  static void setlayout(const Arg *arg);
           19 +static void setmark(Client *c);
           20  static void setmfact(const Arg *arg);
           21  static void setup(void);
           22  static void showhide(Client *c);
           23  static void sigchld(int unused);
           24  static void spawn(const Arg *arg);
           25 +static void swapclient(const Arg *arg);
           26 +static void swapfocus(const Arg *arg);
           27  static void tag(const Arg *arg);
           28  static void tagmon(const Arg *arg);
           29  static void tile(Monitor *);
           30  static void togglebar(const Arg *arg);
           31  static void togglefloating(const Arg *arg);
           32 +static void togglemark(const Arg *arg);
           33  static void toggletag(const Arg *arg);
           34  static void toggleview(const Arg *arg);
           35  static void unfocus(Client *c, int setfocus);
           36 @@ -266,6 +270,7 @@ static Display *dpy;
           37  static Drw *drw;
           38  static Monitor *mons, *selmon;
           39  static Window root;
           40 +static Client *mark;
           41  
           42  /* configuration, allows nested code to access above variables */
           43  #include "config.h"
           44 @@ -482,6 +487,7 @@ cleanup(void)
           45          for (i = 0; i < CurLast; i++)
           46                  drw_cur_free(drw, cursor[i]);
           47          for (i = 0; i < SchemeLast; i++) {
           48 +                drw_clr_free(scheme[i].mark);
           49                  drw_clr_free(scheme[i].border);
           50                  drw_clr_free(scheme[i].bg);
           51                  drw_clr_free(scheme[i].fg);
           52 @@ -807,7 +813,10 @@ focus(Client *c)
           53                  detachstack(c);
           54                  attachstack(c);
           55                  grabbuttons(c, 1);
           56 -                XSetWindowBorder(dpy, c->win, scheme[SchemeSel].border->pix);
           57 +                if (c == mark)
           58 +                        XSetWindowBorder(dpy, c->win, scheme[SchemeSel].mark->pix);
           59 +                else
           60 +                        XSetWindowBorder(dpy, c->win, scheme[SchemeSel].border->pix);
           61                  setfocus(c);
           62          } else {
           63                  XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
           64 @@ -1065,7 +1074,10 @@ manage(Window w, XWindowAttributes *wa)
           65  
           66          wc.border_width = c->bw;
           67          XConfigureWindow(dpy, w, CWBorderWidth, &wc);
           68 -        XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix);
           69 +        if (c == mark)
           70 +                XSetWindowBorder(dpy, w, scheme[SchemeNorm].mark->pix);
           71 +        else
           72 +                XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix);
           73          configure(c); /* propagates border_width, if size doesn't change */
           74          updatewindowtype(c);
           75          updatesizehints(c);
           76 @@ -1528,6 +1540,23 @@ setlayout(const Arg *arg)
           77                  drawbar(selmon);
           78  }
           79  
           80 +void
           81 +setmark(Client *c)
           82 +{
           83 +        if (c == mark)
           84 +                return;
           85 +        if (mark) {
           86 +                XSetWindowBorder(dpy, mark->win, scheme[mark == selmon->sel
           87 +                                ? SchemeSel : SchemeNorm].border->pix);
           88 +                mark = 0;
           89 +        }
           90 +        if (c) {
           91 +                XSetWindowBorder(dpy, c->win, scheme[c == selmon->sel 
           92 +                                ? SchemeSel : SchemeNorm].mark->pix);
           93 +                mark = c;
           94 +        }
           95 +}
           96 +
           97  /* arg > 1.0 will set mfact absolutly */
           98  void
           99  setmfact(const Arg *arg)
          100 @@ -1580,9 +1609,11 @@ setup(void)
          101          cursor[CurResize] = drw_cur_create(drw, XC_sizing);
          102          cursor[CurMove] = drw_cur_create(drw, XC_fleur);
          103          /* init appearance */
          104 +        scheme[SchemeNorm].mark = drw_clr_create(drw, normmarkcolor);
          105          scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
          106          scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
          107          scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
          108 +        scheme[SchemeSel].mark = drw_clr_create(drw, selmarkcolor);
          109          scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
          110          scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
          111          scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
          112 @@ -1646,6 +1677,66 @@ spawn(const Arg *arg)
          113  }
          114  
          115  void
          116 +swapclient(const Arg *arg)
          117 +{
          118 +        Client *s, *m, t;
          119 +
          120 +        if (!mark || !selmon->sel || mark == selmon->sel
          121 +            || !selmon->lt[selmon->sellt]->arrange)
          122 +                return;
          123 +        s = selmon->sel;
          124 +        m = mark;
          125 +        t = *s;
          126 +        strcpy(s->name, m->name);
          127 +        s->win = m->win;
          128 +        s->x = m->x;
          129 +        s->y = m->y;
          130 +        s->w = m->w;
          131 +        s->h = m->h;
          132 +
          133 +        m->win = t.win;
          134 +        strcpy(m->name, t.name);
          135 +        m->x = t.x;
          136 +        m->y = t.y;
          137 +        m->w = t.w;
          138 +        m->h = t.h;
          139 +
          140 +        selmon->sel = m;
          141 +        mark = s;
          142 +        focus(s);
          143 +        setmark(m);
          144 +
          145 +        arrange(s->mon);
          146 +        if (s->mon != m->mon) {
          147 +                arrange(m->mon);
          148 +        }
          149 +}
          150 +
          151 +void
          152 +swapfocus(const Arg *arg)
          153 +{
          154 +        Client *t;
          155 +
          156 +        if (!selmon->sel || !mark || selmon->sel == mark)
          157 +                return;
          158 +        t = selmon->sel;
          159 +        if (mark->mon != selmon) {
          160 +                unfocus(selmon->sel, 0);
          161 +                selmon = mark->mon;
          162 +        }
          163 +        if (ISVISIBLE(mark)) {
          164 +                focus(mark);
          165 +                restack(selmon);
          166 +        } else {
          167 +                selmon->seltags ^= 1;
          168 +                selmon->tagset[selmon->seltags] = mark->tags;
          169 +                focus(mark);
          170 +                arrange(selmon);
          171 +        }
          172 +        setmark(t);
          173 +}
          174 +
          175 +void
          176  tag(const Arg *arg)
          177  {
          178          if (selmon->sel && arg->ui & TAGMASK) {
          179 @@ -1713,6 +1804,14 @@ togglefloating(const Arg *arg)
          180  }
          181  
          182  void
          183 +togglemark(const Arg *arg)
          184 +{
          185 +        if (!selmon->sel)
          186 +                return;
          187 +        setmark(selmon->sel == mark ? 0 : selmon->sel);
          188 +}
          189 +
          190 +void
          191  toggletag(const Arg *arg)
          192  {
          193          unsigned int newtags;
          194 @@ -1745,7 +1844,10 @@ unfocus(Client *c, int setfocus)
          195          if (!c)
          196                  return;
          197          grabbuttons(c, 0);
          198 -        XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->pix);
          199 +        if (c == mark)
          200 +                XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].mark->pix);
          201 +        else
          202 +                XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->pix);
          203          if (setfocus) {
          204                  XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
          205                  XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
          206 @@ -1758,6 +1860,8 @@ unmanage(Client *c, int destroyed)
          207          Monitor *m = c->mon;
          208          XWindowChanges wc;
          209  
          210 +        if (c == mark)
          211 +                setmark(0);
          212          /* The server grab construct avoids race conditions. */
          213          detach(c);
          214          detachstack(c);