diff --git a/quickshell/Modules/ControlCenter/Components/DragDropGrid.qml b/quickshell/Modules/ControlCenter/Components/DragDropGrid.qml index 368e27cd5..e3e8d60d3 100644 --- a/quickshell/Modules/ControlCenter/Components/DragDropGrid.qml +++ b/quickshell/Modules/ControlCenter/Components/DragDropGrid.qml @@ -191,9 +191,7 @@ Column { } case "bluetooth": { - if (BluetoothService.available && BluetoothService.adapter) { - BluetoothService.adapter.enabled = !BluetoothService.adapter.enabled; - } + BluetoothService.setBluetoothEnabled(!BluetoothService.enabled); break; } case "audioOutput": diff --git a/quickshell/Services/BluetoothService.qml b/quickshell/Services/BluetoothService.qml index 47ca13bd6..a22499b10 100644 --- a/quickshell/Services/BluetoothService.qml +++ b/quickshell/Services/BluetoothService.qml @@ -11,6 +11,7 @@ import qs.Services Singleton { id: root + readonly property var log: Log.scoped("BluetoothService") readonly property BluetoothAdapter adapter: Bluetooth.defaultAdapter readonly property bool available: adapter !== null readonly property bool enabled: (adapter && adapter.enabled) ?? false @@ -79,6 +80,21 @@ Singleton { maybeSubscribeCodecSignals(); } + function setBluetoothEnabled(enabled) { + if (DMSService.isConnected && DMSService.capabilities.includes("bluetooth")) { + DMSService.sendRequest("bluetooth.setPowered", { + "powered": enabled + }, response => { + if (response.error) + log.warn("Failed to set Bluetooth powered state:", response.error); + }); + return; + } + + if (adapter) + adapter.enabled = enabled; + } + Connections { target: DMSService