Commit graph

897 commits

Author SHA1 Message Date
Peter Hutterer
fe2abeda9d eis: drop declaration for eis_client_has_capability()
The implementation of this was removed in 408a3a94
2023-05-18 22:03:27 +00:00
Peter Hutterer
73662468cf CI: bump to use F38 2023-05-18 07:26:54 +00:00
Jan Beich
cc046f1f67 util: avoid /proc on BSDs (but keep for tests)
/proc is removed on OpenBSD, deprecated on FreeBSD or may not contain
Linux-style nodes.

Not mounted:

  test_cmdline_as_str                  [ ERROR ]
  Error: src/util-strings.c:483: assertion failed: fd >= 0 (-1 >= 0)

Mounted but only has /proc/curproc instead of /proc/self:

  test_cmdline_as_str                  [ ERROR ]
  Error: child killed by signal 11
2023-05-18 05:11:55 +00:00
Jan Beich
c7517b2737 liboeffis: expand sd_bus_close_unref for basu compatibility
ld: error: undefined symbol: sd_bus_close_unref
>>> referenced by liboeffis.c:116 (src/liboeffis.c:116)
>>>               liboeffis.c.o:(oeffis_destroy) in archive src/liboeffis.a

See also https://github.com/systemd/systemd/commit/bd62b7448623
2023-05-18 05:11:55 +00:00
Jan Beich
2a2c4cdd49 meson: depend on elogind or basu if systemd is missing
systemd isn't portable to non-Linux. However, sd-bus API was extracted
into a standalone library that works on BSDs.
2023-05-18 04:25:44 +00:00
Jan Beich
35e7ad9717 meson: depend on epoll-shim for BSDs
src/util-sources.c:29:10: fatal error: 'sys/epoll.h' file not found
 #include <sys/epoll.h>
          ^~~~~~~~~~~~~

ld: error: undefined symbol: epoll_ctl
>>> referenced by util-sources.c:76 (src/util-sources.c:76)
>>>               libutil.a.p/util-sources.c.o:(source_remove) in archive src/libutil.a
>>> referenced by util-sources.c:200 (src/util-sources.c:200)
>>>               libutil.a.p/util-sources.c.o:(sink_add_source) in archive src/libutil.a

ld: error: undefined symbol: epoll_create1
>>> referenced by util-sources.c:152 (src/util-sources.c:152)
>>>               libutil.a.p/util-sources.c.o:(sink_new) in archive src/libutil.a

ld: error: undefined symbol: epoll_wait
>>> referenced by util-sources.c:169 (src/util-sources.c:169)
>>>               libutil.a.p/util-sources.c.o:(sink_dispatch) in archive src/libutil.a
2023-05-18 04:15:36 +00:00
Jan Beich
53482faa57 meson: depend on math library for BSDs
ld: error: undefined symbol: __isnormal
>>> referenced by util-strings.h:243 (src/util-strings.h:243)
>>>               test/unit-tests-utils.p/.._src_util-strings.c.o:(xatod)
2023-05-18 04:15:36 +00:00
Peter Hutterer
3b8ce3dca1 Drop a few unused unref functions
Fixes 'warning: unused function 'ei_device_unrefp' [-Wunused-function]'
and friends.
2023-05-18 14:03:26 +10:00
Peter Hutterer
7015fa6ad0 brei: move the object_id_t typedefs to the brei-proto.h header
It's not the perfect place but here it does the least harm and it fixes
the noisy compiler warnings:
'warning: redefinition of typedef 'object_id_t' is a C11 feature [-Wtypedef-redefinition]'

Fixes #31
2023-05-18 14:03:26 +10:00
Peter Hutterer
92b002a013 CI: move the pip package list into the config.yml file as well 2023-05-18 12:07:19 +10:00
Peter Hutterer
ade03d5245 CI: install meson and ninja from pip
Let's keep testing against the most recent stable meson/ninja releases.
2023-05-18 12:05:59 +10:00
Peter Hutterer
df268d618a libei 1.0.0rc1 2023-05-17 12:28:12 +10:00
Peter Hutterer
5215be1079 README: fix the paragraph talking about the protocol 2023-05-17 12:28:12 +10:00
Peter Hutterer
9d2568e55b proto: fix a typo 2023-05-16 15:47:49 +10:00
Peter Hutterer
e0a6c75cb4 protocol: widen the callback_data arg for ping/sync to 64bit
The only invocations we have right now of these callbacks ignore the
argument or force it to zero. But in the future we may have an interface
that requires a callback and that interface may need to store a
timestamp or object ID in this argument - so let's make sure we have
enough space for that.
2023-05-16 15:09:47 +10:00
Peter Hutterer
32c03fab35 proto: document the callback-data for pingpong/callback better 2023-05-16 15:06:49 +10:00
Peter Hutterer
cdab45a9f4 ei: drop unused ei_insert_device_removed_event()
Unused since 2bb846696f "Change to use server-created devices"
2023-05-16 11:47:01 +10:00
Peter Hutterer
3e47f544c2 ei: drop ei_seat_bind_capability() and the unbind equivalent
This function is almost always wrong, very few clients will want to bind
to a single capability. Having this function means clients will use it to
bind caps one-by-one, causing the EIS implementation to create (an later
destroy) devices with capabilities that are about to be bound again anyway.
Better to have an API that encourages clients to bind all at once.

