diff --git a/shell/Commons/Style.qml b/shell/Commons/Style.qml index b099e6f8..11fb7d73 100644 --- a/shell/Commons/Style.qml +++ b/shell/Commons/Style.qml @@ -344,6 +344,7 @@ QtObject { readonly property int iconSlot: root.barToken("icon-slot", 27) readonly property int iconCanvas: root.barToken("icon-canvas", 16) readonly property int iconFont: root.barToken("icon-font", 13) + readonly property int statusSlot: root.barToken("status-slot", 18) } function refresh() { diff --git a/shell/Ui/BarIconButton.qml b/shell/Ui/BarIconButton.qml index 50275d4a..e2ea6358 100644 --- a/shell/Ui/BarIconButton.qml +++ b/shell/Ui/BarIconButton.qml @@ -6,6 +6,7 @@ WidgetButton { id: root property Component iconComponent: null + property real slotSize: Style.bar.iconSlot property real opticalSize: Style.bar.iconCanvas property bool debugOpticalBounds: Quickshell.env("OMARCHY_DEBUG_BAR_ICONS") === "1" readonly property real opticalCenterErrorX: glyph.visible ? glyph.paintedCenterX - opticalCanvas.width / 2 : 0 @@ -15,8 +16,8 @@ WidgetButton { labelVisible: false hasVisualContent: text !== "" || iconComponent !== null fontSize: Style.bar.iconFont - fixedWidth: vertical ? -1 : Style.bar.iconSlot - fixedHeight: vertical ? Style.bar.iconSlot : -1 + fixedWidth: vertical ? -1 : slotSize + fixedHeight: vertical ? slotSize : -1 Item { id: opticalCanvas diff --git a/shell/plugins/bar/widgets/Indicators.qml b/shell/plugins/bar/widgets/Indicators.qml index 854be75d..0785fd6d 100644 --- a/shell/plugins/bar/widgets/Indicators.qml +++ b/shell/plugins/bar/widgets/Indicators.qml @@ -16,7 +16,6 @@ BarWidget { property bool indicatorItemHovered: false readonly property bool alwaysShowIndicators: setting("alwaysShow", false) === true readonly property bool revealInactiveIndicators: alwaysShowIndicators || indicatorAreaHovered || indicatorItemHovered || (bar && bar.centerSectionRevealHeld === true && bar.centerHoverRevealSuppressed !== true) - readonly property bool hasVisibleIndicators: activeIndicatorIds.length > 0 || revealInactiveIndicators signal refreshRequested() @@ -188,8 +187,6 @@ BarWidget { visible: !root.vertical spacing: 0 - leftPadding: root.hasVisibleIndicators ? Style.spacing.sm : 0 - rightPadding: leftPadding HoverHandler { onHoveredChanged: root.setIndicatorAreaHovered(hovered) @@ -232,8 +229,6 @@ BarWidget { visible: root.vertical spacing: 0 - topPadding: root.hasVisibleIndicators ? Style.spaceReal(1.5) : 0 - bottomPadding: topPadding HoverHandler { onHoveredChanged: root.setIndicatorAreaHovered(hovered) diff --git a/shell/plugins/bar/widgets/SystemUpdate.qml b/shell/plugins/bar/widgets/SystemUpdate.qml index edcd8980..e1b2078e 100644 --- a/shell/plugins/bar/widgets/SystemUpdate.qml +++ b/shell/plugins/bar/widgets/SystemUpdate.qml @@ -57,6 +57,7 @@ BarWidget { anchors.fill: parent bar: root.bar text: "\uf021" + slotSize: Style.bar.statusSlot fontSize: Style.font.caption tooltipText: "" onPressed: root.runUpdate() diff --git a/shell/plugins/panels/weather/BarWidget.qml b/shell/plugins/panels/weather/BarWidget.qml index 566c2202..667e9905 100644 --- a/shell/plugins/panels/weather/BarWidget.qml +++ b/shell/plugins/panels/weather/BarWidget.qml @@ -59,6 +59,7 @@ BarWidget { anchors.fill: parent bar: root.bar text: panelLoader.item ? panelLoader.item.label : "" + slotSize: Style.bar.statusSlot active: panelLoader.item && panelLoader.item.klass === "active" // Tooltip suppressed because the panel is the detail view. tooltipText: "" diff --git a/test/shell.d/bar-icon-geometry-test.sh b/test/shell.d/bar-icon-geometry-test.sh index 44a707f2..d4ab370b 100644 --- a/test/shell.d/bar-icon-geometry-test.sh +++ b/test/shell.d/bar-icon-geometry-test.sh @@ -90,6 +90,11 @@ ShellRoot { fail("indicator groups do not retain compact internal spacing") return } + if (compactStatusIcon.implicitWidth !== Style.bar.statusSlot + || compactVerticalStatusIcon.implicitHeight !== Style.bar.statusSlot) { + fail("compact status icons do not use the shared status slot") + return + } console.log("RESULT pass") Qt.quit() }) @@ -133,6 +138,8 @@ ShellRoot { iconComponent: Component { Rectangle { width: 12; height: 12 } } } BarIconButton { id: verticalIcon; bar: verticalBar; text: "\uf021" } + BarIconButton { id: compactStatusIcon; bar: testBar; text: "\uf021"; slotSize: Style.bar.statusSlot } + BarIconButton { id: compactVerticalStatusIcon; bar: verticalBar; text: "\uf021"; slotSize: Style.bar.statusSlot } Row { id: horizontalIndicatorPair BarIndicator { id: horizontalIndicator; bar: testBar; active: true; activeText: "󰅶" } diff --git a/test/shell.d/fixtures/bar-widget-contract/shell.qml b/test/shell.d/fixtures/bar-widget-contract/shell.qml index f283e262..f06260db 100644 --- a/test/shell.d/fixtures/bar-widget-contract/shell.qml +++ b/test/shell.d/fixtures/bar-widget-contract/shell.qml @@ -180,7 +180,7 @@ ShellRoot { if (verticalId === "omarchy.clock") root.assertEqual(verticalItem.implicitHeight, Style.bar.iconSlot * 3, verticalId + " uses one slot per line") else if (verticalId === "omarchy.weather" || verticalId === "omarchy.system-update") - root.assertEqual(verticalItem.implicitHeight, Style.bar.iconSlot, verticalId + " uses one vertical slot") + root.assertEqual(verticalItem.implicitHeight, Style.bar.statusSlot, verticalId + " uses one compact status slot") if (verticalItem && typeof verticalItem.destroy === "function") verticalItem.destroy() } root.assertTrue(root.createdIds.length === entries.length, "all bar widgets instantiate")