From 7524ccd1e5eb69ab177cb7f0bc4044994464be6e Mon Sep 17 00:00:00 2001 From: Luke Smith Date: Fri, 28 Aug 2020 19:27:12 -0400 Subject: update and fork fix --- dwmblocks.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'dwmblocks.c') diff --git a/dwmblocks.c b/dwmblocks.c index d135a7d..68267d7 100644 --- a/dwmblocks.c +++ b/dwmblocks.c @@ -193,6 +193,7 @@ void sighandler(int signum) void buttonhandler(int sig, siginfo_t *si, void *ucontext) { char button[2] = {'0' + si->si_value.sival_int & 0xff, '\0'}; + pid_t process_id = getpid(); sig = si->si_value.sival_int >> 8; if (fork() == 0) { @@ -203,14 +204,14 @@ void buttonhandler(int sig, siginfo_t *si, void *ucontext) if (current->signal == sig) break; } - char *command[] = { "/bin/sh", "-c", current->command, NULL }; + char shcmd[1024]; + sprintf(shcmd,"%s && kill -%d %d",current->command, current->signal+34,process_id); + char *command[] = { "/bin/sh", "-c", shcmd, NULL }; setenv("BLOCK_BUTTON", button, 1); setsid(); execvp(command[0], command); exit(EXIT_SUCCESS); } - getsigcmds(sig); - writestatus(); } #endif -- cgit v1.2.3 From e7b3d9d9d6ca1ac2e8efc7f009bd0ed9ba5f18dc Mon Sep 17 00:00:00 2001 From: Federico Ciuffardi Date: Sun, 7 Feb 2021 03:57:01 -0300 Subject: Mitigates disapearing blocks on fast mouse interaction --- dwmblocks.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'dwmblocks.c') diff --git a/dwmblocks.c b/dwmblocks.c index 68267d7..12648ef 100644 --- a/dwmblocks.c +++ b/dwmblocks.c @@ -13,6 +13,7 @@ typedef struct { unsigned int interval; unsigned int signal; } Block; +char** last_updates; void sighandler(int num); void buttonhandler(int sig, siginfo_t *si, void *ucontext); void replace(char *str, char old, char new); @@ -61,7 +62,7 @@ void remove_all(char *str, char to_remove) { } //opens process *cmd and stores output in *output -void getcmd(const Block *block, char *output) +void getcmd(const Block *block, char* last_update , char *output) { if (block->signal) { @@ -77,10 +78,15 @@ void getcmd(const Block *block, char *output) int i = strlen(block->icon); fgets(output+i, CMDLENGTH-(strlen(delim)+1), cmdf); remove_all(output, '\n'); + if(i == strlen(output)) + strcpy(output+i, last_update); + else + strcpy(last_update, output+i); + i = strlen(output); - if ((i > 0 && block != &blocks[LENGTH(blocks) - 1])) - strcat(output, delim); - i+=strlen(delim); + if ((i > 0 && block != &blocks[LENGTH(blocks) - 1])) + strcat(output, delim); + i+=strlen(delim); output[i++] = '\0'; pclose(cmdf); } @@ -92,7 +98,7 @@ void getcmds(int time) { current = blocks + i; if ((current->interval != 0 && time % current->interval == 0) || time == -1) - getcmd(current,statusbar[i]); + getcmd(current,last_updates[i],statusbar[i]); } } @@ -104,7 +110,7 @@ void getsigcmds(int signal) { current = blocks + i; if (current->signal == signal) - getcmd(current,statusbar[i]); + getcmd(current,last_updates[i],statusbar[i]); } } @@ -172,6 +178,11 @@ void statusloop() #ifndef __OpenBSD__ setupsignals(); #endif + last_updates = malloc(sizeof(char*) * LENGTH(blocks)); + for(int i = 0; i < LENGTH(blocks); i++) { + last_updates[i] = malloc(sizeof(char) * CMDLENGTH); + strcpy(last_updates[i],""); + } int i = 0; getcmds(-1); while(statusContinue) @@ -218,6 +229,10 @@ void buttonhandler(int sig, siginfo_t *si, void *ucontext) void termhandler(int signum) { + for(int i = 0; i < LENGTH(blocks); i++) { + free(last_updates[i]); + } + free(last_updates); statusContinue = 0; exit(0); } -- cgit v1.2.3 From 9cd6f02395b5420d72e36ecadb612fc5b1537e56 Mon Sep 17 00:00:00 2001 From: Nihal Jere Date: Fri, 19 Feb 2021 15:04:06 -0600 Subject: ignore real-time signals by default, unless explicitly set --- dwmblocks.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'dwmblocks.c') diff --git a/dwmblocks.c b/dwmblocks.c index 68267d7..18f58fb 100644 --- a/dwmblocks.c +++ b/dwmblocks.c @@ -111,6 +111,10 @@ void getsigcmds(int signal) void setupsignals() { struct sigaction sa; + + for(int i = SIGRTMIN; i <= SIGRTMAX; i++) + signal(i, SIG_IGN); + for(int i = 0; i < LENGTH(blocks); i++) { if (blocks[i].signal > 0) -- cgit v1.2.3 From 826e3f1a990efb93f9bbf5d83512e63fc84007fe Mon Sep 17 00:00:00 2001 From: Luke Smith Date: Tue, 2 Mar 2021 09:22:17 -0500 Subject: Revert "Mitigates disappearing blocks on fast mouse interaction" --- dwmblocks.c | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) (limited to 'dwmblocks.c') diff --git a/dwmblocks.c b/dwmblocks.c index 5021af1..18f58fb 100644 --- a/dwmblocks.c +++ b/dwmblocks.c @@ -13,7 +13,6 @@ typedef struct { unsigned int interval; unsigned int signal; } Block; -char** last_updates; void sighandler(int num); void buttonhandler(int sig, siginfo_t *si, void *ucontext); void replace(char *str, char old, char new); @@ -62,7 +61,7 @@ void remove_all(char *str, char to_remove) { } //opens process *cmd and stores output in *output -void getcmd(const Block *block, char* last_update , char *output) +void getcmd(const Block *block, char *output) { if (block->signal) { @@ -78,15 +77,10 @@ void getcmd(const Block *block, char* last_update , char *output) int i = strlen(block->icon); fgets(output+i, CMDLENGTH-(strlen(delim)+1), cmdf); remove_all(output, '\n'); - if(i == strlen(output)) - strcpy(output+i, last_update); - else - strcpy(last_update, output+i); - i = strlen(output); - if ((i > 0 && block != &blocks[LENGTH(blocks) - 1])) - strcat(output, delim); - i+=strlen(delim); + if ((i > 0 && block != &blocks[LENGTH(blocks) - 1])) + strcat(output, delim); + i+=strlen(delim); output[i++] = '\0'; pclose(cmdf); } @@ -98,7 +92,7 @@ void getcmds(int time) { current = blocks + i; if ((current->interval != 0 && time % current->interval == 0) || time == -1) - getcmd(current,last_updates[i],statusbar[i]); + getcmd(current,statusbar[i]); } } @@ -110,7 +104,7 @@ void getsigcmds(int signal) { current = blocks + i; if (current->signal == signal) - getcmd(current,last_updates[i],statusbar[i]); + getcmd(current,statusbar[i]); } } @@ -182,11 +176,6 @@ void statusloop() #ifndef __OpenBSD__ setupsignals(); #endif - last_updates = malloc(sizeof(char*) * LENGTH(blocks)); - for(int i = 0; i < LENGTH(blocks); i++) { - last_updates[i] = malloc(sizeof(char) * CMDLENGTH); - strcpy(last_updates[i],""); - } int i = 0; getcmds(-1); while(statusContinue) @@ -233,10 +222,6 @@ void buttonhandler(int sig, siginfo_t *si, void *ucontext) void termhandler(int signum) { - for(int i = 0; i < LENGTH(blocks); i++) { - free(last_updates[i]); - } - free(last_updates); statusContinue = 0; exit(0); } -- cgit v1.2.3