71 lines
2.0 KiB
QML
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)
|
|
}
|
|
}
|