diff --git a/entry/src/main/ets/pages/SettingsPageV2.ets b/entry/src/main/ets/pages/SettingsPageV2.ets index e6f000d..f594932 100644 --- a/entry/src/main/ets/pages/SettingsPageV2.ets +++ b/entry/src/main/ets/pages/SettingsPageV2.ets @@ -216,6 +216,7 @@ struct SettingsPageV2 { // 输入 - 鼠标/触控 @State showLocalCursor: boolean = false; // 显示本地指针(双光标模式) @State touchscreenTrackpad: boolean = false; + @State enableThreeFingerIme: boolean = true; @State lowLatencyTouch: boolean = false; @State enableDoubleClickDrag: boolean = false; @State doubleTapTimeThreshold: number = 125; @@ -568,6 +569,7 @@ struct SettingsPageV2 { // 输入 - 鼠标/触控 this.showLocalCursor = await this.loadBoolean(SettingsKeys.SHOW_LOCAL_CURSOR, false); this.touchscreenTrackpad = await this.loadBoolean(SettingsKeys.TOUCHSCREEN_TRACKPAD, false); + this.enableThreeFingerIme = await this.loadBoolean(SettingsKeys.ENABLE_THREE_FINGER_IME, true); this.lowLatencyTouch = await this.loadBoolean(SettingsKeys.LOW_LATENCY_TOUCH, false); this.enableDoubleClickDrag = await this.loadBoolean(SettingsKeys.ENABLE_DOUBLE_CLICK_DRAG, false); this.doubleTapTimeThreshold = await PreferencesUtil.get(SettingsKeys.DOUBLE_TAP_TIME_THRESHOLD, 125); @@ -1753,6 +1755,16 @@ struct SettingsPageV2 { this.saveSetting(SettingsKeys.LAST_TOUCH_MODE, ''); } }, + { + title: '三指唤出输入法', + subtitle: '三指同时触摸时打开系统输入法,关闭后触摸将发送到主机', + type: 'toggle', + value: this.enableThreeFingerIme, + action: () => { + this.enableThreeFingerIme = !this.enableThreeFingerIme; + this.saveSetting(SettingsKeys.ENABLE_THREE_FINGER_IME, this.enableThreeFingerIme); + } + }, { title: '低延迟触摸参数', subtitle: '缩短触摸点击确认和释放等待,响应更快但更敏感', diff --git a/entry/src/main/ets/pages/StreamPage.ets b/entry/src/main/ets/pages/StreamPage.ets index 44a3a5c..b91b873 100644 --- a/entry/src/main/ets/pages/StreamPage.ets +++ b/entry/src/main/ets/pages/StreamPage.ets @@ -1948,11 +1948,14 @@ struct StreamPage { /** * 处理本地系统触摸手势。 * - * 三指同时触摸用于唤出 HarmonyOS IME,优先于远端触摸输入和双指缩放。 + * 启用三指输入法手势后,三指同时触摸用于唤出 HarmonyOS IME, + * 优先于远端触摸输入和双指缩放。 * 触发后持续吞掉本组三指,避免远端收到半截多指触摸或鼠标拖拽。 */ private handleSystemTouchGesture(event: TouchEvent): boolean { - const result = this.threeFingerImeGestureHandler.handleTouchEvent(event, this.viewModel.isConnected); + const enableThreeFingerIme = this.viewModel.inputSettings?.enableThreeFingerIme ?? true; + const result = this.threeFingerImeGestureHandler.handleTouchEvent( + event, enableThreeFingerIme && this.viewModel.isConnected); if (result === ThreeFingerImeGestureResult.TRIGGERED) { this.touchInputHandler.cancelActiveInput(); this.panZoomHandler.cancelActiveGesture(); diff --git a/entry/src/main/ets/service/SettingsService.ets b/entry/src/main/ets/service/SettingsService.ets index 11c2378..84c66d5 100644 --- a/entry/src/main/ets/service/SettingsService.ets +++ b/entry/src/main/ets/service/SettingsService.ets @@ -110,6 +110,7 @@ export class SettingsKeys { // 输入 - 鼠标/触控 static readonly SHOW_LOCAL_CURSOR: string = 'settings_show_local_cursor'; static readonly TOUCHSCREEN_TRACKPAD: string = 'settings_touchscreen_trackpad'; + static readonly ENABLE_THREE_FINGER_IME: string = 'settings_enable_three_finger_ime'; static readonly LOW_LATENCY_TOUCH: string = 'settings_low_latency_touch'; static readonly ENABLE_DOUBLE_CLICK_DRAG: string = 'settings_enable_double_click_drag'; static readonly DOUBLE_TAP_TIME_THRESHOLD: string = 'settings_double_tap_time_threshold'; @@ -227,6 +228,7 @@ export interface InputSettings { // 鼠标/触控 showLocalCursor: boolean; touchscreenTrackpad: boolean; + enableThreeFingerIme: boolean; lowLatencyTouch: boolean; enableDoubleClickDrag: boolean; doubleTapTimeThreshold: number; @@ -807,6 +809,7 @@ export class SettingsService { // 鼠标/触控 showLocalCursor: await this.getBoolean(SettingsKeys.SHOW_LOCAL_CURSOR, false), touchscreenTrackpad: await this.getBoolean(SettingsKeys.TOUCHSCREEN_TRACKPAD, false), + enableThreeFingerIme: await this.getBoolean(SettingsKeys.ENABLE_THREE_FINGER_IME, true), lowLatencyTouch: await this.getBoolean(SettingsKeys.LOW_LATENCY_TOUCH, false), enableDoubleClickDrag: await this.getBoolean(SettingsKeys.ENABLE_DOUBLE_CLICK_DRAG, false), doubleTapTimeThreshold: await this.getNumber(SettingsKeys.DOUBLE_TAP_TIME_THRESHOLD, 125), diff --git a/nativelib/src/main/cpp/CMakeLists.txt b/nativelib/src/main/cpp/CMakeLists.txt index 5af6e09..9d3c3db 100644 --- a/nativelib/src/main/cpp/CMakeLists.txt +++ b/nativelib/src/main/cpp/CMakeLists.txt @@ -110,6 +110,7 @@ set(SOURCE_FILES set(MOONLIGHT_COMMON_SOURCES ${MOONLIGHT_COMMON_PATH}/src/Connection.c ${MOONLIGHT_COMMON_PATH}/src/ControlStream.c + ${MOONLIGHT_COMMON_PATH}/src/CursorStream.c ${MOONLIGHT_COMMON_PATH}/src/VideoStream.c ${MOONLIGHT_COMMON_PATH}/src/AudioStream.c ${MOONLIGHT_COMMON_PATH}/src/InputStream.c diff --git a/nativelib/src/main/cpp/moonlight-common-c b/nativelib/src/main/cpp/moonlight-common-c index 2b913d4..7bfa0c1 160000 --- a/nativelib/src/main/cpp/moonlight-common-c +++ b/nativelib/src/main/cpp/moonlight-common-c @@ -1 +1 @@ -Subproject commit 2b913d47a4d29b0825c3fe748493fd336d80a241 +Subproject commit 7bfa0c1e79d55871c519287c441a629b9eeed045