diff options
-rw-r--r-- | swayidle/main.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/swayidle/main.c b/swayidle/main.c index 4e850c92..2e202ce1 100644 --- a/swayidle/main.c +++ b/swayidle/main.c | |||
@@ -366,15 +366,22 @@ static int handle_signal(int sig, void *data) { | |||
366 | } | 366 | } |
367 | 367 | ||
368 | static int display_event(int fd, uint32_t mask, void *data) { | 368 | static int display_event(int fd, uint32_t mask, void *data) { |
369 | if (mask & WL_EVENT_HANGUP) { | 369 | if ((mask & WL_EVENT_HANGUP) || (mask & WL_EVENT_ERROR)) { |
370 | sway_terminate(0); | 370 | sway_terminate(0); |
371 | } | 371 | } |
372 | if (wl_display_dispatch(state.display) < 0) { | 372 | |
373 | int count = 0; | ||
374 | if (mask & WL_EVENT_READABLE) { | ||
375 | count = wl_display_dispatch(state.display); | ||
376 | } else { | ||
377 | count = wl_display_dispatch_pending(state.display); | ||
378 | wl_display_flush(state.display); | ||
379 | } | ||
380 | if (count < 0) { | ||
373 | wlr_log_errno(WLR_ERROR, "wl_display_dispatch failed, exiting"); | 381 | wlr_log_errno(WLR_ERROR, "wl_display_dispatch failed, exiting"); |
374 | sway_terminate(0); | 382 | sway_terminate(0); |
375 | } | 383 | } |
376 | wl_display_flush(state.display); | 384 | return count; |
377 | return 0; | ||
378 | } | 385 | } |
379 | 386 | ||
380 | static void register_idle_timeout(void *item) { | 387 | static void register_idle_timeout(void *item) { |