summaryrefslogtreecommitdiffhomepage
path: root/patch/bar_dwmblocks.c
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2021-04-14 10:42:52 +0200
committerbakkeby <[email protected]>2021-04-14 10:42:52 +0200
commit7efb64d68539666e8da8f7311e706954e6018fdb (patch)
tree983af71b683cd89ef62fd6e04f9bf1bb1d0707f2 /patch/bar_dwmblocks.c
parentbd5f5608a331b10746cde9c3ecbba24ae100f64d (diff)
downloaddwm-flexipatch-7efb64d68539666e8da8f7311e706954e6018fdb.tar.gz
dwm-flexipatch-7efb64d68539666e8da8f7311e706954e6018fdb.zip
Upgraded the dwmblocks patch for statuscmd which changes the signalling
mechanism from SIGUSR1 to SIGRTMIN which is likely to cause issues for those that already have a working setup. A compatibility option has been added which changes this back to SIGUSR1. Note that configuration was also changed. This was ref. reported issue #114.
Diffstat (limited to 'patch/bar_dwmblocks.c')
-rw-r--r--patch/bar_dwmblocks.c55
1 files changed, 37 insertions, 18 deletions
diff --git a/patch/bar_dwmblocks.c b/patch/bar_dwmblocks.c
index 442b0bc..cb40d10 100644
--- a/patch/bar_dwmblocks.c
+++ b/patch/bar_dwmblocks.c
@@ -1,31 +1,50 @@
-static int dwmblockssig;
-pid_t dwmblockspid = 0;
+static int statussig;
+pid_t statuspid = -1;
-int
-getdwmblockspid()
+pid_t
+getstatusbarpid()
{
- char buf[16];
- FILE *fp = popen("pidof -s dwmblocks", "r");
- if (fgets(buf, sizeof(buf), fp));
- pid_t pid = strtoul(buf, NULL, 10);
+ char buf[32], *str = buf, *c;
+ FILE *fp;
+
+ if (statuspid > 0) {
+ snprintf(buf, sizeof(buf), "/proc/%u/cmdline", statuspid);
+ if ((fp = fopen(buf, "r"))) {
+ fgets(buf, sizeof(buf), fp);
+ while ((c = strchr(str, '/')))
+ str = c + 1;
+ fclose(fp);
+ if (!strcmp(str, STATUSBAR))
+ return statuspid;
+ }
+ }
+ if (!(fp = popen("pidof -s "STATUSBAR, "r")))
+ return -1;
+ fgets(buf, sizeof(buf), fp);
pclose(fp);
- dwmblockspid = pid;
- return pid != 0 ? 0 : -1;
+ return strtol(buf, NULL, 10);
}
void
-sigdwmblocks(const Arg *arg)
+sigstatusbar(const Arg *arg)
{
union sigval sv;
- sv.sival_int = (dwmblockssig << 8) | arg->i;
- if (!dwmblockspid)
- if (getdwmblockspid() == -1)
- return;
- if (sigqueue(dwmblockspid, SIGUSR1, sv) == -1) {
+ if (!statussig)
+ return;
+ if ((statuspid = getstatusbarpid()) <= 0)
+ return;
+
+ #if BAR_DWMBLOCKS_SIGUSR1_PATCH
+ sv.sival_int = (statussig << 8) | arg->i;
+ if (sigqueue(statuspid, SIGUSR1, sv) == -1) {
if (errno == ESRCH) {
- if (!getdwmblockspid())
- sigqueue(dwmblockspid, SIGUSR1, sv);
+ if (!getstatusbarpid())
+ sigqueue(statuspid, SIGUSR1, sv);
}
}
+ #else
+ sv.sival_int = arg->i;
+ sigqueue(statuspid, SIGRTMIN+statussig, sv);
+ #endif // BAR_DWMBLOCKS_SIGUSR1_PATCH
} \ No newline at end of file