Fix pointer navigation in Quattro launcher menus (#6343)
Accumulate sub-threshold movement so slow motion with a flat acceleration profile updates selection. Sample pointer state on row entry and carry pointer intent through subordinate menus while preserving predictable keyboard selection.
This commit is contained in:
@@ -74,11 +74,11 @@ Item {
|
||||
? root.contentMargin * 2 + root.searchHeight + root.contentSpacing + requestedListHeight
|
||||
: 400
|
||||
|
||||
root.opened = true
|
||||
root.filterText = payload.query || ""
|
||||
root.selectedIndex = 0
|
||||
root.cursorActive = true
|
||||
root.disarmHover()
|
||||
root.opened = true
|
||||
root.rebuildDisplay()
|
||||
// The shell may start before first-install packages have finished placing
|
||||
// their icons. Refresh here even when the desktop entry list did not change.
|
||||
@@ -626,9 +626,14 @@ Item {
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onEntered: root.selectFromPointer(row.index, row, {
|
||||
x: mouseArea.mouseX,
|
||||
y: mouseArea.mouseY
|
||||
})
|
||||
onPositionChanged: function(mouse) {
|
||||
root.selectFromPointer(row.index, row, mouse)
|
||||
}
|
||||
|
||||
@@ -520,14 +520,15 @@ Item {
|
||||
root.rebuildDisplay()
|
||||
}
|
||||
|
||||
function setActiveMenu(id, pushHistory) {
|
||||
function setActiveMenu(id, pushHistory, fromPointer) {
|
||||
if (!root.item(id)) id = "root"
|
||||
if (pushHistory && id !== root.activeMenu) root.navStack = root.navStack.concat([root.activeMenu])
|
||||
root.activeMenu = id
|
||||
root.filterText = ""
|
||||
root.selectedIndex = 0
|
||||
root.cursorActive = true
|
||||
root.disarmPointer()
|
||||
if (fromPointer) pointerGate.allowInitialSample()
|
||||
else root.disarmPointer()
|
||||
root.rebuildDisplay()
|
||||
root.loadProviderForMenu(id)
|
||||
}
|
||||
@@ -547,7 +548,7 @@ Item {
|
||||
return true
|
||||
}
|
||||
|
||||
function activateIndex(index) {
|
||||
function activateIndex(index, fromPointer) {
|
||||
if (root.dmenuActive) {
|
||||
if (root.mode === "input") {
|
||||
root.applyDmenuSelection(root.filterText)
|
||||
@@ -562,7 +563,7 @@ Item {
|
||||
|
||||
var row = displayModel.get(index)
|
||||
if (row.kind === "menu" || row.kind === "link") {
|
||||
root.setActiveMenu(row.target || row.itemId, true)
|
||||
root.setActiveMenu(row.target || row.itemId, true, fromPointer)
|
||||
} else {
|
||||
root.applySelected(row.itemId, row.action)
|
||||
}
|
||||
@@ -1043,13 +1044,17 @@ Item {
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onEntered: root.selectFromPointer(row.index, row, {
|
||||
x: mouseArea.mouseX,
|
||||
y: mouseArea.mouseY
|
||||
})
|
||||
onPositionChanged: function(mouse) {
|
||||
root.selectFromPointer(row.index, row, mouse)
|
||||
}
|
||||
onClicked: {
|
||||
root.cursorActive = true
|
||||
root.selectedIndex = row.index
|
||||
root.activateIndex(row.index)
|
||||
root.activateIndex(row.index, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user