From 3a18ba7055eed70b823f108c9a5b3adcc6bb377d Mon Sep 17 00:00:00 2001 From: qiin2333 <414382190@qq.com> Date: Wed, 8 Apr 2026 11:56:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E8=A7=A6=E6=8E=A7=E6=9D=BF=E6=89=8B?= =?UTF-8?q?=E5=8A=BF=E5=8F=8C=E6=8C=87=E6=BB=9A=E5=8A=A8=E5=90=8E=E5=8D=95?= =?UTF-8?q?=E5=87=BB=E5=A4=B1=E6=95=88=20+=20=E6=BB=9A=E5=8A=A8=E6=96=B9?= =?UTF-8?q?=E5=90=91=E5=8F=8D=E7=9B=B4=E8=A7=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - confirmedScroll 未在手指全部抬起时重置,导致后续单指轻触被跳过 - resetGestureFlags() 补充 confirmedScroll 重置 - 滚动方向从自然滚动改为传统方向(手指下滑=页面上滚) --- entry/src/main/ets/service/TrackpadGestureHandler.ets | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/entry/src/main/ets/service/TrackpadGestureHandler.ets b/entry/src/main/ets/service/TrackpadGestureHandler.ets index c5f43fd..f0574dc 100644 --- a/entry/src/main/ets/service/TrackpadGestureHandler.ets +++ b/entry/src/main/ets/service/TrackpadGestureHandler.ets @@ -258,7 +258,7 @@ export class TrackpadGestureHandler { state.lastX = touches[0].x; state.lastY = touches[0].y; if (Math.abs(dy) > 0) { - this.sink.sendMouseHighResScroll(Math.round(-dy * SCROLL_SPEED_FACTOR)); + this.sink.sendMouseHighResScroll(Math.round(dy * SCROLL_SPEED_FACTOR)); } } // 同步第二根手指 @@ -342,6 +342,7 @@ export class TrackpadGestureHandler { this.maxCountInGesture = 0; this.confirmedMove = false; this.confirmedDrag = false; + this.confirmedScroll = false; this.distanceMoved = 0; } @@ -354,6 +355,7 @@ export class TrackpadGestureHandler { private resetGestureFlags(): void { this.confirmedMove = false; this.confirmedDrag = false; + this.confirmedScroll = false; this.distanceMoved = 0; this.isDoubleClickDrag = false; this.isPotentialDoubleClick = false; From 4bd7981888d8ef4e96cdc80defd58e47200a4fc1 Mon Sep 17 00:00:00 2001 From: qiin2333 <414382190@qq.com> Date: Wed, 8 Apr 2026 16:24:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20USB=20=E6=89=8B=E6=9F=84=E6=96=AD?= =?UTF-8?q?=E5=BC=80=E6=81=A2=E5=A4=8D=E5=90=8E=20ABXY=20=E6=8C=89?= =?UTF-8?q?=E9=94=AE=E5=8F=AF=E8=83=BD=E6=97=A0=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IO 错误打断数据连续性时,使去重缓存失效 (lastInputValid=false), 确保恢复后第一帧 HID 报文一定传递给 JS 层, 防止旧缓存导致按键状态变化被跳过。 --- nativelib/src/main/cpp/usb_ddk_poller.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nativelib/src/main/cpp/usb_ddk_poller.cpp b/nativelib/src/main/cpp/usb_ddk_poller.cpp index bfa7dd0..f115a65 100644 --- a/nativelib/src/main/cpp/usb_ddk_poller.cpp +++ b/nativelib/src/main/cpp/usb_ddk_poller.cpp @@ -514,7 +514,8 @@ static void *ddkPollThread(void *arg) { if (ret == USB_DDK_IO_FAILED || ret == USB_DDK_INVALID_OP) { // === 智能错误恢复 === - // 瞬态错误保留最后输入状态(不归零),避免中断长按 + // 错误打断了数据连续性,去重缓存失效:恢复后第一帧必须传递给 JS + ctx->lastInputValid = false; if (consecutiveErrors == 3) { OH_LOG_WARN(LOG_APP, "[%{public}s] id=%{public}d 连续 %d 次错误,尝试恢复", LOG_TAG, pollerId, consecutiveErrors); }