From 083f3b3b0416cce1342e3710e0732a30d8fbe769 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sat, 8 Sep 2012 21:11:17 -0500 Subject: [PATCH] Fix new connections Preselect specified SSID when creating new wireless connection from menu --- ...enetman-connection_setting_ipv4_widget.cpp | 1 + ...man-connection_setting_wireless_widget.cpp | 17 ++++++++++- ...etman-connection_setting_wireless_widget.h | 3 +- .../tdenetman-connection_settings_dialog.cpp | 28 +++++++++---------- .../tdenetman-connection_settings_dialog.h | 3 +- .../src/tdenetman-cellular_device_tray.cpp | 4 +-- .../src/tdenetman-connection_editor.cpp | 4 +-- tdenetworkmanager/src/tdenetman-tray.cpp | 14 +++++----- .../src/tdenetman-wired_device_tray.cpp | 4 +-- .../src/tdenetman-wireless_device_tray.cpp | 27 +++++++++++------- .../src/tdenetman-wireless_device_tray.h | 6 ++-- 11 files changed, 68 insertions(+), 43 deletions(-) diff --git a/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_ipv4_widget.cpp b/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_ipv4_widget.cpp index e800390..f36efaa 100644 --- a/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_ipv4_widget.cpp +++ b/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_ipv4_widget.cpp @@ -164,6 +164,7 @@ IPv4WidgetImpl::slotIPAddressChanged(const TQString& ip) { TDENetworkSingleIPConfiguration adr; adr.ipAddress = ipadr; + adr.valid = true; addrs.append(adr); } _ipv4_setting->ipConfig.ipConfigurations = addrs; diff --git a/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_widget.cpp b/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_widget.cpp index 424ff81..0b88c83 100644 --- a/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_widget.cpp +++ b/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_widget.cpp @@ -69,7 +69,7 @@ class NetworkListViewItem : public KListViewItem WirelessNetwork _net; }; -WirelessWidgetImpl::WirelessWidgetImpl(TDENetworkConnection* conn, bool new_conn, TQWidget* parent, const char* name, WFlags fl) +WirelessWidgetImpl::WirelessWidgetImpl(TDENetworkConnection* conn, bool new_conn, TQByteArray preselect_ssid, TQWidget* parent, const char* name, WFlags fl) : WidgetInterface(parent, name, fl) { _wireless_setting = dynamic_cast(conn); @@ -77,6 +77,7 @@ WirelessWidgetImpl::WirelessWidgetImpl(TDENetworkConnection* conn, bool new_conn _security_setting = dynamic_cast(conn); _hasName = !_info_setting->friendlyName.isEmpty(); _new_conn = new_conn; + _preselect_ssid = preselect_ssid; TQVBoxLayout* layout = new TQVBoxLayout(this, 1, 1); _mainWid = new ConnectionSettingWirelessWidget(this); @@ -125,6 +126,20 @@ WirelessWidgetImpl::Activate() // FIXME, if essid contains unprintable characters show the essid in hex _mainWid->txtEssid->setText(_wireless_setting->SSID); + + if (!_preselect_ssid.isNull()) { + TQListViewItemIterator it(_mainWid->lvEssids); + while (it.current()) { + NetworkListViewItem* item = dynamic_cast(it.current()); + if (item) { + if (item->_net.getSsid() == _preselect_ssid) { + _mainWid->lvEssids->setSelected(item, true); + slotEssidChanged(item); + } + } + ++it; + } + } } void WirelessWidgetImpl::slotEssidChanged(TQListViewItem* item) diff --git a/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_widget.h b/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_widget.h index 7c97a0b..843c419 100644 --- a/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_widget.h +++ b/tdenetworkmanager/src/configwidgets/tdenetman-connection_setting_wireless_widget.h @@ -47,7 +47,7 @@ namespace ConnectionSettings Q_OBJECT public: - WirelessWidgetImpl(TDENetworkConnection* conn, bool new_conn, TQWidget* parent = 0, const char* name = 0, WFlags fl = 0); + WirelessWidgetImpl(TDENetworkConnection* conn, bool new_conn, TQByteArray preselect_ssid = TQByteArray(), TQWidget* parent = 0, const char* name = 0, WFlags fl = 0); void Activate(); @@ -69,6 +69,7 @@ namespace ConnectionSettings ConnectionSettingWirelessWidget* _mainWid; KListViewSearchLineWidget* _searchLine; bool _new_conn; + TQByteArray _preselect_ssid; }; } #endif /* KNETWORKMANAGER_CONNECTION_SETTING_WIRELESS_WIDGET_H*/ diff --git a/tdenetworkmanager/src/configwidgets/tdenetman-connection_settings_dialog.cpp b/tdenetworkmanager/src/configwidgets/tdenetman-connection_settings_dialog.cpp index b080343..e0af90b 100644 --- a/tdenetworkmanager/src/configwidgets/tdenetman-connection_settings_dialog.cpp +++ b/tdenetworkmanager/src/configwidgets/tdenetman-connection_settings_dialog.cpp @@ -36,6 +36,7 @@ #include #include #include +#include // TQt DBus headers #include @@ -55,15 +56,13 @@ #include "tdenetman-wireless_network.h" #include "tdenetman-wireless_manager.h" -char use_new_wireless_essid = 0; -TQByteArray new_wireless_essid; - using namespace ConnectionSettings; -ConnectionSettingsDialogImpl::ConnectionSettingsDialogImpl(TDENetworkConnection* conn, bool new_conn, TQWidget* parent, const char* name, bool modal, WFlags fl) +ConnectionSettingsDialogImpl::ConnectionSettingsDialogImpl(TDENetworkConnection* conn, bool new_conn, TQByteArray networkextid, TQWidget* parent, const char* name, bool modal, WFlags fl) : ConnectionSettingsDialog(parent, name, modal, fl) , _conn(conn) , _new_conn(new_conn) + , _networkextid(networkextid) { updateDialogForDeviceType(); @@ -115,17 +114,17 @@ ConnectionSettingsDialogImpl::createWidgetsForWirelessKnownESSID(TDENetworkConne { TQValueList ret; - // Set ESSID -// _wireless_setting = dynamic_cast (conn->getSetting(NM_SETTING_WIRELESS_SETTING_NAME)); -// _info_setting = dynamic_cast (conn->getSetting(NM_SETTING_CONNECTION_SETTING_NAME)); -// _wireless_setting->setEssid(essid); -// if (!_hasName) -// { -// // the connection has no name yet -> just take the essid for it -// _info_setting->setName(essid); +// // Set ESSID +// TDEWiFiConnection* _wireless_setting = dynamic_cast(conn); +// _wireless_setting->SSID = essid; +// // The connection has no name yet -> just take the essid for it +// _wireless_setting->friendlyName = TQString(essid); +// if (_wireless_setting->friendlyName == "") { +// _wireless_setting->friendlyName = "<" + i18n("hidden") + ">"; // } // widgetlist for wireless connection + ret.append(new ConnectionSettings::WirelessWidgetImpl(conn, new_conn, essid)); ret.append(new ConnectionSettings::WirelessSecurityWidgetImpl(conn, new_conn)); ret.append(new ConnectionSettings::IPv4WidgetImpl(conn)); ret.append(new ConnectionSettings::InfoWidgetImpl(conn)); @@ -210,12 +209,11 @@ ConnectionSettingsDialogImpl::createWidgetsForConnection(TDENetworkConnection* c TQValueList widgets; // TODO: move to a factory class if (conn->type() == TDENetworkConnectionType::WiFi) { - if (use_new_wireless_essid == 0) { + if (_networkextid.isNull()) { widgets = createWidgetsForWireless(conn, new_conn); } else { - createWidgetsForWirelessKnownESSID(conn, new_conn, new_wireless_essid); - new_wireless_essid = TQByteArray(); + widgets = createWidgetsForWirelessKnownESSID(conn, new_conn, _networkextid); } } else if (conn->type() == TDENetworkConnectionType::WiredEthernet) { diff --git a/tdenetworkmanager/src/configwidgets/tdenetman-connection_settings_dialog.h b/tdenetworkmanager/src/configwidgets/tdenetman-connection_settings_dialog.h index 8e80b3e..b9f54f1 100644 --- a/tdenetworkmanager/src/configwidgets/tdenetman-connection_settings_dialog.h +++ b/tdenetworkmanager/src/configwidgets/tdenetman-connection_settings_dialog.h @@ -50,7 +50,7 @@ class ConnectionSettingsDialogImpl : public ConnectionSettingsDialog Q_OBJECT public: - ConnectionSettingsDialogImpl(TDENetworkConnection* conn, bool new_conn, TQWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0); + ConnectionSettingsDialogImpl(TDENetworkConnection* conn, bool new_conn, TQByteArray networkextid = TQByteArray(), TQWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0); ~ConnectionSettingsDialogImpl(); public slots: @@ -82,6 +82,7 @@ class ConnectionSettingsDialogImpl : public ConnectionSettingsDialog TDENetworkConnection* _conn; TQValueList _widgetIds; bool _new_conn; + TQByteArray _networkextid; }; #endif /* KNETWORKMANAGER_CONNECTION_SETTINGS_DIALOG_H*/ diff --git a/tdenetworkmanager/src/tdenetman-cellular_device_tray.cpp b/tdenetworkmanager/src/tdenetman-cellular_device_tray.cpp index d21e511..30dd26a 100644 --- a/tdenetworkmanager/src/tdenetman-cellular_device_tray.cpp +++ b/tdenetworkmanager/src/tdenetman-cellular_device_tray.cpp @@ -30,7 +30,7 @@ #include #include -// TDENM includes +// KNM includes #include "tdenetman-cellular_device_tray.h" #include "tdenetman-menuitem.h" #include "tdenetman-menu_subhead.h" @@ -68,7 +68,7 @@ void CellularDeviceTray::newConnection() } // edit the new connection - ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, true, tray(), "connect_something", false, TQt::WDestructiveClose); + ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, true, TQByteArray(), tray(), "connect_something", false, TQt::WDestructiveClose); dlg->show(); } diff --git a/tdenetworkmanager/src/tdenetman-connection_editor.cpp b/tdenetworkmanager/src/tdenetman-connection_editor.cpp index 22886dd..6ea466f 100644 --- a/tdenetworkmanager/src/tdenetman-connection_editor.cpp +++ b/tdenetworkmanager/src/tdenetman-connection_editor.cpp @@ -159,7 +159,7 @@ void ConnectionEditorImpl::slotNewVPNConnection() void ConnectionEditorImpl::slotEditNewConnection(TDENetworkConnection* conn) { // open a dialog for editing the connection - ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, true, this, "connect_something", false, TQt::WDestructiveClose); + ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, true, TQByteArray(), this, "connect_something", false, TQt::WDestructiveClose); connect(dlg, TQT_SIGNAL(connectionSaved()), this, TQT_SLOT(slotRefreshConnectionList())); dlg->show(); } @@ -189,7 +189,7 @@ void ConnectionEditorImpl::slotEditCurrentConnection() // we need the secrets for editing nm->loadConnectionSecrets(conn->UUID); - ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, false, this, "connect_something", false, TQt::WDestructiveClose); + ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, false, TQByteArray(), this, "connect_something", false, TQt::WDestructiveClose); dlg->show(); // save all connections (if not done already) diff --git a/tdenetworkmanager/src/tdenetman-tray.cpp b/tdenetworkmanager/src/tdenetman-tray.cpp index 793e643..4f1e2bc 100644 --- a/tdenetworkmanager/src/tdenetman-tray.cpp +++ b/tdenetworkmanager/src/tdenetman-tray.cpp @@ -85,7 +85,7 @@ NewSecretsDialog::~NewSecretsDialog () void NewSecretsDialog::slotDialogEdit() { - ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(_connection, false, Tray::getInstance(), "Edit connection"); + ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(_connection, false, TQByteArray(), Tray::getInstance(), "Edit connection"); dlg->show(); close(); } @@ -669,13 +669,13 @@ void Tray::updateActiveConnection(TDENetworkConnectionStatus::TDENetworkConnecti void Tray::slotDeviceAddedNotify(TDENetworkDevice* dev) { kdDebug() << "Tray::slotDeviceAddedNotify" << endl; - KNotifyClient::event( winId(), "tdenm-nm-device-added", i18n("New network device %1 found").arg(dev->deviceNode()) ); + KNotifyClient::event( winId(), "knm-nm-device-added", i18n("New network device %1 found").arg(dev->deviceNode()) ); } void Tray::slotDeviceRemovedNotify(TDENetworkDevice* dev) { kdDebug() << "Tray::slotDeviceRemovedNotify" << endl; - KNotifyClient::event( winId(), "tdenm-nm-device-removed", i18n("Network device %1 removed").arg(dev->deviceNode()) ); + KNotifyClient::event( winId(), "knm-nm-device-removed", i18n("Network device %1 removed").arg(dev->deviceNode()) ); } void Tray::slotStateChangedNotify(TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags newState, TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags prevState) @@ -684,16 +684,16 @@ void Tray::slotStateChangedNotify(TDENetworkGlobalManagerFlags::TDENetworkGlobal // change tray icon according to NM's state if (nm_state & TDENetworkGlobalManagerFlags::EstablishingLink) { - KNotifyClient::event( winId(), "tdenm-nm-connecting", i18n("NetworkManager is connecting") ); + KNotifyClient::event( winId(), "knm-nm-connecting", i18n("NetworkManager is connecting") ); } else if (nm_state & TDENetworkGlobalManagerFlags::Disconnected) { - KNotifyClient::event( winId(), "tdenm-nm-disconnected", i18n("NetworkManager is now disconnected") ); + KNotifyClient::event( winId(), "knm-nm-disconnected", i18n("NetworkManager is now disconnected") ); } else if (nm_state & TDENetworkGlobalManagerFlags::Connected) { - KNotifyClient::event( winId(), "tdenm-nm-connected", i18n("NetworkManager is now connected") ); + KNotifyClient::event( winId(), "knm-nm-connected", i18n("NetworkManager is now connected") ); } else if (nm_state & TDENetworkGlobalManagerFlags::Sleeping) { - KNotifyClient::event( winId(), "tdenm-nm-sleeping", i18n("TDENetworkManager Offline") ); + KNotifyClient::event( winId(), "knm-nm-sleeping", i18n("TDENetworkManager Offline") ); } else if (nm_state & TDENetworkGlobalManagerFlags::Unknown) { // diff --git a/tdenetworkmanager/src/tdenetman-wired_device_tray.cpp b/tdenetworkmanager/src/tdenetman-wired_device_tray.cpp index e816f03..79415b9 100644 --- a/tdenetworkmanager/src/tdenetman-wired_device_tray.cpp +++ b/tdenetworkmanager/src/tdenetman-wired_device_tray.cpp @@ -44,7 +44,7 @@ #include -// TDENM includes +// KNM includes #include "tdenetman-wired_device_tray.h" #include "tdenetman-menuitem.h" #include "tdenetman-menu_subhead.h" @@ -71,7 +71,7 @@ void WiredDeviceTray::newConnection() nm->loadConnectionAllowedValues(conn); // edit the new connection - ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, true, tray(), "connect_something", false, TQt::WDestructiveClose); + ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, true, TQByteArray(), tray(), "connect_something", false, TQt::WDestructiveClose); dlg->show(); } diff --git a/tdenetworkmanager/src/tdenetman-wireless_device_tray.cpp b/tdenetworkmanager/src/tdenetman-wireless_device_tray.cpp index cd5c786..98954bc 100644 --- a/tdenetworkmanager/src/tdenetman-wireless_device_tray.cpp +++ b/tdenetworkmanager/src/tdenetman-wireless_device_tray.cpp @@ -42,7 +42,7 @@ #include #include -// TDENM includes +// KNM includes #include "tdenetman-wireless_device_tray.h" #include "tdenetman-wireless_menuitem.h" #include "tdenetman-wireless_network.h" @@ -52,9 +52,6 @@ using namespace ConnectionSettings; -extern char use_new_wireless_essid; -extern TQByteArray new_wireless_essid; - class WirelessDeviceTrayPrivate { public: @@ -82,6 +79,11 @@ TQStringList WirelessDeviceTray::getToolTipText() } void WirelessDeviceTray::newConnection() +{ + newConnection(0); +} + +void WirelessDeviceTray::newConnection(int id) { TDEGlobalNetworkManager* nm = KGlobal::networkManager(); @@ -90,8 +92,11 @@ void WirelessDeviceTray::newConnection() nm->loadConnectionAllowedValues(conn); // open a dialog for editing the connection - use_new_wireless_essid = 0; // deactivate autofill for now - ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, true, tray(), "connect_something", false, TQt::WDestructiveClose); + char use_new_wireless_essid = 0; + if ((id < 0) && newWirelessPopupSSIDMap.contains(id)) { + use_new_wireless_essid = 1; + } + ConnectionSettingsDialogImpl* dlg = new ConnectionSettingsDialogImpl(conn, true, (use_new_wireless_essid)?newWirelessPopupSSIDMap[id]:TQByteArray(), tray(), "connect_something", false, TQt::WDestructiveClose); dlg->show(); } @@ -214,7 +219,8 @@ void WirelessDeviceTray::addWirelessNetworks(KPopupMenu* menu) TQPopupMenu* newpopup = new TQPopupMenu(menu); uint newnetworkItemsAdded = 0; TQValueList newnets = WirelessManager::getWirelessNetworks(0, WirelessNetwork::MATCH_SSID); - + + newWirelessPopupSSIDMap.clear(); for (TQValueList::Iterator it = newnets.begin(); it != newnets.end(); ++it) { // Only display networks with no existing connnection @@ -229,7 +235,8 @@ void WirelessDeviceTray::addWirelessNetworks(KPopupMenu* menu) false); int id = newpopup->insertItem (wirelessNetworkItem, -1, -1); - newpopup->connectItem(id, this, TQT_SLOT(newConnection())); + newWirelessPopupSSIDMap[id] = (*it).getSsid(); + newpopup->connectItem(id, this, TQT_SLOT(newConnection(int))); newnetworkItemsAdded += 1; } @@ -397,12 +404,12 @@ void WirelessDeviceTray::apPropertyChanged(TDEMACAddress BSSID, TDENetworkAPEven void WirelessDeviceTray::slotAccessPointAdded(TDENetworkWiFiAPInfo* ap) { - KNotifyClient::event( tray()->winId(), "tdenm-nm-network-found", i18n("TDENetworkManager New Wireless Network Found") ); + KNotifyClient::event( tray()->winId(), "knm-nm-network-found", i18n("TDENetworkManager New Wireless Network Found") ); } void WirelessDeviceTray::slotAccessPointRemoved(TDEMACAddress) { - KNotifyClient::event( tray()->winId(), "tdenm-nm-network-gone", i18n("TDENetworkManager Wireless Network Disappeared") ); + KNotifyClient::event( tray()->winId(), "knm-nm-network-gone", i18n("TDENetworkManager Wireless Network Disappeared") ); } void WirelessDeviceTray::tdeHardwareEventHandler(TDEHardwareEvent::TDEHardwareEvent event, TQString) diff --git a/tdenetworkmanager/src/tdenetman-wireless_device_tray.h b/tdenetworkmanager/src/tdenetman-wireless_device_tray.h index aad6325..c4d639f 100644 --- a/tdenetworkmanager/src/tdenetman-wireless_device_tray.h +++ b/tdenetworkmanager/src/tdenetman-wireless_device_tray.h @@ -27,7 +27,7 @@ #ifndef KNETWORKMANAGER_WIRELESS_DEVICE_TRAY_H #define KNETWORKMANAGER_WIRELESS_DEVICE_TRAY_H -// TDENM includes +// KNM includes #include "tdenetman.h" #include "devicetraycomponent.h" #include "tdenetman-wireless_network.h" @@ -57,8 +57,9 @@ class WirelessDeviceTray : public DeviceTrayComponent void slotUpdateDeviceState(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString); void slotCheckActiveAccessPoint(); void newConnection(); - protected slots: + void newConnection(int); + protected slots: void apPropertyChanged(TDEMACAddress BSSID, TDENetworkAPEventType::TDENetworkAPEventType event); void slotAccessPointAdded(TDENetworkWiFiAPInfo*); void slotAccessPointRemoved(TDEMACAddress); @@ -74,6 +75,7 @@ class WirelessDeviceTray : public DeviceTrayComponent TDEWiFiConnection* findMatchingConnection(const WirelessNetwork& net, const TQValueList& connection); bool findMatchingNetwork(const TDEWiFiConnection* conn, const TQValueList& nets, WirelessNetwork& net); void setPixmapForStates(TDENetworkConnectionStatus::TDENetworkConnectionStatus states, TQString pixmap); + TQMap newWirelessPopupSSIDMap; WirelessDeviceTrayPrivate* d;