Reset dynamic menu providers on reload

This commit is contained in:
David Heinemeier Hansson
2026-05-20 15:14:39 +02:00
parent 1e9a7a971e
commit c12f0b5399
+17 -3
View File
@@ -62,6 +62,7 @@ Item {
property var navStack: [] property var navStack: []
property var providersLoaded: ({}) property var providersLoaded: ({})
property var providerQueue: [] property var providerQueue: []
property int providerRevision: 0
// Bound to the central [menu] section in shell.toml via Color.qml. // Bound to the central [menu] section in shell.toml via Color.qml.
// Each color already includes its alpha companion (composed in the // Each color already includes its alpha companion (composed in the
// singleton), so consumers can drop them straight into a Rectangle. // singleton), so consumers can drop them straight into a Rectangle.
@@ -256,11 +257,20 @@ Item {
nextOrder.unshift("root") nextOrder.unshift("root")
} }
for (var k3 = 0; k3 < nextOrder.length; k3++) nextItems[nextOrder[k3]].order = k3 for (var k3 = 0; k3 < nextOrder.length; k3++) nextItems[nextOrder[k3]].order = k3
root.providerRevision += 1
root.providersLoaded = ({})
root.providerQueue = []
root.items = nextItems root.items = nextItems
root.itemOrder = nextOrder root.itemOrder = nextOrder
root.rowsLoaded = true root.rowsLoaded = true
root.evaluateGuards() root.evaluateGuards()
if (root.opened) root.rebuildDisplay() if (root.opened) {
root.rebuildDisplay()
if (!root.dmenuActive) {
if (root.filterText.trim()) root.loadProvidersForSearch()
else root.loadProviderForMenu(root.activeMenu)
}
}
} }
// Each known provider is a tiny bash one-liner that enumerates a list and // Each known provider is a tiny bash one-liner that enumerates a list and
@@ -294,6 +304,7 @@ Item {
root.providersLoaded[id] = true root.providersLoaded[id] = true
providerProc.menuId = id providerProc.menuId = id
providerProc.providerKey = entry.provider providerProc.providerKey = entry.provider
providerProc.revision = root.providerRevision
providerProc.collected = "" providerProc.collected = ""
providerProc.command = ["bash", "-lc", spec.script] providerProc.command = ["bash", "-lc", spec.script]
providerProc.running = true providerProc.running = true
@@ -825,12 +836,15 @@ Item {
property string menuId: "" property string menuId: ""
property string providerKey: "" property string providerKey: ""
property string collected: "" property string collected: ""
property int revision: 0
stdout: SplitParser { stdout: SplitParser {
onRead: function(data) { providerProc.collected += data + "\n" } onRead: function(data) { providerProc.collected += data + "\n" }
} }
onExited: { onExited: {
root.mergeProviderRows(providerProc.collected, providerProc.menuId, providerProc.providerKey) if (providerProc.revision === root.providerRevision) {
if (root.filterText.trim()) root.loadProvidersForSearch() root.mergeProviderRows(providerProc.collected, providerProc.menuId, providerProc.providerKey)
if (root.filterText.trim()) root.loadProvidersForSearch()
}
root.startNextProvider() root.startNextProvider()
} }
} }