EIS implementation could avoid this by using a pingpong roundtrip in
response to a bind call, but removing this API is likely going to have
the same utility.
2023-05-10 12:25:40 +10:00
Peter Hutterer
44de97d649 test: switch to use ei_seat_bind_capabilities()
Better than one-by-one where we bind multiple capabilities. And
ei_seat_bind_capability() is about to be removed so let's switch all
of them.
2023-05-10 12:21:40 +10:00
Peter Hutterer
4adf483195 test: add the new caps to the bind-all-caps test
And bind them all at once, might as well
2023-05-10 12:21:04 +10:00
Peter Hutterer
a890ce96bb tools: bind to the new capabilities in ei-debug-events 2023-05-10 12:21:04 +10:00
Peter Hutterer
fafc30d4cc meson.build: change the test builds to be a feature
This way we get to use 'auto' feature which will enable the tests
as dependencies are available. Right now, the basic tests don't have any
dependencies beyond what libei needs, only the pytests have extra
requirements that are handled in the 'auto' processing.
2023-05-10 12:10:40 +10:00
Peter Hutterer
95a5cebabb meson.build: list if oeffis is built in the summary 2023-05-10 12:10:40 +10:00
Peter Hutterer
bd1dd67892 test: fix the oeffis pytest
Since the soname was added, the liboeffis.so file no longer exists in
the build directory - it is created on install.

Not sure how this passed the CI pytest run but it certainly fails
locally.
2023-05-10 12:10:40 +10:00
Peter Hutterer
333e98a191 doc/api: add some more high-level overview to the libei page 2023-05-10 11:36:51 +10:00
Peter Hutterer
8302b1ddac doc/api: add the unicode icons for a splash of color
Sometimes it's good to focus on the important issues in life.
2023-05-10 11:36:51 +10:00
Peter Hutterer
5c64a9d77c doc/api: add liboeffis to the various sections 2023-05-10 11:36:51 +10:00
Peter Hutterer
e130c9aeb1 meson.build: add soname versions to the generated libraries
Our soname tracks the library version, even though on Linux only the
first number is actually being used. The rest is just to make it easier
for tools to find the right version. So let's do that.

And until the 1.0 version is out and our library ABI is stable, hardcode
to 1.0.0

This commit also moves the header define up for better grouping.
2023-05-09 00:52:43 +00:00
Peter Hutterer
b37868e904 doc/protocol: fix link to the liboeffis API docs 2023-05-09 09:56:29 +10:00
Peter Hutterer
5a1caca643 doc/protocol: fix the link to the C libraries section 2023-05-09 09:53:51 +10:00
Peter Hutterer
40ba30da82 meson.build: install our headers into a versioned subfolder
This makes it possible to have multiple (incompatible) versions
installed simultaneously.

Any incompatible version requires us bumping the major version, so our
headers are simply installed into the hardcoded libei-1.0 subdir.

This also changes the pkgconfig names to include the API version, so
it's now `pkgconfig --cflags libei-1.0`.
2023-05-08 14:33:50 +10:00
Peter Hutterer
a7f9712d83 tools: make the button/scroll caps available on demo-server seats 2023-05-08 14:08:32 +10:00
Peter Hutterer
1fc58e3a90 tools: ei-demo-client should bind all caps at once
Binding single capabilities is allowed but our device handling expects
the devices to be "complete". So if we bind to pointer only, the demo
server creates a pointer-only device and then fails at sending buttons.
2023-05-08 14:08:32 +10:00
Peter Hutterer
61d97269ab ei: fix capability checks for sending events
Fixes da37da1308
2023-05-08 14:08:32 +10:00
Peter Hutterer
d01a39ef82 tools: ei-demo-client needs to bind to the new button/scroll caps 2023-05-08 13:49:31 +10:00
Peter Hutterer
3e39dabeac tools/demo-server: check if we have a touch before sending one
If the client was disconnected, the returned touch is NULL. Check for
that instead of blindly assuming we can send the touch.
2023-05-08 13:47:06 +10:00
Peter Hutterer
2a178f416f tools/demo-server: only print now if we actually have events
And move it to the start of the loop so we print the current timestamp
followed by processing the incoming events (if any). These events thus
should have timestamps less than now.
2023-05-08 13:47:06 +10:00
Peter Hutterer
408a3a9462 eis: drop the vestiges of client restrictions
Leftover from 479bda259a (and possibly
others). This dates back to when a client could have restrictions
configured on the same fd. This is now all out-of-band (portals!) so the
compositor knows what the client is allowed to set up anyway.

