diff --git a/applets/devicenotifier/package/contents/ui/DeviceItem.qml b/applets/devicenotifier/package/contents/ui/DeviceItem.qml --- a/applets/devicenotifier/package/contents/ui/DeviceItem.qml +++ b/applets/devicenotifier/package/contents/ui/DeviceItem.qml @@ -47,8 +47,8 @@ property alias actionToolTip: actionButton.tooltip property bool actionVisible - readonly property bool hasMessage: statusSource.lastUdi == udi && statusSource.data[statusSource.last] ? true : false - readonly property var message: hasMessage ? statusSource.data[statusSource.last] || ({}) : ({}) + readonly property bool hasMessage: statusSource.trigger && statusSource.lastMessages[udi] + readonly property var message: hasMessage ? statusSource.lastMessages[udi] : ({}) height: row.childrenRect.height + 2 * row.y hoverEnabled: true @@ -122,7 +122,7 @@ onTriggered: { deviceItem.ListView.delayRemove = false // otherwise the last message will show again when this device reappears - statusSource.clearMessage() + statusSource.clearMessage(udi) --devicenotifier.pendingDelegateRemoval // QTBUG-50380 } diff --git a/applets/devicenotifier/package/contents/ui/FullRepresentation.qml b/applets/devicenotifier/package/contents/ui/FullRepresentation.qml --- a/applets/devicenotifier/package/contents/ui/FullRepresentation.qml +++ b/applets/devicenotifier/package/contents/ui/FullRepresentation.qml @@ -105,7 +105,7 @@ target: plasmoid onExpandedChanged: { if (!plasmoid.expanded) { - statusSource.clearMessage() + statusSource.clearMessages() } } } @@ -178,7 +178,7 @@ } emblemIcon: Emblems && Emblems[0] ? Emblems[0] : "" state: sdSource.data[udi] ? sdSource.data[udi].State : 0 - isRoot: sdSource.data[udi]["File Path"] === "/" + isRoot: sdSource.data[udi] ? sdSource.data[udi]["File Path"] === "/" : false percentUsage: { if (!sdSource.data[udi]) { diff --git a/applets/devicenotifier/package/contents/ui/devicenotifier.qml b/applets/devicenotifier/package/contents/ui/devicenotifier.qml --- a/applets/devicenotifier/package/contents/ui/devicenotifier.qml +++ b/applets/devicenotifier/package/contents/ui/devicenotifier.qml @@ -202,28 +202,39 @@ PlasmaCore.DataSource { id: statusSource engine: "devicenotifications" - property string last - property string lastUdi + property var lastMessages: ({}) + property bool trigger onSourceAdded: { - last = source; disconnectSource(source); connectSource(source); } - onSourceRemoved: disconnectSource(source) + onSourceRemoved: { + disconnectSource(source) + } onDataChanged: { - if (last) { - lastUdi = data[last].udi - - if (sdSource.isViableDevice(lastUdi)) { - plasmoid.expanded = true - plasmoid.fullRepresentationItem.spontaneousOpen = true; + trigger = false + for (var i = 0; i < sources.length; ++i) { + // Source is formatted as follows: " notification" + var udi = sources[i].split(' ')[0] + if (data[sources[i]].error.length > 0) { + lastMessages[udi] = data[sources[i]] + if (sdSource.isViableDevice(udi) && !plasmoid.expanded) { + plasmoid.expanded = true + plasmoid.fullRepresentationItem.spontaneousOpen = true; + } + } else { + clearMessage(udi) } } + trigger = true + } + + function clearMessages() { + lastMessages = ({}) } - function clearMessage() { - last = "" - lastUdi = "" + function clearMessage(udi) { + delete(lastMessages[udi]) } }