[PATCH libinput] Add libinput_device_pointer_has_button over the plain has_button

Peter Hutterer peter.hutterer at who-t.net
Fri Feb 13 16:46:10 PST 2015


On 14/02/2015 05:00 , Bill Spitzak wrote:
> Actually, more to the point, it sounds like the client is unable to
> distinguish the BTN_LEFT produced by the pointer from the BTN_LEFT
> produced by the pad.

the caller can tell what event caused the button.

> If in fact it *can* be distinguished then there should be some very
> similar api to this "has" function. For instance if there is some
> sub-device id sent with the events then this function should take that
> same sub-device id.

what sub-device ID? we don't have subdevices, that was an idea that was
floated for a while and obsoleted by the device group.

Cheers,
  Peter

> On 02/13/2015 10:45 AM, Bill Spitzak wrote:
>> Why not just say that is what libinput_device_has_button does in case
>> there is an ambiguity?
>>
>> On 02/12/2015 08:43 PM, Peter Hutterer wrote:
>>> If a device has multiple capabilities, has_button is imprecise. A
>>> device with
>>> tablet and pointer capability for example may have BTN_LEFT on the
>>> pointer
>>> interface but not on the tablet interface.
>>>
>>> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
>>> ---
>>>   src/libinput.c   | 10 ++++++++--
>>>   src/libinput.h   | 10 +++++++++-
>>>   src/libinput.sym |  2 ++
>>>   3 files changed, 19 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/src/libinput.c b/src/libinput.c
>>> index 81862d5..b903caa 100644
>>> --- a/src/libinput.c
>>> +++ b/src/libinput.c
>>> @@ -1364,11 +1364,17 @@ libinput_device_get_size(struct
>>> libinput_device *device,
>>>   }
>>>
>>>   LIBINPUT_EXPORT int
>>> -libinput_device_has_button(struct libinput_device *device, uint32_t
>>> code)
>>> +libinput_device_pointer_has_button(struct libinput_device *device,
>>> uint32_t code)
>>>   {
>>>       return evdev_device_has_button((struct evdev_device *)device,
>>> code);
>>>   }
>>>
>>> +LIBINPUT_EXPORT int
>>> +libinput_device_has_button(struct libinput_device *device, uint32_t
>>> code)
>>> +{
>>> +    return libinput_device_pointer_has_button(device, code);
>>> +}
>>> +
>>>   LIBINPUT_EXPORT struct libinput_event *
>>>   libinput_event_device_notify_get_base_event(struct
>>> libinput_event_device_notify *event)
>>>   {
>>> @@ -1805,7 +1811,7 @@ LIBINPUT_EXPORT enum libinput_config_status
>>>   libinput_device_config_scroll_set_button(struct libinput_device
>>> *device,
>>>                        uint32_t button)
>>>   {
>>> -    if (button && !libinput_device_has_button(device, button))
>>> +    if (button && !libinput_device_pointer_has_button(device, button))
>>>           return LIBINPUT_CONFIG_STATUS_INVALID;
>>>
>>>       if ((libinput_device_config_scroll_get_methods(device) &
>>> diff --git a/src/libinput.h b/src/libinput.h
>>> index 857b3fa..0fdca7b 100644
>>> --- a/src/libinput.h
>>> +++ b/src/libinput.h
>>> @@ -1661,7 +1661,15 @@ libinput_device_get_size(struct libinput_device
>>> *device,
>>>    * on error.
>>>    */
>>>   int
>>> -libinput_device_has_button(struct libinput_device *device, uint32_t
>>> code);
>>> +libinput_device_pointer_has_button(struct libinput_device *device,
>>> uint32_t code);
>>> +
>>> +/**
>>> + * @ingroup device
>>> + *
>>> + * @deprecated Use libinput_device_pointer_has_button() instead.
>>> + */
>>> +int
>>> +libinput_device_has_button(struct libinput_device *device, uint32_t
>>> code) LIBINPUT_ATTRIBUTE_DEPRECATED;
>>>
>>>   /**
>>>    * @ingroup device
>>> diff --git a/src/libinput.sym b/src/libinput.sym
>>> index cf13789..644e910 100644
>>> --- a/src/libinput.sym
>>> +++ b/src/libinput.sym
>>> @@ -133,4 +133,6 @@ LIBINPUT_0.11.0 {
>>>       libinput_device_group_ref;
>>>       libinput_device_group_set_user_data;
>>>       libinput_device_group_unref;
>>> +
>>> +    libinput_device_pointer_has_button;
>>>   } LIBINPUT_0.9.0;
>>>



More information about the wayland-devel mailing list