dwm-goback-20201227-61bb8b2.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-goback-20201227-61bb8b2.diff (4217B)
       ---
            1 From ad9b42dd9f9cc984f6d7bf6351b1101b594899b4 Mon Sep 17 00:00:00 2001
            2 From: Max Schillinger <maxschillinger@web.de>
            3 Date: Sun, 27 Dec 2020 15:04:08 +0100
            4 Subject: [PATCH] add patch/function 'goback'
            5 
            6 ---
            7  config.def.h |  1 +
            8  dwm.c        | 31 +++++++++++++++++++++++++++++--
            9  2 files changed, 30 insertions(+), 2 deletions(-)
           10 
           11 diff --git a/config.def.h b/config.def.h
           12 index 1c0b587..c217a27 100644
           13 --- a/config.def.h
           14 +++ b/config.def.h
           15 @@ -72,6 +72,7 @@ static Key keys[] = {
           16          { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
           17          { MODKEY,                       XK_Return, zoom,           {0} },
           18          { MODKEY,                       XK_Tab,    view,           {0} },
           19 +        { MODKEY,                       XK_g,      goback,         {0} },
           20          { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
           21          { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
           22          { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
           23 diff --git a/dwm.c b/dwm.c
           24 index 664c527..3d40bac 100644
           25 --- a/dwm.c
           26 +++ b/dwm.c
           27 @@ -173,6 +173,7 @@ static Atom getatomprop(Client *c, Atom prop);
           28  static int getrootptr(int *x, int *y);
           29  static long getstate(Window w);
           30  static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
           31 +static void goback(const Arg *arg);
           32  static void grabbuttons(Client *c, int focused);
           33  static void grabkeys(void);
           34  static void incnmaster(const Arg *arg);
           35 @@ -266,7 +267,7 @@ static Cur *cursor[CurLast];
           36  static Clr **scheme;
           37  static Display *dpy;
           38  static Drw *drw;
           39 -static Monitor *mons, *selmon;
           40 +static Monitor *mons, *selmon, *prevmon;
           41  static Window root, wmcheckwin;
           42  
           43  /* configuration, allows nested code to access above variables */
           44 @@ -427,6 +428,7 @@ buttonpress(XEvent *e)
           45          /* focus monitor if necessary */
           46          if ((m = wintomon(ev->window)) && m != selmon) {
           47                  unfocus(selmon->sel, 1);
           48 +                prevmon = selmon;
           49                  selmon = m;
           50                  focus(NULL);
           51          }
           52 @@ -765,6 +767,7 @@ enternotify(XEvent *e)
           53          m = c ? c->mon : wintomon(ev->window);
           54          if (m != selmon) {
           55                  unfocus(selmon->sel, 1);
           56 +                prevmon = selmon;
           57                  selmon = m;
           58          } else if (!c || c == selmon->sel)
           59                  return;
           60 @@ -789,8 +792,10 @@ focus(Client *c)
           61          if (selmon->sel && selmon->sel != c)
           62                  unfocus(selmon->sel, 0);
           63          if (c) {
           64 -                if (c->mon != selmon)
           65 +                if (c->mon != selmon) {
           66 +                        prevmon = selmon;
           67                          selmon = c->mon;
           68 +                }
           69                  if (c->isurgent)
           70                          seturgent(c, 0);
           71                  detachstack(c);
           72 @@ -826,6 +831,7 @@ focusmon(const Arg *arg)
           73          if ((m = dirtomon(arg->i)) == selmon)
           74                  return;
           75          unfocus(selmon->sel, 0);
           76 +        prevmon = selmon;
           77          selmon = m;
           78          focus(NULL);
           79  }
           80 @@ -925,6 +931,21 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size)
           81          return 1;
           82  }
           83  
           84 +void
           85 +goback(const Arg *arg)
           86 +{
           87 +        if (prevmon == NULL) {
           88 +                Arg a = {0};
           89 +                view(&a);
           90 +        } else if (prevmon != selmon) {
           91 +                unfocus(selmon->sel, 0);
           92 +                Monitor *p = selmon;
           93 +                selmon = prevmon;
           94 +                focus(NULL);
           95 +                prevmon = p;
           96 +        }
           97 +}
           98 +
           99  void
          100  grabbuttons(Client *c, int focused)
          101  {
          102 @@ -1127,6 +1148,8 @@ motionnotify(XEvent *e)
          103                  return;
          104          if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
          105                  unfocus(selmon->sel, 1);
          106 +                if (m != selmon)
          107 +                        prevmon = selmon;
          108                  selmon = m;
          109                  focus(NULL);
          110          }
          111 @@ -1188,6 +1211,7 @@ movemouse(const Arg *arg)
          112          XUngrabPointer(dpy, CurrentTime);
          113          if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
          114                  sendmon(c, m);
          115 +                prevmon = selmon;
          116                  selmon = m;
          117                  focus(NULL);
          118          }
          119 @@ -1340,6 +1364,7 @@ resizemouse(const Arg *arg)
          120          while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
          121          if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
          122                  sendmon(c, m);
          123 +                prevmon = selmon;
          124                  selmon = m;
          125                  focus(NULL);
          126          }
          127 @@ -1743,6 +1768,7 @@ toggleview(const Arg *arg)
          128          unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
          129  
          130          if (newtagset) {
          131 +                prevmon = NULL;
          132                  selmon->tagset[selmon->seltags] = newtagset;
          133                  focus(NULL);
          134                  arrange(selmon);
          135 @@ -2040,6 +2066,7 @@ view(const Arg *arg)
          136  {
          137          if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
          138                  return;
          139 +        prevmon = NULL;
          140          selmon->seltags ^= 1; /* toggle sel tagset */
          141          if (arg->ui & TAGMASK)
          142                  selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
          143 -- 
          144 2.25.1
          145