From 6a6ab82c158a70191e83987da1e0c244d9125935 Mon Sep 17 00:00:00 2001 From: zhaoyingzhen Date: Wed, 28 Jan 2026 13:50:01 +0800 Subject: [PATCH] fix: clear bluetooth device list when adapter is powered off When airplane mode is enabled, bluetooth is automatically turned off. However, the device list was not being cleared, causing residual device information to be displayed in the bluetooth plugin panel. This fix ensures that when the bluetooth adapter is powered off, all device items and models are properly cleared to prevent display issues. Log: clear bluetooth device list when adapter is powered off Pms: BUG-338867 --- .../componments/bluetoothadapteritem.cpp | 21 ++++++++++++++----- .../componments/bluetoothadapteritem.h | 1 + 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/plugins/dde-dock/bluetooth/componments/bluetoothadapteritem.cpp b/plugins/dde-dock/bluetooth/componments/bluetoothadapteritem.cpp index f146b5880..df7385b7c 100644 --- a/plugins/dde-dock/bluetooth/componments/bluetoothadapteritem.cpp +++ b/plugins/dde-dock/bluetooth/componments/bluetoothadapteritem.cpp @@ -428,7 +428,13 @@ void BluetoothAdapterItem::initConnect() }); connect(m_adapter, &Adapter::poweredChanged, this, [ = ](bool state) { - initData(); + if (state) { + // Initialize device list when bluetooth is powered on + initData(); + } else { + // Clear device list when bluetooth is powered off + clearDeviceList(); + } m_refreshBtn->setVisible(state); m_myDeviceWidget->setVisible(m_myDeviceModel->rowCount() > 0 && state); m_otherDeviceListView->setVisible(state && (m_otherDeviceControlWidget->isExpand() || m_myDeviceModel->rowCount() < 1)); @@ -438,11 +444,8 @@ void BluetoothAdapterItem::initConnect() }); connect(m_adapterStateBtn, &DSwitchButton::clicked, this, [ = ](bool state) { m_adapterSwitchEnabled = state; - qDeleteAll(m_deviceItems); - m_deviceItems.clear(); - m_myDeviceModel->clear(); + clearDeviceList(); m_myDeviceWidget->setVisible(false); - m_otherDeviceModel->clear(); m_otherDeviceListView->setVisible(false); m_adapterStateBtn->setEnabled(false); m_refreshBtn->setVisible(state); @@ -550,3 +553,11 @@ void BluetoothAdapterItem::updateMyDeviceLabelTheme() palette.setColor(QPalette::WindowText, textColor); DPaletteHelper::instance()->setPalette(m_myDeviceLabel, palette); } + +void BluetoothAdapterItem::clearDeviceList() +{ + qDeleteAll(m_deviceItems); + m_deviceItems.clear(); + m_myDeviceModel->clear(); + m_otherDeviceModel->clear(); +} diff --git a/plugins/dde-dock/bluetooth/componments/bluetoothadapteritem.h b/plugins/dde-dock/bluetooth/componments/bluetoothadapteritem.h index de8b5ccad..a8477164b 100644 --- a/plugins/dde-dock/bluetooth/componments/bluetoothadapteritem.h +++ b/plugins/dde-dock/bluetooth/componments/bluetoothadapteritem.h @@ -180,6 +180,7 @@ public slots: void initConnect(); void setUnnamedDevicesVisible(bool isShow); void updateMyDeviceLabelTheme(); + void clearDeviceList(); Adapter *m_adapter; SettingLabel *m_adapterLabel;