Files
dotfiles/roles/quickshell/files/bar/WorkspaceButton.qml
Johannes Knopp 63f99ff01a update bar
2026-04-08 02:21:01 +02:00

71 lines
2.0 KiB
QML

import Quickshell
import Quickshell.Hyprland
// import Quickshell.Widgets
import QtQuick
import "../components"
Rectangle {
id: root
required property var workspace
required property string screenName
visible: workspace?.lastIpcObject?.monitor === screenName
implicitWidth: Math.max(32, iconsRow.implicitWidth + 14)
implicitHeight: 18
radius: 6
color: workspace?.active ? Theme.accent : 'transparent'
Row {
id: iconsRow
anchors.centerIn: parent
spacing: 3
Repeater {
model: root.workspace?.toplevels
delegate: Item {
id: iconItem
required property var modelData
implicitWidth: 16
implicitHeight: 16
property string appClass: ""
Component.onCompleted: {
var cls = modelData?.lastIpcObject?.["class"] ?? ""
if (cls !== "") {
appClass = cls
} else if (modelData) {
modelData.lastIpcObjectChanged.connect(function() {
var c = iconItem.modelData?.lastIpcObject?.["class"] ?? ""
if (c !== "") iconItem.appClass = c
})
Qt.callLater(Hyprland.refreshToplevels)
}
}
TrayIcon {
anchors.fill: parent
icon: iconItem.appClass
size: 16
}
}
}
// Workspace number shown when no windows are open
Text {
visible: (root.workspace?.toplevels?.values?.length ?? 0) === 0
text: root.workspace?.id ?? ""
color: root.workspace?.active ? Theme.text : Theme.textDim
font.pixelSize: 11
}
}
MouseArea {
anchors.fill: parent
onClicked: Hyprland.dispatch("workspace " + root.workspace.id)
}
}