workspace view rework

This commit is contained in:
2025-07-30 23:21:13 +01:00
parent 9d65cb0d58
commit 92636a2dde
13 changed files with 285 additions and 15 deletions

View File

@@ -0,0 +1,90 @@
import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
import Quickshell.Widgets
import Quickshell.Hyprland
import "root:/bar/widgets/common" as Common
RowLayout {
id: root
spacing: 10
Layout.fillHeight: true
Repeater {
model: Hyprland.workspaces
delegate: Item {
id: root2
required property HyprlandWorkspace modelData
implicitWidth: 35 + appIconContainer.implicitWidth
Layout.fillHeight: true
Item {
visible: root2.modelData.toplevels.values[0] != undefined
id: appIconContainer
implicitWidth: row.implicitWidth
implicitHeight: 25
x: 30
anchors.verticalCenter: root2.verticalCenter
Rectangle {
x: -10
radius: 7
color: "black"
implicitWidth: row.width + 20
implicitHeight: 25
}
RowLayout {
x: 5
anchors.verticalCenter: parent.verticalCenter
id: row
spacing: 15
Repeater {
model: root2.modelData.toplevels
delegate: Item {
required property HyprlandToplevel modelData
width: icon.implicitWidth
height: icon.implicitHeight
Text {
id: icon
color: "white"
font.pointSize: 13
// long-ass oneliner for "if there is no class icon, go to fallback"
text: (Common.Icons.appIcons[(modelData.lastIpcObject.class)] != undefined ) ? Common.Icons.appIcons[(modelData.lastIpcObject.class)] : Common.Icons.appIcons["fallback"]
}
}
}
}
}
Item {
width: 30
height: 30
MouseArea {
width: 30
height: 30
onPressed: event => {
modelData.activate();
}
}
Rectangle {
width: 30
height: 30
radius: 10
color: modelData.focused ? "grey" : "black"
}
Text {
anchors.centerIn: parent
text: modelData.id
color: "white"
}
}
}
}
Timer {
id: updateTimer
running: true
interval: 1000 // 10secs
repeat: true
onTriggered: {
Hyprland.refreshToplevels()
}
}
}