summaryrefslogtreecommitdiff
path: root/modules/bar/components
diff options
context:
space:
mode:
authoranders130 <93037023+anders130@users.noreply.github.com>2025-08-13 06:53:40 +0200
committerGitHub <noreply@github.com>2025-08-13 14:53:40 +1000
commit775410393e2b27214f3b9711ee177aff06e03d84 (patch)
tree5a76c85354542f17671a6335bce6da337b5b77d8 /modules/bar/components
parentbar: allow hiding items and reordering (#379) (diff)
downloadcaelestia-shell-775410393e2b27214f3b9711ee177aff06e03d84.tar.gz
caelestia-shell-775410393e2b27214f3b9711ee177aff06e03d84.tar.bz2
caelestia-shell-775410393e2b27214f3b9711ee177aff06e03d84.zip
bar: per-monitor workspaces option (#394)
NOTE: option is true by default, which is a breaking change * feat(bar): add per-monitor workspace state * fix(bar): correct active workspace indicator * feat(bar): make per-monitor workspaces toggleable * fixes * more fixes * perMonitorWorkspaces default true + add to readme --------- Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
Diffstat (limited to 'modules/bar/components')
-rw-r--r--modules/bar/components/workspaces/ActiveIndicator.qml3
-rw-r--r--modules/bar/components/workspaces/Workspace.qml5
-rw-r--r--modules/bar/components/workspaces/Workspaces.qml10
3 files changed, 12 insertions, 6 deletions
diff --git a/modules/bar/components/workspaces/ActiveIndicator.qml b/modules/bar/components/workspaces/ActiveIndicator.qml
index b44ba87..b18cac2 100644
--- a/modules/bar/components/workspaces/ActiveIndicator.qml
+++ b/modules/bar/components/workspaces/ActiveIndicator.qml
@@ -7,13 +7,14 @@ import QtQuick
StyledRect {
id: root
+ required property int activeWsId
required property list<Workspace> workspaces
required property Item mask
required property real maskWidth
required property real maskHeight
required property int groupOffset
- readonly property int currentWsIdx: Hyprland.activeWsId - 1 - groupOffset
+ readonly property int currentWsIdx: activeWsId - 1 - groupOffset
property real leading: getWsY(currentWsIdx)
property real trailing: getWsY(currentWsIdx)
property real currentSize: workspaces[currentWsIdx]?.size ?? 0
diff --git a/modules/bar/components/workspaces/Workspace.qml b/modules/bar/components/workspaces/Workspace.qml
index f5b99f5..acfb216 100644
--- a/modules/bar/components/workspaces/Workspace.qml
+++ b/modules/bar/components/workspaces/Workspace.qml
@@ -10,6 +10,7 @@ Item {
id: root
required property int index
+ required property int activeWsId
required property var occupied
required property int groupOffset
@@ -32,8 +33,8 @@ Item {
readonly property string activeLabel: Config.bar.workspaces.activeLabel || (root.isOccupied ? occupiedLabel : label)
animate: true
- text: Hyprland.activeWsId === root.ws ? activeLabel : root.isOccupied ? occupiedLabel : label
- color: Config.bar.workspaces.occupiedBg || root.isOccupied || Hyprland.activeWsId === root.ws ? Colours.palette.m3onSurface : Colours.layer(Colours.palette.m3outlineVariant, 2)
+ text: root.activeWsId === root.ws ? activeLabel : root.isOccupied ? occupiedLabel : label
+ color: Config.bar.workspaces.occupiedBg || root.isOccupied || root.activeWsId === root.ws ? Colours.palette.m3onSurface : Colours.layer(Colours.palette.m3outlineVariant, 2)
horizontalAlignment: StyledText.AlignHCenter
verticalAlignment: StyledText.AlignVCenter
diff --git a/modules/bar/components/workspaces/Workspaces.qml b/modules/bar/components/workspaces/Workspaces.qml
index fb6201d..68e9ac1 100644
--- a/modules/bar/components/workspaces/Workspaces.qml
+++ b/modules/bar/components/workspaces/Workspaces.qml
@@ -3,18 +3,22 @@ pragma ComponentBehavior: Bound
import qs.services
import qs.config
import qs.components
+import Quickshell
import QtQuick
import QtQuick.Layouts
StyledRect {
id: root
+ required property ShellScreen screen
+
+ readonly property int activeWsId: Config.bar.workspaces.perMonitorWorkspaces ? (Hyprland.monitorFor(screen).activeWorkspace?.id ?? 1) : Hyprland.activeWsId
readonly property list<Workspace> workspaces: layout.children.filter(c => c.isWorkspace).sort((w1, w2) => w1.ws - w2.ws)
readonly property var occupied: Hyprland.workspaces.values.reduce((acc, curr) => {
acc[curr.id] = curr.lastIpcObject.windows > 0;
return acc;
}, {})
- readonly property int groupOffset: Math.floor((Hyprland.activeWsId - 1) / Config.bar.workspaces.shown) * Config.bar.workspaces.shown
+ readonly property int groupOffset: Math.floor((activeWsId - 1) / Config.bar.workspaces.shown) * Config.bar.workspaces.shown
implicitWidth: layout.implicitWidth + Appearance.padding.small * 2
implicitHeight: layout.implicitHeight + Appearance.padding.small * 2
@@ -31,13 +35,12 @@ StyledRect {
id: layout
spacing: 0
- layer.enabled: true
- layer.smooth: true
Repeater {
model: Config.bar.workspaces.shown
Workspace {
+ activeWsId: root.activeWsId
occupied: root.occupied
groupOffset: root.groupOffset
}
@@ -63,6 +66,7 @@ StyledRect {
asynchronous: true
sourceComponent: ActiveIndicator {
+ activeWsId: root.activeWsId
workspaces: root.workspaces
mask: layout
maskWidth: inner.width