input: use button mapping from configuration

Co-authored-by: Consolatis <35009135+Consolatis@users.noreply.github.com>
This commit is contained in:
Jens Peters 2023-12-29 10:06:59 +01:00 committed by Johan Malm
parent 567b81ea10
commit 5a93aa3a78

View file

@ -11,8 +11,6 @@
#include "input/cursor.h" #include "input/cursor.h"
#include "input/drawing_tablet.h" #include "input/drawing_tablet.h"
#include "config/rcxml.h"
static void static void
handle_axis(struct wl_listener *listener, void *data) handle_axis(struct wl_listener *listener, void *data)
{ {
@ -33,14 +31,33 @@ handle_axis(struct wl_listener *listener, void *data)
// Ignore other events // Ignore other events
} }
static uint32_t
get_mapped_button(uint32_t src_button)
{
struct button_map_entry *map_entry;
for (size_t i = 0; i < rc.tablet.button_map_count; i++) {
map_entry = &rc.tablet.button_map[i];
if (map_entry->from == src_button) {
return map_entry->to;
}
}
wlr_log(WLR_DEBUG, "no button map target for 0x%x", src_button);
return 0;
}
static void static void
handle_tip(struct wl_listener *listener, void *data) handle_tip(struct wl_listener *listener, void *data)
{ {
struct wlr_tablet_tool_tip_event *ev = data; struct wlr_tablet_tool_tip_event *ev = data;
struct drawing_tablet *tablet = ev->tablet->data; struct drawing_tablet *tablet = ev->tablet->data;
uint32_t button = get_mapped_button(BTN_TOOL_PEN);
if (!button) {
return;
}
cursor_emulate_button(tablet->seat, cursor_emulate_button(tablet->seat,
BTN_LEFT, button,
ev->state == WLR_TABLET_TOOL_TIP_DOWN ev->state == WLR_TABLET_TOOL_TIP_DOWN
? WLR_BUTTON_PRESSED ? WLR_BUTTON_PRESSED
: WLR_BUTTON_RELEASED, : WLR_BUTTON_RELEASED,
@ -53,16 +70,8 @@ handle_button(struct wl_listener *listener, void *data)
struct wlr_tablet_tool_button_event *ev = data; struct wlr_tablet_tool_button_event *ev = data;
struct drawing_tablet *tablet = ev->tablet->data; struct drawing_tablet *tablet = ev->tablet->data;
uint32_t button; uint32_t button = get_mapped_button(ev->button);
switch (ev->button) { if (!button) {
case BTN_STYLUS:
button = BTN_RIGHT;
break;
case BTN_STYLUS2:
button = BTN_MIDDLE;
break;
default:
wlr_log(WLR_DEBUG, "no button map target");
return; return;
} }