[PATCH libinput 1/6] evdev: add evdev_pointer_notify_physical_button
Hans de Goede
hdegoede at redhat.com
Wed Apr 15 01:33:38 PDT 2015
Hi,
For some reason some of the patches have not made it to my mailbox,
so I'm reviewing the entire set here, partially from the web archive.
Patches 1 and 2 looks good and are:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
The state machine code in patch 3 has some issues:
In evdev_middlebutton_ldown_handle_event() you do:
+ case MIDDLEBUTTON_EVENT_R_UP:
+ break;
But in evdev_middlebutton_rdown_handle_event() you do:
+ case MIDDLEBUTTON_EVENT_L_UP:
+ middlebutton_state_error(device, event);
+ break;
This is not consistent. Also you forget to cancel the timer
in a whole bunch of code paths, one example is:
Press left button and release before timeout, now we're
back in idle with the timer running and have:
+evdev_middlebutton_idle_handle_event(struct evdev_device *device,
+ uint64_t time,
+ enum evdev_middlebutton_event event)
+ case MIDDLEBUTTON_EVENT_TIMEOUT:
+ middlebutton_state_error(device, event);
+ break;
Triggering. I suggest doing what we've ended up doing in most other
state machines and have a set_state helper which is the only one
to ever touch device->middlebutton.state, that can then always
cancel the timer when called, and (re)set the timer and
device->middlebutton.first_event_time for the states where we want
to start the timer on entering the state.
Also you may want to make the sleep in litest_timeout_middlebutton
slightly larger, at least in all other litest_timeout functions the
sleep is somewhat longer then the timeout in libinput to avoid
surprises / races.
Patches 4 - 6 look good and are:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
On 15-04-15 05:51, Peter Hutterer wrote:
> No functional changes at this point, this merely splits up any physical
> buttons (i.e. that represent buttons that exist on that device) vs. other
> buttons that are emulated in some way or another.
>
> This is in preparation for the addition of middle button emulation.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
> src/evdev-mt-touchpad-buttons.c | 8 ++++----
> src/evdev.c | 17 +++++++++++++----
> src/evdev.h | 5 +++++
> 3 files changed, 22 insertions(+), 8 deletions(-)
>
> diff --git a/src/evdev-mt-touchpad-buttons.c b/src/evdev-mt-touchpad-buttons.c
> index 18c32fd..56a054c 100644
> --- a/src/evdev-mt-touchpad-buttons.c
> +++ b/src/evdev-mt-touchpad-buttons.c
> @@ -734,10 +734,10 @@ tp_post_physical_buttons(struct tp_dispatch *tp, uint64_t time)
> state = LIBINPUT_BUTTON_STATE_RELEASED;
>
> b = evdev_to_left_handed(tp->device, button);
> - evdev_pointer_notify_button(tp->device,
> - time,
> - b,
> - state);
> + evdev_pointer_notify_physical_button(tp->device,
> + time,
> + b,
> + state);
> }
>
> button++;
> diff --git a/src/evdev.c b/src/evdev.c
> index 5b4b2b6..6f87484 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -138,6 +138,15 @@ evdev_keyboard_notify_key(struct evdev_device *device,
> }
>
> void
> +evdev_pointer_notify_physical_button(struct evdev_device *device,
> + uint32_t time,
> + int button,
> + enum libinput_button_state state)
> +{
> + evdev_pointer_notify_button(device, time, button, state);
> +}
> +
> +void
> evdev_pointer_notify_button(struct evdev_device *device,
> uint32_t time,
> int button,
> @@ -430,10 +439,10 @@ evdev_button_scroll_button(struct evdev_device *device,
> } else {
> /* If the button is released quickly enough emit the
> * button press/release events. */
> - evdev_pointer_notify_button(device, time,
> + evdev_pointer_notify_physical_button(device, time,
> device->scroll.button,
> LIBINPUT_BUTTON_STATE_PRESSED);
> - evdev_pointer_notify_button(device, time,
> + evdev_pointer_notify_physical_button(device, time,
> device->scroll.button,
> LIBINPUT_BUTTON_STATE_RELEASED);
> }
> @@ -505,7 +514,7 @@ evdev_process_key(struct evdev_device *device,
> evdev_button_scroll_button(device, time, e->value);
> break;
> }
> - evdev_pointer_notify_button(
> + evdev_pointer_notify_physical_button(
> device,
> time,
> evdev_to_left_handed(device, e->code),
> @@ -2208,7 +2217,7 @@ release_pressed_keys(struct evdev_device *device)
> LIBINPUT_KEY_STATE_RELEASED);
> break;
> case EVDEV_KEY_TYPE_BUTTON:
> - evdev_pointer_notify_button(
> + evdev_pointer_notify_physical_button(
> device,
> time,
> evdev_to_left_handed(device, code),
> diff --git a/src/evdev.h b/src/evdev.h
> index af09baa..f2ce9bc 100644
> --- a/src/evdev.h
> +++ b/src/evdev.h
> @@ -306,6 +306,11 @@ evdev_pointer_notify_button(struct evdev_device *device,
> uint32_t time,
> int button,
> enum libinput_button_state state);
> +void
> +evdev_pointer_notify_physical_button(struct evdev_device *device,
> + uint32_t time,
> + int button,
> + enum libinput_button_state state);
>
> void
> evdev_init_natural_scroll(struct evdev_device *device);
>
More information about the wayland-devel
mailing list