Commit graph

182 commits

Author SHA1 Message Date
Peter Hutterer
40d7b3cade Add support for touch events
Client-side the approach is a managed touch object rather than passing the
touchid around. This is intentional, it allows for a stackable API in the
future if we need to add things like pressure or major/minor to it.

On the server side the touches are managed through the event object anyway, so
we don't need the same abstraction there.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-27 23:48:51 +00:00
Peter Hutterer
a27276b4c5 Drop mentions of capability monitoring
The original idea here was that a libei client could request the Pointer
capability to be notified of any pointer movements, thus providing a simple
way to capture input for the synergy use-case.

This is a can of worms better left untouched. How input events are captured
and what information is available is quite specific to the display server, let
alone the triggers for when it needs to start and stop. To have that in libei
requires something like triggers ("start when pointer hits the edge") which
again opens a new can of worms. Which seat are we referring to? What is a
screen edge? How about shortcuts?

Receiving input events can be handled by libeis anyway: any EIS server is
capable of receiving input events by definition so the capability monitoring
could be solved by making the capturing compositor a libei client and the
other process an EIS server. i.e. the circle is closed with:

[compositor|libei] -> [EIS|synergy-client]
                               ||
	                  [synergy-server|libei] -> [EIS|compositor]

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 05:22:26 +00:00
Peter Hutterer
90d2b1b980 Add support for absolute pointer motion events
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 11:24:58 +10:00
Peter Hutterer
09ad65d5c6 Implement eis_device_set_name and get_name
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 11:21:46 +10:00
Peter Hutterer
eb40872770 Fix client-side removal of devices
Because events may be in-transit when a client removes the device, we need to
make this a full roundtrip to the server. Otherwise the client may assume a
device is removed, releases all references and then gets the original device
added event for that device. Better to have this as a round-trip instead.

This requires the server to call eis_device_disconnect() on the removed
notifications but we do so during eis_event_unref() anyway in case the server
forgets.

And it changes some of the API behaviors, so adjust the tests for that.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 10:41:55 +10:00
Peter Hutterer
08da49debf libei: log the error when writing a message
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 10:33:35 +10:00
Peter Hutterer
8eb7dde2cf libei: better device state debugging
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 10:33:33 +10:00
Peter Hutterer
f27414d778 libei: move the event to string conversion to the top
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 10:32:26 +10:00
Peter Hutterer
423427c6da libei: better debugging of message types
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 10:32:03 +10:00
Peter Hutterer
297fb502f9 libei: remove ei_ prefix from the internal queue functions
An attempt to make things less confusing

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 10:32:03 +10:00
Peter Hutterer
fa179e8778 libei: rename a set of functions for clarity
It's getting too confusing without prefixing

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 10:32:02 +10:00
Peter Hutterer
374f08b4f0 libei: drop two obsolete declarations
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 10:32:01 +10:00
Peter Hutterer
ad87b67906 Move the CASE_RETURN_STRING macro to util-macros.h
No point redefining this everywhere

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-24 10:32:00 +10:00
Peter Hutterer
a89309558a eis: pointer motion is in doubles, not ints
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-23 15:49:44 +10:00
Peter Hutterer
4c80b3df03 libei: export the eis_get_user_data() function
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-23 15:49:28 +10:00
Peter Hutterer
9e60619439 libeis: better logging of new device capabilities
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-23 09:47:44 +10:00
Peter Hutterer
cc085b26f1 Print the event type name for debugging
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-23 09:47:44 +10:00
Peter Hutterer
c72f27b4c2 eis: switch to eis_device_allow_capability()
The previous approach would implicitly allow any capability not known to the
server. Switch instead to requiring an explicit 'ok' for any capability the
server wants to support.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-17 05:29:01 +00:00
Peter Hutterer
3c464186c6 util: allow source_remove(NULL)
Removing a non-existing source has the desired effect after all - the source
won't generate events.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-16 14:07:23 +10:00
Peter Hutterer
e6acbdfa31 eis: include util-object for the socket backend
For correctness, it's pulled in by one of the other headers anyway.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-16 14:07:12 +10:00
Peter Hutterer
d2fdb2ae0e Fix two minor typos
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-16 14:07:06 +10:00
Peter Hutterer
31800cf870 util: make the OBJECT_IMPLEMENT_CREATE no longer static by default
Better for consistency with the other functions.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-15 23:23:51 +00:00
Olivier Fourdan
325d7e6a43 libei: Do not abort if LIBEI_SOCKET is not set
When called with NULL as the path to the EI socket, the function
ei_setup_backend_socket() will fallback to the LIBEI_SOCKET environment
variable to determine the path to the socket.

If that environment variable is not set, ei_setup_backend_socket() will
abort.

That means that an innocent client running in an environment without EI
support will be killed. If that client happens to be Xwayland, that would
abort the Xserver and take all X11 clients with it, including the window
manager itself in the case of mutter.

