diff options
author | Kevin Hamacher <kevin.hamacher@rub.de> | 2016-04-03 00:33:15 +0200 |
---|---|---|
committer | Kevin Hamacher <kevin.hamacher@rub.de> | 2016-04-03 00:50:34 +0200 |
commit | 3b0d9de2701478c795aceed2ee2c19c6f82c1955 (patch) | |
tree | 6b9119c1bcb1447a60042e1d46585b05d18c1fe2 | |
parent | ef45bac131c2197e2d4e60ffe72f9575c88a42a0 (diff) |
Improve swaylock event flushing
-rw-r--r-- | swaylock/main.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/swaylock/main.c b/swaylock/main.c index 8e920fce..57fe0321 100644 --- a/swaylock/main.c +++ b/swaylock/main.c @@ -21,6 +21,14 @@ struct registry *registry; struct render_data render_data; +void wl_dispatch_events() { + wl_display_flush(registry->display); + if (wl_display_dispatch(registry->display) == -1) { + sway_log(L_ERROR, "failed to run wl_display_dispatch"); + exit(1); + } +} + void sigalarm_handler(int sig) { signal(SIGALRM, SIG_IGN); // Hide typing indicator @@ -104,7 +112,6 @@ bool verify_password() { } void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) { - int i; int redraw_screen = 0; if (state == WL_KEYBOARD_KEY_STATE_PRESSED) { switch (sym) { @@ -113,14 +120,8 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod render(&render_data); // Make sure our render call will actually be displayed on the screen - wl_display_flush(registry->display); + wl_dispatch_events(); - // However, this is not how it should be done. - for (i = 0; i < registry->outputs->length; ++i) { - if (wl_display_dispatch(registry->display) == -1) { - exit(0); - } - } if (verify_password()) { exit(0); } @@ -157,6 +158,7 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod } if (redraw_screen) { render(&render_data); + wl_dispatch_events(); // Hide the indicator after a couple of seconds alarm(5); } |