[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [plasma-nm] libs/editor: Autodetect wireless security in the connection editor once SSID is selected
From:       Jan Grulich <jgrulich () redhat ! com>
Date:       2015-12-17 15:10:54
Message-ID: E1a9aCk-0004VW-2w () scm ! kde ! org
[Download RAW message or body]

Git commit e3927a3ea25c6b576600d5caf3aa54586ba7e3f0 by Jan Grulich.
Committed on 17/12/2015 at 15:10.
Pushed by grulich into branch 'master'.

Autodetect wireless security in the connection editor once SSID is selected/written

M  +1    -0    libs/editor/connectiondetaileditor.cpp
M  +6    -2    libs/editor/settings/wificonnectionwidget.cpp
M  +3    -0    libs/editor/settings/wificonnectionwidget.h
M  +51   -0    libs/editor/settings/wifisecurity.cpp
M  +3    -0    libs/editor/settings/wifisecurity.h
M  +11   -16   libs/editor/widgets/ssidcombobox.cpp
M  +1    -2    libs/editor/widgets/ssidcombobox.h

http://commits.kde.org/plasma-nm/e3927a3ea25c6b576600d5caf3aa54586ba7e3f0

diff --git a/libs/editor/connectiondetaileditor.cpp \
b/libs/editor/connectiondetaileditor.cpp index 7370bbb..5d3f862 100644
--- a/libs/editor/connectiondetaileditor.cpp
+++ b/libs/editor/connectiondetaileditor.cpp
@@ -230,6 +230,7 @@ void ConnectionDetailEditor::initTabs()
                                                        \
m_connection->setting(NetworkManager::Setting::Security8021x).staticCast<NetworkManager::Security8021xSetting>(),
  this);
         m_ui->tabWidget->addTab(wifiSecurity, i18n("Wi-Fi Security"));
