From: Peter Hutterer Date: Mon, 28 Oct 2024 01:46:27 +0000 (+1000) Subject: pad: support dial modeswitch buttons X-Git-Tag: 1.27.0~18 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=384e9469609b24cfbc188385a96dee036b86372f;p=platform%2Fupstream%2Flibinput.git pad: support dial modeswitch buttons This requires unreleased updates to libwacom [1], currently hiding behind an ifdef so we don't require that particular version. [1] https://github.com/linuxwacom/libwacom/pull/805 Part-of: --- diff --git a/meson.build b/meson.build index 826ab344..8df47012 100644 --- a/meson.build +++ b/meson.build @@ -170,6 +170,10 @@ have_libwacom = get_option('libwacom') config_h.set10('HAVE_LIBWACOM', have_libwacom) if have_libwacom dep_libwacom = dependency('libwacom', version : '>= 0.27') + if cc.has_header_symbol('libwacom/libwacom.h', 'WACOM_BUTTON_DIAL_MODESWITCH', + dependencies : dep_libwacom) + config_h.set('HAVE_LIBWACOM_BUTTON_DIAL_MODESWITCH', '1') + endif else dep_libwacom = declare_dependency() endif diff --git a/src/evdev-tablet-pad-leds.c b/src/evdev-tablet-pad-leds.c index c98f88ef..be309090 100644 --- a/src/evdev-tablet-pad-leds.c +++ b/src/evdev-tablet-pad-leds.c @@ -268,6 +268,7 @@ pad_add_mode_group(struct pad_dispatch *pad, int button_index, uint32_t ring_mask, uint32_t strip_mask, + uint32_t dial_mask, bool create_leds) { struct libinput *li = pad_libinput_context(pad); @@ -285,6 +286,7 @@ pad_add_mode_group(struct pad_dispatch *pad, goto out; group->base.ring_mask = ring_mask; group->base.strip_mask = strip_mask; + group->base.dial_mask = dial_mask; group->base.button_mask |= bit(button_index); rc = pad_led_group_add_toggle_button(group, button_index); @@ -362,6 +364,14 @@ pad_fetch_group_index(struct pad_dispatch *pad, case WACOM_BUTTON_TOUCHSTRIP2_MODESWITCH: group_index = 1; break; +#ifdef HAVE_LIBWACOM_BUTTON_DIAL_MODESWITCH + case WACOM_BUTTON_DIAL_MODESWITCH: + group_index = 0; + break; + case WACOM_BUTTON_DIAL2_MODESWITCH: + group_index = 1; + break; +#endif } return group_index; @@ -418,6 +428,7 @@ pad_init_leds_from_libwacom(struct pad_dispatch *pad, int nmodes = 0; uint32_t ring_mask = 0; uint32_t strip_mask = 0; + uint32_t dial_mask = 0; bool have_status_led = false; if ((flags & WACOM_BUTTON_MODESWITCH) == 0) @@ -442,6 +453,16 @@ pad_init_leds_from_libwacom(struct pad_dispatch *pad, nmodes = libwacom_get_strips_num_modes(wacom); strip_mask = 0x2; break; +#ifdef HAVE_LIBWACOM_BUTTON_DIAL_MODESWITCH + case WACOM_BUTTON_DIAL_MODESWITCH: + nmodes = libwacom_get_dial_num_modes(wacom); + dial_mask = 0x1; + break; + case WACOM_BUTTON_DIAL2_MODESWITCH: + nmodes = libwacom_get_dial2_num_modes(wacom); + dial_mask = 0x2; + break; +#endif default: evdev_log_error(pad->device, "unable to init pad mode group: button %c has multiple modeswitch flags 0x%x\n", @@ -453,7 +474,8 @@ pad_init_leds_from_libwacom(struct pad_dispatch *pad, struct libinput_tablet_pad_mode_group *group = pad_get_mode_group(pad, group_index); if (!group) { rc = pad_add_mode_group(pad, device, group_index, nmodes, b, - ring_mask, strip_mask, have_status_led); + ring_mask, strip_mask, dial_mask, + have_status_led); } else { struct pad_led_group *led_group = (struct pad_led_group *)group; /* Multiple toggle buttons (Wacom MobileStudio Pro 16) */