diff --git a/src/backend/dbus-interface/kylinactiveconnectresource.cpp b/src/backend/dbus-interface/kylinactiveconnectresource.cpp index d13caa5d..05526949 100644 --- a/src/backend/dbus-interface/kylinactiveconnectresource.cpp +++ b/src/backend/dbus-interface/kylinactiveconnectresource.cpp @@ -665,7 +665,7 @@ bool KyActiveConnectResourse::wiredConnectIsActived() return false; } -bool KyActiveConnectResourse::wirelessConnectIsActived() +bool KyActiveConnectResourse::checkWirelessStatus(NetworkManager::ActiveConnection::State state) { int index = 0; NetworkManager::ActiveConnection::List activeConnectList; @@ -691,7 +691,7 @@ bool KyActiveConnectResourse::wirelessConnectIsActived() continue; } - if (activeConnectPtr->state() == NetworkManager::ActiveConnection::State::Activated) { + if (activeConnectPtr->state() == state) { return true; } } diff --git a/src/backend/dbus-interface/kylinactiveconnectresource.h b/src/backend/dbus-interface/kylinactiveconnectresource.h index 3bd28cf5..db781917 100644 --- a/src/backend/dbus-interface/kylinactiveconnectresource.h +++ b/src/backend/dbus-interface/kylinactiveconnectresource.h @@ -39,7 +39,7 @@ public: bool connectionIsVirtual(QString uuid); bool wiredConnectIsActived(); - bool wirelessConnectIsActived(); + bool checkWirelessStatus(NetworkManager::ActiveConnection::State state); private: void getActiveConnectIp(NetworkManager::ActiveConnection::Ptr activeConnectPtr, diff --git a/src/frontend/mainwindow.cpp b/src/frontend/mainwindow.cpp index 66bfad43..94f657a5 100644 --- a/src/frontend/mainwindow.cpp +++ b/src/frontend/mainwindow.cpp @@ -401,7 +401,7 @@ void MainWindow::resetWindowTheme() void MainWindow::showControlCenter() { QProcess process; - if (!m_lanWidget->lanIsConnected() && m_wlanWidget->wlanIsConnected()){ + if (!m_lanWidget->lanIsConnected() && m_wlanWidget->checkWlanStatus(NetworkManager::ActiveConnection::State::Activated)){ process.startDetached("ukui-control-center -m wlanconnect"); } else { process.startDetached("ukui-control-center -m netconnect"); @@ -411,15 +411,19 @@ void MainWindow::showControlCenter() /** * @brief MainWindow::onTrayIconActivated 点击托盘图标的槽函数 */ -void MainWindow::onTrayIconActivated() +void MainWindow::onTrayIconActivated(QSystemTrayIcon::ActivationReason reason) { - if (this->isVisible()) { - qDebug() << "Received signal of tray icon activated, will hide mainwindow." << Q_FUNC_INFO << __LINE__; - hideMainwindow(); - return; + if (reason == QSystemTrayIcon::ActivationReason::Context) { + m_trayIconMenu->popup(QCursor::pos()); + } else { + if (this->isVisible()) { + qDebug() << "Received signal of tray icon activated, will hide mainwindow." << Q_FUNC_INFO << __LINE__; + hideMainwindow(); + return; + } + qDebug() << "Received signal of tray icon activated, will show mainwindow." << Q_FUNC_INFO << __LINE__; + this->showMainwindow(); } - qDebug() << "Received signal of tray icon activated, will show mainwindow." << Q_FUNC_INFO << __LINE__; - this->showMainwindow(); } void MainWindow::onShowMainwindowActionTriggled() @@ -451,7 +455,7 @@ void MainWindow::onRefreshTrayIcon() if (m_lanWidget->lanIsConnected()) { m_trayIcon->setIcon(QIcon::fromTheme("network-wired-connected-symbolic")); iconStatus = IconActiveType::LAN_CONNECTED; - } else if (m_wlanWidget->wlanIsConnected()){ + } else if (m_wlanWidget->checkWlanStatus(NetworkManager::ActiveConnection::State::Activated)){ m_trayIcon->setIcon(QIcon::fromTheme("network-wireless-connected-symbolic")); iconStatus = IconActiveType::WLAN_CONNECTED; } else { @@ -461,7 +465,7 @@ void MainWindow::onRefreshTrayIcon() NetworkManager::Connectivity connecttivity; m_wlanWidget->getConnectivity(connecttivity); - if (connecttivity == NetworkManager::Connectivity::Portal || connecttivity == NetworkManager::Connectivity::Limited) { + if (connecttivity != NetworkManager::Connectivity::Full) { if (iconStatus == IconActiveType::LAN_CONNECTED) { m_trayIcon->setIcon(QIcon::fromTheme("network-error-symbolic")); iconStatus = IconActiveType::LAN_CONNECTED_LIMITED; @@ -504,6 +508,9 @@ void MainWindow::onWlanConnectStatusToChangeTrayIcon(int state) m_wlanIsLoading = true; iconTimer->start(LOADING_TRAYICON_TIMER_MS); } else { + if (m_wlanWidget->checkWlanStatus(NetworkManager::ActiveConnection::State::Activating)) { + return; + } m_wlanIsLoading = false; if (m_lanIsLoading == false) { onRefreshTrayIcon(); diff --git a/src/frontend/mainwindow.h b/src/frontend/mainwindow.h index c5f85f54..373665f3 100644 --- a/src/frontend/mainwindow.h +++ b/src/frontend/mainwindow.h @@ -155,7 +155,7 @@ private: private slots: void onTransChanged(); - void onTrayIconActivated(); + void onTrayIconActivated(QSystemTrayIcon::ActivationReason reason); void onShowMainwindowActionTriggled(); void onShowSettingsActionTriggled(); void onThemeChanged(const QString &key); diff --git a/src/frontend/tab-pages/wlanpage.cpp b/src/frontend/tab-pages/wlanpage.cpp index 0ebe0840..38773f5b 100644 --- a/src/frontend/tab-pages/wlanpage.cpp +++ b/src/frontend/tab-pages/wlanpage.cpp @@ -1378,9 +1378,9 @@ void WlanPage::showDetailPage(QString devName, QString ssid) return; } -bool WlanPage::wlanIsConnected() +bool WlanPage::checkWlanStatus(NetworkManager::ActiveConnection::State state) { - if (m_activatedConnectResource->wirelessConnectIsActived()) { + if (m_activatedConnectResource->checkWirelessStatus(state)) { return true; } else { return false; diff --git a/src/frontend/tab-pages/wlanpage.h b/src/frontend/tab-pages/wlanpage.h index f4880df1..1e6bf178 100644 --- a/src/frontend/tab-pages/wlanpage.h +++ b/src/frontend/tab-pages/wlanpage.h @@ -42,7 +42,7 @@ public: void showDetailPage(QString devName, QString uuid); - bool wlanIsConnected(); + bool checkWlanStatus(NetworkManager::ActiveConnection::State state); void getApInfoBySsid(QString devName, QString ssid, QStringList &list); //无线总开关