diff options
Diffstat (limited to 'swaybar/bar.c')
-rw-r--r-- | swaybar/bar.c | 10 |
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) { | |||
274 | 274 | ||
275 | static void respond_command(int fd, short mask, void *_bar) { | 275 | static void respond_command(int fd, short mask, void *_bar) { |
276 | struct bar *bar = (struct bar *)_bar; | 276 | struct bar *bar = (struct bar *)_bar; |
277 | if (mask & POLLHUP) { | ||
278 | // Something's wrong with the command | ||
279 | handle_status_hup(bar->status); | ||
280 | dirty = true; | ||
281 | // We will stop watching the status line so swaybar won't | ||
282 | // flood the CPU with its HUPs | ||
283 | remove_event(fd); | ||
284 | } | ||
277 | dirty = handle_status_line(bar); | 285 | dirty = handle_status_line(bar); |
278 | } | 286 | } |
279 | 287 | ||
@@ -286,7 +294,7 @@ static void respond_output(int fd, short mask, void *_output) { | |||
286 | 294 | ||
287 | void bar_run(struct bar *bar) { | 295 | void bar_run(struct bar *bar) { |
288 | add_event(bar->ipc_event_socketfd, POLLIN, respond_ipc, bar); | 296 | add_event(bar->ipc_event_socketfd, POLLIN, respond_ipc, bar); |
289 | add_event(bar->status_read_fd, POLLIN, respond_command, bar); | 297 | add_event(bar->status_read_fd, POLLIN | POLLHUP, respond_command, bar); |
290 | 298 | ||
291 | int i; | 299 | int i; |
292 | for (i = 0; i < bar->outputs->length; ++i) { | 300 | for (i = 0; i < bar->outputs->length; ++i) { |