diff --git a/shell/Ui/BarIndicator.qml b/shell/Ui/BarIndicator.qml index c71a050e..01cd175f 100644 --- a/shell/Ui/BarIndicator.qml +++ b/shell/Ui/BarIndicator.qml @@ -11,8 +11,10 @@ WidgetButton { property string activeTooltipText: "" property string inactiveTooltipText: activeTooltipText property string indicatorBlock: "single" - readonly property bool belongsInBlock: indicatorBlock === "active" ? active : (indicatorBlock === "inactive" ? !active : true) - readonly property bool inactiveRevealed: !active && !!bar && bar.revealInactiveIndicators + property var activeOverride: null + readonly property bool effectiveActive: activeOverride === null || activeOverride === undefined ? active : activeOverride === true + readonly property bool belongsInBlock: indicatorBlock === "active" ? effectiveActive : (indicatorBlock === "inactive" ? !effectiveActive : true) + readonly property bool inactiveRevealed: !effectiveActive && !!bar && bar.revealInactiveIndicators function extractData(raw) { var text = String(raw || "").trim() @@ -32,18 +34,19 @@ WidgetButton { Component.onCompleted: syncIndicatorOpacity() onActiveChanged: syncIndicatorOpacity() + onEffectiveActiveChanged: syncIndicatorOpacity() onBarChanged: syncIndicatorOpacity() onBelongsInBlockChanged: syncIndicatorOpacity() onInactiveRevealedChanged: syncIndicatorOpacity() onIndicatorBlockChanged: syncIndicatorOpacity() visible: belongsInBlock && (text !== "" || keepSpace) - text: active ? activeText : inactiveText - tooltipText: active ? activeTooltipText : inactiveTooltipText + text: effectiveActive ? activeText : inactiveText + tooltipText: effectiveActive ? activeTooltipText : inactiveTooltipText keepSpace: true - dimmed: !active - concealed: !active && !inactiveRevealed - interactive: belongsInBlock && (active || indicatorBlock === "inactive" || inactiveRevealed) + dimmed: !effectiveActive + concealed: !effectiveActive && !inactiveRevealed + interactive: belongsInBlock && (effectiveActive || indicatorBlock === "inactive" || inactiveRevealed) useActiveColor: false maintainIndicatorReveal: indicatorBlock === "inactive" fontSize: Style.font.caption diff --git a/shell/plugins/bar/Bar.qml b/shell/plugins/bar/Bar.qml index 10549781..f2dc8d39 100644 --- a/shell/plugins/bar/Bar.qml +++ b/shell/plugins/bar/Bar.qml @@ -1204,6 +1204,7 @@ Item { indicatorEntries: indicatorsRoot.activeIndicatorEntries indicatorBlock: "active" horizontal: true + reportActiveState: !root.vertical } Item { @@ -1241,6 +1242,7 @@ Item { indicatorEntries: indicatorsRoot.activeIndicatorEntries indicatorBlock: "active" horizontal: false + reportActiveState: root.vertical } Item { @@ -1337,6 +1339,7 @@ Item { property var indicatorsModule: null required property string indicatorBlock property bool reportActiveState: false + property bool activeStateObserved: false readonly property string indicatorId: root.entryId(entry) readonly property var indicatorSettings: root.entrySettings(entry) @@ -1345,6 +1348,7 @@ Item { width: implicitWidth height: implicitHeight onEntryChanged: { + activeStateObserved = false injectProps() syncActiveState() } @@ -1378,11 +1382,19 @@ Item { if ("moduleName" in target) target.moduleName = indicatorId if ("settings" in target) target.settings = indicatorSettings if ("indicatorBlock" in target) target.indicatorBlock = indicatorBlock + if ("activeOverride" in target) target.activeOverride = indicatorBlock === "active" ? true : null } function syncActiveState() { if (!reportActiveState || !indicatorsModule || !indicatorsModule.setIndicatorActive) return - indicatorsModule.setIndicatorActive(entry, !!indicatorSource.item && indicatorSource.item.active === true) + + var active = !!indicatorSource.item && indicatorSource.item.active === true + if (indicatorBlock === "active") { + if (active) activeStateObserved = true + else if (!activeStateObserved) return + } + + indicatorsModule.setIndicatorActive(entry, active) } }