aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/swaylock/swaylock.h1
-rw-r--r--swaylock/main.c14
2 files changed, 13 insertions, 2 deletions
diff --git a/include/swaylock/swaylock.h b/include/swaylock/swaylock.h
index fbdd42a8..c8732cb7 100644
--- a/include/swaylock/swaylock.h
+++ b/include/swaylock/swaylock.h
@@ -54,6 +54,7 @@ struct swaylock_password {
};
struct swaylock_state {
+ struct loop *eventloop;
struct wl_display *display;
struct wl_compositor *compositor;
struct zwlr_layer_shell_v1 *layer_shell;
diff --git a/swaylock/main.c b/swaylock/main.c
index d1384c6f..27bcfe32 100644
--- a/swaylock/main.c
+++ b/swaylock/main.c
@@ -21,6 +21,7 @@
#include "pool-buffer.h"
#include "cairo.h"
#include "log.h"
+#include "loop.h"
#include "readline.h"
#include "stringop.h"
#include "util.h"
@@ -844,6 +845,10 @@ static int load_config(char *path, struct swaylock_state *state,
static struct swaylock_state state;
+static void display_in(int fd, short mask, void *data) {
+ wl_display_dispatch(state.display);
+}
+
int main(int argc, char **argv) {
wlr_log_init(WLR_DEBUG, NULL);
initialize_pw_backend();
@@ -946,9 +951,14 @@ int main(int argc, char **argv) {
daemonize();
}
+ state.eventloop = loop_create();
+ loop_add_fd(state.eventloop, wl_display_get_fd(state.display), POLL_IN,
+ display_in, NULL);
+
state.run_display = true;
- while (wl_display_dispatch(state.display) != -1 && state.run_display) {
- // This space intentionally left blank
+ while (state.run_display) {
+ wl_display_flush(state.display);
+ loop_poll(state.eventloop);
}
free(state.args.font);