feat: bluetooth popout

This commit is contained in:
2 * r + 2 * t 2025-06-05 22:13:27 +10:00
parent 017b1b4ce0
commit ded156f58d
5 changed files with 47 additions and 6 deletions

View file

@ -12,21 +12,28 @@ StyledRect {
required property ShellScreen screen
function checkPopout(y: real): var {
const spacing = Appearance.spacing.small;
const aw = activeWindow.child;
const awy = activeWindow.y + aw.y;
const n = statusIconsInner.network;
const ny = statusIcons.y + statusIconsInner.y + n.y;
const ny = statusIcons.y + statusIconsInner.y + n.y - spacing / 2;
const bls = statusIcons.y + statusIconsInner.y + statusIconsInner.bs - spacing / 2;
const ble = statusIcons.y + statusIconsInner.y + statusIconsInner.be + spacing / 2;
const b = statusIconsInner.battery;
const by = statusIcons.y + statusIconsInner.y + b.y;
const by = statusIcons.y + statusIconsInner.y + b.y - spacing / 2;
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 >= ny && y <= ny + n.implicitHeight) {
} 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 >= by && y <= by + b.implicitHeight) {
} 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;

View file

@ -12,6 +12,8 @@ Item {
property color colour: Colours.palette.m3secondary
readonly property Item network: network
readonly property real bs: bluetooth.y
readonly property real be: repeater.count > 0 ? devices.y + devices.implicitHeight : bluetooth.y + bluetooth.implicitHeight
readonly property Item battery: battery
clip: true

View file

@ -0,0 +1,18 @@
import "root:/widgets"
import "root:/services"
import "root:/config"
import QtQuick
Column {
id: root
spacing: Appearance.spacing.normal
StyledText {
text: qsTr("Bluetooth %1").arg(Bluetooth.powered ? "enabled" : "disabled")
}
StyledText {
text: Bluetooth.devices.some(d => d.connected) ? qsTr("Connected to: %1").arg(Bluetooth.devices.filter(d => d.connected).map(d => d.alias).join(", ")) : qsTr("No devices connected")
}
}

View file

@ -10,8 +10,8 @@ Item {
anchors.centerIn: parent
implicitWidth: Popouts.hasCurrent ? content.children.find(c => c.shouldBeActive).implicitWidth + Appearance.padding.large * 2 : 0
implicitHeight: Popouts.hasCurrent ? content.children.find(c => c.shouldBeActive).implicitHeight + Appearance.padding.large * 2 : 0
implicitWidth: Popouts.hasCurrent ? (content.children.find(c => c.shouldBeActive)?.implicitWidth ?? 0) + Appearance.padding.large * 2 : 0
implicitHeight: Popouts.hasCurrent ? (content.children.find(c => c.shouldBeActive)?.implicitHeight ?? 0) + Appearance.padding.large * 2 : 0
Item {
id: content
@ -31,6 +31,11 @@ Item {
source: "Network.qml"
}
Popout {
name: "bluetooth"
source: "Bluetooth.qml"
}
Popout {
name: "battery"
source: "Battery.qml"

View file

@ -1,5 +1,6 @@
pragma Singleton
import "root:/config"
import Quickshell
import QtQuick
@ -7,4 +8,12 @@ Singleton {
property string currentName
property real currentCenter
property bool hasCurrent
Behavior on currentCenter {
NumberAnimation {
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.emphasized
}
}
}