pragma ComponentBehavior: Bound import qs.services import qs.config import qs.components import Quickshell import QtQuick import QtQuick.Layouts import QtQuick.Effects StyledClippingRect { id: root required property ShellScreen screen readonly property int activeWsId: Config.bar.workspaces.perMonitorWorkspaces ? (Hypr.monitorFor(screen).activeWorkspace?.id ?? 1) : Hypr.activeWsId readonly property var monitorWorkspaces: { if (Config.bar.workspaces.perMonitorWorkspaces) { let monitor = Hypr.monitorFor(root.screen); return Hypr.workspaces.values.filter(ws => { return ws.monitor.id == monitor.id }); } else { return Hypr.workspaces.values } } implicitWidth: Config.bar.sizes.innerWidth implicitHeight: layout.implicitHeight + Appearance.padding.small * 2 color: Colours.tPalette.m3surfaceContainer radius: Appearance.rounding.full Item { anchors.fill: parent ColumnLayout { id: layout anchors.centerIn: parent spacing: Math.floor(Appearance.spacing.small / 2) Repeater { id: workspaces model: monitorWorkspaces.length Workspace { ws: monitorWorkspaces[index] activeWsId: root.activeWsId } } } Loader { anchors.horizontalCenter: parent.horizontalCenter asynchronous: true sourceComponent: ActiveIndicator { activeWsId: root.activeWsId monitorWorkspaces: root.monitorWorkspaces workspaces: workspaces mask: layout } } MouseArea { anchors.fill: layout onClicked: event => { const ws = layout.childAt(event.x, event.y).ws; if (Hypr.activeWsId !== ws) Hypr.dispatch(`workspace ${ws}`); else Hypr.dispatch("togglespecialworkspace special"); } } } }