From 8e6e8b303f8a3271d1ed4df22cae00d357044cbb Mon Sep 17 00:00:00 2001 From: wjyrich Date: Mon, 2 Feb 2026 11:11:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B0=86=E9=BC=A0=E6=A0=87=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E8=BF=9B=E8=A1=8C=E9=A1=B5=E9=9D=A2=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E9=87=8D=E6=96=B0=E5=A4=84=E7=90=86=E7=84=A6?= =?UTF-8?q?=E7=82=B9=E7=BB=99=E5=88=B0=E7=AC=AC=E4=B8=80=E4=B8=AA=E5=BA=94?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 将属性从 `scrolledByWheel` 重命名为 `changedByNonKeyboard` 以更好地反 映其用途 2. 更新了整个代码中对重命名属性的所有引用 3. 添加了当页面指示器更改当前索引时设置 `changedByNonKeyboard` 的逻辑 4. 该属性现在跟踪任何非键盘导航发起的页面更改,包括鼠标滚轮滚动和指示器 点击 Log: 改进了页面导航跟踪以实现更好的焦点管理 Influence: 1. 测试使用鼠标滚轮进行页面导航 - 焦点应转到新页面的第一个应用 2. 测试点击页面指示器 - 焦点应转到新页面的第一个应用 3. 测试键盘页面导航 - 焦点应遵循键盘导航规则 4. 验证在不同导航方法之间切换时的焦点行为 5. 测试边缘情况,如从最后一页循环到第一页 PMS: BUG-339605 --- qml/FullscreenFrame.qml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/qml/FullscreenFrame.qml b/qml/FullscreenFrame.qml index fbc75e6f..8f6e27ee 100644 --- a/qml/FullscreenFrame.qml +++ b/qml/FullscreenFrame.qml @@ -252,14 +252,14 @@ InputEventItem { if (!searchEdit.focus) { // reset keyboard focus when using mouse to flip page, but keep searchEdit focus baseLayer.focus = true } - listviewPage.scrolledByWheel = true + listviewPage.changedByNonKeyboard = true decrementPageIndex(listviewPage) } else if (toPage > 0) { flipPageDelay.start() if (!searchEdit.focus) { // reset keyboard focus when using mouse to flip page, but keep searchEdit focus baseLayer.focus = true } - listviewPage.scrolledByWheel = true + listviewPage.changedByNonKeyboard = true incrementPageIndex(listviewPage) } } @@ -323,6 +323,11 @@ InputEventItem { color: Qt.rgba(0, 0, 0, 0.1) } } + onCurrentIndexChanged: { + if (listviewPage.currentIndex !== currentIndex) { + listviewPage.changedByNonKeyboard = true + } + } } } } @@ -377,7 +382,7 @@ InputEventItem { } property int previousIndex: -1 - property bool scrolledByWheel: false + property bool changedByNonKeyboard: false model: itemPageModel delegate: FocusScope { @@ -434,10 +439,10 @@ InputEventItem { listviewPage.previousIndex = listviewPage.currentIndex return } - // 如果是通过滚轮翻页,始终将焦点设置到第一个应用 - if (listviewPage.scrolledByWheel) { + // 如果是通过非键盘方式(滚轮/indicator)翻页,始终将焦点设置到第一个应用 + if (listviewPage.changedByNonKeyboard) { gridViewContainer.setPreviousPageSwitch(false) - listviewPage.scrolledByWheel = false + listviewPage.changedByNonKeyboard = false } else if (listviewPage.currentIndex + 1 === listviewPage.previousIndex || (listviewPage.previousIndex === 0 && listviewPage.currentIndex === listviewPage.count - 1)) { gridViewContainer.setPreviousPageSwitch(true) } else {