diff options
Diffstat (limited to 'sway/input')
-rw-r--r-- | sway/input/libinput.c | 134 |
1 files changed, 25 insertions, 109 deletions
diff --git a/sway/input/libinput.c b/sway/input/libinput.c index 108fc7b2..54520f9e 100644 --- a/sway/input/libinput.c +++ b/sway/input/libinput.c | |||
@@ -186,17 +186,23 @@ static bool set_calibration_matrix(struct libinput_device *dev, float mat[6]) { | |||
186 | return changed; | 186 | return changed; |
187 | } | 187 | } |
188 | 188 | ||
189 | static bool config_libinput_pointer(struct libinput_device *device, | 189 | void sway_input_configure_libinput_device(struct sway_input_device *input_device) { |
190 | struct input_config *ic, const char *device_id) { | 190 | struct input_config *ic = input_device_get_config(input_device); |
191 | sway_log(SWAY_DEBUG, "config_libinput_pointer('%s' on '%s')", | 191 | if (!ic || !wlr_input_device_is_libinput(input_device->wlr_device)) { |
192 | ic->identifier, device_id); | 192 | return; |
193 | bool changed = false; | 193 | } |
194 | 194 | ||
195 | struct libinput_device *device = | ||
196 | wlr_libinput_get_device_handle(input_device->wlr_device); | ||
197 | sway_log(SWAY_DEBUG, "sway_input_configure_libinput_device('%s' on '%s')", | ||
198 | ic->identifier, input_device->identifier); | ||
199 | |||
200 | bool changed = false; | ||
195 | if (ic->mapped_to_output && | 201 | if (ic->mapped_to_output && |
196 | !output_by_name_or_id(ic->mapped_to_output)) { | 202 | !output_by_name_or_id(ic->mapped_to_output)) { |
197 | sway_log(SWAY_DEBUG, | 203 | sway_log(SWAY_DEBUG, |
198 | "Pointer '%s' is mapped to offline output '%s'; disabling input", | 204 | "%s '%s' is mapped to offline output '%s'; disabling input", |
199 | ic->identifier, ic->mapped_to_output); | 205 | ic->input_type, ic->identifier, ic->mapped_to_output); |
200 | changed |= set_send_events(device, | 206 | changed |= set_send_events(device, |
201 | LIBINPUT_CONFIG_SEND_EVENTS_DISABLED); | 207 | LIBINPUT_CONFIG_SEND_EVENTS_DISABLED); |
202 | } else if (ic->send_events != INT_MIN) { | 208 | } else if (ic->send_events != INT_MIN) { |
@@ -221,7 +227,6 @@ static bool config_libinput_pointer(struct libinput_device *device, | |||
221 | if (ic->drag_lock != INT_MIN) { | 227 | if (ic->drag_lock != INT_MIN) { |
222 | changed |= set_tap_drag_lock(device, ic->drag_lock); | 228 | changed |= set_tap_drag_lock(device, ic->drag_lock); |
223 | } | 229 | } |
224 | |||
225 | if (ic->pointer_accel != FLT_MIN) { | 230 | if (ic->pointer_accel != FLT_MIN) { |
226 | changed |= set_accel_speed(device, ic->pointer_accel); | 231 | changed |= set_accel_speed(device, ic->pointer_accel); |
227 | } | 232 | } |
@@ -249,71 +254,26 @@ static bool config_libinput_pointer(struct libinput_device *device, | |||
249 | if (ic->dwt != INT_MIN) { | 254 | if (ic->dwt != INT_MIN) { |
250 | changed |= set_dwt(device, ic->dwt); | 255 | changed |= set_dwt(device, ic->dwt); |
251 | } | 256 | } |
252 | return changed; | ||
253 | } | ||
254 | |||
255 | static bool config_libinput_keyboard(struct libinput_device *device, | ||
256 | struct input_config *ic, const char *device_id) { | ||
257 | sway_log(SWAY_DEBUG, "config_libinput_keyboard('%s' on '%s')", | ||
258 | ic->identifier, device_id); | ||
259 | if (ic->send_events != INT_MIN) { | ||
260 | return set_send_events(device, ic->send_events); | ||
261 | } | ||
262 | return false; | ||
263 | } | ||
264 | |||
265 | static bool config_libinput_switch(struct libinput_device *device, | ||
266 | struct input_config *ic, const char *device_id) { | ||
267 | sway_log(SWAY_DEBUG, "config_libinput_switch('%s' on '%s')", | ||
268 | ic->identifier, device_id); | ||
269 | if (ic->send_events != INT_MIN) { | ||
270 | return set_send_events(device, ic->send_events); | ||
271 | } | ||
272 | return false; | ||
273 | } | ||
274 | |||
275 | static bool config_libinput_touch(struct libinput_device *device, | ||
276 | struct input_config *ic, const char *device_id) { | ||
277 | sway_log(SWAY_DEBUG, "config_libinput_touch('%s' on '%s')", | ||
278 | ic->identifier, device_id); | ||
279 | bool changed = false; | ||
280 | if (ic->send_events != INT_MIN) { | ||
281 | changed |= set_send_events(device, ic->send_events); | ||
282 | } | ||
283 | if (ic->calibration_matrix.configured) { | 257 | if (ic->calibration_matrix.configured) { |
284 | changed |= set_calibration_matrix(device, ic->calibration_matrix.matrix); | 258 | changed |= set_calibration_matrix(device, ic->calibration_matrix.matrix); |
285 | } | 259 | } |
286 | return changed; | ||
287 | } | ||
288 | 260 | ||
289 | void sway_input_configure_libinput_device(struct sway_input_device *device) { | ||
290 | struct input_config *ic = input_device_get_config(device); | ||
291 | if (!ic || !wlr_input_device_is_libinput(device->wlr_device)) { | ||
292 | return; | ||
293 | } | ||
294 | bool changed = false; | ||
295 | const char *device_id = device->identifier; | ||
296 | struct libinput_device *libinput_device = | ||
297 | wlr_libinput_get_device_handle(device->wlr_device); | ||
298 | if (device->wlr_device->type == WLR_INPUT_DEVICE_POINTER || | ||
299 | device->wlr_device->type == WLR_INPUT_DEVICE_TABLET_TOOL) { | ||
300 | changed = config_libinput_pointer(libinput_device, ic, device_id); | ||
301 | } else if (device->wlr_device->type == WLR_INPUT_DEVICE_KEYBOARD) { | ||
302 | changed = config_libinput_keyboard(libinput_device, ic, device_id); | ||
303 | } else if (device->wlr_device->type == WLR_INPUT_DEVICE_SWITCH) { | ||
304 | changed = config_libinput_switch(libinput_device, ic, device_id); | ||
305 | } else if (device->wlr_device->type == WLR_INPUT_DEVICE_TOUCH) { | ||
306 | changed = config_libinput_touch(libinput_device, ic, device_id); | ||
307 | } | ||
308 | if (changed) { | 261 | if (changed) { |
309 | ipc_event_input("libinput_config", device); | 262 | ipc_event_input("libinput_config", input_device); |
310 | } | 263 | } |
311 | } | 264 | } |
312 | 265 | ||
313 | static bool reset_libinput_pointer(struct libinput_device *device, | 266 | void sway_input_reset_libinput_device(struct sway_input_device *input_device) { |
314 | const char *device_id) { | 267 | if (!wlr_input_device_is_libinput(input_device->wlr_device)) { |
315 | sway_log(SWAY_DEBUG, "reset_libinput_pointer(%s)", device_id); | 268 | return; |
269 | } | ||
270 | |||
271 | struct libinput_device *device = | ||
272 | wlr_libinput_get_device_handle(input_device->wlr_device); | ||
273 | sway_log(SWAY_DEBUG, "sway_input_reset_libinput_device(%s)", | ||
274 | input_device->identifier); | ||
316 | bool changed = false; | 275 | bool changed = false; |
276 | |||
317 | changed |= set_send_events(device, | 277 | changed |= set_send_events(device, |
318 | libinput_device_config_send_events_get_default_mode(device)); | 278 | libinput_device_config_send_events_get_default_mode(device)); |
319 | changed |= set_tap(device, | 279 | changed |= set_tap(device, |
@@ -343,56 +303,12 @@ static bool reset_libinput_pointer(struct libinput_device *device, | |||
343 | libinput_device_config_scroll_get_default_button(device)); | 303 | libinput_device_config_scroll_get_default_button(device)); |
344 | changed |= set_dwt(device, | 304 | changed |= set_dwt(device, |
345 | libinput_device_config_dwt_get_default_enabled(device)); | 305 | libinput_device_config_dwt_get_default_enabled(device)); |
346 | return changed; | ||
347 | } | ||
348 | |||
349 | static bool reset_libinput_keyboard(struct libinput_device *device, | ||
350 | const char *device_id) { | ||
351 | sway_log(SWAY_DEBUG, "reset_libinput_keyboard(%s)", device_id); | ||
352 | return set_send_events(device, | ||
353 | libinput_device_config_send_events_get_default_mode(device)); | ||
354 | } | ||
355 | |||
356 | static bool reset_libinput_switch(struct libinput_device *device, | ||
357 | const char *device_id) { | ||
358 | sway_log(SWAY_DEBUG, "reset_libinput_switch(%s)", device_id); | ||
359 | return set_send_events(device, | ||
360 | libinput_device_config_send_events_get_default_mode(device)); | ||
361 | } | ||
362 | |||
363 | static bool reset_libinput_touch(struct libinput_device *device, | ||
364 | const char *device_id) { | ||
365 | sway_log(SWAY_DEBUG, "reset_libinput_touch(%s)", device_id); | ||
366 | bool changed = false; | ||
367 | |||
368 | changed |= set_send_events(device, | ||
369 | libinput_device_config_send_events_get_default_mode(device)); | ||
370 | 306 | ||
371 | float matrix[6]; | 307 | float matrix[6]; |
372 | libinput_device_config_calibration_get_default_matrix(device, matrix); | 308 | libinput_device_config_calibration_get_default_matrix(device, matrix); |
373 | changed |= set_calibration_matrix(device, matrix); | 309 | changed |= set_calibration_matrix(device, matrix); |
374 | 310 | ||
375 | return changed; | ||
376 | } | ||
377 | |||
378 | void sway_input_reset_libinput_device(struct sway_input_device *device) { | ||
379 | if (!wlr_input_device_is_libinput(device->wlr_device)) { | ||
380 | return; | ||
381 | } | ||
382 | bool changed = false; | ||
383 | struct libinput_device *libinput_device = | ||
384 | wlr_libinput_get_device_handle(device->wlr_device); | ||
385 | if (device->wlr_device->type == WLR_INPUT_DEVICE_POINTER || | ||
386 | device->wlr_device->type == WLR_INPUT_DEVICE_TABLET_TOOL) { | ||
387 | changed = reset_libinput_pointer(libinput_device, device->identifier); | ||
388 | } else if (device->wlr_device->type == WLR_INPUT_DEVICE_KEYBOARD) { | ||
389 | changed = reset_libinput_keyboard(libinput_device, device->identifier); | ||
390 | } else if (device->wlr_device->type == WLR_INPUT_DEVICE_SWITCH) { | ||
391 | changed = reset_libinput_switch(libinput_device, device->identifier); | ||
392 | } else if (device->wlr_device->type == WLR_INPUT_DEVICE_TOUCH) { | ||
393 | changed = reset_libinput_touch(libinput_device, device->identifier); | ||
394 | } | ||
395 | if (changed) { | 311 | if (changed) { |
396 | ipc_event_input("libinput_config", device); | 312 | ipc_event_input("libinput_config", input_device); |
397 | } | 313 | } |
398 | } | 314 | } |