Return -ENOENT instead so that clients have a chance to recover and
survive the lack of EI support.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
2020-09-15 22:19:03 +00:00
Peter Hutterer
6ffdaab8f3 util: use xclose for the _cleanup_close_
Silences the valgrind warnings for fds that are initialized with -1

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-14 19:41:14 +10:00
Peter Hutterer
7605c7afa2 Make sure the keymap_fd is always -1
Default value for this is 0 so if we forget to check the keymap type (which we
do) we may end up treating it as a valid fd, closing stdin and generally
causing mayhem.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-09-14 18:22:02 +10:00
Peter Hutterer
4a918d17d8 libeis: namespace the capability-specific getters and setters
Naming scheme is now: ei_device_<capability>_get/set_<what>. So far the
range is the only one where we had to deal with the same thing for two
different capabilities and it's unlikely we'll have to have different keymaps
for different capabilities. But still, let's do this now while it's still
easy.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-28 14:13:56 +10:00
Peter Hutterer
e4840d4523 libei: namespace the capability-specific configure calls
Naming scheme is now: ei_device_<capability>_configure_<what>. So far the
range is the only one where we had to deal with the same thing for two
different capabilities and it's unlikely we'll have to have different keymaps
for different capabilities. But still, let's do this now while it's still
easy.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-28 14:13:53 +10:00
Peter Hutterer
c169e10af7 util: move the colorprint to util-color
And extend it a bit to be more flexible.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-27 11:49:20 +10:00
Peter Hutterer
4ae108fbff libeis: implement eis_device user_data getters/setters
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-27 11:49:20 +10:00
Peter Hutterer
ac42578811 replace the fallthrough comments with __attribute__((fallthrough))
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-26 11:00:50 +10:00
Peter Hutterer
6b3d9255cf libei: implement org.freedesktop.portal.EmulatedInput support
The current implementation of that portal has two methods: EmulateInput to
authenticate and Connect to get the fd to the EIS implementation. The portal
implementation is in charge of finding EIS and restricting it if need be.

This uses libsystemd because we can integrate that with epoll and our
libei_dispatch() method. GDBus requires a glib mainloop, so it's not really
suitable here. Given how simple this is anyway, it's easy to just do the DBus
bits in the caller and then hand the fd to ei_setup_backend_fd().

A eis-fake-portal is provided for testing, this "portal" can use the custom
portal bus name and connect the eis-demo-client to the eis-demo-server.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-25 13:35:18 +10:00
Peter Hutterer
f6c2f24a22 util: add xconnect to connect to a socket
Makes this re-usable.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-25 11:47:07 +10:00
Peter Hutterer
b49e4a48c9 test: move the sources and io tests to the util unit tests
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-25 11:37:18 +10:00
Peter Hutterer
b064d435ec test: make a separate binary for the utils tests
And add the tests for the list and string helpers as a first use-case, copied
from the libinput tests.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-25 11:37:18 +10:00
Peter Hutterer
f06095e0c8 libeis: fix the client-side keymap assignment
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-25 11:37:18 +10:00
Peter Hutterer
bc2bd3c09a libeis: correct the name of the set_keymap function
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-25 11:37:18 +10:00
Peter Hutterer
bde5b37acf Include stddef.h for size_t
And add the minimal build tests to make sure we build and link

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-24 13:01:37 +10:00
Peter Hutterer
b913e7e609 brei: fix a compiler warning in release mode
Re-ordering commands in buildtype=release means recvfd may not be set by the
time _cleanup_ is called (due to the goto outs). Replace those with return
statements, it's more logical here anyway.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-24 12:30:25 +10:00
Peter Hutterer
e238a5d049 util: fix receiving of multiple fds
Initial implementation only handled this correctly if the fds were over
multiple message headers, not multiple fds in the same message header.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-24 11:01:01 +10:00
Peter Hutterer
65c069e6a0 util: fix a valgrind warning in xsend_with_fd
valgrind complains about uninitialized bytes

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-24 08:53:49 +10:00
Peter Hutterer
17d396aaf1 Add size handling for the keymap
Just sending the fd isn't good enough, to mmap those we need the size argument
too.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-21 18:57:25 +10:00
Peter Hutterer
2a619fd4b4 utils: basic helper for creating a file in memory
Needed by the tools for keymap handling.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-21 16:03:34 +10:00
Peter Hutterer
819b1e86b1 libei: integration of keymap fd parsing
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-21 15:25:27 +10:00
Peter Hutterer
fef9580319 libeis: push the new brei_message one level up into eisproto
This is the proto parser and it'll know when we need an fd on the message, so
let's make sure we have everything in place to fetch the fd.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-21 15:25:27 +10:00
Peter Hutterer
397bb3f19d brei: hook up the brei message so we can retrieve an fd
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-21 15:25:27 +10:00
Peter Hutterer
38c50d0d3d libei: push the new brei_message one level up into eiproto
This is the proto parser and it'll know when we need an fd on the message, so
let's make sure we have everything in place to fetch the fd.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-21 14:51:53 +10:00
Peter Hutterer
d4fedc1a4b brei: abstract the message type away
Once we start passing fds within messages, we need something more abstract.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-21 14:51:53 +10:00
Peter Hutterer
dabd48c028 util: add fd passing to the iobufs
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-21 14:51:53 +10:00
Peter Hutterer
56ca4b4ac7 util: add sending and receiving fds to the io utilities
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-21 11:49:53 +10:00
Peter Hutterer
9e42b579d9 util: typo fix in comment
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2020-08-21 10:04:43 +10:00