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>