On Thu, Apr 03, 2014 at 10:40:50PM +0200, Jonas Ådahl wrote: > On Tue, Apr 01, 2014 at 01:47:08PM +1000, Peter Hutterer wrote: > > For specific tests we need something that e.g. looks like a touchpad, but > > has > > a different name, a different number of slots, etc. In this case, the > > following code will do exactly that: > > > > struct input_absinfo overrides[] = { > > { .value = ABS_MT_SLOT, .minimum = 0, .maximum = 100 }, > > { .value = -1 }, > > }; > > > > litest_create_device_with_overrides(LITEST_SYNAPTICS_CLICKPAD, > > NULL, NULL, &overrides, NULL); > > > > For general event codes, overrides can only add to the set of events, they > > can't remove. > > I have gone through the patches as well and overall I think its a good > approach. Anyhow, I have some comments, some here, some inline: > > This is a quite nice API for creating custom devices, we can probably > replace highres device with using wacom-touch with overrides. What is > currently lacking is to adding multiple devices to the same libinput > context. We could either just add two more variants of these functions > taking a libinput context, or we could change the behavior to implicitly > append to the same context during a test run. Preferences or other > ideas?
While I think automatically adding it is more convenient I do tend towards the extra API to make it implicit what is added to which context. A simple litest_add_device_... should suffice here. > > --- > > test/litest.c | 158 > > ++++++++++++++++++++++++++++++++++++++++++++++++++-------- > > test/litest.h | 7 +++ > > 2 files changed, 144 insertions(+), 21 deletions(-) > > > > diff --git a/test/litest.c b/test/litest.c > > index 23ba76b..3a69a09 100644 > > --- a/test/litest.c > > +++ b/test/litest.c > > @@ -334,39 +334,149 @@ const struct libinput_interface interface = { > > .close_restricted = close_restricted, > > }; > > > > -struct litest_device * > > -litest_create_device(enum litest_device_type which) > > + > > +static struct input_absinfo * > > +merge_absinfo(const struct input_absinfo *orig, > > + const struct input_absinfo *override) > > { > > - struct litest_device *d = zalloc(sizeof(*d)); > > - int fd; > > - int rc; > > - const char *path; > > + struct input_absinfo *abs; > > + int nelem, i; > > + size_t sz = ABS_MAX + 1; > > + > > + if (!orig) > > + return NULL; > > + > > + abs = calloc(sz, sizeof(*abs)); > > + ck_assert(abs != NULL); > > + > > + nelem = 0; > > + while(orig[nelem].value != -1) { > > Space between while and (. all amended, thanks. > > + abs[nelem] = orig[nelem]; > > + nelem++; > > + ck_assert_int_lt(nelem, sz); > > + } > > + > > + /* just append, if the same axis is present twice, libevdev will > > + only use the last value anyway */ > > I can't find this specified in the libevdev API. For events, I would > assume that it ignores extra enabled events as its a binary state, but > for abs values it's unclear if its the first or the last abs values that > is will be used. I'll add that to the libevdev documentation. All we do here is call libevdev_enable_event_code() in a loop. For most types that doesn't do much but for abs it does override the previously set value. Cheers, Peter _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel