summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/bar/Bar.qml6
-rw-r--r--modules/bar/components/TrayItem.qml2
-rw-r--r--modules/bar/components/workspaces/ActiveIndicator.qml2
-rw-r--r--modules/bar/components/workspaces/OccupiedBg.qml12
-rw-r--r--modules/bar/components/workspaces/Workspace.qml42
-rw-r--r--modules/bar/components/workspaces/Workspaces.qml20
-rwxr-xr-xrun.fish5
7 files changed, 48 insertions, 41 deletions
diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml
index ad1621c..c6761c7 100644
--- a/modules/bar/Bar.qml
+++ b/modules/bar/Bar.qml
@@ -39,14 +39,12 @@ Variants {
Preset {
presetName: "pills"
-
- Pills {}
+ sourceComponent: Pills {}
}
Preset {
presetName: "panel"
-
- Panel {}
+ sourceComponent: Panel {}
}
}
diff --git a/modules/bar/components/TrayItem.qml b/modules/bar/components/TrayItem.qml
index b050e5d..1d418dc 100644
--- a/modules/bar/components/TrayItem.qml
+++ b/modules/bar/components/TrayItem.qml
@@ -38,7 +38,7 @@ MouseArea {
let icon = root.modelData.icon;
if (icon.includes("?path=")) {
const [name, path] = icon.split("?path=");
- icon = `file://${path}/${name.slice(name.lastIndexOf("/") + 1)}.png`;
+ icon = `file://${path}/${name.slice(name.lastIndexOf("/") + 1)}`;
}
return icon;
}
diff --git a/modules/bar/components/workspaces/ActiveIndicator.qml b/modules/bar/components/workspaces/ActiveIndicator.qml
index 4d9a0c4..0d1768f 100644
--- a/modules/bar/components/workspaces/ActiveIndicator.qml
+++ b/modules/bar/components/workspaces/ActiveIndicator.qml
@@ -36,7 +36,7 @@ Rectangle {
visible: false
anchors.fill: parent
- color: Appearance.colours.m3inverseOnSurface
+ color: Appearance.on(root.color)
Behavior on color {
ColorAnimation {
diff --git a/modules/bar/components/workspaces/OccupiedBg.qml b/modules/bar/components/workspaces/OccupiedBg.qml
index 774e176..ccbc75f 100644
--- a/modules/bar/components/workspaces/OccupiedBg.qml
+++ b/modules/bar/components/workspaces/OccupiedBg.qml
@@ -38,10 +38,6 @@ Item {
pills.splice(count, pills.length - count);
}
- anchors.fill: parent
- opacity: BarConfig.workspaces.occupiedBg ? 1 : 0
- z: -1
-
Repeater {
model: ScriptModel {
values: root.pills.filter(p => p)
@@ -52,8 +48,8 @@ Item {
required property var modelData
- property Workspace start: root.workspaces[modelData.start - 1] ?? null
- property Workspace end: root.workspaces[modelData.end - 1] ?? null
+ readonly property Workspace start: root.workspaces[modelData.start - 1 - root.groupOffset] ?? null
+ readonly property Workspace end: root.workspaces[modelData.end - 1 - root.groupOffset] ?? null
color: Appearance.alpha(Appearance.colours.m3surfaceContainerHigh, true)
radius: BarConfig.workspaces.rounded ? Appearance.rounding.full : 0
@@ -93,10 +89,6 @@ Item {
}
}
- Behavior on opacity {
- Anim {}
- }
-
component Anim: NumberAnimation {
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
diff --git a/modules/bar/components/workspaces/Workspace.qml b/modules/bar/components/workspaces/Workspace.qml
index bd28f7a..a29e61b 100644
--- a/modules/bar/components/workspaces/Workspace.qml
+++ b/modules/bar/components/workspaces/Workspace.qml
@@ -16,14 +16,14 @@ Item {
readonly property bool isWorkspace: true // Flag for finding workspace children
// Unanimated prop for others to use as reference
- readonly property real size: childrenRect[vertical ? "height" : "width"] + (shouldPad ? Appearance.padding.normal : 0)
+ readonly property real size: childrenRect[vertical ? "height" : "width"] + (hasWindows ? Appearance.padding.normal : 0)
readonly property int ws: groupOffset + index + 1
readonly property bool isOccupied: occupied[ws] ?? false
- readonly property bool shouldPad: isOccupied && BarConfig.workspaces.showWindows
+ readonly property bool hasWindows: isOccupied && BarConfig.workspaces.showWindows
- Layout.preferredWidth: childrenRect.width + (shouldPad && !vertical ? Appearance.padding.normal : 0)
- Layout.preferredHeight: childrenRect.height + (shouldPad && vertical ? Appearance.padding.normal : 0)
+ Layout.preferredWidth: childrenRect.width + (hasWindows && !vertical ? Appearance.padding.normal : 0)
+ Layout.preferredHeight: childrenRect.height + (hasWindows && vertical ? Appearance.padding.normal : 0)
StyledText {
id: indicator
@@ -42,22 +42,30 @@ Item {
height: BarConfig.sizes.innerHeight
}
- Box {
- anchors.left: vertical ? undefined : indicator.right
- anchors.top: vertical ? indicator.bottom : undefined
- anchors.verticalCenter: vertical ? undefined : indicator.verticalCenter
- anchors.horizontalCenter: vertical ? indicator.horizontalCenter : undefined
+ Loader {
+ active: BarConfig.workspaces.showWindows
+ asynchronous: true
- Repeater {
- model: ScriptModel {
- values: BarConfig.workspaces.showWindows ? Hyprland.clients.filter(c => c.workspace?.id === root.ws) : []
- }
+ anchors.left: root.vertical ? undefined : indicator.right
+ anchors.top: root.vertical ? indicator.bottom : undefined
+ anchors.verticalCenter: root.vertical ? undefined : indicator.verticalCenter
+ anchors.horizontalCenter: root.vertical ? indicator.horizontalCenter : undefined
+
+ sourceComponent: Box {
+ anchors.horizontalCenter: root.vertical ? parent.horizontalCenter : undefined
+ anchors.verticalCenter: root.vertical ? undefined : parent.verticalCenter
+
+ Repeater {
+ model: ScriptModel {
+ values: Hyprland.clients.filter(c => c.workspace?.id === root.ws)
+ }
- MaterialIcon {
- required property Hyprland.Client modelData
+ MaterialIcon {
+ required property Hyprland.Client modelData
- text: Icons.getAppCategoryIcon(modelData.wmClass, "terminal")
- color: Appearance.colours.m3onSurfaceVariant
+ text: Icons.getAppCategoryIcon(modelData.wmClass, "terminal")
+ color: Appearance.colours.m3onSurfaceVariant
+ }
}
}
}
diff --git a/modules/bar/components/workspaces/Workspaces.qml b/modules/bar/components/workspaces/Workspaces.qml
index 692ae32..e4ff787 100644
--- a/modules/bar/components/workspaces/Workspaces.qml
+++ b/modules/bar/components/workspaces/Workspaces.qml
@@ -9,7 +9,7 @@ Item {
property alias vertical: layout.vertical
property color colour: Appearance.colours.mauve
- readonly property list<Workspace> workspaces: layout.children.filter(c => c.isWorkspace)
+ 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;
@@ -35,11 +35,19 @@ Item {
}
}
- OccupiedBg {
- vertical: root.vertical
- workspaces: root.workspaces
- occupied: root.occupied
- groupOffset: root.groupOffset
+ Loader {
+ active: BarConfig.workspaces.occupiedBg
+ asynchronous: true
+
+ z: -1
+ anchors.fill: parent
+
+ sourceComponent: OccupiedBg {
+ vertical: root.vertical
+ workspaces: root.workspaces
+ occupied: root.occupied
+ groupOffset: root.groupOffset
+ }
}
ActiveIndicator {
diff --git a/run.fish b/run.fish
index 7af0975..78cd42b 100755
--- a/run.fish
+++ b/run.fish
@@ -5,6 +5,7 @@ set -l hypr 'invalid nullptr parameter' # Error that always pops up on Hyprland
set -l intercept '^qsintercept:.*(:[0-9]+){2}$' # Empty qsintercept lines
set -l loop 'Binding loop detected' # Binding loops
set -l icons 'Searching custom icon paths is not yet supported' # Error for system tray icons
-set -l process 'QProcess: Destroyed while process'
+set -l process 'QProcess: Destroyed while process' # Long running processes on reload
+set -l asyncLoader 'items in the process of being created at engine destruction' # Async loaders on reload
-qs -c caelestia --log-rules $dbus | grep -vE -e $hypr -e $intercept -e $loop -e $icons -e $process
+qs -c caelestia --log-rules $dbus | grep -vE -e $hypr -e $intercept -e $loop -e $icons -e $process -e $asyncLoader