labwc/src/config/libinput.c

98 lines
2.2 KiB
C
Raw Normal View History

2021-10-15 10:26:00 -04:00
// SPDX-License-Identifier: GPL-2.0-only
#include "config/libinput.h"
2021-10-15 10:26:00 -04:00
#include <string.h>
#include <strings.h>
#include "common/mem.h"
#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"
2021-10-15 10:26:00 -04:00
static void
libinput_category_init(struct libinput_category *l)
{
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;
l->tap_button_map = LIBINPUT_CONFIG_TAP_MAP_LRM;
l->tap_and_drag = -1;
l->drag_lock = -1;
l->three_finger_drag = -1;
2021-10-15 10:26:00 -04:00
l->accel_profile = -1;
l->middle_emu = -1;
l->dwt = -1;
l->click_method = -1;
l->scroll_method = -1;
l->send_events_mode = -1;
l->have_calibration_matrix = false;
l->scroll_factor = 1.0;
2021-10-15 10:26:00 -04: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)) {
return LAB_LIBINPUT_DEVICE_NONE;
}
if (!strcasecmp(s, "default")) {
return LAB_LIBINPUT_DEVICE_DEFAULT;
2021-10-15 10:26:00 -04:00
}
if (!strcasecmp(s, "touch")) {
return LAB_LIBINPUT_DEVICE_TOUCH;
2021-10-15 10:26:00 -04:00
}
if (!strcasecmp(s, "touchpad")) {
return LAB_LIBINPUT_DEVICE_TOUCHPAD;
}
2021-10-15 10:26:00 -04:00
if (!strcasecmp(s, "non-touch")) {
return LAB_LIBINPUT_DEVICE_NON_TOUCH;
2021-10-15 10:26:00 -04:00
}
return LAB_LIBINPUT_DEVICE_NONE;
2021-10-15 10:26:00 -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);
wl_list_append(&rc.libinput_categories, &l->link);
2021-10-15 10:26:00 -04:00
return l;
}
/* After rcxml_read(), a default category always exists. */
struct libinput_category *
libinput_category_get_default(void)
{
struct libinput_category *l;
/*
* 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) {
if (l->type == LAB_LIBINPUT_DEVICE_DEFAULT) {
return l;
}
}
return NULL;
}