commit 1e20c8bda53bd22d2540abfc39801f81d8f01b49
parent 3c8bab4f472138c58a5f44e22022b7ee5234cf1e
Author: Nihal Jere <nihal@nihaljere.xyz>
Date: Sat, 21 Mar 2020 15:56:08 -0500
[dwm][patch] fsignal: window titles now update properly
Diffstat:
3 files changed, 116 insertions(+), 98 deletions(-)
diff --git a/dwm.suckless.org/patches/fsignal/dwm-fsignal-6.1.diff b/dwm.suckless.org/patches/fsignal/dwm-fsignal-6.1.diff
@@ -1,97 +0,0 @@
-diff -up dwm-6.1/config.def.h dwm-6.1_FSIGNAL/config.def.h
---- dwm-6.1/config.def.h 2015-11-08 23:11:48.000000000 +0100
-+++ dwm-6.1_FSIGNAL/config.def.h 2018-03-29 21:34:43.218114924 +0200
-@@ -111,3 +111,10 @@ static Button buttons[] = {
- { ClkTagBar, MODKEY, Button3, toggletag, {0} },
- };
-
-+/* signal definitions */
-+/* signum must be greater than 0 */
-+/* trigger signals using `xsetroot -name "fsignal:<signum>"` */
-+static Signal signals[] = {
-+ /* signum function argument */
-+ { 1, setlayout, {.v = 0} },
-+};
-Only in dwm-6.1_FSIGNAL/: config.h
-diff -up dwm-6.1/dwm.c dwm-6.1_FSIGNAL/dwm.c
---- dwm-6.1/dwm.c 2015-11-08 23:11:48.000000000 +0100
-+++ dwm-6.1_FSIGNAL/dwm.c 2018-03-29 21:22:07.697560231 +0200
-@@ -107,6 +107,12 @@ typedef struct {
- } Key;
-
- typedef struct {
-+ unsigned int signum;
-+ void (*func)(const Arg *);
-+ const Arg arg;
-+} Signal;
-+
-+typedef struct {
- const char *symbol;
- void (*arrange)(Monitor *);
- } Layout;
-@@ -177,6 +183,7 @@ static void grabbuttons(Client *c, int f
- static void grabkeys(void);
- static void incnmaster(const Arg *arg);
- static void keypress(XEvent *e);
-+static int fake_signal(void);
- static void killclient(const Arg *arg);
- static void manage(Window w, XWindowAttributes *wa);
- static void mappingnotify(XEvent *e);
-@@ -1013,6 +1020,47 @@ keypress(XEvent *e)
- keys[i].func(&(keys[i].arg));
- }
-
-+int
-+fake_signal(void)
-+{
-+ char fsignal[256];
-+ char indicator[9] = "fsignal:";
-+ char str_signum[16];
-+ int i, v, signum;
-+ size_t len_fsignal, len_indicator = strlen(indicator);
-+
-+ // Get root name property
-+ if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) {
-+ len_fsignal = strlen(fsignal);
-+
-+ // Check if this is indeed a fake signal
-+ if (len_indicator > len_fsignal ? 0 : strncmp(indicator, fsignal, len_indicator) == 0) {
-+ memcpy(str_signum, &fsignal[len_indicator], len_fsignal - len_indicator);
-+ str_signum[len_fsignal - len_indicator] = '\0';
-+
-+ // Convert string value into managable integer
-+ for (i = signum = 0; i < strlen(str_signum); i++) {
-+ v = str_signum[i] - '0';
-+ if (v >= 0 && v <= 9) {
-+ signum = signum * 10 + v;
-+ }
-+ }
-+
-+ // Check if a signal was found, and if so handle it
-+ if (signum)
-+ for (i = 0; i < LENGTH(signals); i++)
-+ if (signum == signals[i].signum && signals[i].func)
-+ signals[i].func(&(signals[i].arg));
-+
-+ // A fake signal was sent
-+ return 1;
-+ }
-+ }
-+
-+ // No fake signal was sent, so proceed with update
-+ return 0;
-+}
-+
- void
- killclient(const Arg *arg)
- {
-@@ -1233,7 +1281,8 @@ propertynotify(XEvent *e)
- XPropertyEvent *ev = &e->xproperty;
-
- if ((ev->window == root) && (ev->atom == XA_WM_NAME))
-- updatestatus();
-+ if (!fake_signal())
-+ updatestatus();
- else if (ev->state == PropertyDelete)
- return; /* ignore */
- else if ((c = wintoclient(ev->window))) {
diff --git a/dwm.suckless.org/patches/fsignal/dwm-fsignal-6.2.diff b/dwm.suckless.org/patches/fsignal/dwm-fsignal-6.2.diff
@@ -0,0 +1,114 @@
+From e7f523c898983c84ba3102675662dc33cbb5573e Mon Sep 17 00:00:00 2001
+From: Nihal Jere <noocsharp@gmail.com>
+Date: Sat, 21 Mar 2020 15:50:00 -0500
+Subject: [PATCH] fsignal
+
+---
+ config.def.h | 7 +++++++
+ dwm.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 59 insertions(+), 2 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 1c0b587..8d2e6e9 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -113,3 +113,10 @@ static Button buttons[] = {
+ { ClkTagBar, MODKEY, Button3, toggletag, {0} },
+ };
+
++/* signal definitions */
++/* signum must be greater than 0 */
++/* trigger signals using `xsetroot -name "fsignal:<signum>"` */
++static Signal signals[] = {
++ /* signum function argument */
++ { 1, setlayout, {.v = 0} },
++};
+diff --git a/dwm.c b/dwm.c
+index 4465af1..db2ee08 100644
+--- a/dwm.c
++++ b/dwm.c
+@@ -106,6 +106,12 @@ typedef struct {
+ const Arg arg;
+ } Key;
+
++typedef struct {
++ unsigned int signum;
++ void (*func)(const Arg *);
++ const Arg arg;
++} Signal;
++
+ typedef struct {
+ const char *symbol;
+ void (*arrange)(Monitor *);
+@@ -176,6 +182,7 @@ static void grabbuttons(Client *c, int focused);
+ static void grabkeys(void);
+ static void incnmaster(const Arg *arg);
+ static void keypress(XEvent *e);
++static int fake_signal(void);
+ static void killclient(const Arg *arg);
+ static void manage(Window w, XWindowAttributes *wa);
+ static void mappingnotify(XEvent *e);
+@@ -998,6 +1005,47 @@ keypress(XEvent *e)
+ keys[i].func(&(keys[i].arg));
+ }
+
++int
++fake_signal(void)
++{
++ char fsignal[256];
++ char indicator[9] = "fsignal:";
++ char str_signum[16];
++ int i, v, signum;
++ size_t len_fsignal, len_indicator = strlen(indicator);
++
++ // Get root name property
++ if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) {
++ len_fsignal = strlen(fsignal);
++
++ // Check if this is indeed a fake signal
++ if (len_indicator > len_fsignal ? 0 : strncmp(indicator, fsignal, len_indicator) == 0) {
++ memcpy(str_signum, &fsignal[len_indicator], len_fsignal - len_indicator);
++ str_signum[len_fsignal - len_indicator] = '\0';
++
++ // Convert string value into managable integer
++ for (i = signum = 0; i < strlen(str_signum); i++) {
++ v = str_signum[i] - '0';
++ if (v >= 0 && v <= 9) {
++ signum = signum * 10 + v;
++ }
++ }
++
++ // Check if a signal was found, and if so handle it
++ if (signum)
++ for (i = 0; i < LENGTH(signals); i++)
++ if (signum == signals[i].signum && signals[i].func)
++ signals[i].func(&(signals[i].arg));
++
++ // A fake signal was sent
++ return 1;
++ }
++ }
++
++ // No fake signal was sent, so proceed with update
++ return 0;
++}
++
+ void
+ killclient(const Arg *arg)
+ {
+@@ -1215,8 +1263,10 @@ propertynotify(XEvent *e)
+ Window trans;
+ XPropertyEvent *ev = &e->xproperty;
+
+- if ((ev->window == root) && (ev->atom == XA_WM_NAME))
+- updatestatus();
++ if ((ev->window == root) && (ev->atom == XA_WM_NAME)) {
++ if (!fake_signal())
++ updatestatus();
++ }
+ else if (ev->state == PropertyDelete)
+ return; /* ignore */
+ else if ((c = wintoclient(ev->window))) {
+--
+2.25.1
+
diff --git a/dwm.suckless.org/patches/fsignal/index.md b/dwm.suckless.org/patches/fsignal/index.md
@@ -35,8 +35,9 @@ This can then be triggered through dmenu with this script:
Download
--------
-* [dwm-fsignal-6.1.diff](dwm-fsignal-6.1.diff)
+* [dwm-fsignal-6.2.diff](dwm-fsignal-6.2.diff)
Authors
-------
* Chris Noxz - <chris@noxz.tech>
+* Nihal Jere <nihal@nihaljere.xyz>