From ff41f8e71ec6fafdcc8fa25367d5ad01dbdd8519 Mon Sep 17 00:00:00 2001 From: Luke Smith Date: Mon, 4 May 2020 15:27:46 -0400 Subject: statuscmd programs forked --- dwmblocks.c | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) (limited to 'dwmblocks.c') diff --git a/dwmblocks.c b/dwmblocks.c index de872bf..64c2da2 100644 --- a/dwmblocks.c +++ b/dwmblocks.c @@ -36,8 +36,6 @@ static int screen; static Window root; static char statusbar[LENGTH(blocks)][CMDLENGTH] = {0}; static char statusstr[2][256]; -static char exportstring[CMDLENGTH + 22] = "export BLOCK_BUTTON=-;"; -static int button = 0; static int statusContinue = 1; static void (*writestatus) () = setroot; @@ -71,21 +69,8 @@ void getcmd(const Block *block, char *output) output++; } strcpy(output, block->icon); - char* cmd; - FILE *cmdf; - if (button) - { - cmd = strcat(exportstring, block->command); - cmd[20] = '0' + button; - button = 0; - cmdf = popen(cmd,"r"); - cmd[22] = '\0'; - } - else - { - cmd = block->command; - cmdf = popen(cmd,"r"); - } + char *cmd = block->command; + FILE *cmdf = popen(cmd,"r"); if (!cmdf) return; char c; @@ -136,6 +121,7 @@ void setupsignals() sa.sa_sigaction = buttonhandler; sa.sa_flags = SA_SIGINFO; sigaction(SIGUSR1, &sa, NULL); + signal(SIGCHLD, SIG_IGN); } #endif @@ -198,9 +184,29 @@ void sighandler(int signum) void buttonhandler(int sig, siginfo_t *si, void *ucontext) { - button = si->si_value.sival_int & 0xff; - getsigcmds(si->si_value.sival_int >> 8); + int button = si->si_value.sival_int & 0xff; + sig = si->si_value.sival_int >> 8; + getsigcmds(sig); writestatus(); + if (fork() == 0) + { + static char exportstring[CMDLENGTH + 22] = "export BLOCK_BUTTON=-;"; + const Block *current; + int i; + for (i = 0; i < LENGTH(blocks); i++) + { + current = blocks + i; + if (current->signal == sig) + break; + } + char *cmd = strcat(exportstring, blocks[i].command); + cmd[20] = '0' + button; + char *command[] = { "/bin/sh", "-c", cmd, NULL }; + setsid(); + execvp(command[0], command); + exit(EXIT_SUCCESS); + cmd[22] = '\0'; + } } #endif -- cgit v1.2.3-13-gbd6f