From 6d05bed883878234124238bc56168a2aab1251f2 Mon Sep 17 00:00:00 2001 From: Jens Peters Date: Mon, 22 Apr 2024 17:21:55 +0200 Subject: [PATCH] config: add option for forcing mouse emulation Default is off. Also allow switching with reconfigure. --- include/config/rcxml.h | 1 + src/config/rcxml.c | 3 +++ src/input/tablet.c | 6 ++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/config/rcxml.h b/include/config/rcxml.h index 41c34c95..1ebfddee 100644 --- a/include/config/rcxml.h +++ b/include/config/rcxml.h @@ -94,6 +94,7 @@ struct rcxml { /* graphics tablet */ struct tablet_config { + bool force_mouse_emulation; char *output_name; struct wlr_fbox box; enum rotation rotation; diff --git a/src/config/rcxml.c b/src/config/rcxml.c index 67cbd421..741938a9 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -1020,6 +1020,8 @@ entry(xmlNode *node, char *nodename, char *content) } else { wlr_log(WLR_ERROR, "Invalid value for "); } + } else if (!strcasecmp(nodename, "mouseEmulation.tablet")) { + set_bool(content, &rc.tablet.force_mouse_emulation); } else if (!strcasecmp(nodename, "mapToOutput.tablet")) { rc.tablet.output_name = xstrdup(content); } else if (!strcasecmp(nodename, "rotate.tablet")) { @@ -1229,6 +1231,7 @@ rcxml_init(void) rc.doubleclick_time = 500; rc.scroll_factor = 1.0; + rc.tablet.force_mouse_emulation = false; rc.tablet.output_name = NULL; rc.tablet.rotation = 0; rc.tablet.box = (struct wlr_fbox){0}; diff --git a/src/input/tablet.c b/src/input/tablet.c index 92a17914..4e856a7b 100644 --- a/src/input/tablet.c +++ b/src/input/tablet.c @@ -91,7 +91,8 @@ tablet_get_coords(struct drawing_tablet *tablet, double *x, double *y) rc.tablet.box, x, y); adjust_for_rotation(rc.tablet.rotation, x, y); - if (!tablet->tablet_v2) { + if (rc.tablet.force_mouse_emulation + || !tablet->tablet_v2) { return NULL; } @@ -154,7 +155,8 @@ handle_proximity(struct wl_listener *listener, void *data) double x, y; struct wlr_surface *surface = tablet_get_coords(tablet, &x, &y); - if (tablet->seat->server->tablet_manager && !tool) { + if (!rc.tablet.force_mouse_emulation + && tablet->seat->server->tablet_manager && !tool) { /* * Unfortunately `wlr_tool` is only present in the events, so * use proximity for creating a `wlr_tablet_v2_tablet_tool`.