fix(macos): preserve modifier state in input events#5102
Conversation
ddcad56 to
5e4c544
Compare
Bundle ReportBundle size has no change ✅ |
|
@martona thank you for the PR! Could you correct the lint error? |
|
Yup, for sure. I thought I would wait for all checks to complete before pushing changes. Already done on #5107 though. |
|
Done! |
|
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #5102 +/- ##
==========================================
- Coverage 17.86% 17.83% -0.04%
==========================================
Files 111 111
Lines 24005 24009 +4
Branches 10619 10620 +1
==========================================
- Hits 4289 4281 -8
- Misses 14579 15502 +923
+ Partials 5137 4226 -911
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 40 files with indirect coverage changes Continue to review full report in Codecov by Sentry.
|
Bug fixes: - Delay g_vdd_indices.push_back() and persist_display_count() until the new display is confirmed visible; roll back VddRemoveDisplay on failure without leaving stale index/persist state. - Free SP_DEVICE_INTERFACE_DETAIL_DATA before break in OpenDeviceHandle to avoid memory leak. - Remove duplicate and misspelled VDD_IOCTL_UNKONWN (same value as VDD_IOCTL_UPDATE). Robustness: - Replace DXGI-based enumerate_dxgi_outputs with EnumDisplayDevices-based enumerate_displays; DXGI_OUTPUT_DESC::DeviceName uses \\.\DISPLAYx format which never contains "PSCCDD0", making the old VDD-detection logic dead. - Rewrite persist_display_count to update only the vdd_display_count line in-place, preserving comments, blank lines, and config file ordering. - Use compare_exchange_strong in start_keepalive to prevent multiple threads (tray + HTTP + startup) from racing on thread creation. Security: - Add check_content_type + validate_csrf_token to addVddDisplay and removeVddDisplay POST endpoints. - Add validate_csrf_token to removeAllVddDisplays. - Fix addVddDisplay to set status=false when add_display fails. - Fix removeVddDisplay status to reflect actual result. - Add vdd::is_initialized check to removeAllVddDisplays; return proper error when driver is not available. Cleanup: - Remove unused $tp import from VirtualDisplay.vue. - Remove extra </table> tag in docs/configuration.md. fix(macos): preserve modifier state in input events (LizardByte#5102) build(macos): configure C++ standard and ICU root (LizardByte#5101) build(deps): Add SUNSHINE_SYSTEM_VULKAN_HEADERS option (LizardByte#5103) Signed-off-by: James Le Cuirot <chewi@gentoo.org> ci: remove moonlight discord release announcement (LizardByte#5099) build(deps): bump packaging/linux/flatpak/deps/shared-modules from `2dfad85` to `8c3f3cf` (LizardByte#5098) build(deps): bump packaging/linux/flatpak/deps/shared-modules Bumps [packaging/linux/flatpak/deps/shared-modules](https://github.com/flathub/shared-modules) from `2dfad85` to `8c3f3cf`. - [Commits](flathub/shared-modules@2dfad85...8c3f3cf) --- updated-dependencies: - dependency-name: packaging/linux/flatpak/deps/shared-modules dependency-version: 8c3f3cfa5a4af9a696ff0bfb3ed0eba404faaf5d dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> build(deps): bump third-party/build-deps from `cd7d45a` to `d8b1d18` (LizardByte#5097) Bumps [third-party/build-deps](https://github.com/LizardByte/build-deps) from `cd7d45a` to `d8b1d18`. - [Release notes](https://github.com/LizardByte/build-deps/releases) - [Commits](LizardByte/build-deps@cd7d45a...d8b1d18) --- updated-dependencies: - dependency-name: third-party/build-deps dependency-version: d8b1d18b7e82f8ee396bdd05e226896fa523b0df dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> fix: building without the system tray enabled (LizardByte#5092)



Description
Fix macOS keyboard event handling so modifier state is preserved reliably across keyboard and mouse input.
macOS input handling was reusing a mutable
CGEventReffor keyboard events. That could leave stale event state behind and caused modifier combinations such as Shift+Enter or Cmd+Tab to be replayed inconsistently.This change creates fresh keyboard events for each input update:
CGEventCreate(...)event withkCGEventFlagsChanged.CGEventCreateKeyboardEvent(...)for key up/down events.Tested manually on macOS via Moonlight/Sunshine input replay:
Screenshot
Issues Fixed or Closed
Roadmap Issues
Type of Change
Checklist
AI Usage