v1.4.1: keyboard and mouse over the network, AppImage version #6

Merged
Khyretos merged 1 commit from claude/v1.4.1-network-input-jbsclo into main 2026-09-26 02:12:28 +02:00
Khyretos commented 2026-09-26 02:01:38 +02:00 (Migrated from github.com)

Requested by Kees · project thread

Before: a network receiver only showed controller and joystick input. Keyboard and mouse models did nothing on the receiving end. Installed AppImages showed no version in AppImage managers.

After: keys, mouse movement, mouse buttons (1 to 8) and the scroll wheel reach the receiver. The AppImage's desktop entry carries X-AppImage-Version, so installers show 1.4.1.

Why keyboard/mouse didn't work. The receiver compared lowercased bindings (key_w) against SDL's mixed-case names (W), so no key ever matched. Separately, the sender read GlobalKeyboard::getMouseDelta() a second time after controller_window_input() had already drained it, so movement was always sent as 0.

How

  • Network: the receiver's packet parser and mesh lookup both use getKeyNameMap(), the same lookup local input uses. The sender adds up the frame's global mouse and scroll deltas while the link is up, sends them whenever they're non-zero, and clears them after each send. Previously it diffed against the last packet, which dropped steady movement. Scroll (sx/sy) and mouse buttons 6 to 8 are new in the packet and are applied on the receiver. Keyboard and mouse-button meshes also set travel_value now, matching local input.
  • AppImage: the packager stage copies the build's generated/app_version.txt, writes X-AppImage-Version into the desktop entry, and passes it to appimagetool as VERSION.
  • Version: it comes from the tag, so there's no version number to bump in the code. This PR adds release-notes/v1.4.1.md (embedded into What's New and used as the release description) and 1.4.1 sections in README and INSTRUCTIONS.

Both sender and receiver need 1.4.1. The new packet fields are additive, so an older receiver just ignores them.

Tested: full native Linux build and ctest (4/4) pass. GenerateVersion.cmake with v1.4.1 embeds the new notes. The two-machine network path and the Docker AppImage build were not run here.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MDzc6APMQTL21Su6fHAxL1


Generated by Claude Code

<!-- ccr-projects-attribution: {"github_login":"Khyretos"} --> _Requested by **Kees** · [project thread](https://claude.ai/code/project/chan_01BX4yZkxvACSWTkhT2DaLSP?thread=cmsg_01BX4yZkxvACSWTkhT2DaLSP4udqbNVsmgGVtEVNS6QvhE)_ Before: a network receiver only showed controller and joystick input. Keyboard and mouse models did nothing on the receiving end. Installed AppImages showed no version in AppImage managers. After: keys, mouse movement, mouse buttons (1 to 8) and the scroll wheel reach the receiver. The AppImage's desktop entry carries `X-AppImage-Version`, so installers show 1.4.1. **Why keyboard/mouse didn't work.** The receiver compared lowercased bindings (`key_w`) against SDL's mixed-case names (`W`), so no key ever matched. Separately, the sender read `GlobalKeyboard::getMouseDelta()` a second time after `controller_window_input()` had already drained it, so movement was always sent as 0. **How** - Network: the receiver's packet parser and mesh lookup both use `getKeyNameMap()`, the same lookup local input uses. The sender adds up the frame's global mouse and scroll deltas while the link is up, sends them whenever they're non-zero, and clears them after each send. Previously it diffed against the last packet, which dropped steady movement. Scroll (`sx`/`sy`) and mouse buttons 6 to 8 are new in the packet and are applied on the receiver. Keyboard and mouse-button meshes also set `travel_value` now, matching local input. - AppImage: the packager stage copies the build's `generated/app_version.txt`, writes `X-AppImage-Version` into the desktop entry, and passes it to appimagetool as `VERSION`. - Version: it comes from the tag, so there's no version number to bump in the code. This PR adds `release-notes/v1.4.1.md` (embedded into What's New and used as the release description) and 1.4.1 sections in README and INSTRUCTIONS. Both sender and receiver need 1.4.1. The new packet fields are additive, so an older receiver just ignores them. **Tested:** full native Linux build and ctest (4/4) pass. `GenerateVersion.cmake` with `v1.4.1` embeds the new notes. The two-machine network path and the Docker AppImage build were not run here. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01MDzc6APMQTL21Su6fHAxL1 --- _Generated by [Claude Code](https://claude.ai/code/session_01MDzc6APMQTL21Su6fHAxL1)_
Sign in to join this conversation.
No description provided.