#include "input/cursor.h"
#include "input/drawing_tablet.h"
-#include "config/rcxml.h"
-
static void
handle_axis(struct wl_listener *listener, void *data)
{
// 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
handle_tip(struct wl_listener *listener, void *data)
{
struct wlr_tablet_tool_tip_event *ev = 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,
- BTN_LEFT,
+ button,
ev->state == WLR_TABLET_TOOL_TIP_DOWN
? WLR_BUTTON_PRESSED
: WLR_BUTTON_RELEASED,
struct wlr_tablet_tool_button_event *ev = data;
struct drawing_tablet *tablet = ev->tablet->data;
- uint32_t button;
- switch (ev->button) {
- case BTN_STYLUS:
- button = BTN_RIGHT;
- break;
- case BTN_STYLUS2:
- button = BTN_MIDDLE;
- break;
- default:
- wlr_log(WLR_DEBUG, "no button map target");
+ uint32_t button = get_mapped_button(ev->button);
+ if (!button) {
return;
}