diff --git a/shell/plugins/menu/Menu.qml b/shell/plugins/menu/Menu.qml index 238f00d5..4a952c25 100644 --- a/shell/plugins/menu/Menu.qml +++ b/shell/plugins/menu/Menu.qml @@ -59,6 +59,8 @@ Item { property var dmenuOptions: [] property bool dmenuMultiple: false property var dmenuSelected: [] + // What the last confirmed change applied; a failed change returns the checks here. + property var dmenuSaved: [] property string dmenuChangeKey: "" property var dmenuOnChange: [] property string selectionFile: "" @@ -911,6 +913,7 @@ Item { && payload.onChange.every(function(arg) { return typeof arg === "string" }) ? payload.onChange : [] dmenuChangeKey = String(payload.changeKey || JSON.stringify(dmenuOnChange)) dmenuSelected = MenuModel.dmenuSelections(dmenuOptions, Array.isArray(payload.selected) ? payload.selected : [], dmenuOnChange.length > 0) + dmenuSaved = dmenuSelected if (dmenuOnChange.length > 0) dmenuSelected = MenuModel.dmenuSelections(dmenuOptions, selectionProc.requestedSelection(), true) selectionFile = String(payload.selectionFile || "") @@ -1039,6 +1042,9 @@ Item { } if (Array.isArray(applied)) root.dmenuSelected = MenuModel.dmenuSelections(root.dmenuOptions, applied, true) + root.dmenuSaved = root.dmenuSelected + } else { + root.dmenuSelected = root.dmenuSaved } root.updateDmenuChecks() } diff --git a/test/shell.d/menu-test.sh b/test/shell.d/menu-test.sh index 5e940c2f..5672cfd5 100644 --- a/test/shell.d/menu-test.sh +++ b/test/shell.d/menu-test.sh @@ -674,6 +674,11 @@ assert( /onPositionChanged: function\(mouse\) \{\s*root\.selectFromPointer\(row\.index, row, mouse\)\s*\}/.test(menuQml), 'menu row hover routes through pointer movement gate' ) +assert( + /dmenuSaved = dmenuSelected\s*\n\s*if \(dmenuOnChange\.length > 0\)/.test(menuQml) + && /root\.dmenuSaved = root\.dmenuSelected\s*\n\s*\} else \{\s*root\.dmenuSelected = root\.dmenuSaved/.test(menuQml), + 'a failed immediate change restores the confirmed checks, even after reopening onto queued ones' +) assert( /onEntered: root\.selectFromPointer\(row\.index, row, \{\s*x: mouseArea\.mouseX,\s*y: mouseArea\.mouseY\s*\}\)/.test(menuQml), 'menu samples pointer movement immediately when entering a row'