dwm-focusfullscreen-20211121-95e7342.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-focusfullscreen-20211121-95e7342.diff (3259B)
       ---
            1 From 95e7342ae91d1011ea90ae1214cc0df1f44f7856 Mon Sep 17 00:00:00 2001
            2 From: Hai Nguyen <hhai2105@gmail.com>
            3 Date: Sun, 21 Nov 2021 00:43:21 -0500
            4 Subject: [PATCH] added togglefullscreen, modify focus(), unmanage() to be able
            5  to cycle while in fullscreen
            6 
            7 ---
            8  config.def.h |  4 ++--
            9  dwm.c        | 21 ++++++++++++++++++++-
           10  2 files changed, 22 insertions(+), 3 deletions(-)
           11 
           12 diff --git a/config.def.h b/config.def.h
           13 index a2ac963..4e13392 100644
           14 --- a/config.def.h
           15 +++ b/config.def.h
           16 @@ -35,7 +35,7 @@ static const Rule rules[] = {
           17  static const float mfact     = 0.55; /* factor of master area size [0.05..0.95] */
           18  static const int nmaster     = 1;    /* number of clients in master area */
           19  static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
           20 -static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
           21 +static const int lockfullscreen = 0; /* 1 will force focus on the fullscreen window */
           22  
           23  static const Layout layouts[] = {
           24          /* symbol     arrange function */
           25 @@ -75,10 +75,10 @@ static Key keys[] = {
           26          { MODKEY,                       XK_Tab,    view,           {0} },
           27          { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
           28          { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
           29 -        { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
           30          { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
           31          { MODKEY,                       XK_space,  setlayout,      {0} },
           32          { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
           33 +        { MODKEY,                                                XK_f,           togglefullscreen, {0} },
           34          { MODKEY,                       XK_0,      view,           {.ui = ~0 } },
           35          { MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
           36          { MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
           37 diff --git a/dwm.c b/dwm.c
           38 index 5e4d494..56d96a7 100644
           39 --- a/dwm.c
           40 +++ b/dwm.c
           41 @@ -212,6 +212,7 @@ static void tagmon(const Arg *arg);
           42  static void tile(Monitor *);
           43  static void togglebar(const Arg *arg);
           44  static void togglefloating(const Arg *arg);
           45 +static void togglefullscreen();
           46  static void toggletag(const Arg *arg);
           47  static void toggleview(const Arg *arg);
           48  static void unfocus(Client *c, int setfocus);
           49 @@ -802,7 +803,13 @@ focus(Client *c)
           50                  XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
           51                  XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
           52          }
           53 -        selmon->sel = c;
           54 +        if(selmon->sel && selmon->sel->isfullscreen){
           55 +                togglefullscreen();
           56 +                selmon->sel = c;
           57 +                togglefullscreen();
           58 +        }else{
           59 +                selmon->sel = c;
           60 +        }
           61          drawbars();
           62  }
           63  
           64 @@ -1722,6 +1729,14 @@ togglefloating(const Arg *arg)
           65          arrange(selmon);
           66  }
           67  
           68 +void
           69 +togglefullscreen()
           70 +{
           71 +        if (selmon->sel){
           72 +                setfullscreen(selmon->sel, !selmon->sel->isfullscreen);
           73 +        }
           74 +}
           75 +
           76  void
           77  toggletag(const Arg *arg)
           78  {
           79 @@ -1767,6 +1782,7 @@ unmanage(Client *c, int destroyed)
           80  {
           81          Monitor *m = c->mon;
           82          XWindowChanges wc;
           83 +        int fullscreen = (selmon->sel == c && selmon->sel->isfullscreen)?1:0;
           84  
           85          detach(c);
           86          detachstack(c);
           87 @@ -1783,6 +1799,9 @@ unmanage(Client *c, int destroyed)
           88          }
           89          free(c);
           90          focus(NULL);
           91 +        if(fullscreen){
           92 +                togglefullscreen();
           93 +        }
           94          updateclientlist();
           95          arrange(m);
           96  }
           97 -- 
           98 2.34.0
           99