aboutsummaryrefslogtreecommitdiffstats
path: root/swaylock
diff options
context:
space:
mode:
authorLibravatar Kevin Hamacher <kevin.hamacher@rub.de>2016-04-03 00:33:15 +0200
committerLibravatar Kevin Hamacher <kevin.hamacher@rub.de>2016-04-03 00:50:34 +0200
commit3b0d9de2701478c795aceed2ee2c19c6f82c1955 (patch)
tree6b9119c1bcb1447a60042e1d46585b05d18c1fe2 /swaylock
parentMerge pull request #562 from fluxchief/border-endian (diff)
downloadsway-3b0d9de2701478c795aceed2ee2c19c6f82c1955.tar.gz
sway-3b0d9de2701478c795aceed2ee2c19c6f82c1955.tar.zst
sway-3b0d9de2701478c795aceed2ee2c19c6f82c1955.zip
Improve swaylock event flushing
Diffstat (limited to 'swaylock')
-rw-r--r--swaylock/main.c18
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 @@
21struct registry *registry; 21struct registry *registry;
22struct render_data render_data; 22struct render_data render_data;
23 23
24void 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
24void sigalarm_handler(int sig) { 32void 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
106void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) { 114void 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 }