diff options
Diffstat (limited to 'swaylock/main.c')
-rw-r--r-- | swaylock/main.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/swaylock/main.c b/swaylock/main.c index f88663c2..9b74b671 100644 --- a/swaylock/main.c +++ b/swaylock/main.c | |||
@@ -2,6 +2,7 @@ | |||
2 | #define _POSIX_C_SOURCE 200112L | 2 | #define _POSIX_C_SOURCE 200112L |
3 | #include <assert.h> | 3 | #include <assert.h> |
4 | #include <ctype.h> | 4 | #include <ctype.h> |
5 | #include <errno.h> | ||
5 | #include <fcntl.h> | 6 | #include <fcntl.h> |
6 | #include <getopt.h> | 7 | #include <getopt.h> |
7 | #include <stdbool.h> | 8 | #include <stdbool.h> |
@@ -844,7 +845,9 @@ static int load_config(char *path, struct swaylock_state *state, | |||
844 | static struct swaylock_state state; | 845 | static struct swaylock_state state; |
845 | 846 | ||
846 | static void display_in(int fd, short mask, void *data) { | 847 | static void display_in(int fd, short mask, void *data) { |
847 | wl_display_dispatch(state.display); | 848 | if (wl_display_dispatch(state.display) == -1) { |
849 | state.run_display = false; | ||
850 | } | ||
848 | } | 851 | } |
849 | 852 | ||
850 | int main(int argc, char **argv) { | 853 | int main(int argc, char **argv) { |
@@ -928,6 +931,11 @@ int main(int argc, char **argv) { | |||
928 | } | 931 | } |
929 | 932 | ||
930 | zwlr_input_inhibit_manager_v1_get_inhibitor(state.input_inhibit_manager); | 933 | zwlr_input_inhibit_manager_v1_get_inhibitor(state.input_inhibit_manager); |
934 | if (wl_display_roundtrip(state.display) == -1) { | ||
935 | wlr_log(WLR_ERROR, "Exiting - failed to inhibit input:" | ||
936 | " is another lockscreen already running?"); | ||
937 | return 2; | ||
938 | } | ||
931 | 939 | ||
932 | if (state.zxdg_output_manager) { | 940 | if (state.zxdg_output_manager) { |
933 | struct swaylock_surface *surface; | 941 | struct swaylock_surface *surface; |
@@ -959,7 +967,10 @@ int main(int argc, char **argv) { | |||
959 | 967 | ||
960 | state.run_display = true; | 968 | state.run_display = true; |
961 | while (state.run_display) { | 969 | while (state.run_display) { |
962 | wl_display_flush(state.display); | 970 | errno = 0; |
971 | if (wl_display_flush(state.display) == -1 && errno != EAGAIN) { | ||
972 | break; | ||
973 | } | ||
963 | loop_poll(state.eventloop); | 974 | loop_poll(state.eventloop); |
964 | } | 975 | } |
965 | 976 | ||