diff options
Diffstat (limited to 'patches')
| -rw-r--r-- | patches/dwm-preserveonrestart-6.3.diff | 118 | 
1 files changed, 0 insertions, 118 deletions
| diff --git a/patches/dwm-preserveonrestart-6.3.diff b/patches/dwm-preserveonrestart-6.3.diff deleted file mode 100644 index 079cf05..0000000 --- a/patches/dwm-preserveonrestart-6.3.diff +++ /dev/null @@ -1,118 +0,0 @@ -From 713fa8650f5a20006451ebcccf57a4512e83bae8 Mon Sep 17 00:00:00 2001 -From: Arda Atci <arda@phytech.io> -Date: Wed, 18 May 2022 17:23:16 +0300 -Subject: [PATCH] preserve clients on old tags when renewing dwm - -By default, when dwm is recompiled-restarted all clients will -lose it's current tag and collapse to first tag. This patch preserves -clients on old tags, however note that layout order is not preserved. - ---- - dwm.c | 38 +++++++++++++++++++++++++++++++++++++- - 1 file changed, 37 insertions(+), 1 deletion(-) - -diff --git a/dwm.c b/dwm.c -index a96f33c..a12e0bd 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -62,7 +62,7 @@ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ - enum { SchemeNorm, SchemeSel }; /* color schemes */ - enum { NetSupported, NetWMName, NetWMState, NetWMCheck, -        NetWMFullscreen, NetActiveWindow, NetWMWindowType, --       NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */ -+       NetWMWindowTypeDialog, NetClientList, NetClientInfo, NetLast }; /* EWMH atoms */ - enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */ - enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, -        ClkClientWin, ClkRootWin, ClkLast }; /* clicks */ -@@ -198,6 +198,7 @@ static void scan(void); - static int sendevent(Client *c, Atom proto); - static void sendmon(Client *c, Monitor *m); - static void setclientstate(Client *c, long state); -+static void setclienttagprop(Client *c); - static void setfocus(Client *c); - static void setfullscreen(Client *c, int fullscreen); - static void setlayout(const Arg *arg); -@@ -1060,6 +1061,26 @@ manage(Window w, XWindowAttributes *wa) - 	updatewindowtype(c); - 	updatesizehints(c); - 	updatewmhints(c); -+	{ -+		int format; -+		unsigned long *data, n, extra; -+		Monitor *m; -+		Atom atom; -+		if (XGetWindowProperty(dpy, c->win, netatom[NetClientInfo], 0L, 2L, False, XA_CARDINAL, -+				&atom, &format, &n, &extra, (unsigned char **)&data) == Success && n == 2) { -+			c->tags = *data; -+			for (m = mons; m; m = m->next) { -+				if (m->num == *(data+1)) { -+					c->mon = m; -+					break; -+				} -+			} -+		} -+		if (n > 0) -+			XFree(data); -+	} -+	setclienttagprop(c); -+ - 	XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask); - 	grabbuttons(c, 0); - 	if (!c->isfloating) -@@ -1423,6 +1444,7 @@ sendmon(Client *c, Monitor *m) - 	c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ - 	attach(c); - 	attachstack(c); -+	setclienttagprop(c); - 	focus(NULL); - 	arrange(NULL); - } -@@ -1566,6 +1588,7 @@ setup(void) - 	netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); - 	netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False); - 	netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False); -+	netatom[NetClientInfo] = XInternAtom(dpy, "_NET_CLIENT_INFO", False); - 	/* init cursors */ - 	cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr); - 	cursor[CurResize] = drw_cur_create(drw, XC_sizing); -@@ -1589,6 +1612,7 @@ setup(void) - 	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, - 		PropModeReplace, (unsigned char *) netatom, NetLast); - 	XDeleteProperty(dpy, root, netatom[NetClientList]); -+	XDeleteProperty(dpy, root, netatom[NetClientInfo]); - 	/* select events */ - 	wa.cursor = cursor[CurNormal]->cursor; - 	wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask -@@ -1656,11 +1680,22 @@ spawn(const Arg *arg) - 	} - } - -+void -+setclienttagprop(Client *c) -+{ -+	long data[] = { (long) c->tags, (long) c->mon->num }; -+	XChangeProperty(dpy, c->win, netatom[NetClientInfo], XA_CARDINAL, 32, -+			PropModeReplace, (unsigned char *) data, 2); -+} -+ - void - tag(const Arg *arg) - { -+	Client *c; - 	if (selmon->sel && arg->ui & TAGMASK) { -+		c = selmon->sel; - 		selmon->sel->tags = arg->ui & TAGMASK; -+		setclienttagprop(c); - 		focus(NULL); - 		arrange(selmon); - 	} -@@ -1735,6 +1770,7 @@ toggletag(const Arg *arg) - 	newtags = selmon->sel->tags ^ (arg->ui & TAGMASK); - 	if (newtags) { - 		selmon->sel->tags = newtags; -+		setclienttagprop(selmon->sel); - 		focus(NULL); - 		arrange(selmon); - 	} --- -2.36.1 | 
