From d92a46035d05843f1acef9eddc63e3be09a3c6dc Mon Sep 17 00:00:00 2001 From: Damocles Date: Fri, 10 Apr 2026 23:32:47 +0200 Subject: [PATCH] restore niri specifics, gracefully fail --- modules/Bar.qml | 2 +- modules/Workspaces.qml | 9 ++++++++- modules/WorkspacesInner.qml | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 modules/WorkspacesInner.qml diff --git a/modules/Bar.qml b/modules/Bar.qml index e82b2a8..671a453 100644 --- a/modules/Bar.qml +++ b/modules/Bar.qml @@ -38,7 +38,7 @@ PanelWindow { Layout.fillWidth: true spacing: 8 - // M.Workspaces {} + M.Workspaces {} M.Tray { bar: bar } M.WindowTitle { Layout.maximumWidth: 400 } Item { Layout.fillWidth: true } diff --git a/modules/Workspaces.qml b/modules/Workspaces.qml index 5240ce8..97ff721 100644 --- a/modules/Workspaces.qml +++ b/modules/Workspaces.qml @@ -1,7 +1,14 @@ import QtQuick import QtQuick.Layouts -// Niri workspace support disabled — Quickshell.Services.Niri not available RowLayout { spacing: 4 + + Loader { + source: "WorkspacesInner.qml" + onStatusChanged: { + if (status === Loader.Error) + source = ""; + } + } } diff --git a/modules/WorkspacesInner.qml b/modules/WorkspacesInner.qml new file mode 100644 index 0000000..1cc1b12 --- /dev/null +++ b/modules/WorkspacesInner.qml @@ -0,0 +1,36 @@ +import QtQuick +import QtQuick.Layouts +import Quickshell.Services.Niri +import "." as M + +RowLayout { + spacing: 4 + + Repeater { + model: Niri.workspaces + + delegate: Rectangle { + required property var modelData + + implicitWidth: 24 + implicitHeight: 20 + radius: 4 + color: modelData.isFocused + ? M.Theme.base0D + : (modelData.isActive ? M.Theme.base03 : M.Theme.base02) + + Text { + anchors.centerIn: parent + text: modelData.idx ?? modelData.id + color: modelData.isFocused ? M.Theme.base00 : M.Theme.base05 + font.pixelSize: M.Theme.fontSize + font.family: M.Theme.fontFamily + } + + MouseArea { + anchors.fill: parent + onClicked: Niri.dispatch(["action", "focus-workspace", String(modelData.id)]) + } + } + } +}