2021-10-15 10:26:00 -04:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-only
|
2025-07-28 01:02:01 -04:00
|
|
|
#include "config/libinput.h"
|
2021-10-15 10:26:00 -04:00
|
|
|
#include <string.h>
|
|
|
|
|
#include <strings.h>
|
2022-09-16 18:41:02 -04:00
|
|
|
#include "common/mem.h"
|
2024-01-01 17:18:28 +00:00
|
|
|
#include "common/list.h"
|
2024-01-19 19:06:07 +00:00
|
|
|
#include "common/string-helpers.h"
|
2021-10-15 10:26:00 -04:00
|
|
|
#include "config/rcxml.h"
|
2022-09-16 18:41:02 -04:00
|
|
|
|
2021-10-15 10:26:00 -04:00
|
|
|
static void
|
|
|
|
|
libinput_category_init(struct libinput_category *l)
|
|
|
|
|
{
|
2024-01-01 19:14:08 +00:00
|
|
|
l->type = LAB_LIBINPUT_DEVICE_DEFAULT;
|
2021-10-15 10:26:00 -04:00
|
|
|
l->name = NULL;
|
|
|
|
|
l->pointer_speed = -2;
|
|
|
|
|
l->natural_scroll = -1;
|
|
|
|
|
l->left_handed = -1;
|
|
|
|
|
l->tap = LIBINPUT_CONFIG_TAP_ENABLED;
|
2021-12-12 22:12:30 +00:00
|
|
|
l->tap_button_map = LIBINPUT_CONFIG_TAP_MAP_LRM;
|
2023-09-02 17:32:48 +09:00
|
|
|
l->tap_and_drag = -1;
|
|
|
|
|
l->drag_lock = -1;
|
2025-06-06 23:08:53 +02:00
|
|
|
l->three_finger_drag = -1;
|
2021-10-15 10:26:00 -04:00
|
|
|
l->accel_profile = -1;
|
|
|
|
|
l->middle_emu = -1;
|
|
|
|
|
l->dwt = -1;
|
2024-02-21 18:19:48 +01:00
|
|
|
l->click_method = -1;
|
2025-05-27 14:19:21 +02:00
|
|
|
l->scroll_method = -1;
|
2023-06-26 07:36:54 +08:00
|
|
|
l->send_events_mode = -1;
|
2024-03-20 11:31:42 +08:00
|
|
|
l->have_calibration_matrix = false;
|
2024-08-08 17:29:43 +09:00
|
|
|
l->scroll_factor = 1.0;
|
2021-10-15 10:26:00 -04:00
|
|
|
}
|
|
|
|
|
|
2024-01-01 19:15:16 +00:00
|
|
|
enum lab_libinput_device_type
|
2021-10-15 10:26:00 -04:00
|
|
|
get_device_type(const char *s)
|
|
|
|
|
{
|
2024-01-19 19:06:07 +00:00
|
|
|
if (string_null_or_empty(s)) {
|
2023-12-29 19:50:37 +00:00
|
|
|
return LAB_LIBINPUT_DEVICE_NONE;
|
|
|
|
|
}
|
|
|
|
|
if (!strcasecmp(s, "default")) {
|
2024-01-01 19:14:08 +00:00
|
|
|
return LAB_LIBINPUT_DEVICE_DEFAULT;
|
2021-10-15 10:26:00 -04:00
|
|
|
}
|
|
|
|
|
if (!strcasecmp(s, "touch")) {
|
2024-01-01 19:14:08 +00:00
|
|
|
return LAB_LIBINPUT_DEVICE_TOUCH;
|
2021-10-15 10:26:00 -04:00
|
|
|
}
|
2023-12-15 07:36:29 -08:00
|
|
|
if (!strcasecmp(s, "touchpad")) {
|
2024-01-01 19:14:08 +00:00
|
|
|
return LAB_LIBINPUT_DEVICE_TOUCHPAD;
|
2023-12-15 07:36:29 -08:00
|
|
|
}
|
2021-10-15 10:26:00 -04:00
|
|
|
if (!strcasecmp(s, "non-touch")) {
|
2024-01-01 19:14:08 +00:00
|
|
|
return LAB_LIBINPUT_DEVICE_NON_TOUCH;
|
2021-10-15 10:26:00 -04:00
|
|
|
}
|
2023-12-29 19:50:37 +00:00
|
|
|
return LAB_LIBINPUT_DEVICE_NONE;
|
2021-10-15 10:26:00 -04:00
|
|
|
}
|
|
|
|
|
|
2025-08-27 13:04:52 -04:00
|
|
|
const char *
|
|
|
|
|
libinput_device_type_name(enum lab_libinput_device_type type)
|
|
|
|
|
{
|
|
|
|
|
switch (type) {
|
|
|
|
|
case LAB_LIBINPUT_DEVICE_NONE:
|
|
|
|
|
break;
|
|
|
|
|
case LAB_LIBINPUT_DEVICE_DEFAULT:
|
|
|
|
|
return "default";
|
|
|
|
|
case LAB_LIBINPUT_DEVICE_TOUCH:
|
|
|
|
|
return "touch";
|
|
|
|
|
case LAB_LIBINPUT_DEVICE_TOUCHPAD:
|
|
|
|
|
return "touchpad";
|
|
|
|
|
case LAB_LIBINPUT_DEVICE_NON_TOUCH:
|
|
|
|
|
return "non-touch";
|
|
|
|
|
}
|
|
|
|
|
/* none/invalid */
|
|
|
|
|
return "(none)";
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-15 10:26:00 -04:00
|
|
|
struct libinput_category *
|
2021-10-15 20:52:36 +01:00
|
|
|
libinput_category_create(void)
|
2021-10-15 10:26:00 -04:00
|
|
|
{
|
2022-09-18 15:22:26 -04:00
|
|
|
struct libinput_category *l = znew(*l);
|
2021-10-15 10:26:00 -04:00
|
|
|
libinput_category_init(l);
|
2024-01-01 17:18:28 +00:00
|
|
|
wl_list_append(&rc.libinput_categories, &l->link);
|
2021-10-15 10:26:00 -04:00
|
|
|
return l;
|
|
|
|
|
}
|
2022-12-22 16:44:08 -05:00
|
|
|
|
2024-01-01 17:18:28 +00:00
|
|
|
/* After rcxml_read(), a default category always exists. */
|
2022-12-22 16:44:08 -05:00
|
|
|
struct libinput_category *
|
|
|
|
|
libinput_category_get_default(void)
|
|
|
|
|
{
|
|
|
|
|
struct libinput_category *l;
|
2024-01-01 17:18:28 +00:00
|
|
|
/*
|
|
|
|
|
* Iterate in reverse to get the last one added in case multiple
|
|
|
|
|
* 'default' profiles were created.
|
|
|
|
|
*/
|
|
|
|
|
wl_list_for_each_reverse(l, &rc.libinput_categories, link) {
|
2024-01-01 19:14:08 +00:00
|
|
|
if (l->type == LAB_LIBINPUT_DEVICE_DEFAULT) {
|
2022-12-22 16:44:08 -05:00
|
|
|
return l;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|