summaryrefslogtreecommitdiffhomepage
path: root/patch/fsignal.c
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2020-02-02 11:40:24 +0100
committerbakkeby <[email protected]>2020-02-02 11:41:34 +0100
commit4ddfdab30ef77637b1a112dc181606c1260f84af (patch)
treec99c33a0db63ab5fb894cd53db288bf8a873e4f3 /patch/fsignal.c
parent839232393851d437c56248b5a138eb67ab04f129 (diff)
downloaddwm-flexipatch-4ddfdab30ef77637b1a112dc181606c1260f84af.tar.gz
dwm-flexipatch-4ddfdab30ef77637b1a112dc181606c1260f84af.zip
Adding fsignal patch and moved dwmc signal settings to config.def.h
Diffstat (limited to 'patch/fsignal.c')
-rw-r--r--patch/fsignal.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/patch/fsignal.c b/patch/fsignal.c
new file mode 100644
index 0000000..8ae237b
--- /dev/null
+++ b/patch/fsignal.c
@@ -0,0 +1,40 @@
+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;
+} \ No newline at end of file