config: add option for forcing mouse emulation

Default is off. Also allow switching with reconfigure.
This commit is contained in:
Jens Peters 2024-04-22 17:21:55 +02:00 committed by Consolatis
parent be72c4bde3
commit 6d05bed883
3 changed files with 8 additions and 2 deletions

View file

@ -94,6 +94,7 @@ struct rcxml {
/* graphics tablet */ /* graphics tablet */
struct tablet_config { struct tablet_config {
bool force_mouse_emulation;
char *output_name; char *output_name;
struct wlr_fbox box; struct wlr_fbox box;
enum rotation rotation; enum rotation rotation;

View file

@ -1020,6 +1020,8 @@ entry(xmlNode *node, char *nodename, char *content)
} else { } else {
wlr_log(WLR_ERROR, "Invalid value for <resize popupShow />"); wlr_log(WLR_ERROR, "Invalid value for <resize popupShow />");
} }
} else if (!strcasecmp(nodename, "mouseEmulation.tablet")) {
set_bool(content, &rc.tablet.force_mouse_emulation);
} else if (!strcasecmp(nodename, "mapToOutput.tablet")) { } else if (!strcasecmp(nodename, "mapToOutput.tablet")) {
rc.tablet.output_name = xstrdup(content); rc.tablet.output_name = xstrdup(content);
} else if (!strcasecmp(nodename, "rotate.tablet")) { } else if (!strcasecmp(nodename, "rotate.tablet")) {
@ -1229,6 +1231,7 @@ rcxml_init(void)
rc.doubleclick_time = 500; rc.doubleclick_time = 500;
rc.scroll_factor = 1.0; rc.scroll_factor = 1.0;
rc.tablet.force_mouse_emulation = false;
rc.tablet.output_name = NULL; rc.tablet.output_name = NULL;
rc.tablet.rotation = 0; rc.tablet.rotation = 0;
rc.tablet.box = (struct wlr_fbox){0}; rc.tablet.box = (struct wlr_fbox){0};

View file

@ -91,7 +91,8 @@ tablet_get_coords(struct drawing_tablet *tablet, double *x, double *y)
rc.tablet.box, x, y); rc.tablet.box, x, y);
adjust_for_rotation(rc.tablet.rotation, 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; return NULL;
} }
@ -154,7 +155,8 @@ handle_proximity(struct wl_listener *listener, void *data)
double x, y; double x, y;
struct wlr_surface *surface = tablet_get_coords(tablet, &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 * Unfortunately `wlr_tool` is only present in the events, so
* use proximity for creating a `wlr_tablet_v2_tablet_tool`. * use proximity for creating a `wlr_tablet_v2_tablet_tool`.