+        connect(wifiWidget, static_cast<void (WifiConnectionWidget::*)(const QString \
                &)>(&WifiConnectionWidget::ssidChanged), wifiSecurity, \
                &WifiSecurity::onSsidChanged);
     } else if (type == NetworkManager::ConnectionSettings::Pppoe) { // DSL
         PppoeWidget * pppoeWidget = new \
PppoeWidget(m_connection->setting(NetworkManager::Setting::Pppoe), this);  \
                m_ui->tabWidget->addTab(pppoeWidget, i18n("DSL"));
diff --git a/libs/editor/settings/wificonnectionwidget.cpp \
b/libs/editor/settings/wificonnectionwidget.cpp index a36b661..18e1a2e 100644
--- a/libs/editor/settings/wificonnectionwidget.cpp
+++ b/libs/editor/settings/wificonnectionwidget.cpp
@@ -36,7 +36,7 @@ WifiConnectionWidget::WifiConnectionWidget(const \
NetworkManager::Setting::Ptr &s  m_ui->setupUi(this);
 
     connect(m_ui->btnRandomMacAddr, &QPushButton::clicked, this, \
                &WifiConnectionWidget::generateRandomClonedMac);
-    connect(m_ui->SSIDCombo, &SsidComboBox::ssidChanged, this, \
&WifiConnectionWidget::ssidChanged); +    connect(m_ui->SSIDCombo, \
&SsidComboBox::ssidChanged, this, static_cast<void \
                (WifiConnectionWidget::*)()>(&WifiConnectionWidget::ssidChanged));
     connect(m_ui->modeComboBox, static_cast<void \
(KComboBox::*)(int)>(&KComboBox::currentIndexChanged), this, \
                &WifiConnectionWidget::modeChanged);
     connect(m_ui->band, static_cast<void \
(KComboBox::*)(int)>(&KComboBox::currentIndexChanged), this, \
&WifiConnectionWidget::bandChanged);  
@@ -46,8 +46,9 @@ WifiConnectionWidget::WifiConnectionWidget(const \
NetworkManager::Setting::Ptr &s  
     KAcceleratorManager::manage(this);
 
-    if (setting)
+    if (setting) {
         loadConfig(setting);
+    }
 }
 
 WifiConnectionWidget::~WifiConnectionWidget()
@@ -138,6 +139,9 @@ void WifiConnectionWidget::ssidChanged()
 {
     m_ui->BSSIDCombo->init(m_ui->BSSIDCombo->bssid(), m_ui->SSIDCombo->ssid());
     slotWidgetChanged();
+
+    // Emit that SSID has changed so we can pre-configure wireless security
+    Q_EMIT ssidChanged(m_ui->SSIDCombo->ssid());
 }
 
 void WifiConnectionWidget::modeChanged(int mode)
diff --git a/libs/editor/settings/wificonnectionwidget.h \
b/libs/editor/settings/wificonnectionwidget.h index a111b7a..f64d0b5 100644
--- a/libs/editor/settings/wificonnectionwidget.h
+++ b/libs/editor/settings/wificonnectionwidget.h
@@ -46,6 +46,9 @@ public:
 
     virtual bool isValid() const Q_DECL_OVERRIDE;
 
+Q_SIGNALS:
+    void ssidChanged(const QString &ssid);
+
 private Q_SLOTS:
     void generateRandomClonedMac();
     void ssidChanged();
diff --git a/libs/editor/settings/wifisecurity.cpp \
b/libs/editor/settings/wifisecurity.cpp index a6c252e..fc607eb 100644
--- a/libs/editor/settings/wifisecurity.cpp
+++ b/libs/editor/settings/wifisecurity.cpp
@@ -21,6 +21,9 @@
 #include "wifisecurity.h"
 #include "ui_wifisecurity.h"
 
+#include <NetworkManagerQt/Device>
+#include <NetworkManagerQt/Manager>
+#include <NetworkManagerQt/WirelessDevice>
 #include <NetworkManagerQt/Utils>
 
 WifiSecurity::WifiSecurity(const NetworkManager::Setting::Ptr &setting, const \
NetworkManager::Security8021xSetting::Ptr &setting8021x, @@ -299,6 +302,54 @@ \
QVariantMap WifiSecurity::setting8021x() const  return QVariantMap();
 }
 
+void WifiSecurity::onSsidChanged(const QString &ssid)
+{
+    Q_FOREACH (const NetworkManager::Device::Ptr &device, \
NetworkManager::networkInterfaces()) { +        if (device->type() == \
NetworkManager::Device::Wifi) { +            NetworkManager::WirelessDevice::Ptr \
wifiDevice = device.staticCast<NetworkManager::WirelessDevice>(); +            if \
(wifiDevice) { +                Q_FOREACH (const NetworkManager::WirelessNetwork::Ptr \
wifiNetwork, wifiDevice->networks()) { +                    if (wifiNetwork && \
wifiNetwork->ssid() == ssid) { +                        \
NetworkManager::AccessPoint::Ptr ap = wifiNetwork->referenceAccessPoint(); +          \
NetworkManager::WirelessSecurityType securityType = \
NetworkManager::findBestWirelessSecurity(wifiDevice->wirelessCapabilities(), true, \
(wifiDevice->mode() == NetworkManager::WirelessDevice::Adhoc), +                      \
ap->capabilities(), ap->wpaFlags(), ap->rsnFlags()); +                        switch \
(securityType) { +                        case \
NetworkManager::WirelessSecurityType::StaticWep: +                            \
m_ui->securityCombo->setCurrentIndex(WepHex); +                            break;
+                        case NetworkManager::WirelessSecurityType::DynamicWep:
+                            m_ui->securityCombo->setCurrentIndex(DynamicWep);
+                            break;
+                        case NetworkManager::WirelessSecurityType::Leap:
+                            m_ui->securityCombo->setCurrentIndex(Leap);
+                            break;
+                        case NetworkManager::WirelessSecurityType::WpaPsk:
+                            m_ui->securityCombo->setCurrentIndex(WpaPsk);
+                            break;
+                        case NetworkManager::WirelessSecurityType::Wpa2Psk:
+                            m_ui->securityCombo->setCurrentIndex(WpaPsk);
+                            break;
+                        case NetworkManager::WirelessSecurityType::WpaEap:
+                            m_ui->securityCombo->setCurrentIndex(WpaEap);
+                            break;
+                        case NetworkManager::WirelessSecurityType::Wpa2Eap:
+                            m_ui->securityCombo->setCurrentIndex(WpaEap);
+                            break;
+                        default:
+                            m_ui->securityCombo->setCurrentIndex(None);
+                        }
+
+                        return;
+                    }
+                }
+            }
+        }
+    }
+
+    // Reset to none security if we don't find any AP or Wifi device
+    m_ui->securityCombo->setCurrentIndex(None);
+}
+
 void WifiSecurity::setWepKey(int keyIndex)
 {
     if (keyIndex == 0) {
diff --git a/libs/editor/settings/wifisecurity.h \
b/libs/editor/settings/wifisecurity.h index 2bef9c5..77d8c88 100644
--- a/libs/editor/settings/wifisecurity.h
+++ b/libs/editor/settings/wifisecurity.h
@@ -57,6 +57,9 @@ public:
 
     virtual bool isValid() const Q_DECL_OVERRIDE;
 
+public Q_SLOTS:
+    void onSsidChanged(const QString &ssid);
+
 private Q_SLOTS:
     void securityChanged(int index);
     void setWepKey(int keyIndex);
diff --git a/libs/editor/widgets/ssidcombobox.cpp \
b/libs/editor/widgets/ssidcombobox.cpp index 472384f..c1c501a 100644
--- a/libs/editor/widgets/ssidcombobox.cpp
+++ b/libs/editor/widgets/ssidcombobox.cpp
@@ -33,7 +33,7 @@ bool signalCompare(const NetworkManager::WirelessNetwork::Ptr & \
one, const Netwo  }
 
 SsidComboBox::SsidComboBox(QWidget *parent) :
-    KComboBox(parent), m_dirty(false)
+    KComboBox(parent)
 {
     setEditable(true);
     setInsertPolicy(QComboBox::NoInsert);
@@ -44,28 +44,23 @@ SsidComboBox::SsidComboBox(QWidget *parent) :
 
 QString SsidComboBox::ssid() const
 {
-    QString result;
-    if (!m_dirty)
-        result = itemData(currentIndex()).toString();
-    else
-        result = currentText();
-
-    // qCDebug(PLASMA_NM) << "Result:" << currentIndex() << result;
-
-    return result;
+    if (currentIndex() == 0 || currentText() != itemData(currentIndex()).toString()) \
{ +        return currentText();
+    } else {
+        return itemData(currentIndex()).toString();
+    }
 }
 
-void SsidComboBox::slotEditTextChanged(const QString &)
+void SsidComboBox::slotEditTextChanged(const QString &text)
 {
-    m_dirty = true;
-    Q_EMIT ssidChanged();
+    if (!text.contains(QLatin1String("Security:")) && \
!text.contains(QLatin1String("Frequency:"))) { +        Q_EMIT ssidChanged();
+    }
 }
 
 void SsidComboBox::slotCurrentIndexChanged(int)
 {
-    m_dirty = false;
-    setEditText(ssid());
-    Q_EMIT ssidChanged();
+    setEditText(itemData(currentIndex()).toString());
 }
 
 void SsidComboBox::init(const QString &ssid)
diff --git a/libs/editor/widgets/ssidcombobox.h b/libs/editor/widgets/ssidcombobox.h
index 3e367e7..056a139 100644
--- a/libs/editor/widgets/ssidcombobox.h
+++ b/libs/editor/widgets/ssidcombobox.h
@@ -40,13 +40,12 @@ Q_SIGNALS:
     void ssidChanged();
 
 private Q_SLOTS:
-    void slotEditTextChanged(const QString &);
+    void slotEditTextChanged(const QString &text);
     void slotCurrentIndexChanged(int);
 
 private:
     void addSsidsToCombo(const QList<NetworkManager::WirelessNetwork::Ptr> \
&networks);  QString m_initialSsid;
-    bool m_dirty;
 };
 
 #endif // PLASMA_NM_SSIDCOMBOBOX_H


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic