import QtQuick import qs.Services Row { id: workspaces property var ignoreWorkspaces: @ignore_workspaces@ height: parent.height anchors.verticalCenter: parent.verticalCenter spacing: 0 Repeater { model: { let currWorkspaces = NiriService.workspaces; const ignoreWorkspaces = Array.from(workspaces.ignoreWorkspaces); currWorkspaces = currWorkspaces.filter(ws => ws.is_active || ignoreWorkspaces.every(iws => iws !== ws.name)); currWorkspaces.sort((a, b) => { if (NiriService.outputs?.[a.output]?.logical?.x !== NiriService.outputs?.[b.output]?.logical?.x) return NiriService.outputs?.[a.output]?.logical?.x - NiriService.outputs?.[b.output]?.logical?.x if (NiriService.outputs?.[a.output]?.logical?.y !== NiriService.outputs?.[b.output]?.logical?.y) return NiriService.outputs?.[a.output]?.logical?.y - NiriService.outputs?.[b.output]?.logical?.y return a.idx - b.idx; }); return currWorkspaces; } Rectangle { property var workspaceData: modelData width: wsLabel.contentWidth + 8 color: { if (mouseArea.containsMouse) { return "#33808080"; } return "transparent"; } height: parent.height anchors.verticalCenter: parent.verticalCenter MouseArea { id: mouseArea anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor enabled: true onClicked: { NiriService.sendCommand({ "Action": { "FocusWorkspace": { "reference": { "Id": workspaceData.id } } } }, _ => {}) } } Text { id: wsLabel font.pointSize: 10 font.family: "Fira Sans" color: { if (workspaceData.is_active) return "#23fd00"; if (workspaceData.active_window_id === null) return "#555"; return "white"; } anchors.centerIn: parent text: workspaceData.name ? workspaceData.name : workspaceData.idx } } } }