RELEASE_MODIFIERS are now handled server side.
A client exited through CTRL+ALT+SHIFT+SUPER could sometimes not be entered again when the client
did not send a Modifiers (0) event.
Such a client would always respond with Modifiers (RELEASE_MODIFIERS) and immediately cause the sender to
exit again.
To prevent this, a modifier event with all modifiers released is now sent instead when the release modifiers are detected.
Instead of relying on release events not getting lost, every event now signals the opponent
to release its pointer grab.
There is one case that requires a Leave event:
Consider a Sending client A and receiving Client B.
If B enters the dead-zone of client A, it will send an enter event towards A but before
A receives the Release event, it may still send additional events towards B that should not cause
B to immediately revert to Receiving state again.
Therefore B puts itself into AwaitingLeave state until it receives a Leave event coming from A.
A responds to the Enter event coming from B with a leave event, to signify that it will no longer
send any events and releases it's pointer.
To guard against packet loss of the leave events, B sends additional enter events while it is in AwaitingLeave
mode until it receives a Leave event at some point.
This is still not resilient against possible packet reordering in UDP but in the (rare) case where a leave event arrives before some other event coming from A, the user would simply need to move the pointer into the dead-zone again.
When received motion events lead to entering the dead zone,
we set the state to sending but there may still be motion
events on the way so we must ignore those.
* macos: initial support
- adapted conditional compilation
- moved lan-mouse socket to ~/Library/Caches/lan-mouse-socket.sock instead of XDG_RUNTIME_DIR
- support for mouse input emulation
TODO: Keycode translation, input capture
better handling of background-service: lan-mouse can now be run without a gui by specifying --daemon as an argument.
Otherwise the servic will be run as a child process and correctly terminate when the window is closed / frontend exits.
Closes#38
* Support event consumer on KDE! (portal backend)
Support for KDE event emulation using the remote-desktop xdg-desktop-portal
* fix scrolling (TODO: smooth / kinetic scrolling)
* windows: fix compilation errors
* Update README.md
Previously when the output buffer was overwhelmed, additional
events were submitted until the outgoing buffer filled up, which
causes the wayland-connection to 'break' and not accept further attempts
to flush() the socket.
- manual eventloop now replaced by asycn-await using the tokio runtime
- dns no longer blocks the event loop
- simplifies logic
- makes xdg-desktop-portal easier to integrate
major update:
- remove threading overhead by resorting to an event driven design with mio as a backend for epoll
- Clients can now have an arbitrary amount of ip adresses and lan-mouse will automatically choose the correct one
- -> seemless switching between ethernet and wifi
- cli frontend + frontend adapter for future frontends
This allows to dynamically add clients when an event is received from an unknown IP address.
The user is asked to confirm any unknown connection from new clients.
Currently the back-ends for event producing and consuming are not yet notified, so events will not be received and sent to the newly created clients.
* support for cmdline args and better error handling
* make config.toml optional
* dont abuse panic for error handling
* update doc
* more panics removed
* more unwraps removed
* cleanup Cargo.toml
* exclude backend from windows build
* remove env include in windows build
* remove Backend from windows build
* fix compiler warning