aboutsummaryrefslogtreecommitdiff
path: root/swaybar/bar.c
diff options
context:
space:
mode:
Diffstat (limited to 'swaybar/bar.c')
-rw-r--r--swaybar/bar.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/swaybar/bar.c b/swaybar/bar.c
index 6db556a8..deddf971 100644
--- a/swaybar/bar.c
+++ b/swaybar/bar.c
@@ -274,6 +274,14 @@ static void respond_ipc(int fd, short mask, void *_bar) {
static void respond_command(int fd, short mask, void *_bar) {
struct bar *bar = (struct bar *)_bar;
+ if (mask & POLLHUP) {
+ // Something's wrong with the command
+ handle_status_hup(bar->status);
+ dirty = true;
+ // We will stop watching the status line so swaybar won't
+ // flood the CPU with its HUPs
+ remove_event(fd);
+ }
dirty = handle_status_line(bar);
}
@@ -286,7 +294,7 @@ static void respond_output(int fd, short mask, void *_output) {
void bar_run(struct bar *bar) {
add_event(bar->ipc_event_socketfd, POLLIN, respond_ipc, bar);
- add_event(bar->status_read_fd, POLLIN, respond_command, bar);
+ add_event(bar->status_read_fd, POLLIN | POLLHUP, respond_command, bar);
int i;
for (i = 0; i < bar->outputs->length; ++i) {