summaryrefslogtreecommitdiff
path: root/modules/bar/Bar.qml
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-06-07 14:47:24 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-06-07 14:47:24 +1000
commite3dcdbb67cba35d90fbf5d437466d11776fe8412 (patch)
tree192e3787eb1ab45463cb27b35c595466912da4ed /modules/bar/Bar.qml
parentdashboard: make own swipeview impl (diff)
downloadcaelestia-shell-e3dcdbb67cba35d90fbf5d437466d11776fe8412.tar.gz
caelestia-shell-e3dcdbb67cba35d90fbf5d437466d11776fe8412.tar.bz2
caelestia-shell-e3dcdbb67cba35d90fbf5d437466d11776fe8412.zip
internal: move bar to drawer window
Fixes a few bugs, also removes need for hyprland order layerrule
Diffstat (limited to 'modules/bar/Bar.qml')
-rw-r--r--modules/bar/Bar.qml158
1 files changed, 143 insertions, 15 deletions
diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml
index 8860e47..914ee24 100644
--- a/modules/bar/Bar.qml
+++ b/modules/bar/Bar.qml
@@ -1,30 +1,158 @@
import "root:/widgets"
+import "root:/services"
import "root:/config"
+import "components"
+import "components/workspaces"
import Quickshell
import QtQuick
-Variants {
- model: Quickshell.screens
+Item {
+ id: root
- StyledWindow {
- id: win
+ required property ShellScreen screen
- required property ShellScreen modelData
+ function checkPopout(y: real): void {
+ const spacing = Appearance.spacing.small;
+ const aw = activeWindow.child;
+ const awy = activeWindow.y + aw.y;
- screen: modelData
- name: "bar"
+ const ty = tray.y;
+ const th = tray.implicitHeight;
+ const trayItems = tray.items;
- implicitWidth: content.implicitWidth
- exclusiveZone: content.implicitWidth
+ const n = statusIconsInner.network;
+ const ny = statusIcons.y + statusIconsInner.y + n.y - spacing / 2;
- anchors.top: true
- anchors.bottom: true
- anchors.left: true
+ const bls = statusIcons.y + statusIconsInner.y + statusIconsInner.bs - spacing / 2;
+ const ble = statusIcons.y + statusIconsInner.y + statusIconsInner.be + spacing / 2;
- Content {
- id: content
+ const b = statusIconsInner.battery;
+ const by = statusIcons.y + statusIconsInner.y + b.y - spacing / 2;
- screen: win.modelData
+ if (y >= awy && y <= awy + aw.implicitHeight) {
+ Popouts.currentName = "activewindow";
+ Popouts.currentCenter = Qt.binding(() => activeWindow.y + aw.y + aw.implicitHeight / 2);
+ Popouts.hasCurrent = true;
+ } else if (y > ty && y < ty + th) {
+ const index = Math.floor(((y - ty) / th) * trayItems.count);
+ const item = trayItems.itemAt(index);
+
+ Popouts.currentName = `traymenu${index}`;
+ Popouts.currentCenter = Qt.binding(() => tray.y + item.y + item.implicitHeight / 2);
+ Popouts.hasCurrent = true;
+ } else if (y >= ny && y <= ny + n.implicitHeight + spacing) {
+ Popouts.currentName = "network";
+ Popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + n.y + n.implicitHeight / 2);
+ Popouts.hasCurrent = true;
+ } else if (y >= bls && y <= ble) {
+ Popouts.currentName = "bluetooth";
+ Popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + statusIconsInner.bs + (statusIconsInner.be - statusIconsInner.bs) / 2);
+ Popouts.hasCurrent = true;
+ } else if (y >= by && y <= by + b.implicitHeight + spacing) {
+ Popouts.currentName = "battery";
+ Popouts.currentCenter = Qt.binding(() => statusIcons.y + statusIconsInner.y + b.y + b.implicitHeight / 2);
+ Popouts.hasCurrent = true;
+ } else {
+ Popouts.hasCurrent = false;
+ }
+ }
+
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+
+ implicitWidth: child.implicitWidth + BorderConfig.thickness * 2
+
+ Item {
+ id: child
+
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ implicitWidth: Math.max(osIcon.implicitWidth, workspaces.implicitWidth, activeWindow.implicitWidth, tray.implicitWidth, clock.implicitWidth, statusIcons.implicitWidth, power.implicitWidth)
+
+ OsIcon {
+ id: osIcon
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ anchors.topMargin: Appearance.padding.large
+ }
+
+ StyledClippingRect {
+ id: workspaces
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: osIcon.bottom
+ anchors.topMargin: Appearance.spacing.normal
+
+ radius: Appearance.rounding.full
+ color: Colours.palette.m3surfaceContainer
+
+ implicitWidth: workspacesInner.implicitWidth + Appearance.padding.small * 2
+ implicitHeight: workspacesInner.implicitHeight + Appearance.padding.small * 2
+
+ Workspaces {
+ id: workspacesInner
+
+ anchors.centerIn: parent
+ }
+ }
+
+ ActiveWindow {
+ id: activeWindow
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: workspaces.bottom
+ anchors.bottom: tray.top
+ anchors.margins: Appearance.spacing.large
+
+ monitor: Brightness.getMonitorForScreen(root.screen)
+ }
+
+ Tray {
+ id: tray
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: clock.top
+ anchors.bottomMargin: Appearance.spacing.larger
+ }
+
+ Clock {
+ id: clock
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: statusIcons.top
+ anchors.bottomMargin: Appearance.spacing.normal
+ }
+
+ StyledRect {
+ id: statusIcons
+
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: power.top
+ anchors.bottomMargin: Appearance.spacing.normal
+
+ radius: Appearance.rounding.full
+ color: Colours.palette.m3surfaceContainer
+
+ implicitHeight: statusIconsInner.implicitHeight + Appearance.padding.normal * 2
+
+ StatusIcons {
+ id: statusIconsInner
+
+ anchors.centerIn: parent
+ }
+ }
+
+ Power {
+ id: power
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: Appearance.padding.large
}
}
}