diff --git a/modules/bar/components/bluetooth/BluetoothMenu.qml b/modules/bar/components/bluetooth/BluetoothMenu.qml index b59a855..b85fec6 100644 --- a/modules/bar/components/bluetooth/BluetoothMenu.qml +++ b/modules/bar/components/bluetooth/BluetoothMenu.qml @@ -62,10 +62,12 @@ StyledPopupWindow { text: "Paired Devices" } - DeviceList { - devices: Bluetooth.pairedDevices - onDeviceActivated: device => { - device.connect(); + ColumnLayout { + Repeater { + model: Bluetooth.pairedDevices + delegate: PairedDevice { + Layout.fillWidth: true + } } } diff --git a/modules/bar/components/bluetooth/PairedDevice.qml b/modules/bar/components/bluetooth/PairedDevice.qml new file mode 100644 index 0000000..e50a60c --- /dev/null +++ b/modules/bar/components/bluetooth/PairedDevice.qml @@ -0,0 +1,63 @@ +pragma ComponentBehavior: Bound + +import qs.config +import qs.widgets +import QtQuick +import QtQuick.Layouts +import Quickshell +import Quickshell.Bluetooth +import Quickshell.Widgets + +StyledLabel { + id: device + required property BluetoothDevice modelData + + RowLayout { + id: row + + spacing: 8 + + Loader { + active: modelData.icon != undefined + sourceComponent: IconImage { + implicitSize: 18 + source: Quickshell.iconPath(device.modelData.icon) + } + } + + StyledText { + text: device.modelData.deviceName + } + + RowLayout { + Layout.alignment: Qt.AlignRight + StyledButton { + hoverEnabled: device.modelData.state == BluetoothDeviceState.Disconnected + color: containsMouse ? Theme.palette.info : Theme.palette.base200 + content: StyledText { + text: 'Connect' + } + onClicked: { + if (!hoverEnabled) { + return; + } + device.modelData.connect(); + } + } + + StyledButton { + hoverEnabled: device.modelData.state == BluetoothDeviceState.Disconnected + color: containsMouse ? Theme.palette.error : Theme.palette.base200 + content: StyledText { + text: 'Unpair' + } + onClicked: { + if (!hoverEnabled) { + return; + } + device.modelData.forget(); + } + } + } + } +}