diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2025-08-31 12:12:23 +0200 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2025-08-31 12:12:23 +0200 |
| commit | 9fc966ff7726d01267a6220483fb005c0efaa9c0 (patch) | |
| tree | 9e66f32774a55a7f51314883648bd40751250091 /accounts/gkleen@sif/shell/quickshell/WorkspaceSwitcher.qml | |
| parent | 97423da1a1e58a2820d12bed5b36f0896fd3cccc (diff) | |
| download | nixos-9fc966ff7726d01267a6220483fb005c0efaa9c0.tar nixos-9fc966ff7726d01267a6220483fb005c0efaa9c0.tar.gz nixos-9fc966ff7726d01267a6220483fb005c0efaa9c0.tar.bz2 nixos-9fc966ff7726d01267a6220483fb005c0efaa9c0.tar.xz nixos-9fc966ff7726d01267a6220483fb005c0efaa9c0.zip | |
...
Diffstat (limited to 'accounts/gkleen@sif/shell/quickshell/WorkspaceSwitcher.qml')
| -rw-r--r-- | accounts/gkleen@sif/shell/quickshell/WorkspaceSwitcher.qml | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/accounts/gkleen@sif/shell/quickshell/WorkspaceSwitcher.qml b/accounts/gkleen@sif/shell/quickshell/WorkspaceSwitcher.qml new file mode 100644 index 00000000..153c56bb --- /dev/null +++ b/accounts/gkleen@sif/shell/quickshell/WorkspaceSwitcher.qml | |||
| @@ -0,0 +1,71 @@ | |||
| 1 | import QtQuick | ||
| 2 | import qs.Services | ||
| 3 | |||
| 4 | Row { | ||
| 5 | id: workspaces | ||
| 6 | |||
| 7 | property var ignoreWorkspaces: @ignore_workspaces@ | ||
| 8 | |||
| 9 | height: parent.height | ||
| 10 | anchors.verticalCenter: parent.verticalCenter | ||
| 11 | spacing: 0 | ||
| 12 | |||
| 13 | Repeater { | ||
| 14 | model: { | ||
| 15 | let currWorkspaces = NiriService.workspaces; | ||
| 16 | const ignoreWorkspaces = Array.from(workspaces.ignoreWorkspaces); | ||
| 17 | currWorkspaces = currWorkspaces.filter(ws => ws.is_active || ignoreWorkspaces.every(iws => iws !== ws.name)); | ||
| 18 | currWorkspaces.sort((a, b) => { | ||
| 19 | if (NiriService.outputs?.[a.output]?.logical?.x !== NiriService.outputs?.[b.output]?.logical?.x) | ||
| 20 | return NiriService.outputs?.[a.output]?.logical?.x - NiriService.outputs?.[b.output]?.logical?.x | ||
| 21 | if (NiriService.outputs?.[a.output]?.logical?.y !== NiriService.outputs?.[b.output]?.logical?.y) | ||
| 22 | return NiriService.outputs?.[a.output]?.logical?.y - NiriService.outputs?.[b.output]?.logical?.y | ||
| 23 | return a.idx - b.idx; | ||
| 24 | }); | ||
| 25 | return currWorkspaces; | ||
| 26 | } | ||
| 27 | |||
| 28 | Rectangle { | ||
| 29 | property var workspaceData: modelData | ||
| 30 | |||
| 31 | width: wsLabel.contentWidth + 8 | ||
| 32 | color: { | ||
| 33 | if (mouseArea.containsMouse) { | ||
| 34 | return "#33808080"; | ||
| 35 | } | ||
| 36 | return "transparent"; | ||
| 37 | } | ||
| 38 | height: parent.height | ||
| 39 | anchors.verticalCenter: parent.verticalCenter | ||
| 40 | |||
| 41 | MouseArea { | ||
| 42 | id: mouseArea | ||
| 43 | |||
| 44 | anchors.fill: parent | ||
| 45 | hoverEnabled: true | ||
| 46 | cursorShape: Qt.PointingHandCursor | ||
| 47 | enabled: true | ||
| 48 | onClicked: { | ||
| 49 | NiriService.sendCommand({ "Action": { "FocusWorkspace": { "reference": { "Id": workspaceData.id } } } }, _ => {}) | ||
| 50 | } | ||
| 51 | } | ||
| 52 | |||
| 53 | Text { | ||
| 54 | id: wsLabel | ||
| 55 | |||
| 56 | font.pointSize: 10 | ||
| 57 | font.family: "Fira Sans" | ||
| 58 | color: { | ||
| 59 | if (workspaceData.is_active) | ||
| 60 | return "#23fd00"; | ||
| 61 | if (workspaceData.active_window_id === null) | ||
| 62 | return "#555"; | ||
| 63 | return "white"; | ||
| 64 | } | ||
| 65 | anchors.centerIn: parent | ||
| 66 | |||
| 67 | text: workspaceData.name ? workspaceData.name : workspaceData.idx | ||
| 68 | } | ||
| 69 | } | ||
| 70 | } | ||
| 71 | } \ No newline at end of file | ||
