From 8f83b0c8d9ed752b95cf26478b32f9e0765df3df Mon Sep 17 00:00:00 2001 From: Keith Smith Date: Tue, 8 Sep 2026 11:54:50 -0600 Subject: [PATCH] Fix RDP key repeat: forward auto-repeat presses to the remote server RdpDisplayWidget::keyPressEvent() dropped every event where QKeyEvent::isAutoRepeat() was true, which discards the entire repeat stream Qt generates while a key is held -- so holding a key only ever produced a single keystroke on the remote machine. Auto-repeat presses need to reach the remote server so it can perform its own typematic repeat, exactly as a physical keyboard held down would; only release events should filter isAutoRepeat() (kept as-is), since Qt uses a synthetic release/press pair purely to normalize platform auto-repeat quirks, and forwarding that synthetic release would send a spurious key-up for a key still physically held. Co-Authored-By: Claude Sonnet 5 --- src/rdp_display_widget.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/rdp_display_widget.cpp b/src/rdp_display_widget.cpp index 85349f2..6e712f9 100644 --- a/src/rdp_display_widget.cpp +++ b/src/rdp_display_widget.cpp @@ -147,10 +147,16 @@ void RdpDisplayWidget::resizeEvent(QResizeEvent* event) void RdpDisplayWidget::keyPressEvent(QKeyEvent* event) { - if (event == nullptr || event->isAutoRepeat()) { + if (event == nullptr) { return; } + // Auto-repeat presses must reach the remote server so it can perform + // its own typematic repeat, exactly as a physical keyboard held down + // would. Only release events filter out isAutoRepeat() (below), since + // Qt uses a synthetic release/press pair purely to normalize platform + // auto-repeat quirks -- forwarding that synthetic release would send a + // spurious key-up for a key that is still physically held. emit keyInput(event->key(), event->nativeScanCode(), event->text(),