diff --git a/.config/quickshell/ii/modules/bar/BarContent.qml b/.config/quickshell/ii/modules/bar/BarContent.qml index d9670b642..45656992c 100644 --- a/.config/quickshell/ii/modules/bar/BarContent.qml +++ b/.config/quickshell/ii/modules/bar/BarContent.qml @@ -2,7 +2,6 @@ import "./weather" import QtQuick import QtQuick.Layouts import Quickshell -import Quickshell.Bluetooth import Quickshell.Services.UPower import qs import qs.services @@ -307,10 +306,7 @@ Item { // Bar content region color: rightSidebarButton.colText } MaterialSymbol { - readonly property bool bluetoothEnabled: Bluetooth.defaultAdapter?.enabled - readonly property BluetoothDevice bluetoothDevice: Bluetooth.defaultAdapter?.devices.values.find(device => device.connected) - readonly property bool bluetoothConnected: bluetoothDevice !== undefined - text: bluetoothConnected ? "bluetooth_connected" : bluetoothEnabled ? "bluetooth" : "bluetooth_disabled" + text: BluetoothStatus.connected ? "bluetooth_connected" : BluetoothStatus.enabled ? "bluetooth" : "bluetooth_disabled" iconSize: Appearance.font.pixelSize.larger color: rightSidebarButton.colText } diff --git a/.config/quickshell/ii/modules/sidebarRight/quickToggles/BluetoothToggle.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/BluetoothToggle.qml index d1ad1c3a6..1a4c053ed 100644 --- a/.config/quickshell/ii/modules/sidebarRight/quickToggles/BluetoothToggle.qml +++ b/.config/quickshell/ii/modules/sidebarRight/quickToggles/BluetoothToggle.qml @@ -1,4 +1,5 @@ import qs +import qs.services import qs.modules.common import qs.modules.common.widgets import qs.modules.common.functions @@ -10,11 +11,8 @@ import Quickshell.Hyprland QuickToggleButton { id: root - readonly property bool bluetoothEnabled: Bluetooth.defaultAdapter?.enabled ?? false - readonly property BluetoothDevice bluetoothDevice: Bluetooth.defaultAdapter?.devices.values.find(device => device.connected) ?? null - readonly property bool bluetoothConnected: bluetoothDevice !== undefined - toggled: bluetoothEnabled - buttonIcon: bluetoothConnected ? "bluetooth_connected" : bluetoothEnabled ? "bluetooth" : "bluetooth_disabled" + toggled: BluetoothStatus.enabled + buttonIcon: BluetoothStatus.connected ? "bluetooth_connected" : BluetoothStatus.enabled ? "bluetooth" : "bluetooth_disabled" onClicked: { Bluetooth.defaultAdapter.enabled = !Bluetooth.defaultAdapter?.enabled } @@ -24,7 +22,8 @@ QuickToggleButton { } StyledToolTip { content: Translation.tr("%1 | Right-click to configure").arg( - (bluetoothDevice?.name.length > 0) ? - bluetoothDevice.name : Translation.tr("Bluetooth")) + (BluetoothStatus.firstActiveDevice?.name ?? Translation.tr("Bluetooth")) + + (BluetoothStatus.activeDeviceCount > 1 ? ` +${BluetoothStatus.activeDeviceCount - 1}` : "") + ) } } diff --git a/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml b/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml index 66ccd78f4..a69625de3 100644 --- a/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml +++ b/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml @@ -285,10 +285,7 @@ Item { // Bar content region color: rightSidebarButton.colText } MaterialSymbol { - readonly property bool bluetoothEnabled: Bluetooth.defaultAdapter?.enabled - readonly property BluetoothDevice bluetoothDevice: Bluetooth.defaultAdapter?.devices.values.find(device => device.connected) - readonly property bool bluetoothConnected: bluetoothDevice !== undefined - text: bluetoothConnected ? "bluetooth_connected" : bluetoothEnabled ? "bluetooth" : "bluetooth_disabled" + text: BluetoothStatus.connected ? "bluetooth_connected" : BluetoothStatus.enabled ? "bluetooth" : "bluetooth_disabled" iconSize: Appearance.font.pixelSize.larger color: rightSidebarButton.colText } diff --git a/.config/quickshell/ii/services/BluetoothStatus.qml b/.config/quickshell/ii/services/BluetoothStatus.qml new file mode 100644 index 000000000..e2d3cee56 --- /dev/null +++ b/.config/quickshell/ii/services/BluetoothStatus.qml @@ -0,0 +1,19 @@ +pragma Singleton +pragma ComponentBehavior: Bound + +import Quickshell +import Quickshell.Bluetooth +import Quickshell.Io +import QtQuick + +/** + * Network service with nmcli. + */ +Singleton { + id: root + + readonly property bool enabled: Bluetooth.defaultAdapter?.enabled + readonly property BluetoothDevice firstActiveDevice: Bluetooth.defaultAdapter?.devices.values.find(device => device.connected) ?? null + readonly property int activeDeviceCount: Bluetooth.defaultAdapter?.devices.values.filter(device => device.connected).length ?? 0 + readonly property bool connected: Bluetooth.devices.values.some(d => d.connected) +}