mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-02-04 04:40:25 +01:00
touchpad: hook up left-handed configuration
Tapping and clickfinger is unaffected, physical and software buttons are swapped. The main area of a clickpad remains as left button though. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
3240b4287b
commit
837a041abd
2 changed files with 28 additions and 4 deletions
|
|
@ -661,14 +661,17 @@ tp_post_physical_buttons(struct tp_dispatch *tp, uint64_t time)
|
|||
enum libinput_button_state state;
|
||||
|
||||
if ((current & 0x1) ^ (old & 0x1)) {
|
||||
uint32_t b;
|
||||
|
||||
if (!!(current & 0x1))
|
||||
state = LIBINPUT_BUTTON_STATE_PRESSED;
|
||||
else
|
||||
state = LIBINPUT_BUTTON_STATE_RELEASED;
|
||||
|
||||
b = evdev_to_left_handed(tp->device, button);
|
||||
evdev_pointer_notify_button(tp->device,
|
||||
time,
|
||||
button,
|
||||
b,
|
||||
state);
|
||||
}
|
||||
|
||||
|
|
@ -758,10 +761,12 @@ tp_post_softbutton_buttons(struct tp_dispatch *tp, uint64_t time)
|
|||
}
|
||||
|
||||
if ((button & MIDDLE) || ((button & LEFT) && (button & RIGHT)))
|
||||
button = BTN_MIDDLE;
|
||||
button = evdev_to_left_handed(tp->device, BTN_MIDDLE);
|
||||
else if (button & RIGHT)
|
||||
button = BTN_RIGHT;
|
||||
else
|
||||
button = evdev_to_left_handed(tp->device, BTN_RIGHT);
|
||||
else if (button & LEFT)
|
||||
button = evdev_to_left_handed(tp->device, BTN_LEFT);
|
||||
else /* main area is always BTN_LEFT */
|
||||
button = BTN_LEFT;
|
||||
|
||||
tp->buttons.active = button;
|
||||
|
|
|
|||
|
|
@ -1056,6 +1056,23 @@ tp_sendevents_get_default_mode(struct libinput_device *device)
|
|||
return LIBINPUT_CONFIG_SEND_EVENTS_ENABLED;
|
||||
}
|
||||
|
||||
static void
|
||||
tp_change_to_left_handed(struct evdev_device *device)
|
||||
{
|
||||
struct tp_dispatch *tp = (struct tp_dispatch *)device->dispatch;
|
||||
|
||||
if (device->buttons.want_left_handed == device->buttons.left_handed)
|
||||
return;
|
||||
|
||||
if (tp->buttons.state & 0x3) /* BTN_LEFT|BTN_RIGHT */
|
||||
return;
|
||||
|
||||
/* tapping and clickfinger aren't affected by left-handed config,
|
||||
* so checking physical buttons is enough */
|
||||
|
||||
device->buttons.left_handed = device->buttons.want_left_handed;
|
||||
}
|
||||
|
||||
struct evdev_dispatch *
|
||||
evdev_mt_touchpad_create(struct evdev_device *device)
|
||||
{
|
||||
|
|
@ -1078,5 +1095,7 @@ evdev_mt_touchpad_create(struct evdev_device *device)
|
|||
tp->sendevents.config.get_mode = tp_sendevents_get_mode;
|
||||
tp->sendevents.config.get_default_mode = tp_sendevents_get_default_mode;
|
||||
|
||||
evdev_init_left_handed(device, tp_change_to_left_handed);
|
||||
|
||||
return &tp->base;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue