From 0f1d2fa6f675ec6f90af1d7325e76803d0644a2c Mon Sep 17 00:00:00 2001 From: Trey T Date: Fri, 17 Apr 2026 13:42:48 -0500 Subject: [PATCH] The actual bug: inputMode:.none silently drops every pointer/key event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit VNCConnection.Settings.inputMode looks like it configures keyboard-shortcut forwarding on macOS, but in RoyalVNCKit's enqueue path it's a master gate: // VNCConnection+Queue.swift guard settings.inputMode != .none else { return } // every path So every PointerEvent and KeyEvent we enqueued was discarded before hitting the wire. The Mac received zero input even though the framebuffer was live. Frames streamed because that queue is server→client, not gated by inputMode. Fix: pass .forwardKeyboardShortcutsEvenIfInUseLocally. On iOS we have no local keyboard shortcuts to steal from, so the most permissive value is safe and it unblocks the input queue. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../VNCCore/Sources/VNCCore/Session/SessionController.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Packages/VNCCore/Sources/VNCCore/Session/SessionController.swift b/Packages/VNCCore/Sources/VNCCore/Session/SessionController.swift index f8ad548..1d62528 100644 --- a/Packages/VNCCore/Sources/VNCCore/Session/SessionController.swift +++ b/Packages/VNCCore/Sources/VNCCore/Session/SessionController.swift @@ -331,7 +331,11 @@ public final class SessionController { isShared: true, isScalingEnabled: false, useDisplayLink: false, - inputMode: .none, + // Any value other than .none, otherwise RoyalVNCKit drops every + // enqueued PointerEvent/KeyEvent. On iOS we don't have local + // keyboard shortcuts to worry about, so pick the most permissive + // forwarding mode. + inputMode: .forwardKeyboardShortcutsEvenIfInUseLocally, isClipboardRedirectionEnabled: clipboardSyncEnabled, colorDepth: .depth24Bit, frameEncodings: preferredEncodings