diff --git a/frame/model/collaborationdevmodel.cpp b/frame/model/collaborationdevmodel.cpp index a987e1b00..6305ec88a 100644 --- a/frame/model/collaborationdevmodel.cpp +++ b/frame/model/collaborationdevmodel.cpp @@ -126,7 +126,7 @@ void CollaborationDevModel::updateDevice(const QStringList &devPaths) emit devicesChanged(); } -const CollaborationDevice *CollaborationDevModel::getDevice(const QString &machinePath) +CollaborationDevice *CollaborationDevModel::getDevice(const QString &machinePath) { return m_devices.value(machinePath, nullptr); } @@ -138,6 +138,7 @@ CollaborationDevice::CollaborationDevice(const QString &devPath, QObject *parent , m_isPaired(false) , m_isCooperated(false) , m_isValid(false) + , m_isCooperating(false) , m_devDbusInter(new QDBusInterface(CollaborationService, devPath, CollaborationInterface + QString(".Machine"), QDBusConnection::sessionBus(), this)) { @@ -204,6 +205,11 @@ bool CollaborationDevice::isCooperated() const return m_isCooperated; } +void CollaborationDevice::setDeviceIsCooperating(bool isCooperating) +{ + m_isCooperating = isCooperating; +} + void CollaborationDevice::onPropertyChanged(const QDBusMessage &msg) { QList arguments = msg.arguments(); @@ -218,10 +224,12 @@ void CollaborationDevice::onPropertyChanged(const QDBusMessage &msg) if (changedProps.contains("Paired")) { bool isPaired = changedProps.value("Paired").value(); m_isPaired = isPaired; - if (isPaired) { + if (isPaired && m_isCooperating) { // paired 成功之后再去请求cooperate requestCooperate(); - } else { + } + + if (!isPaired){ Q_EMIT pairedStateChanged(false); } } else if (changedProps.contains("Cooperating")) { diff --git a/frame/model/collaborationdevmodel.h b/frame/model/collaborationdevmodel.h index cab4b4db2..013624211 100644 --- a/frame/model/collaborationdevmodel.h +++ b/frame/model/collaborationdevmodel.h @@ -46,7 +46,7 @@ public: void checkServiceValid(); QList devices() const; - const CollaborationDevice *getDevice(const QString &machinePath); + CollaborationDevice *getDevice(const QString &machinePath); private slots: void onPropertyChanged(const QDBusMessage &msg); @@ -86,6 +86,7 @@ public: QString deviceIcon() const; bool isPaired() const; bool isCooperated() const; + void setDeviceIsCooperating(bool isCooperating); private slots: void onPropertyChanged(const QDBusMessage &msg); @@ -112,6 +113,9 @@ private: bool m_isCooperated; bool m_isValid; + // 标记任务栏点击触发协同连接 + bool m_isCooperating; + QDBusInterface *m_devDbusInter; }; diff --git a/frame/window/components/devcollaborationwidget.cpp b/frame/window/components/devcollaborationwidget.cpp index 68ceffd7d..846957e03 100644 --- a/frame/window/components/devcollaborationwidget.cpp +++ b/frame/window/components/devcollaborationwidget.cpp @@ -189,11 +189,12 @@ void DevCollaborationWidget::resetWidgetSize() void DevCollaborationWidget::itemClicked(const QModelIndex &index) { QString machinePath = index.data(DevItemDelegate::MachinePathDataRole).toString(); - const CollaborationDevice *device = m_deviceModel->getDevice(machinePath); + CollaborationDevice *device = m_deviceModel->getDevice(machinePath); if (!device) return; if (!device->isPaired()) { + device->setDeviceIsCooperating(true); device->pair(); if (!m_connectingDevices.contains(machinePath)) m_connectingDevices.append(machinePath); @@ -217,6 +218,7 @@ void DevCollaborationWidget::itemStatusChanged() if (!device) return; + device->setDeviceIsCooperating(false); QString machinePath = device->machinePath(); if (m_deviceItemMap.contains(machinePath) && m_deviceItemMap[machinePath]) { // 更新item的连接状态