aboutsummaryrefslogtreecommitdiffstats
path: root/swaylock
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2017-08-09 18:34:51 -0400
committerLibravatar Drew DeVault <sir@cmpwn.com>2017-08-09 18:34:51 -0400
commit03af90d302e6a619db6a1f0c479995a81f301e13 (patch)
tree1ea5fc8b6cf1ba363076d21f580448a201a5999f /swaylock
parentMerge pull request #1313 from ilyaluk/nonblock-ipc-server (diff)
downloadsway-03af90d302e6a619db6a1f0c479995a81f301e13.tar.gz
sway-03af90d302e6a619db6a1f0c479995a81f301e13.tar.zst
sway-03af90d302e6a619db6a1f0c479995a81f301e13.zip
Clean up fallthrough issues
Diffstat (limited to 'swaylock')
-rw-r--r--swaylock/main.c108
1 files changed, 51 insertions, 57 deletions
diff --git a/swaylock/main.c b/swaylock/main.c
index e624df46..c2615951 100644
--- a/swaylock/main.c
+++ b/swaylock/main.c
@@ -152,10 +152,11 @@ bool verify_password() {
152void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) { 152void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) {
153 int redraw_screen = 0; 153 int redraw_screen = 0;
154 char *password_realloc; 154 char *password_realloc;
155 int i;
155 156
156 if (state == WL_KEYBOARD_KEY_STATE_PRESSED) { 157 if (state == WL_KEYBOARD_KEY_STATE_PRESSED) {
157 switch (sym) { 158 switch (sym) {
158 case XKB_KEY_KP_Enter: // fallthrough 159 case XKB_KEY_KP_Enter:
159 case XKB_KEY_Return: 160 case XKB_KEY_Return:
160 render_data.auth_state = AUTH_STATE_VALIDATING; 161 render_data.auth_state = AUTH_STATE_VALIDATING;
161 162
@@ -166,6 +167,7 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod
166 if (verify_password()) { 167 if (verify_password()) {
167 exit(0); 168 exit(0);
168 } 169 }
170
169 render_data.auth_state = AUTH_STATE_INVALID; 171 render_data.auth_state = AUTH_STATE_INVALID;
170 redraw_screen = 1; 172 redraw_screen = 1;
171 173
@@ -174,73 +176,65 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod
174 password[0] = '\0'; 176 password[0] = '\0';
175 break; 177 break;
176 case XKB_KEY_BackSpace: 178 case XKB_KEY_BackSpace:
177 { 179 i = strlen(password);
178 int i = strlen(password); 180 if (i > 0) {
179 if (i > 0) { 181 password[i - 1] = '\0';
180 password[i - 1] = '\0'; 182 render_data.auth_state = AUTH_STATE_BACKSPACE;
181 render_data.auth_state = AUTH_STATE_BACKSPACE; 183 redraw_screen = 1;
182 redraw_screen = 1;
183 }
184 break;
185 } 184 }
186 case XKB_KEY_Control_L: // fallthrough 185 break;
187 case XKB_KEY_Control_R: // fallthrough 186 case XKB_KEY_Control_L:
188 case XKB_KEY_Shift_L: // fallthrough 187 case XKB_KEY_Control_R:
189 case XKB_KEY_Shift_R: // fallthrough 188 case XKB_KEY_Shift_L:
190 case XKB_KEY_Caps_Lock: // fallthrough 189 case XKB_KEY_Shift_R:
191 case XKB_KEY_Shift_Lock: // fallthrough 190 case XKB_KEY_Caps_Lock:
192 case XKB_KEY_Meta_L: // fallthrough 191 case XKB_KEY_Shift_Lock:
193 case XKB_KEY_Meta_R: // fallthrough 192 case XKB_KEY_Meta_L:
194 case XKB_KEY_Alt_L: // fallthrough 193 case XKB_KEY_Meta_R:
195 case XKB_KEY_Alt_R: // fallthrough 194 case XKB_KEY_Alt_L:
196 case XKB_KEY_Super_L: // fallthrough 195 case XKB_KEY_Alt_R:
197 case XKB_KEY_Super_R: // fallthrough 196 case XKB_KEY_Super_L:
198 case XKB_KEY_Hyper_L: // fallthrough 197 case XKB_KEY_Super_R:
198 case XKB_KEY_Hyper_L:
199 case XKB_KEY_Hyper_R: 199 case XKB_KEY_Hyper_R:
200 { 200 break; // don't draw screen on modifier keys
201 // don't draw screen on modifier keys 201 case XKB_KEY_Escape:
202 break; 202 case XKB_KEY_u:
203 }
204 case XKB_KEY_Escape: // fallthrough
205 case XKB_KEY_u: // fallthrough
206 case XKB_KEY_U: 203 case XKB_KEY_U:
207 { 204 // clear password buffer on ctrl-u (or escape for i3lock compatibility)
208 // clear password buffer on ctrl-u (or escape for i3lock compatibility) 205 if (sym == XKB_KEY_Escape || xkb_state_mod_name_is_active(registry->input->xkb.state,
209 if (sym == XKB_KEY_Escape || xkb_state_mod_name_is_active(registry->input->xkb.state, 206 XKB_MOD_NAME_CTRL, XKB_STATE_MODS_EFFECTIVE) > 0) {
210 XKB_MOD_NAME_CTRL, XKB_STATE_MODS_EFFECTIVE) > 0) { 207 render_data.auth_state = AUTH_STATE_BACKSPACE;
211 render_data.auth_state = AUTH_STATE_BACKSPACE; 208 redraw_screen = 1;
212 redraw_screen = 1;
213 209
210 password_size = 1024;
211 free(password);
212 password = malloc(password_size);
213 password[0] = '\0';
214 break;
215 }
216 /* fallthrough */
217 default:
218 render_data.auth_state = AUTH_STATE_INPUT;
219 redraw_screen = 1;
220 i = strlen(password);
221 if (i + 1 == password_size) {
222 password_size += 1024;
223 password_realloc = realloc(password, password_size);
224 // reset password if realloc fails.
225 if (password_realloc == NULL) {
214 password_size = 1024; 226 password_size = 1024;
215 free(password); 227 free(password);
216 password = malloc(password_size); 228 password = malloc(password_size);
217 password[0] = '\0'; 229 password[0] = '\0';
218 break; 230 break;
231 } else {
232 password = password_realloc;
219 } 233 }
220 } 234 }
221 default: 235 password[i] = (char)codepoint;
222 { 236 password[i + 1] = '\0';
223 render_data.auth_state = AUTH_STATE_INPUT; 237 break;
224 redraw_screen = 1;
225 int i = strlen(password);
226 if (i + 1 == password_size) {
227 password_size += 1024;
228 password_realloc = realloc(password, password_size);
229 // reset password if realloc fails.
230 if (password_realloc == NULL) {
231 password_size = 1024;
232 free(password);
233 password = malloc(password_size);
234 password[0] = '\0';
235 break;
236 } else {
237 password = password_realloc;
238 }
239 }
240 password[i] = (char)codepoint;
241 password[i + 1] = '\0';
242 break;
243 }
244 } 238 }
245 if (redraw_screen) { 239 if (redraw_screen) {
246 render(&render_data, config); 240 render(&render_data, config);