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 /swaylock/main.c | |
parent | Merge pull request #562 from fluxchief/border-endian (diff) | |
download | sway-3b0d9de2701478c795aceed2ee2c19c6f82c1955.tar.gz sway-3b0d9de2701478c795aceed2ee2c19c6f82c1955.tar.zst sway-3b0d9de2701478c795aceed2ee2c19c6f82c1955.zip |
Improve swaylock event flushing
Diffstat (limited to 'swaylock/main.c')
-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 @@ | |||
21 | struct registry *registry; | 21 | struct registry *registry; |
22 | struct render_data render_data; | 22 | struct render_data render_data; |
23 | 23 | ||
24 | void wl_dispatch_events() { | ||
25 | wl_display_flush(registry->display); | ||
26 | if (wl_display_dispatch(registry->display) == -1) { | ||
27 | sway_log(L_ERROR, "failed to run wl_display_dispatch"); | ||
28 | exit(1); | ||
29 | } | ||
30 | } | ||
31 | |||
24 | void sigalarm_handler(int sig) { | 32 | void sigalarm_handler(int sig) { |
25 | signal(SIGALRM, SIG_IGN); | 33 | signal(SIGALRM, SIG_IGN); |
26 | // Hide typing indicator | 34 | // Hide typing indicator |
@@ -104,7 +112,6 @@ bool verify_password() { | |||
104 | } | 112 | } |
105 | 113 | ||
106 | void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) { | 114 | void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) { |
107 | int i; | ||
108 | int redraw_screen = 0; | 115 | int redraw_screen = 0; |
109 | if (state == WL_KEYBOARD_KEY_STATE_PRESSED) { | 116 | if (state == WL_KEYBOARD_KEY_STATE_PRESSED) { |
110 | switch (sym) { | 117 | switch (sym) { |
@@ -113,14 +120,8 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod | |||
113 | 120 | ||
114 | render(&render_data); | 121 | render(&render_data); |
115 | // Make sure our render call will actually be displayed on the screen | 122 | // Make sure our render call will actually be displayed on the screen |
116 | wl_display_flush(registry->display); | 123 | wl_dispatch_events(); |
117 | 124 | ||
118 | // However, this is not how it should be done. | ||
119 | for (i = 0; i < registry->outputs->length; ++i) { | ||
120 | if (wl_display_dispatch(registry->display) == -1) { | ||
121 | exit(0); | ||
122 | } | ||
123 | } | ||
124 | if (verify_password()) { | 125 | if (verify_password()) { |
125 | exit(0); | 126 | exit(0); |
126 | } | 127 | } |
@@ -157,6 +158,7 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod | |||
157 | } | 158 | } |
158 | if (redraw_screen) { | 159 | if (redraw_screen) { |
159 | render(&render_data); | 160 | render(&render_data); |
161 | wl_dispatch_events(); | ||
160 | // Hide the indicator after a couple of seconds | 162 | // Hide the indicator after a couple of seconds |
161 | alarm(5); | 163 | alarm(5); |
162 | } | 164 | } |