On 26/10/14 11:11 PM, Peter Hutterer wrote:
> On Fri, Oct 24, 2014 at 01:18:06PM -0500, Derek Foreman wrote:
>> Currently libinput users just see choppy input if the kernel event queue
>> overflows.  This patch passes along an event so the caller can at least
>> log it.
> 
> any reason you didn't just log it through libinput if that's all you want to
> do?
> 
> not a big fan of having an event for what is essentially an implementation
> detail in the public API.

That's fair - I guess there's nothing the caller can (or should) do in
response to this anyway.

New patch to follow.

> Cheers,
>    Peter
> 
>> ---
>>  src/evdev.c            |  1 +
>>  src/libinput-private.h |  3 +++
>>  src/libinput.c         | 18 ++++++++++++++++++
>>  src/libinput.h         |  5 +++++
>>  4 files changed, 27 insertions(+)
>>
>> diff --git a/src/evdev.c b/src/evdev.c
>> index d8e3e5a..157bed7 100644
>> --- a/src/evdev.c
>> +++ b/src/evdev.c
>> @@ -929,6 +929,7 @@ evdev_device_dispatch(void *data)
>>                         to the current state */
>>                      ev.code = SYN_REPORT;
>>                      evdev_device_dispatch_one(device, &ev);
>> +                    notify_overflowed_device(&device->base);
>>  
>>                      rc = evdev_sync_device(device);
>>                      if (rc == 0)
>> diff --git a/src/libinput-private.h b/src/libinput-private.h
>> index 5a975d9..4606565 100644
>> --- a/src/libinput-private.h
>> +++ b/src/libinput-private.h
>> @@ -212,6 +212,9 @@ void
>>  notify_removed_device(struct libinput_device *device);
>>  
>>  void
>> +notify_overflowed_device(struct libinput_device *device);
>> +
>> +void
>>  keyboard_notify_key(struct libinput_device *device,
>>                  uint32_t time,
>>                  uint32_t key,
>> diff --git a/src/libinput.c b/src/libinput.c
>> index 5780a92..81528b7 100644
>> --- a/src/libinput.c
>> +++ b/src/libinput.c
>> @@ -171,6 +171,7 @@ libinput_event_get_pointer_event(struct libinput_event 
>> *event)
>>              abort(); /* not used as actual event type */
>>      case LIBINPUT_EVENT_DEVICE_ADDED:
>>      case LIBINPUT_EVENT_DEVICE_REMOVED:
>> +    case LIBINPUT_EVENT_DEVICE_OVERFLOW:
>>      case LIBINPUT_EVENT_KEYBOARD_KEY:
>>              break;
>>      case LIBINPUT_EVENT_POINTER_MOTION:
>> @@ -197,6 +198,7 @@ libinput_event_get_keyboard_event(struct libinput_event 
>> *event)
>>              abort(); /* not used as actual event type */
>>      case LIBINPUT_EVENT_DEVICE_ADDED:
>>      case LIBINPUT_EVENT_DEVICE_REMOVED:
>> +    case LIBINPUT_EVENT_DEVICE_OVERFLOW:
>>              break;
>>      case LIBINPUT_EVENT_KEYBOARD_KEY:
>>              return (struct libinput_event_keyboard *) event;
>> @@ -223,6 +225,7 @@ libinput_event_get_touch_event(struct libinput_event 
>> *event)
>>              abort(); /* not used as actual event type */
>>      case LIBINPUT_EVENT_DEVICE_ADDED:
>>      case LIBINPUT_EVENT_DEVICE_REMOVED:
>> +    case LIBINPUT_EVENT_DEVICE_OVERFLOW:
>>      case LIBINPUT_EVENT_KEYBOARD_KEY:
>>      case LIBINPUT_EVENT_POINTER_MOTION:
>>      case LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE:
>> @@ -248,6 +251,7 @@ libinput_event_get_device_notify_event(struct 
>> libinput_event *event)
>>              abort(); /* not used as actual event type */
>>      case LIBINPUT_EVENT_DEVICE_ADDED:
>>      case LIBINPUT_EVENT_DEVICE_REMOVED:
>> +    case LIBINPUT_EVENT_DEVICE_OVERFLOW:
>>              return (struct libinput_event_device_notify *) event;
>>      case LIBINPUT_EVENT_KEYBOARD_KEY:
>>      case LIBINPUT_EVENT_POINTER_MOTION:
>> @@ -831,6 +835,20 @@ notify_removed_device(struct libinput_device *device)
>>  }
>>  
>>  void
>> +notify_overflowed_device(struct libinput_device *device)
>> +{
>> +    struct libinput_event_device_notify *overflowed_device_event;
>> +
>> +    overflowed_device_event = zalloc(sizeof *overflowed_device_event);
>> +    if (!overflowed_device_event)
>> +            return;
>> +
>> +    post_base_event(device,
>> +                    LIBINPUT_EVENT_DEVICE_OVERFLOW,
>> +                    &overflowed_device_event->base);
>> +}
>> +
>> +void
>>  keyboard_notify_key(struct libinput_device *device,
>>                  uint32_t time,
>>                  uint32_t key,
>> diff --git a/src/libinput.h b/src/libinput.h
>> index 9cc6f52..39c9f92 100644
>> --- a/src/libinput.h
>> +++ b/src/libinput.h
>> @@ -230,6 +230,11 @@ enum libinput_event_type {
>>       */
>>      LIBINPUT_EVENT_DEVICE_REMOVED,
>>  
>> +    /**
>> +     * Signals that the kernel event queue for the device has overflowed.
>> +     */
>> +    LIBINPUT_EVENT_DEVICE_OVERFLOW,
>> +
>>      LIBINPUT_EVENT_KEYBOARD_KEY = 300,
>>  
>>      LIBINPUT_EVENT_POINTER_MOTION = 400,
>> -- 
>> 2.1.1
>>
>> _______________________________________________
>> wayland-devel mailing list
>> [email protected]
>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>>

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to