mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
fix: 修复蓝牙列表中设备顺序与控制中心不一致的问题
增加记录蓝牙设备顺序的列表,根据新增删除设备的顺序对设备进行排序 Log: Influence: 打开快捷面板中的蓝牙列表,在多个设备同时存在的情况下,观察设备顺序是否和控制中心一致 Bug: https://pms.uniontech.com/bug-view-171513.html Change-Id: I5c1017a30e0658022c61a053b9cd724312b37c40
This commit is contained in:
parent
9b33a95fab
commit
06bab9d640
@ -227,10 +227,11 @@ void QuickSettingContainer::onPluginRemove(PluginsItemInterface *itemInter)
|
|||||||
return item->pluginItem() == itemInter;
|
return item->pluginItem() == itemInter;
|
||||||
});
|
});
|
||||||
|
|
||||||
QuickSettingItem *removeItem = *removeItemIter;
|
if (removeItemIter == m_quickSettings.end())
|
||||||
if (!removeItem)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
QuickSettingItem *removeItem = *removeItemIter;
|
||||||
|
|
||||||
if (removeItem->type() == QuickSettingItem::QuickSettingType::Full)
|
if (removeItem->type() == QuickSettingItem::QuickSettingType::Full)
|
||||||
m_componentWidget->layout()->removeWidget(removeItem);
|
m_componentWidget->layout()->removeWidget(removeItem);
|
||||||
else
|
else
|
||||||
|
@ -173,6 +173,7 @@ void AdaptersManager::onRemoveAdapter(const QString &json)
|
|||||||
Adapter *adapter = const_cast<Adapter *>(result);
|
Adapter *adapter = const_cast<Adapter *>(result);
|
||||||
if (adapter) {
|
if (adapter) {
|
||||||
m_adapters.remove(id);
|
m_adapters.remove(id);
|
||||||
|
m_adapterIds.removeOne(id);
|
||||||
emit adapterDecreased(adapter);
|
emit adapterDecreased(adapter);
|
||||||
adapter->deleteLater();
|
adapter->deleteLater();
|
||||||
}
|
}
|
||||||
@ -234,21 +235,17 @@ void AdaptersManager::adapterAdd(Adapter *adapter, const QJsonObject &adpterObj)
|
|||||||
const QString replyStr = reply.value();
|
const QString replyStr = reply.value();
|
||||||
QJsonDocument doc = QJsonDocument::fromJson(replyStr.toUtf8());
|
QJsonDocument doc = QJsonDocument::fromJson(replyStr.toUtf8());
|
||||||
adapter->initDevicesList(doc);
|
adapter->initDevicesList(doc);
|
||||||
|
|
||||||
QString id = adapter->id();
|
|
||||||
if (!id.isEmpty()) {
|
|
||||||
if (!m_adapters.contains(id)) {
|
|
||||||
m_adapters[id] = adapter;
|
|
||||||
} else if (!m_adapters[id]) {
|
|
||||||
m_adapters[id] = adapter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
emit this->adapterIncreased(adapter);
|
emit this->adapterIncreased(adapter);
|
||||||
} else {
|
} else {
|
||||||
qWarning() << call.error().message();
|
qWarning() << call.error().message();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QString id = adapter->id();
|
||||||
|
if (!id.isEmpty() && (!m_adapters.contains(id) || !m_adapters[id])) {
|
||||||
|
m_adapters[id] = adapter;
|
||||||
|
m_adapterIds << id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdaptersManager::inflateAdapter(Adapter *adapter, const QJsonObject &adapterObj)
|
void AdaptersManager::inflateAdapter(Adapter *adapter, const QJsonObject &adapterObj)
|
||||||
@ -275,5 +272,9 @@ void AdaptersManager::adapterRefresh(const Adapter *adapter)
|
|||||||
|
|
||||||
QList<const Adapter *> AdaptersManager::adapters()
|
QList<const Adapter *> AdaptersManager::adapters()
|
||||||
{
|
{
|
||||||
return m_adapters.values();
|
QList<const Adapter *> allAdapter = m_adapters.values();
|
||||||
|
std::sort(allAdapter.begin(), allAdapter.end(), [ & ](const Adapter *adapter1, const Adapter *adapter2) {
|
||||||
|
return m_adapterIds.indexOf(adapter1->id()) < m_adapterIds.indexOf(adapter2->id());
|
||||||
|
});
|
||||||
|
return allAdapter;
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,7 @@ private:
|
|||||||
private:
|
private:
|
||||||
DBusBluetooth *m_bluetoothInter;
|
DBusBluetooth *m_bluetoothInter;
|
||||||
QMap<QString, const Adapter *> m_adapters;
|
QMap<QString, const Adapter *> m_adapters;
|
||||||
|
QStringList m_adapterIds; // 用于记录蓝牙适配器的排序
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ADAPTERSMANAGER_H
|
#endif // ADAPTERSMANAGER_H
|
||||||
|
@ -126,6 +126,7 @@ BluetoothApplet::BluetoothApplet(AdaptersManager *adapterManager, QWidget *paren
|
|||||||
{
|
{
|
||||||
initUi();
|
initUi();
|
||||||
initConnect();
|
initConnect();
|
||||||
|
initAdapters();
|
||||||
|
|
||||||
QScroller::grabGesture(m_scroarea, QScroller::LeftMouseButtonGesture);
|
QScroller::grabGesture(m_scroarea, QScroller::LeftMouseButtonGesture);
|
||||||
QScrollerProperties propertiesOne = QScroller::scroller(m_scroarea)->scrollerProperties();
|
QScrollerProperties propertiesOne = QScroller::scroller(m_scroarea)->scrollerProperties();
|
||||||
@ -202,7 +203,8 @@ void BluetoothApplet::onAdapterAdded(Adapter *adapter)
|
|||||||
|
|
||||||
m_adapterItems.insert(adapter->id(), adapterItem);
|
m_adapterItems.insert(adapter->id(), adapterItem);
|
||||||
|
|
||||||
m_contentLayout->insertWidget(0, adapterItem, Qt::AlignTop | Qt::AlignVCenter);
|
// 将最新的设备插入到蓝牙设置前面
|
||||||
|
m_contentLayout->insertWidget(m_contentLayout->count() - 1, adapterItem, Qt::AlignTop | Qt::AlignVCenter);
|
||||||
updateBluetoothPowerState();
|
updateBluetoothPowerState();
|
||||||
updateSize();
|
updateSize();
|
||||||
}
|
}
|
||||||
@ -321,6 +323,13 @@ void BluetoothApplet::updateIconTheme()
|
|||||||
m_scroarea->setPalette(scroareaBackgroud);
|
m_scroarea->setPalette(scroareaBackgroud);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BluetoothApplet::initAdapters()
|
||||||
|
{
|
||||||
|
QList<const Adapter *> adapters = m_adaptersManager->adapters();
|
||||||
|
for (const Adapter *adapter : adapters)
|
||||||
|
onAdapterAdded(const_cast<Adapter *>(adapter));
|
||||||
|
}
|
||||||
|
|
||||||
void BluetoothApplet::setAirplaneModeEnabled(bool enable)
|
void BluetoothApplet::setAirplaneModeEnabled(bool enable)
|
||||||
{
|
{
|
||||||
if (m_airplaneModeEnable == enable)
|
if (m_airplaneModeEnable == enable)
|
||||||
|
@ -115,6 +115,7 @@ private:
|
|||||||
// 更新蓝牙插件主界面大小
|
// 更新蓝牙插件主界面大小
|
||||||
void updateSize();
|
void updateSize();
|
||||||
void updateIconTheme();
|
void updateIconTheme();
|
||||||
|
void initAdapters();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QScrollArea *m_scroarea;
|
QScrollArea *m_scroarea;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user