import QtQuick import Quickshell import Quickshell.Hyprland import "../../../config" import "../states/Apps" Rectangle { id: workspacesContainer required property HyprlandMonitor thisMonitor height: bar.height - (Config.spacing_fun(bar.height) * 1.5) width: workspacesRow.width + (Config.spacing_fun(bar.height) * 2) radius: height / 2 color: Colors.surfaceVariant border.color: Colors.surfaceVariant_fg border.width: Config.border_width Row { id: workspacesRow anchors.centerIn: parent spacing: Config.spacing_fun(bar.height) / 2 Repeater { model: Hyprland.workspaces Loader { active: modelData.monitor === thisMonitor sourceComponent: Item { id: wsItem property var workspaceData: modelData width: { var cw = wsNum.width if (wsIconsRow.children.length > 0) cw += Config.spacing_fun(bar.height) + wsIconsRow.width Math.max(cw + Config.spacing_fun(bar.height)*2, wsNum.height + Config.spacing_fun(bar.height)*2) } height: workspacesContainer.height // highlight Rectangle { anchors.centerIn: parent width: parent.width height: parent.height - (Config.spacing_fun(bar.height) * 1.5) radius: height / 2 color: wsArea.containsMouse ? Colors.tertiaryContainer : workspaceData.active ? Colors.primaryContainer : "transparent" border.color: wsArea.containsMouse ? Colors.tertiaryContainer_fg : workspaceData.active ? Colors.primaryContainer_fg : "transparent" border.width: (wsArea.containsMouse || workspaceData.active) ? Config.border_width : 0 // hyprland workspace api + color MouseArea { id: wsArea hoverEnabled: true cursorShape: Qt.PointingHandCursor anchors.fill: parent onClicked: { console.log("[Workspaces] Switch to workspace: " + workspaceData.id) Hyprland.dispatch("workspace " + workspaceData.id) Hyprland.dispatch("hl.dsp.focus({ workspace = "+workspaceData.id+" })") } Row { anchors.left: parent.left anchors.leftMargin: Config.spacing_fun(bar.height)*1.5 anchors.verticalCenter: parent.verticalCenter spacing: Config.spacing_fun(parent.height) Text { id: wsNum text: workspaceData.id anchors.verticalCenter: parent.verticalCenter color: wsArea.containsMouse ? Colors.tertiary : workspaceData.active ? Colors.primary : Colors.secondary font.pixelSize: Config.iconSize(bar.height) font.family: Config.font font.bold: true } Row { id: wsIconsRow spacing: Config.spacing_fun(workspacesContainer.height) anchors.verticalCenter: parent.verticalCenter Repeater { model: AppsState.iconsForWorkspace(workspaceData.id) delegate: Text { text: modelData color: wsArea.containsMouse ? Colors.tertiary : Colors.secondary font.pixelSize: Config.labelSize(bar.height) font.family: Config.font } } } } } } } } } } Text { visible: Hyprland.workspaces.length === 0 text: "No Workspaces" color: Colors.error font.pixelSize: Config.iconSize(bar.height) anchors.centerIn: parent } }