URI:
       dwm: update fullscreen, add nocornermonocle and nobordermonocle - sites - public wiki contents of suckless.org
  HTML git clone git://git.suckless.org/sites
   DIR Log
   DIR Files
   DIR Refs
       ---
   DIR commit ec43643a1702093a1a8042db9e7ac656fb10bfcb
   DIR parent cb859dc1fe6a3e07c6521aac7980b4866946c219
  HTML Author: Savar <savar95x@gmail.com>
       Date:   Mon, 12 Jan 2026 18:16:29 +0530
       
       dwm: update fullscreen, add nocornermonocle and nobordermonocle
       
       Update 'fullscreen' to check active layout instead of bar visibility.
       This fixes a state desynchronization bug when toggling in Monocle mode +
       active bar.
       
       Add 'nocornermonocle' to set _NET_WM_STATE_MAXIMIZED_VERT and
       _NET_WM_STATE_MAXIMIZED_HORZ in monocle layout, allowing compositors
       like picom to disable rounded corners.
       
       Restore 'nobordermonocle', a missing patch by the original author.
       
       Diffstat:
         A dwm.suckless.org/patches/fullscree… |      60 +++++++++++++++++++++++++++++++
         M dwm.suckless.org/patches/fullscree… |       2 ++
         A dwm.suckless.org/patches/noborderm… |      39 +++++++++++++++++++++++++++++++
         A dwm.suckless.org/patches/noborderm… |      14 ++++++++++++++
         A dwm.suckless.org/patches/nocornerm… |      60 +++++++++++++++++++++++++++++++
         A dwm.suckless.org/patches/nocornerm… |      31 +++++++++++++++++++++++++++++++
       
       6 files changed, 206 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/dwm.suckless.org/patches/fullscreen/dwm-fullscreen-20260112-f4fdaff.diff b/dwm.suckless.org/patches/fullscreen/dwm-fullscreen-20260112-f4fdaff.diff
       @@ -0,0 +1,60 @@
       +From f4fdaff5cf85287ad11272902054cdbaf44535fe Mon Sep 17 00:00:00 2001
       +From: Savar <savar95x@gmail.com>
       +Date: Mon, 12 Jan 2026 17:26:41 +0530
       +Subject: [PATCH] fullscreen: fix toggle logic loop by checking active layout
       +
       +---
       + config.def.h |  1 +
       + dwm.c        | 17 +++++++++++++++++
       + 2 files changed, 18 insertions(+)
       +
       +diff --git a/config.def.h b/config.def.h
       +index 81c3fc0..ef36491 100644
       +--- a/config.def.h
       ++++ b/config.def.h
       +@@ -78,6 +78,7 @@ static const Key keys[] = {
       +         { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
       +         { MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
       +         { MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
       ++        { MODKEY|ShiftMask,             XK_f,      fullscreen,     {0} },
       +         { MODKEY,                       XK_space,  setlayout,      {0} },
       +         { MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
       +         { MODKEY,                       XK_0,      view,           {.ui = ~0 } },
       +diff --git a/dwm.c b/dwm.c
       +index 8f4fa75..a2237a9 100644
       +--- a/dwm.c
       ++++ b/dwm.c
       +@@ -199,6 +199,7 @@ static void sendmon(Client *c, Monitor *m);
       + static void setclientstate(Client *c, long state);
       + static void setfocus(Client *c);
       + static void setfullscreen(Client *c, int fullscreen);
       ++static void fullscreen(const Arg *arg);
       + static void setlayout(const Arg *arg);
       + static void setmfact(const Arg *arg);
       + static void setup(void);
       +@@ -1507,6 +1508,22 @@ setfullscreen(Client *c, int fullscreen)
       +         }
       + }
       + 
       ++Layout *last_layout;
       ++void
       ++fullscreen(const Arg *arg)
       ++{
       ++        if (selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] != &layouts[2]) {
       ++                for(last_layout = (Layout *)layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++);
       ++                setlayout(&((Arg) { .v = &layouts[2] }));
       ++                if (selmon->showbar)
       ++                        togglebar(arg);
       ++        } else {
       ++                setlayout(&((Arg) { .v = last_layout }));
       ++                if (!selmon->showbar)
       ++                        togglebar(arg);
       ++        }
       ++}
       ++
       + void
       + setlayout(const Arg *arg)
       + {
       +-- 
       +2.51.2
       +
   DIR diff --git a/dwm.suckless.org/patches/fullscreen/index.md b/dwm.suckless.org/patches/fullscreen/index.md
       @@ -7,8 +7,10 @@ Applies the monocle layout with the focused client on top and hides the bar. Whe
        
        Download
        --------
       +* [dwm-fullscreen-20260112-f4fdaff.diff](dwm-fullscreen-20260112-f4fdaff.diff) (2026-01-12) - fix loop bug by checking active layout instead of bar visibility
        * [dwm-fullscreen-6.2.diff](dwm-fullscreen-6.2.diff)
        
        Authors
        -------
        * Egidius Mysliwietz - <egidius [at] mysliwietz [dot] de>
       +* Savar - <savar95x [at] gmail [dot] com> (2026-01-12 update)
   DIR diff --git a/dwm.suckless.org/patches/nobordermonocle/dwm-nobordermonocle-20260112-798c5db.diff b/dwm.suckless.org/patches/nobordermonocle/dwm-nobordermonocle-20260112-798c5db.diff
       @@ -0,0 +1,39 @@
       +From 798c5dbd6f61eeade4737f9b5e87b1076bc3f414 Mon Sep 17 00:00:00 2001
       +From: Sebastian Jarsve <sebastianjarsve@gmail.com>
       +Date: Mon, 12 Jan 2026 17:28:18 +0530
       +Subject: [PATCH] nobordermonocle: remove borders from nonfloating clients in
       +
       +---
       + dwm.c | 9 +++++++++
       + 1 file changed, 9 insertions(+)
       +
       +diff --git a/dwm.c b/dwm.c
       +index 8f4fa75..e6c368e 100644
       +--- a/dwm.c
       ++++ b/dwm.c
       +@@ -316,6 +316,10 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact)
       +         int baseismin;
       +         Monitor *m = c->mon;
       + 
       ++        // return 1 if layout is monocle
       ++        if (&monocle == c->mon->lt[c->mon->sellt]->arrange)
       ++                return 1;
       ++
       +         /* set minimum possible */
       +         *w = MAX(1, *w);
       +         *h = MAX(1, *h);
       +@@ -1292,6 +1296,11 @@ resizeclient(Client *c, int x, int y, int w, int h)
       +         c->oldw = c->w; c->w = wc.width = w;
       +         c->oldh = c->h; c->h = wc.height = h;
       +         wc.border_width = c->bw;
       ++        if ((&monocle == c->mon->lt[c->mon->sellt]->arrange) && (!c->isfloating)) {
       ++                wc.border_width = 0;
       ++                c->w = wc.width += c->bw * 2;
       ++                c->h = wc.height += c->bw * 2;
       ++        }
       +         XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
       +         configure(c);
       +         XSync(dpy, False);
       +-- 
       +2.51.2
       +
   DIR diff --git a/dwm.suckless.org/patches/nobordermonocle/index.md b/dwm.suckless.org/patches/nobordermonocle/index.md
       @@ -0,0 +1,14 @@
       +nobordermonocle
       +===============
       +
       +Description
       +-----------
       +Removes the border for non-floating clients when in monocle layout.  
       +
       +Download
       +--------
       +* [dwm-nobordermonocle-20260112-798c5db.diff](dwm-nobordermonocle-20260112-798c5db.diff)
       +
       +Author
       +------
       +* Sebastian Jarsve <sebastianjarsve@gmail.com> (Uploaded by Savar)
   DIR diff --git a/dwm.suckless.org/patches/nocornermonocle/dwm-nocornermonocle-20260112-1dcbe74.diff b/dwm.suckless.org/patches/nocornermonocle/dwm-nocornermonocle-20260112-1dcbe74.diff
       @@ -0,0 +1,60 @@
       +From 1dcbe74def11a2e330e8972114bb5f6759d22663 Mon Sep 17 00:00:00 2001
       +From: Savar <savar95x@gmail.com>
       +Date: Mon, 12 Jan 2026 17:30:21 +0530
       +Subject: [PATCH] nocornermonocle: added EWMH support for monocle layout,
       + allowing users to disable corners in monocle while using picom
       +
       +---
       + dwm.c | 22 ++++++++++++++++++++++
       + 1 file changed, 22 insertions(+)
       +
       +diff --git a/dwm.c b/dwm.c
       +index 8f4fa75..4030b04 100644
       +--- a/dwm.c
       ++++ b/dwm.c
       +@@ -61,6 +61,7 @@ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
       + enum { SchemeNorm, SchemeSel }; /* color schemes */
       + enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
       +        NetWMFullscreen, NetActiveWindow, NetWMWindowType,
       ++       NetWMMaximizedVert, NetWMMaximizedHorz, /* -> no corner monocle */
       +        NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
       + enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
       + enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
       +@@ -388,6 +389,25 @@ arrange(Monitor *m)
       +         if (m) {
       +                 arrangemon(m);
       +                 restack(m);
       ++
       ++                /* no corner monocle */
       ++                Client *c;
       ++                int isMonocle = (m->lt[m->sellt]->arrange == monocle);
       ++                Atom data[2] = { netatom[NetWMMaximizedVert], netatom[NetWMMaximizedHorz] };
       ++
       ++                for (c = m->clients; c; c = c->next) {
       ++                        if (!ISVISIBLE(c)) continue;
       ++                        if (c->isfullscreen) continue;
       ++
       ++                        if (isMonocle) { /* set */
       ++                                XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
       ++                                                PropModeReplace, (unsigned char *)data, 2);
       ++                        } else { /* delete */
       ++                                XDeleteProperty(dpy, c->win, netatom[NetWMState]);
       ++                        }
       ++                }
       ++                /* end of no corner monocle logic */
       ++
       +         } else for (m = mons; m; m = m->next)
       +                 arrangemon(m);
       + }
       +@@ -1577,6 +1597,8 @@ setup(void)
       +         netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
       +         netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
       +         netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
       ++        netatom[NetWMMaximizedVert] = XInternAtom(dpy, "_NET_WM_STATE_MAXIMIZED_VERT", False); /* no corner monocle */
       ++        netatom[NetWMMaximizedHorz] = XInternAtom(dpy, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
       +         netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
       +         netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
       +         /* init cursors */
       +-- 
       +2.51.2
       +
   DIR diff --git a/dwm.suckless.org/patches/nocornermonocle/index.md b/dwm.suckless.org/patches/nocornermonocle/index.md
       @@ -0,0 +1,31 @@
       +nocornermonocle
       +===============
       +
       +Description
       +-----------
       +Adds EWMH support (`_NET_WM_STATE_MAXIMIZED_VERT` and  
       +`_NET_WM_STATE_MAXIMIZED_HORZ` atoms) for clients in monocle layout.  
       +This allows external compositors (like picom) to detect when a window  
       +is in monocle mode and disable visual effects, such as rounded corners.  
       +
       +Configuration
       +-------------
       +Add the following rule to your `picom.conf` to disable rounded corners  
       +for monocle windows:  
       +
       +```
       +        rules = (
       +                {
       +                        match = "_NET_WM_STATE@[0]:a = '_NET_WM_STATE_MAXIMIZED_VERT'";
       +                        corner-radius = 0;
       +                }
       +        )
       +```
       +
       +Download
       +--------
       +* [dwm-nocornermonocle-20260112-1dcbe74.diff](dwm-nocornermonocle-20260112-1dcbe74.diff)
       +
       +Author
       +------
       +* Savar <savar95x@gmail.com>