From 34cf6e6346afe692b6ce0fb09c74adc76bf2192d Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 25 Aug 2026 23:43:09 +0200 Subject: [PATCH] feat(control-center): show Bluetooth battery in quick tile (#3160) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Display the selected device as `name • N%` when battery information is available, while preserving the existing name-only fallback. --- .../ControlCenter/Components/DragDropGrid.qml | 14 ++++++++++++-- .../ControlCenter/Details/BluetoothDetail.qml | 5 ++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/quickshell/Modules/ControlCenter/Components/DragDropGrid.qml b/quickshell/Modules/ControlCenter/Components/DragDropGrid.qml index 957baf5cd..abbf2e9a0 100644 --- a/quickshell/Modules/ControlCenter/Components/DragDropGrid.qml +++ b/quickshell/Modules/ControlCenter/Components/DragDropGrid.qml @@ -545,8 +545,18 @@ Column { } return null; })(); - if (primaryDevice) - return primaryDevice.name || primaryDevice.alias || primaryDevice.deviceName || I18n.tr("Connected Device", "bluetooth status"); + if (primaryDevice) { + const name = primaryDevice.name || primaryDevice.alias || primaryDevice.deviceName || I18n.tr("Connected Device", "bluetooth status"); + // A reported 0% is valid; batteryAvailable distinguishes missing data. + // https://quickshell.org/docs/v0.3.1/types/Quickshell.Bluetooth/BluetoothDevice/ + // https://bluez.readthedocs.io/en/latest/battery-api/ + if (primaryDevice.batteryAvailable) + return `${name} • ${Math.round(primaryDevice.battery * 100)}%`; + const btBattery = BatteryService.bluetoothDevices.find(dev => dev.name === name || dev.name.toLowerCase().includes(name.toLowerCase()) || name.toLowerCase().includes(dev.name.toLowerCase())); + if (btBattery) + return `${name} • ${btBattery.percentage}%`; + return name; + } return I18n.tr("No devices", "bluetooth status"); } case "audioOutput": diff --git a/quickshell/Modules/ControlCenter/Details/BluetoothDetail.qml b/quickshell/Modules/ControlCenter/Details/BluetoothDetail.qml index 21233654a..51bf3cc0b 100644 --- a/quickshell/Modules/ControlCenter/Details/BluetoothDetail.qml +++ b/quickshell/Modules/ControlCenter/Details/BluetoothDetail.qml @@ -362,7 +362,10 @@ Rectangle { return BatteryService.bluetoothDevices.find(dev => dev.name === name || dev.name.toLowerCase().includes(name.toLowerCase()) || name.toLowerCase().includes(dev.name.toLowerCase())); } text: { - if (pairedDelegate.modelData.batteryAvailable && pairedDelegate.modelData.battery > 0) + // A reported 0% is valid; batteryAvailable distinguishes missing data. + // https://quickshell.org/docs/v0.3.1/types/Quickshell.Bluetooth/BluetoothDevice/ + // https://bluez.readthedocs.io/en/latest/battery-api/ + if (pairedDelegate.modelData.batteryAvailable) return "• " + Math.round(pairedDelegate.modelData.battery * 100) + "%"; if (btBattery) return "• " + btBattery.percentage + "%";