Skip to content

Commit 7fdfaef

Browse files
committed
fix: add touch screen support for dock menu
1. Added a new function requestShowDockMenu() to centralize dock menu display logic 2. Implemented TapHandler for touch screen devices to handle both tap and long press gestures 3. Tap gesture now closes popups and deactivates view without opening menu 4. Long press gesture triggers the dock menu (same as right-click on mouse) 5. Refactored existing mouse click handler to use the new requestShowDockMenu() function Log: Touch screen users can now open dock menu via long press gesture Influence: 1. Test touch screen interaction with dock panel - verify tap closes popups 2. Verify long press on touch screen opens dock menu correctly 3. Test mouse right-click still works as before to open dock menu 4. Verify mouse left-click behavior remains unchanged 5. Test that popups close properly on both touch tap and mouse click 6. Verify dock menu doesn't open unintentionally on regular taps fix: 为任务栏菜单添加触摸屏支持 1. 新增 requestShowDockMenu() 函数集中处理任务栏菜单显示逻辑 2. 为触摸屏设备实现 TapHandler 以处理点击和长按手势 3. 点击手势现在会关闭弹窗并停用视图而不打开菜单 4. 长按手势触发任务栏菜单(与鼠标右键点击相同) 5. 重构现有的鼠标点击处理程序以使用新的 requestShowDockMenu() 函数 Log: 触摸屏用户现在可以通过长按手势打开任务栏菜单 Influence: 1. 测试触摸屏与任务栏面板的交互 - 验证点击会关闭弹窗 2. 验证触摸屏长按能正确打开任务栏菜单 3. 测试鼠标右键点击仍然可以正常打开任务栏菜单 4. 验证鼠标左键点击行为保持不变 5. 测试弹窗在触摸点击和鼠标点击时都能正确关闭 6. 验证任务栏菜单不会在常规点击时意外打开 PMS: BUG-352989
1 parent 18def5e commit 7fdfaef

2 files changed

Lines changed: 44 additions & 8 deletions

File tree

panels/dock/package/main.qml

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ Window {
5656
return appearance.opacity
5757
}
5858

59+
function requestShowDockMenu() {
60+
// maybe has popup visible, close it.
61+
Panel.requestClosePopup()
62+
viewDeactivated()
63+
hideTimer.stop()
64+
MenuHelper.openMenu(dockMenuLoader.item)
65+
}
66+
5967
DLayerShellWindow.anchors: position2Anchors(positionForAnimation)
6068
DLayerShellWindow.layer: DLayerShellWindow.LayerTop
6169
DLayerShellWindow.exclusionZone: Panel.hideMode === Dock.KeepShowing ? Applet.dockSize : 0
@@ -413,11 +421,7 @@ Window {
413421
MenuHelper.closeCurrent()
414422
dockMenuLoader.active = true
415423
if (button === Qt.RightButton && lastActive !== dockMenuLoader.item) {
416-
// maybe has popup visible, close it.
417-
Panel.requestClosePopup()
418-
viewDeactivated()
419-
hideTimer.stop()
420-
MenuHelper.openMenu(dockMenuLoader.item)
424+
requestShowDockMenu()
421425
}
422426
if (button === Qt.LeftButton) {
423427
// try to close popup when clicked empty, because dock does not have focus.
@@ -427,6 +431,28 @@ Window {
427431
}
428432
}
429433

434+
//Touch screen click
435+
TapHandler {
436+
acceptedButtons: Qt.NoButton
437+
acceptedDevices: PointerDevice.TouchScreen
438+
onTapped: function(eventPoint, button) {
439+
let lastActive = MenuHelper.activeMenu
440+
MenuHelper.closeCurrent()
441+
dockMenuLoader.active = true
442+
// try to close popup when clicked empty, because dock does not have focus.
443+
Panel.requestClosePopup()
444+
viewDeactivated()
445+
}
446+
onLongPressed: {
447+
let lastActive = MenuHelper.activeMenu
448+
MenuHelper.closeCurrent()
449+
dockMenuLoader.active = true
450+
if (lastActive !== dockMenuLoader.item) {
451+
requestShowDockMenu()
452+
}
453+
}
454+
}
455+
430456
HoverHandler {
431457
cursorShape: Qt.ArrowCursor
432458
}

panels/dock/taskmanager/package/AppItem.qml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,12 @@ Item {
427427
}
428428
}
429429

430+
function requestAppItemMenu() {
431+
contextMenuLoader.trashEmpty = TaskManager.isTrashEmpty()
432+
contextMenuLoader.active = true
433+
MenuHelper.openMenu(contextMenuLoader.item)
434+
}
435+
430436
MouseArea {
431437
id: mouseArea
432438
anchors.fill: parent
@@ -451,12 +457,16 @@ Item {
451457
toolTip.close()
452458
closeItemPreview()
453459
}
460+
// touchscreen long press.
461+
onPressAndHold: function (mouse) {
462+
if (mouse.button === Qt.NoButton) {
463+
requestAppItemMenu()
464+
}
465+
}
454466
onClicked: function (mouse) {
455467
let index = root.modelIndex;
456468
if (mouse.button === Qt.RightButton) {
457-
contextMenuLoader.trashEmpty = TaskManager.isTrashEmpty()
458-
contextMenuLoader.active = true
459-
MenuHelper.openMenu(contextMenuLoader.item)
469+
requestAppItemMenu()
460470
} else {
461471
if (root.windows.length === 0) {
462472
launchAnimation.start();

0 commit comments

Comments
 (0)