quickshell/modules/bar/Workspaces.qml
2026-02-14 00:49:08 +01:00

70 lines
2.1 KiB
QML

pragma ComponentBehavior: Bound
import Quickshell.Hyprland
import QtQuick
import QtQuick.Layouts
import qs
import qs.settings
import qs.reusables
Rectangle {
id: root
color: "transparent"
implicitWidth: workspaceRow.implicitWidth + 10
implicitHeight: Settings.config.barHeight - 10
radius: Settings.config.barHeight / 2
property var screen: screen
Row {
id: workspaceRow
anchors.centerIn: parent
spacing: 5 // Slightly increase spacing between workspace buttons
Repeater {
id: wsRepeater
model: Hyprland.workspaces
Rectangle {
id: workspaceNumber
radius: 20
property bool isOnMon: {
if (!modelData)
return false;
if (!modelData.monitor)
return false;
if (!root.screen)
return false;
return modelData.monitor.name === root.screen.name;
}
required property var modelData
width: !modelData.focused ? 20 : 40
height: isOnMon ? Settings.config.barHeight - Settings.config.barHeight / 2 : 0
color: modelData.focused ? Colors.primaryContainer : "transparent"
Behavior on width {
NumberAnimation {
duration: 200
easing.type: Easing.Linear
}
}
CustomText {
anchors.centerIn: workspaceNumber
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
text: parent.modelData.id
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
cursorShape: Qt.PointingHandCursor
onClicked: {
parent.modelData.activate();
}
}
}
}
}
}