From 45a8b70590fd85fda7af7f6b2c44441307821e8c Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Sat, 22 Aug 2026 16:28:03 +0000 Subject: [PATCH 1/2] chore: gitignore generated JS build artifacts mise.toml, gen_js_from_hbb.ts, message.ts, rendezvous.ts are all generated at build time and don't belong in source control. --- flutter/web/js/.gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/flutter/web/js/.gitignore b/flutter/web/js/.gitignore index 8737dbba591..0209623d81c 100644 --- a/flutter/web/js/.gitignore +++ b/flutter/web/js/.gitignore @@ -7,3 +7,7 @@ dist-ssr ogvjs .vscode .yarn +mise.toml +src/gen_js_from_hbb.ts +src/message.ts +src/rendezvous.ts From 341de052cd53874bf0c1b97ae7f952b33ebadee5 Mon Sep 17 00:00:00 2001 From: Rophy Tsai Date: Sun, 23 Aug 2026 02:00:27 +0000 Subject: [PATCH 2/2] fix: enable keyboard input on web client Input source 1 (OS-level hooks) is unavailable in browsers, causing keyboard events to be silently dropped. Hardcode web to Input source 2 (Flutter key events) and remove the non-functional option from the UI. --- flutter/lib/web/bridge.dart | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/flutter/lib/web/bridge.dart b/flutter/lib/web/bridge.dart index d02c45f3ad3..2014f7f2d26 100644 --- a/flutter/lib/web/bridge.dart +++ b/flutter/lib/web/bridge.dart @@ -373,11 +373,7 @@ class RustdeskImpl { bool sessionIsKeyboardModeSupported( {required UuidValue sessionId, required String mode, dynamic hint}) { - if (mainGetInputSource(hint: hint) == 'Input source 1') { - return [kKeyMapMode, kKeyTranslateMode].contains(mode); - } else { - return [kKeyLegacyMode, kKeyMapMode].contains(mode); - } + return [kKeyLegacyMode, kKeyMapMode].contains(mode); } bool sessionIsMultiUiSession({required UuidValue sessionId, dynamic hint}) { @@ -934,13 +930,9 @@ class RustdeskImpl { } String mainGetInputSource({dynamic hint}) { - final inputSource = - js.context.callMethod('getByName', ['option:local', 'input-source']); - // // js grab mode - // export const CONFIG_INPUT_SOURCE_1 = "Input source 1"; - // // flutter grab mode - // export const CONFIG_INPUT_SOURCE_2 = "Input source 2"; - return inputSource != '' ? inputSource : 'Input source 1'; + // Input source 1 (OS-level hooks) is unavailable on web — always use + // Input source 2 (Flutter key events). + return 'Input source 2'; } Future mainSetInputSource( @@ -1737,7 +1729,6 @@ class RustdeskImpl { String mainSupportedInputSource({dynamic hint}) { return jsonEncode([ - ['Input source 1', 'input_source_1_tip'], ['Input source 2', 'input_source_2_tip'] ]); }