No need for this (read-only) API here.
2023-05-08 13:38:40 +10:00
Peter Hutterer
f56a9000c0 eis: split up the API docs into smaller categories
See c076c48336 for the libei change,
mostly copy-pasted after that anyway.
2023-05-08 13:30:36 +10:00
Peter Hutterer
08efdee83d eis: remove a misleading paragraph from the docs
The 99% use-case for receiver clients is probably going to be capturing
logical input, not physical input.
2023-05-08 13:03:15 +10:00
Peter Hutterer
b3c202af23 ei: tighten the event type checks
Require exact event types, not just approximate ones. It's always a bug
to call any of these functions for an event type that's something else.
2023-05-08 12:49:40 +10:00
Peter Hutterer
c076c48336 doc: split the libei doxygen API into multiple submodules
The API is quite long now, so let's split it up into multiple logical
groups. The main page is now roughly graspable, with seats, devices,
regions and keymaps in submodules.

The sender and receiver APIs are also grouped into two separate APIs -
anyone implementing either doesn't need the other, it just messes things
up.
2023-05-05 14:05:30 +10:00
Peter Hutterer
5bb6e80ded doc: some minor doxygen updates 2023-05-05 14:05:30 +10:00
Peter Hutterer
aa866c5a92 Add a few more doxygen comments 2023-05-05 14:05:30 +10:00
Peter Hutterer
60d94aecda doc: rename the mainpage sections to get @ref ei to work
Otherwise doxygen tries to link to these sections instead to the struct
ei/eis it's supposed to link to.
2023-05-05 14:05:30 +10:00
Peter Hutterer
e6954b76d3 eis: change the API to match the protocol interfaces closer
Same as the corresponding ei change a few commits ago, this one does all
the EIS renaming in the same manner.

As with the libei changes, an EIS implementation must now handle the
EIS_DEVICE_CAP_BUTTON and EI_DEVICE_CAP_SCROLL capabilities. In
virtually all cases, clients will likely expect that a device with the
pointer or absolute pointer capabilities will also have button and
scroll capabilities.
2023-05-05 14:04:17 +10:00
Peter Hutterer
da37da1308 ei: change the API to match the protocol interfaces closer
Now that the protocol interfaces are more fine-grained, let's match this
with the C API too.

This is just a rename of things so that in general
ei_pointer_*foo now becomes ei_foo*.

A few notable renames for better readability here:
- ei_device_scroll_delta (because scroll_scroll is awkward)
- ei_event_scroll_get_dx/dy and
  ei_event_scroll_get_discrete_dx/dy to indicate the delta-ness

Beyond that, clients must ensure to check/bind to the new
EI_DEVICE_CAP_BUTTON and EI_DEVICE_CAP_SCROLL capabilities to be able
to send button or scroll events.

Note that this API now allows for an EIS implementation to send a device
that only has a button or a scroll cap. Or a pointer cap without
buttons, etc. It's up to the clients how to handle such devices
(probably: ignore them).
2023-05-05 14:02:33 +10:00
Peter Hutterer
6ee202569f doc: point to the main branch, not the master branch 2023-05-04 14:11:34 +10:00
Peter Hutterer
e1b2db8c10 Purge the pseudo-code examples
They haven't been kept up-to-date with API changes, so let's point to
the actual working demo tools instead.
2023-05-04 14:11:34 +10:00
Peter Hutterer
a902d5dbd8 protocol: replace the capabilities enum with an interface list
Previously we had ei_seat.capabilities and ei_device.capabilities,
both referring to the same enum. The seat caps were used to bind,
the device caps were used to announce capabilities.

The device caps were already mostly superfluous as the information
they carried was implicitly available by the set of interfaces
the device announced - if the device has a keyboard interface
it must also have the keyboard capability.

So let's drop the separate enum and make the capabilities
the set of supported interfaces. In the device we can drop the
event directly and just send the interface list. In the seat
we have a capability event that sends each *possible* interface
with a custom-assigned mask. The client can then use that mask
to bind to the capability as before.

For example:
   <- ei_seat.capability(0x1, "ei_pointer")
   <- ei_seat.capability(0x4, "ei_keyboard")
   <- ei_seat.capability(0x8, "ei_touchscreen")
   <- ei_seat.done()
   -> ei_seat.bind(0x4 | 0x8)  # bind to keyboard and touchscreen
   <- ei_seat.device()
   -> ei_device.interface("ei_keyboard")
   -> ei_device.interface("ei_touchscreen")
   <- ei_device.done()

In the generated bindings we simply use the interface index
to generate the masks, but the protocol at least states that
the mask may not be constant.

Because the button/scroll interfaces are not exposed by the C API, some
of the handling is a bit awkward since we need to use both depending
whether we have pointer/pointer_absolute selected.

Fixes #28

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2023-05-02 05:53:25 +00:00