diff options
| author | bakkeby <[email protected]> | 2020-02-02 11:40:24 +0100 |
|---|---|---|
| committer | bakkeby <[email protected]> | 2020-02-02 11:41:34 +0100 |
| commit | 4ddfdab30ef77637b1a112dc181606c1260f84af (patch) | |
| tree | c99c33a0db63ab5fb894cd53db288bf8a873e4f3 /patch/fsignal.c | |
| parent | 839232393851d437c56248b5a138eb67ab04f129 (diff) | |
| download | dwm-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.c | 40 |
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 |
