mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-05-15 06:06:07 -06:00
[PR #426] feat(gui): cross-platform GUI singleton via dedicated socket #418
Labels
No labels
Xorg
documentation
enhancement
macos
pull-request
question
windows
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/lan-mouse#418
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/feschber/lan-mouse/pull/426
Author: @jondkinney
Created: 5/6/2026
Status: 🔄 Open
Base:
main← Head:split/07-singleton📝 Commits (10+)
31298f2feat: cross-platform wall-press auto-release fallbackbffbef0proto: add Bounds(width, height) event variant2219f45feat(emulation): display_bounds + warp_cursor for all backends5de5016feat(emulation): send Bounds + warp cursor on Enter68fab55feat(capture): cache peer bounds and use as wall-press upper clamp944e758ui: wrap window content in GtkScrolledWindow56f7730ui: rename Auto-Release group to scope it to outgoing capturecd63f5dfix: preserve cross-axis cursor position across machine transitions2571b47fix(capture/layer_shell): report screen-space cursor position on Entercbe2ec1fix(capture): warp host cursor to guest position on release📊 Changes
51 files changed (+4748 additions, -597 deletions)
View changed files
➕
.claude/scheduled_tasks.lock(+1 -0)📝
.gitignore(+1 -0)📝
Cargo.lock(+494 -204)📝
Cargo.toml(+5 -1)📝
input-capture/Cargo.toml(+1 -0)📝
input-capture/src/dummy.rs(+2 -2)📝
input-capture/src/layer_shell.rs(+67 -17)📝
input-capture/src/lib.rs(+574 -11)📝
input-capture/src/libei.rs(+5 -2)📝
input-capture/src/macos.rs(+257 -20)📝
input-capture/src/windows.rs(+1 -1)📝
input-capture/src/windows/event_thread.rs(+66 -12)📝
input-capture/src/x11.rs(+1 -1)📝
input-emulation/src/lib.rs(+49 -0)📝
input-emulation/src/libei.rs(+49 -2)📝
input-emulation/src/macos.rs(+110 -1)📝
input-emulation/src/windows.rs(+41 -4)📝
input-emulation/src/wlroots.rs(+219 -5)📝
input-emulation/src/x11.rs(+38 -1)📝
input-emulation/src/xdg_desktop_portal.rs(+13 -1)...and 31 more files
📄 Description
Summary
Cross-platform GUI singleton —
lan-mouselaunched twice no longer opens a second window.Dedicated
lan-mouse-gui.sock(Unix) /127.0.0.1:5253(Windows), separate from the daemon socket. First GUI binds; later launches connect, send a byte, and exit. Primary forwards into the GTK main loop and callswindow.present().Decoupled from the daemon socket on purpose:
lan-mouse daemonheadless workflow is unchanged. Stale-socket recovery if the primary crashed without cleanup. Defense-in-depth viaapp.windows().first()for the in-process activation path. Unit test covers acquire → signal → re-acquire.Test plan
lan-mouse daemonworkflow unchanged (singleton lock only exists while a GUI is running)kAEReopenApplicationon macOS) reuses the existing window viaapp.windows().first()Split out from #418, the umbrella PR collecting ~10 independent feature areas. This PR is the GUI singleton subset. See #418 for the full picture.
Stack overview
These PRs are split out from #418 and stack in this order:
Each PR's branch builds on the previous one, so until earlier PRs are merged the cumulative diff against
mainincludes all preceding work. Reviewing in order is easiest.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.