From a2f25bea1a799f60ca6226383321dfdeac7bc2b0 Mon Sep 17 00:00:00 2001 From: Jens Peters Date: Fri, 5 Jul 2024 06:17:29 +0200 Subject: [PATCH] config: add configuration for tablet tool motion --- include/config/rcxml.h | 4 ++++ include/config/tablet-tool.h | 14 ++++++++++++++ include/input/tablet.h | 7 +------ src/config/meson.build | 1 + src/config/rcxml.c | 3 +++ src/config/tablet-tool.c | 17 +++++++++++++++++ src/input/tablet.c | 2 +- 7 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 include/config/tablet-tool.h create mode 100644 src/config/tablet-tool.c diff --git a/include/config/rcxml.h b/include/config/rcxml.h index a9e89589..a6172d83 100644 --- a/include/config/rcxml.h +++ b/include/config/rcxml.h @@ -11,6 +11,7 @@ #include "common/font.h" #include "config/touch.h" #include "config/tablet.h" +#include "config/tablet-tool.h" #include "config/libinput.h" #include "resize-indicator.h" #include "theme.h" @@ -102,6 +103,9 @@ struct rcxml { uint16_t button_map_count; struct button_map_entry button_map[BUTTON_MAP_MAX]; } tablet; + struct tablet_tool_config { + enum motion motion; + } tablet_tool; /* libinput */ struct wl_list libinput_categories; diff --git a/include/config/tablet-tool.h b/include/config/tablet-tool.h new file mode 100644 index 00000000..bd1943af --- /dev/null +++ b/include/config/tablet-tool.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef LABWC_TABLET_TOOL_CONFIG_H +#define LABWC_TABLET_TOOL_CONFIG_H + +#include + +enum motion { + LAB_TABLET_MOTION_ABSOLUTE = 0, + LAB_TABLET_MOTION_RELATIVE, +}; + +enum motion tablet_parse_motion(const char *name); + +#endif /* LABWC_TABLET_TOOL_CONFIG_H */ diff --git a/include/input/tablet.h b/include/input/tablet.h index 1603598e..93fdda5a 100644 --- a/include/input/tablet.h +++ b/include/input/tablet.h @@ -9,17 +9,12 @@ struct seat; struct wlr_device; struct wlr_input_device; -enum lab_tablet_motion_mode { - LAB_TABLET_MOTION_ABSOLUTE = 0, - LAB_TABLET_MOTION_RELATIVE, -}; - struct drawing_tablet { struct wlr_input_device *wlr_input_device; struct seat *seat; struct wlr_tablet *tablet; struct wlr_tablet_v2_tablet *tablet_v2; - enum lab_tablet_motion_mode motion_mode; + enum motion motion_mode; double x, y, dx, dy; double distance; double pressure; diff --git a/src/config/meson.build b/src/config/meson.build index de08f6d0..70b1baa3 100644 --- a/src/config/meson.build +++ b/src/config/meson.build @@ -5,5 +5,6 @@ labwc_sources += files( 'mousebind.c', 'touch.c', 'tablet.c', + 'tablet-tool.c', 'libinput.c', ) diff --git a/src/config/rcxml.c b/src/config/rcxml.c index 84c117b6..fac2cbf1 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -1061,6 +1061,8 @@ entry(xmlNode *node, char *nodename, char *content) } else { wlr_log(WLR_ERROR, "Missing 'button' argument for tablet button mapping"); } + } else if (!strcasecmp(nodename, "motion.tabletTool")) { + rc.tablet_tool.motion = tablet_parse_motion(content); } else if (!strcasecmp(nodename, "ignoreButtonReleasePeriod.menu")) { rc.menu_ignore_button_release_period = atoi(content); } else if (!strcasecmp(nodename, "width.magnifier")) { @@ -1258,6 +1260,7 @@ rcxml_init(void) rc.tablet.rotation = 0; rc.tablet.box = (struct wlr_fbox){0}; tablet_load_default_button_mappings(); + rc.tablet_tool.motion = LAB_TABLET_MOTION_ABSOLUTE; rc.repeat_rate = 25; rc.repeat_delay = 600; diff --git a/src/config/tablet-tool.c b/src/config/tablet-tool.c new file mode 100644 index 00000000..7e171410 --- /dev/null +++ b/src/config/tablet-tool.c @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-only +#define _POSIX_C_SOURCE 200809L +#include +#include +#include "config/tablet-tool.h" + +enum motion +tablet_parse_motion(const char *name) +{ + if (!strcasecmp(name, "Absolute")) { + return LAB_TABLET_MOTION_ABSOLUTE; + } else if (!strcasecmp(name, "Relative")) { + return LAB_TABLET_MOTION_RELATIVE; + } + wlr_log(WLR_ERROR, "Invalid value for tablet motion: %s", name); + return LAB_TABLET_MOTION_ABSOLUTE; +} diff --git a/src/input/tablet.c b/src/input/tablet.c index e5335334..b417ea95 100644 --- a/src/input/tablet.c +++ b/src/input/tablet.c @@ -19,7 +19,7 @@ #include "idle.h" #include "action.h" -static enum lab_tablet_motion_mode +static enum motion tool_motion_mode(struct wlr_tablet_tool *tool) { /*