commit 9f4df8b7582368a5cb66033f3889c3d86b07a8a3
parent 5a1a0cf910193ca7688cba1de5151949e48c3ec9
Author: Drew DeVault <sir@cmpwn.com>
Date: Mon, 4 Apr 2016 09:37:41 -0400
Merge pull request #572 from fluxchief/swaylock-flush
Improve swaylock event flushing
Diffstat:
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git 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);
}