sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit ec43643a1702093a1a8042db9e7ac656fb10bfcb
parent cb859dc1fe6a3e07c6521aac7980b4866946c219
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:
Adwm.suckless.org/patches/fullscreen/dwm-fullscreen-20260112-f4fdaff.diff | 60++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdwm.suckless.org/patches/fullscreen/index.md | 2++
Adwm.suckless.org/patches/nobordermonocle/dwm-nobordermonocle-20260112-798c5db.diff | 39+++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/nobordermonocle/index.md | 14++++++++++++++
Adwm.suckless.org/patches/nocornermonocle/dwm-nocornermonocle-20260112-1dcbe74.diff | 60++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/nocornermonocle/index.md | 31+++++++++++++++++++++++++++++++
6 files changed, 206 insertions(+), 0 deletions(-)

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 + 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) 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 + 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) 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 + 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>