diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-11-01 23:57:13 +0000 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2018-11-24 23:10:05 +0100 |
commit | 6358de382793a5e28f445c87bb3baf138f4810af (patch) | |
tree | 11d31aea58fa68e83fd57b262510a24bb52a10b5 /swayidle/main.c | |
parent | swayidle: when acquiring sleep lock, initialize and free variables properly (diff) | |
download | sway-6358de382793a5e28f445c87bb3baf138f4810af.tar.gz sway-6358de382793a5e28f445c87bb3baf138f4810af.tar.zst sway-6358de382793a5e28f445c87bb3baf138f4810af.zip |
swaylock: fix display_event to not block
Diffstat (limited to 'swayidle/main.c')
-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) { |