summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2016-04-04 09:37:41 -0400
committerLibravatar Drew DeVault <sir@cmpwn.com>2016-04-04 09:37:41 -0400
commit9f4df8b7582368a5cb66033f3889c3d86b07a8a3 (patch)
treeffdcfe063130e9794c4da55cff4ceed9b91fcfbb
parentMerge pull request #574 from fluxchief/parse-border-color (diff)
parentImprove swaylock event flushing (diff)
downloadsway-9f4df8b7582368a5cb66033f3889c3d86b07a8a3.tar.gz
sway-9f4df8b7582368a5cb66033f3889c3d86b07a8a3.tar.zst
sway-9f4df8b7582368a5cb66033f3889c3d86b07a8a3.zip
Merge pull request #572 from fluxchief/swaylock-flush
Improve swaylock event flushing
-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 }