55 lines
1.8 KiB
QML
55 lines
1.8 KiB
QML
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
import Quickshell.I3
|
|
import "../config"
|
|
|
|
// Sway/i3 workspace switcher for a single monitor.
|
|
Row {
|
|
id: root
|
|
required property var screen // ShellScreen this bar lives on
|
|
spacing: Theme.gap
|
|
|
|
// Name of the i3/sway output this bar is on, used to filter workspaces.
|
|
readonly property string monitorName: screen ? screen.name : ""
|
|
|
|
Repeater {
|
|
model: I3.workspaces
|
|
|
|
Rectangle {
|
|
id: chip
|
|
required property var modelData
|
|
// only show workspaces belonging to this monitor
|
|
// I3Workspace.monitor is an I3Monitor object, so compare its name
|
|
visible: modelData.monitor && modelData.monitor.name === root.monitorName
|
|
width: visible ? Math.max(height, label.implicitWidth + 16) : 0
|
|
height: Theme.barHeight - Theme.gap * 2
|
|
radius: Theme.radius
|
|
|
|
readonly property bool isFocused: modelData.focused
|
|
readonly property bool isUrgent: modelData.urgent
|
|
|
|
color: isUrgent ? Theme.red
|
|
: isFocused ? Theme.blue
|
|
: modelData.active ? Theme.surface1
|
|
: Theme.surface0
|
|
|
|
Text {
|
|
id: label
|
|
anchors.centerIn: parent
|
|
text: chip.modelData.name
|
|
font.family: Theme.font
|
|
font.pixelSize: Theme.fontSize
|
|
font.bold: chip.isFocused || chip.isUrgent
|
|
color: (chip.isFocused || chip.isUrgent) ? Theme.mantle : Theme.text
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
cursorShape: Qt.PointingHandCursor
|
|
onClicked: chip.modelData.activate()
|
|
}
|
|
}
|
|
}
|
|
}
|