Fix crash in case tdelibs is built without support for NetworkManager.

Fix crash in case of unsuccessful search for device.
This resolves issue #8.

Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
pull/9/head
Slávek Banko 3 years ago
parent 0735c7e3f8
commit 88cc44bac4
No known key found for this signature in database
GPG Key ID: 608F5293A04BE668

@ -287,9 +287,11 @@ ConnectionSettingsDialogImpl::slotConnect()
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
// add/save the connection // add/save the connection
if (nm->saveConnection(_conn)) { if (nm && nm->saveConnection(_conn))
{
// activate device // activate device
if (_conn && nm) { if (_conn)
{
// // VPN connection needs a special specific object // // VPN connection needs a special specific object
// if (_conn->getType() == NM_SETTING_VPN_SETTING_NAME) { // if (_conn->getType() == NM_SETTING_VPN_SETTING_NAME) {
// TQT_DBusObjectPath act_conn = nm->getDefaultActiveConnection(); // TQT_DBusObjectPath act_conn = nm->getDefaultActiveConnection();
@ -329,7 +331,8 @@ ConnectionSettingsDialogImpl::slotSave()
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
// save the connection // save the connection
if (!nm->saveConnection(_conn)) { if (!nm || !nm->saveConnection(_conn))
{
KMessageBox::error(this, i18n("<qt><b>Unable to save network connection!</b><p>Potential causes:<br> * Insufficient permissions<br> * NetworkManager not running<br> * DBUS failure</qt>"), i18n("Unable to perform requested operation")); KMessageBox::error(this, i18n("<qt><b>Unable to save network connection!</b><p>Potential causes:<br> * Insufficient permissions<br> * NetworkManager not running<br> * DBUS failure</qt>"), i18n("Unable to perform requested operation"));
} }
@ -453,14 +456,14 @@ ConnectionSettingsDialogImpl::slotEnableButtons()
TDENetworkErrorStringMap errorStringMap; TDENetworkErrorStringMap errorStringMap;
TDENetworkConnectionErrorFlags::TDENetworkConnectionErrorFlags errorFlags; TDENetworkConnectionErrorFlags::TDENetworkConnectionErrorFlags errorFlags;
bool ret; bool ret;
ret = nm->verifyConnectionSettings(_conn, &errorFlags, &errorStringMap); ret = (nm ? nm->verifyConnectionSettings(_conn, &errorFlags, &errorStringMap) : 0);
btnConnect->setEnabled(ret); btnConnect->setEnabled(ret);
if (!ret) { if (!ret) {
// FIXME // FIXME
// Check the error flags and the current dialog type to determine if an error message is warranted // Check the error flags and the current dialog type to determine if an error message is warranted
// KMessageBox::error(this, errorString, i18n("Invalid Settings Detected")); // KMessageBox::error(this, errorString, i18n("Invalid Settings Detected"));
} }
pbSave->setEnabled(nm->verifyConnectionSettings(_conn)); pbSave->setEnabled(nm ? nm->verifyConnectionSettings(_conn) : 0);
} }
} }

@ -76,10 +76,13 @@ DeviceTrayComponent::DeviceTrayComponent(TQString device, KSystemTray * parent,
// Trigger an initial hardware information update // Trigger an initial hardware information update
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(m_device)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(m_device));
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = (dev ? dev->connectionManager() : NULL);
connect(deviceConnMan, TQT_SIGNAL(networkDeviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString)), TQT_SLOT(deviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString))); if (deviceConnMan)
connect(deviceConnMan, TQT_SIGNAL(networkDeviceEvent(TDENetworkDeviceEventType::TDENetworkDeviceEventType, TQString)), this, TQT_SLOT(deviceEventHandler(TDENetworkDeviceEventType::TDENetworkDeviceEventType, TQString))); {
connect(deviceConnMan, TQT_SIGNAL(networkDeviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString)), TQT_SLOT(deviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString)));
connect(deviceConnMan, TQT_SIGNAL(networkDeviceEvent(TDENetworkDeviceEventType::TDENetworkDeviceEventType, TQString)), this, TQT_SLOT(deviceEventHandler(TDENetworkDeviceEventType::TDENetworkDeviceEventType, TQString)));
}
m_pixmaps[TDENetworkConnectionStatus::Invalid] = "nm_no_connection"; m_pixmaps[TDENetworkConnectionStatus::Invalid] = "nm_no_connection";
m_pixmaps[TDENetworkConnectionStatus::UnManaged] = "nm_no_connection"; m_pixmaps[TDENetworkConnectionStatus::UnManaged] = "nm_no_connection";
@ -128,11 +131,15 @@ TQStringList DeviceTrayComponent::getToolTipText()
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(m_device)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(m_device));
TQStringList list; TQStringList list;
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = (dev ? dev->connectionManager() : NULL);
TDENetworkConnectionStatus::TDENetworkConnectionStatus state = deviceConnMan->deviceStatus().statusFlags; if (deviceConnMan)
if (tooltipForConnState(state) != "") { {
list.append(i18n("Device: %1").arg(dev->deviceNode())); TDENetworkConnectionStatus::TDENetworkConnectionStatus state = deviceConnMan->deviceStatus().statusFlags;
list.append(i18n("State: %1").arg(tooltipForConnState(state))); if (tooltipForConnState(state) != "")
{
list.append(i18n("Device: %1").arg(dev->deviceNode()));
list.append(i18n("State: %1").arg(tooltipForConnState(state)));
}
} }
return list; return list;
} }
@ -203,6 +210,10 @@ void DeviceTrayComponent::deviceStateChanged(TDENetworkConnectionStatus::TDENetw
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(m_device)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(m_device));
if (!dev)
{
return;
}
if (dev->deviceNode() != deviceNode) { if (dev->deviceNode() != deviceNode) {
kdDebug() << k_funcinfo << "WARNING: Got networkDeviceStateChanged signal for interface '" << deviceNode << "', but my interface is '" << dev->deviceNode() << "'! Ignoring..."; kdDebug() << k_funcinfo << "WARNING: Got networkDeviceStateChanged signal for interface '" << deviceNode << "', but my interface is '" << dev->deviceNode() << "'! Ignoring...";
return; return;
@ -219,7 +230,8 @@ void DeviceTrayComponent::deviceStateChanged(TDENetworkConnectionStatus::TDENetw
TQTimer::singleShot(0, this, TQT_SLOT(sendGetCenterStage())); TQTimer::singleShot(0, this, TQT_SLOT(sendGetCenterStage()));
} }
else if (newState & TDENetworkConnectionStatus::Connected) { else if (newState & TDENetworkConnectionStatus::Connected) {
if (nm->defaultNetworkDevices().contains(m_device)) { if (nm && nm->defaultNetworkDevices().contains(m_device))
{
TQTimer::singleShot(0, this, TQT_SLOT(sendGetCenterStage())); TQTimer::singleShot(0, this, TQT_SLOT(sendGetCenterStage()));
} }
} }

@ -51,11 +51,24 @@ class CellularDeviceTrayPrivate
void CellularDeviceTray::newConnection() void CellularDeviceTray::newConnection()
{ {
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
if (!nm)
{
return;
}
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
if (!dev)
{
return;
}
// create an appropriate connection // create an appropriate connection
TDENetworkConnection* conn = 0; TDENetworkConnection* conn = 0;
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
if (!deviceConnMan)
{
return;
}
switch (deviceConnMan->deviceType()) { switch (deviceConnMan->deviceType()) {
case TDENetworkDeviceType::Modem: case TDENetworkDeviceType::Modem:
conn = new TDEModemConnection(); conn = new TDEModemConnection();
@ -75,19 +88,24 @@ void CellularDeviceTray::newConnection()
void CellularDeviceTray::addMenuItems(TDEPopupMenu* menu) void CellularDeviceTray::addMenuItems(TDEPopupMenu* menu)
{ {
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
if (!dev)
{
return;
}
// device title // device title
Subhead* subhead = new Subhead (menu, "subhead", dev->deviceNode(), SmallIcon("nm_device_wwan", TQIconSet::Automatic)); Subhead* subhead = new Subhead (menu, "subhead", dev->deviceNode(), SmallIcon("nm_device_wwan", TQIconSet::Automatic));
menu->insertItem (subhead, -1, -1); menu->insertItem (subhead, -1, -1);
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
if (!deviceConnMan->deviceInformation().managed) { if (!nm || !deviceConnMan || !deviceConnMan->deviceInformation().managed)
{
// device is not managed by NM -> do not show any connections // device is not managed by NM -> do not show any connections
subhead = new Subhead(menu, "subhead2", i18n("Not managed"), SmallIcon("no", TQIconSet::Automatic)); subhead = new Subhead(menu, "subhead2", i18n("Not managed"), SmallIcon("no", TQIconSet::Automatic));
menu->insertItem(subhead, -1, -1); menu->insertItem(subhead, -1, -1);
} }
else { else {
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
TDENetworkConnection* active_conn = NULL; TDENetworkConnection* active_conn = NULL;
if ((!(deviceConnMan->deviceInformation().statusFlags & TDENetworkConnectionStatus::Disconnected)) if ((!(deviceConnMan->deviceInformation().statusFlags & TDENetworkConnectionStatus::Disconnected))
&& (!(deviceConnMan->deviceInformation().statusFlags & TDENetworkConnectionStatus::Invalid))) { && (!(deviceConnMan->deviceInformation().statusFlags & TDENetworkConnectionStatus::Invalid))) {

@ -73,7 +73,7 @@ void NetworkMenuItem::slotActivate()
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
TDENetworkConnection* conn = nm->findConnectionByUUID(d->conn); TDENetworkConnection* conn = (nm ? nm->findConnectionByUUID(d->conn) : 0);
if (dev && conn) if (dev && conn)
{ {

@ -220,12 +220,16 @@ void Tray::contextMenuAboutToShow (TDEPopupMenu* menu)
{ {
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
if (tdenetworkmanager_editor_dialog_count == 0) nm->loadConnectionInformation();
// clear menu // clear menu
menu->clear(); menu->clear();
if (!(nm->backendStatus() & TDENetworkGlobalManagerFlags::BackendUnavailable)) { if (nm && !(nm->backendStatus() & TDENetworkGlobalManagerFlags::BackendUnavailable))
{
if (tdenetworkmanager_editor_dialog_count == 0)
{
nm->loadConnectionInformation();
}
// actions for each Device // actions for each Device
for (TQValueList<TrayComponent*>::Iterator it = d->trayComponents.begin(); it != d->trayComponents.end(); ++it) { for (TQValueList<TrayComponent*>::Iterator it = d->trayComponents.begin(); it != d->trayComponents.end(); ++it) {
(*it)->addMenuItems(menu); (*it)->addMenuItems(menu);
@ -248,26 +252,34 @@ void Tray::contextMenuAboutToShow (TDEPopupMenu* menu)
TDEAction * deviceNewConnAction = 0; TDEAction * deviceNewConnAction = 0;
if (dev_comp) { if (dev_comp) {
TDENetworkDevice* dev_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dev_comp->device())); TDENetworkDevice* dev_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dev_comp->device()));
TQString actionName = TQString("new_connection_%1").arg(dev_comp_dev->deviceNode()); if (dev_comp_dev)
TQString menuCaption = TQString("%1").arg(dev_comp_dev->deviceNode()); {
if (menuCaption.contains("eth", FALSE) > 0) { TQString actionName = TQString("new_connection_%1").arg(dev_comp_dev->deviceNode());
menuCaption = menuCaption.insert(0, "Wired Connection ("); TQString menuCaption = TQString("%1").arg(dev_comp_dev->deviceNode());
if (menuCaption.contains("eth", FALSE) > 0)
{
menuCaption = menuCaption.insert(0, "Wired Connection (");
}
else if (menuCaption.contains("wlan", FALSE) > 0)
{
menuCaption = menuCaption.insert(0, "Wireless Connection (");
}
else if (menuCaption.contains("pan", FALSE) > 0)
{
menuCaption = menuCaption.insert(0, "Private Area Connection (");
}
else
{
menuCaption = menuCaption.insert(0, "Unknown Connection (");
}
menuCaption = menuCaption.append(")");
deviceNewConnAction = actionCollection ()->action (actionName.utf8());
if (!deviceNewConnAction)
{
deviceNewConnAction = new TDEAction (menuCaption, 0, (*it), TQT_SLOT(newConnection()), actionCollection(), actionName.utf8());
}
newConnActionMenu->insert(deviceNewConnAction);
} }
else if (menuCaption.contains("wlan", FALSE) > 0) {
menuCaption = menuCaption.insert(0, "Wireless Connection (");
}
else if (menuCaption.contains("pan", FALSE) > 0) {
menuCaption = menuCaption.insert(0, "Private Area Connection (");
}
else {
menuCaption = menuCaption.insert(0, "Unknown Connection (");
}
menuCaption = menuCaption.append(")");
deviceNewConnAction = actionCollection ()->action (actionName.utf8());
if (!deviceNewConnAction) {
deviceNewConnAction = new TDEAction (menuCaption, 0, (*it), TQT_SLOT(newConnection()), actionCollection(), actionName.utf8());
}
newConnActionMenu->insert(deviceNewConnAction);
} }
} }
// New VPN connection option // New VPN connection option
@ -277,8 +289,9 @@ void Tray::contextMenuAboutToShow (TDEPopupMenu* menu)
TQString actionName = TQString("new_connection_%1").arg("vpn"); TQString actionName = TQString("new_connection_%1").arg("vpn");
deviceNewConnAction = new TDEAction (menuCaption, 0, TQT_TQOBJECT(this), TQT_SLOT(slotNewVPNConnection()), actionCollection(), actionName.utf8()); deviceNewConnAction = new TDEAction (menuCaption, 0, TQT_TQOBJECT(this), TQT_SLOT(slotNewVPNConnection()), actionCollection(), actionName.utf8());
newConnActionMenu->insert(deviceNewConnAction); newConnActionMenu->insert(deviceNewConnAction);
} }
else if ( devices == 1 ) { else if ( devices == 1 )
{
newConnAction = actionCollection ()->action ("new_connection"); newConnAction = actionCollection ()->action ("new_connection");
TQT_BASE_OBJECT_NAME::disconnect( newConnAction, TQT_SIGNAL(activated()) ); TQT_BASE_OBJECT_NAME::disconnect( newConnAction, TQT_SIGNAL(activated()) );
TQT_BASE_OBJECT_NAME::connect( newConnAction, TQT_SIGNAL(activated()), d->trayComponents[0], TQT_SLOT(newConnection())); TQT_BASE_OBJECT_NAME::connect( newConnAction, TQT_SIGNAL(activated()), d->trayComponents[0], TQT_SLOT(newConnection()));
@ -490,21 +503,24 @@ void Tray::createDeviceTrayComponent(TQString dev)
{ {
DeviceTrayComponent* devTray = 0; DeviceTrayComponent* devTray = 0;
TDENetworkDevice* new_tray_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dev)); TDENetworkDevice* new_tray_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dev));
TDENetworkConnectionManager* deviceConnMan = new_tray_dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = (new_tray_dev ? new_tray_dev->connectionManager() : NULL);
// different tray icons for different device types! // different tray icons for different device types!
switch (deviceConnMan->deviceType()) if (deviceConnMan)
{ {
case TDENetworkDeviceType::WiredEthernet: switch (deviceConnMan->deviceType())
devTray = new WiredDeviceTray(dev, this, "wired_device_tray"); {
break; case TDENetworkDeviceType::WiredEthernet:
case TDENetworkDeviceType::WiFi: devTray = new WiredDeviceTray(dev, this, "wired_device_tray");
devTray = new WirelessDeviceTray(dev, this, "wireless_device_tray"); break;
break; case TDENetworkDeviceType::WiFi:
case TDENetworkDeviceType::Modem: devTray = new WirelessDeviceTray(dev, this, "wireless_device_tray");
devTray = new CellularDeviceTray(dev, this, "cellular_device_tray"); break;
break; case TDENetworkDeviceType::Modem:
default: devTray = new CellularDeviceTray(dev, this, "cellular_device_tray");
kdWarning() << k_funcinfo << "UDI: " << dev << " has unknown devicetype: " << deviceConnMan->deviceType() << endl; break;
default:
kdWarning() << k_funcinfo << "UDI: " << dev << " has unknown devicetype: " << deviceConnMan->deviceType() << endl;
}
} }
if(devTray) if(devTray)
{ {
@ -637,10 +653,14 @@ void Tray::trayComponentNeedsCenterStage(TrayComponent *component, bool needsIt)
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
DeviceTrayComponent * dtc = dynamic_cast<DeviceTrayComponent*>(component); DeviceTrayComponent * dtc = dynamic_cast<DeviceTrayComponent*>(component);
if (dtc) { if (nm && dtc)
{
TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dtc->device())); TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dtc->device()));
kdDebug() << k_funcinfo << dtc_comp_dev->deviceNode() << " : " << needsIt << endl; kdDebug()
TDENetworkDevice * device = dtc_comp_dev; << k_funcinfo
<< (dtc_comp_dev ? dtc_comp_dev->deviceNode() : TQString("<unknown device>"))
<< " : " << needsIt
<< endl;
if (needsIt) { if (needsIt) {
if (d->foregroundTrayComponent) { if (d->foregroundTrayComponent) {
disconnectTrayDeviceManager(); disconnectTrayDeviceManager();
@ -663,8 +683,14 @@ void Tray::trayComponentNeedsCenterStage(TrayComponent *component, bool needsIt)
break; break;
} }
} }
kdDebug() << " Device " << dtc_comp_dev->deviceNode() << " background, new foreground device: " << device->deviceNode() << endl;
if (d->foregroundTrayComponent) { if (d->foregroundTrayComponent) {
TDENetworkDevice* newDtc_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->foregroundTrayComponent->device()));
kdDebug()
<< " Device "
<< (dtc_comp_dev ? dtc_comp_dev->deviceNode() : TQString("<unknown device>"))
<< " background, new foreground device: "
<< (newDtc_dev ? newDtc_dev->deviceNode() : TQString("<unknown device>"))
<< endl;
connectTrayDeviceManager(); connectTrayDeviceManager();
updateTrayDeviceManagerState(); updateTrayDeviceManagerState();
} }
@ -702,26 +728,34 @@ void Tray::trayUiChanged()
DeviceTrayComponent * dtc = d->foregroundTrayComponent; DeviceTrayComponent * dtc = d->foregroundTrayComponent;
if (dtc) { if (dtc) {
TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dtc->device())); TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dtc->device()));
TDENetworkConnectionManager* deviceConnMan = dtc_comp_dev->connectionManager(); if (dtc_comp_dev)
updateTrayIcon(deviceConnMan->deviceStatus().statusFlags); {
TDENetworkConnectionManager* deviceConnMan = dtc_comp_dev->connectionManager();
if (deviceConnMan)
{
updateTrayIcon(deviceConnMan->deviceStatus().statusFlags);
}
}
} }
} }
void Tray::showActiveDeviceTray() { void Tray::showActiveDeviceTray() {
// If the current foreground tray device is deactivated, find the first active device and use it instead // If the current foreground tray device is deactivated, find the first active device and use it instead
bool needsNewDeviceTrayComponent = true; bool needsNewDeviceTrayComponent = true;
if (d->foregroundTrayComponent) { if (d->foregroundTrayComponent)
{
needsNewDeviceTrayComponent = false;
TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->foregroundTrayComponent->device())); TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->foregroundTrayComponent->device()));
TDENetworkConnectionManager* deviceConnMan = dtc_comp_dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = (dtc_comp_dev ? dtc_comp_dev->connectionManager() : NULL);
TDENetworkConnectionStatus::TDENetworkConnectionStatus statusFlags = deviceConnMan->deviceStatus().statusFlags; if (deviceConnMan)
if ((statusFlags == TDENetworkConnectionStatus::Disconnected) {
|| (statusFlags == (TDENetworkConnectionStatus::Disconnected | TDENetworkConnectionStatus::LinkUnavailable)) TDENetworkConnectionStatus::TDENetworkConnectionStatus statusFlags = deviceConnMan->deviceStatus().statusFlags;
|| (statusFlags & TDENetworkConnectionStatus::Invalid) if ((statusFlags == TDENetworkConnectionStatus::Disconnected)
) { || (statusFlags == (TDENetworkConnectionStatus::Disconnected | TDENetworkConnectionStatus::LinkUnavailable))
needsNewDeviceTrayComponent = true; || (statusFlags & TDENetworkConnectionStatus::Invalid))
} {
else { needsNewDeviceTrayComponent = true;
needsNewDeviceTrayComponent = false; }
} }
} }
@ -734,17 +768,22 @@ void Tray::showActiveDeviceTray() {
DeviceTrayComponent* newDtc = dynamic_cast<DeviceTrayComponent*> (*it); DeviceTrayComponent* newDtc = dynamic_cast<DeviceTrayComponent*> (*it);
if (newDtc) { if (newDtc) {
TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(newDtc->device())); TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(newDtc->device()));
TDENetworkConnectionManager* deviceConnMan = dtc_comp_dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = (dtc_comp_dev ? dtc_comp_dev->connectionManager() : NULL);
TDENetworkConnectionStatus::TDENetworkConnectionStatus statusFlags = deviceConnMan->deviceStatus().statusFlags; if (deviceConnMan)
if ((statusFlags == TDENetworkConnectionStatus::Disconnected) {
|| (statusFlags == (TDENetworkConnectionStatus::Disconnected | TDENetworkConnectionStatus::LinkUnavailable)) TDENetworkConnectionStatus::TDENetworkConnectionStatus statusFlags = deviceConnMan->deviceStatus().statusFlags;
|| (statusFlags & TDENetworkConnectionStatus::Invalid) if ((statusFlags == TDENetworkConnectionStatus::Disconnected)
) { || (statusFlags == (TDENetworkConnectionStatus::Disconnected | TDENetworkConnectionStatus::LinkUnavailable))
continue; || (statusFlags & TDENetworkConnectionStatus::Invalid)
} )
else { {
d->foregroundTrayComponent = newDtc; continue;
break; }
else
{
d->foregroundTrayComponent = newDtc;
break;
}
} }
} }
} }
@ -777,7 +816,7 @@ void Tray::updateTrayIcon(TDENetworkConnectionStatus::TDENetworkConnectionStatus
} }
} }
TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags globalState = nm->backendStatus(); TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags globalState = (nm ? nm->backendStatus() : TDENetworkGlobalManagerFlags::Unknown);
// get all available VPN Connections // get all available VPN Connections
active_vpn = 0; active_vpn = 0;
@ -796,7 +835,7 @@ void Tray::updateTrayIcon(TDENetworkConnectionStatus::TDENetworkConnectionStatus
// } // }
#endif // DEBUG_STATE #endif // DEBUG_STATE
TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags current_vpn_state = (TDEGlobal::networkManager()->backendStatus() & TDENetworkGlobalManagerFlags::VPNMask); TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags current_vpn_state = (globalState & TDENetworkGlobalManagerFlags::VPNMask);
if ((current_vpn_state & TDENetworkGlobalManagerFlags::VPNFailed) || (current_vpn_state & TDENetworkGlobalManagerFlags::VPNDisconnected)) { if ((current_vpn_state & TDENetworkGlobalManagerFlags::VPNFailed) || (current_vpn_state & TDENetworkGlobalManagerFlags::VPNDisconnected)) {
active_vpn = 0; active_vpn = 0;
} }
@ -840,11 +879,11 @@ void Tray::updateTrayIcon(TDENetworkConnectionStatus::TDENetworkConnectionStatus
} }
} }
else { else {
setBaseStateIcon(nm->backendStatus()); setBaseStateIcon(globalState);
} }
} }
else { else {
TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags current_vpn_state = (TDEGlobal::networkManager()->backendStatus() & TDENetworkGlobalManagerFlags::VPNMask); TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags current_vpn_state = (globalState & TDENetworkGlobalManagerFlags::VPNMask);
#ifdef DEBUG_STATE #ifdef DEBUG_STATE
printf("VPN state: 0x%08x\n", current_vpn_state); printf("VPN state: 0x%08x\n", current_vpn_state);
//printf("Activated is: %d\n", TDENetworkConnectionStatus::Connected); //printf("Activated is: %d\n", TDENetworkConnectionStatus::Connected);
@ -905,7 +944,7 @@ void Tray::updateActiveConnection(TDENetworkConnectionStatus::TDENetworkConnecti
void Tray::slotDeviceAddedNotify(TDENetworkDevice* dev) void Tray::slotDeviceAddedNotify(TDENetworkDevice* dev)
{ {
kdDebug() << "Tray::slotDeviceAddedNotify" << endl; kdDebug() << "Tray::slotDeviceAddedNotify" << endl;
if( !dev->deviceNode().isEmpty() ) { if( dev && !dev->deviceNode().isEmpty() ) {
KNotifyClient::event( winId(), "tdenm-nm-device-added", i18n("New network device %1 found").arg(dev->deviceNode()) ); KNotifyClient::event( winId(), "tdenm-nm-device-added", i18n("New network device %1 found").arg(dev->deviceNode()) );
} }
} }
@ -913,7 +952,7 @@ void Tray::slotDeviceAddedNotify(TDENetworkDevice* dev)
void Tray::slotDeviceRemovedNotify(TDENetworkDevice* dev) void Tray::slotDeviceRemovedNotify(TDENetworkDevice* dev)
{ {
kdDebug() << "Tray::slotDeviceRemovedNotify" << endl; kdDebug() << "Tray::slotDeviceRemovedNotify" << endl;
if( !dev->deviceNode().isEmpty() ) { if( dev && !dev->deviceNode().isEmpty() ) {
KNotifyClient::event( winId(), "tdenm-nm-device-removed", i18n("Network device %1 removed").arg(dev->deviceNode()) ); KNotifyClient::event( winId(), "tdenm-nm-device-removed", i18n("Network device %1 removed").arg(dev->deviceNode()) );
} }
} }
@ -1100,7 +1139,7 @@ Tray::Tray() : KSystemTray()
// initial setup of the device-trays // initial setup of the device-trays
updateDeviceTrays(); updateDeviceTrays();
slotStateChanged(TDEGlobal::networkManager()->backendStatus(), TDENetworkGlobalManagerFlags::Unknown); slotStateChanged(nm ? nm->backendStatus() : TDENetworkGlobalManagerFlags::Unknown, TDENetworkGlobalManagerFlags::Unknown);
} }
Tray::~Tray () Tray::~Tray ()
@ -1109,4 +1148,3 @@ Tray::~Tray ()
} }
#include "tdenetman-tray.moc" #include "tdenetman-tray.moc"

@ -42,37 +42,50 @@ VPNManager::getVPNServices ()
VPNServiceList list; VPNServiceList list;
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
TDENetworkVPNTypeList availablePlugins = nm->availableVPNTypes();
if (availablePlugins.count() > 0) { if (nm)
// find all available services {
for (TDENetworkVPNTypeList::Iterator it = availablePlugins.begin (); it != availablePlugins.end (); ++it) { TDENetworkVPNTypeList availablePlugins = nm->availableVPNTypes();
TQString serviceString;
if ((*it) == TDENetworkVPNType::OpenVPN) {
serviceString = "openvpn";
}
else if ((*it) == TDENetworkVPNType::PPTP) {
serviceString = "pptp";
}
else if ((*it) == TDENetworkVPNType::StrongSwan) {
serviceString = "strongswan";
}
else if ((*it) == TDENetworkVPNType::VPNC) {
serviceString = "vpnc";
}
if (serviceString == "") {
continue;
}
kdDebug() << "VPN Service " << serviceString.ascii() << endl; if (availablePlugins.count() > 0)
{
// find all available services
for (TDENetworkVPNTypeList::Iterator it = availablePlugins.begin (); it != availablePlugins.end (); ++it)
{
TQString serviceString;
if ((*it) == TDENetworkVPNType::OpenVPN)
{
serviceString = "openvpn";
}
else if ((*it) == TDENetworkVPNType::PPTP)
{
serviceString = "pptp";
}
else if ((*it) == TDENetworkVPNType::StrongSwan)
{
serviceString = "strongswan";
}
else if ((*it) == TDENetworkVPNType::VPNC)
{
serviceString = "vpnc";
}
if (serviceString == "")
{
continue;
}
// create new VPNService Object kdDebug() << "VPN Service " << serviceString.ascii() << endl;
VPNService* vpnservice = new VPNService(serviceString, serviceString, TQT_TQOBJECT(TDENetworkManager::getInstance()));
if (!vpnservice->getVPNPlugin()) { // create new VPNService Object
delete vpnservice; VPNService* vpnservice = new VPNService(serviceString, serviceString, TQT_TQOBJECT(TDENetworkManager::getInstance()));
} if (!vpnservice->getVPNPlugin())
else { {
list.push_back(vpnservice); delete vpnservice;
}
else
{
list.push_back(vpnservice);
}
} }
} }
} }
@ -86,35 +99,48 @@ VPNManager::getVPNService(TQString service_type)
VPNServiceList list; VPNServiceList list;
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
TDENetworkVPNTypeList availablePlugins = nm->availableVPNTypes(); if (nm)
{
if (availablePlugins.count() > 0) { TDENetworkVPNTypeList availablePlugins = nm->availableVPNTypes();
for (TDENetworkVPNTypeList::Iterator it = availablePlugins.begin (); it != availablePlugins.end (); ++it) {
TQString serviceString;
if ((*it) == TDENetworkVPNType::OpenVPN) {
serviceString = "openvpn";
}
else if ((*it) == TDENetworkVPNType::PPTP) {
serviceString = "pptp";
}
else if ((*it) == TDENetworkVPNType::StrongSwan) {
serviceString = "strongswan";
}
else if ((*it) == TDENetworkVPNType::VPNC) {
serviceString = "vpnc";
}
if (serviceString == "") {
continue;
}
if (serviceString == service_type) { if (availablePlugins.count() > 0)
// create new VPNService Object {
VPNService* vpnservice = new VPNService(service_type, service_type, TQT_TQOBJECT(TDENetworkManager::getInstance())); for (TDENetworkVPNTypeList::Iterator it = availablePlugins.begin (); it != availablePlugins.end (); ++it)
if (!vpnservice->getVPNPlugin()) { {
delete vpnservice; TQString serviceString;
if ((*it) == TDENetworkVPNType::OpenVPN)
{
serviceString = "openvpn";
}
else if ((*it) == TDENetworkVPNType::PPTP)
{
serviceString = "pptp";
}
else if ((*it) == TDENetworkVPNType::StrongSwan)
{
serviceString = "strongswan";
} }
else { else if ((*it) == TDENetworkVPNType::VPNC)
return vpnservice; {
serviceString = "vpnc";
}
if (serviceString == "")
{
continue;
}
if (serviceString == service_type)
{
// create new VPNService Object
VPNService* vpnservice = new VPNService(service_type, service_type, TQT_TQOBJECT(TDENetworkManager::getInstance()));
if (!vpnservice->getVPNPlugin())
{
delete vpnservice;
}
else
{
return vpnservice;
}
} }
} }
} }

@ -61,6 +61,10 @@ class WiredDeviceTrayPrivate
void WiredDeviceTray::newConnection() void WiredDeviceTray::newConnection()
{ {
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
if (!nm)
{
return;
}
// create a new wired connection // create a new wired connection
TDENetworkConnection* conn = new TDEWiredEthernetConnection(); TDENetworkConnection* conn = new TDEWiredEthernetConnection();
@ -75,13 +79,19 @@ void WiredDeviceTray::newConnection()
void WiredDeviceTray::addMenuItems(TDEPopupMenu* menu) void WiredDeviceTray::addMenuItems(TDEPopupMenu* menu)
{ {
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
if (!dev)
{
return;
}
// device title // device title
Subhead* subhead = new Subhead (menu, "subhead", TQString("Wired Connection (%1)").arg(dev->deviceNode()), SmallIcon("wired", TQIconSet::Automatic)); Subhead* subhead = new Subhead (menu, "subhead", TQString("Wired Connection (%1)").arg(dev->deviceNode()), SmallIcon("wired", TQIconSet::Automatic));
menu->insertItem (subhead, -1, -1); menu->insertItem (subhead, -1, -1);
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
if (!deviceConnMan->deviceInformation().managed) { TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
if (!nm || !deviceConnMan|| !deviceConnMan->deviceInformation().managed)
{
// device is not managed by NM -> do not show any connections // device is not managed by NM -> do not show any connections
subhead = new Subhead(menu, "subhead2", i18n("Not managed"), SmallIcon("no", TQIconSet::Automatic)); subhead = new Subhead(menu, "subhead2", i18n("Not managed"), SmallIcon("no", TQIconSet::Automatic));
menu->insertItem(subhead, -1, -1); menu->insertItem(subhead, -1, -1);
@ -92,7 +102,6 @@ void WiredDeviceTray::addMenuItems(TDEPopupMenu* menu)
menu->insertItem(subhead, -1, -1); menu->insertItem(subhead, -1, -1);
} }
else { else {
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
TDENetworkConnection* active_conn = NULL; TDENetworkConnection* active_conn = NULL;
if ((!(deviceConnMan->deviceInformation().statusFlags & TDENetworkConnectionStatus::Disconnected)) if ((!(deviceConnMan->deviceInformation().statusFlags & TDENetworkConnectionStatus::Disconnected))
&& (!(deviceConnMan->deviceInformation().statusFlags & TDENetworkConnectionStatus::Invalid))) { && (!(deviceConnMan->deviceInformation().statusFlags & TDENetworkConnectionStatus::Invalid))) {

@ -65,16 +65,22 @@ class WirelessDeviceTrayPrivate
TQStringList WirelessDeviceTray::getToolTipText() TQStringList WirelessDeviceTray::getToolTipText()
{ {
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
TQStringList tooltip = DeviceTrayComponent::getToolTipText(); TQStringList tooltip = DeviceTrayComponent::getToolTipText();
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
TDENetworkWiFiAPInfo * ap = deviceConnMan->findAccessPointByBSSID(deviceConnMan->deviceInformation().wiFiInfo.activeAccessPointBSSID); if (dev)
if (ap) { {
tooltip.append(i18n("Network: %1").arg(ap->friendlySSID())); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
int strength = (ap->signalQuality*100.0); if (deviceConnMan)
tooltip.append(i18n("Signal Strength: %1%").arg(strength)); {
TDENetworkWiFiAPInfo * ap = deviceConnMan->findAccessPointByBSSID(deviceConnMan->deviceInformation().wiFiInfo.activeAccessPointBSSID);
if (ap)
{
tooltip.append(i18n("Network: %1").arg(ap->friendlySSID()));
int strength = (ap->signalQuality*100.0);
tooltip.append(i18n("Signal Strength: %1%").arg(strength));
}
}
} }
return tooltip; return tooltip;
@ -88,6 +94,10 @@ void WirelessDeviceTray::newConnection()
void WirelessDeviceTray::newConnection(int id) void WirelessDeviceTray::newConnection(int id)
{ {
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
if (!nm)
{
return;
}
// create a new wireless connection // create a new wireless connection
TDENetworkConnection* conn = new TDEWiFiConnection(); TDENetworkConnection* conn = new TDEWiFiConnection();
@ -154,12 +164,16 @@ void WirelessDeviceTray::addWirelessNetworks(TDEPopupMenu* menu)
TQValueList<TDEWiFiConnection*> conns = WirelessManager::getWirelessConnections(); TQValueList<TDEWiFiConnection*> conns = WirelessManager::getWirelessConnections();
// get the currently active connection // get the currently active connection
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = (dev ? dev->connectionManager() : NULL);
TDENetworkConnection* active_conn = NULL; TDENetworkConnection* active_conn = NULL;
TDENetworkDeviceInformation devInfo = deviceConnMan->deviceStatus(); if (nm && deviceConnMan)
if ((!(devInfo.statusFlags & TDENetworkConnectionStatus::Disconnected)) {
&& (!(devInfo.statusFlags & TDENetworkConnectionStatus::Invalid))) { TDENetworkDeviceInformation devInfo = deviceConnMan->deviceStatus();
active_conn = nm->findConnectionByUUID(devInfo.activeConnectionUUID); if ((!(devInfo.statusFlags & TDENetworkConnectionStatus::Disconnected))
&& (!(devInfo.statusFlags & TDENetworkConnectionStatus::Invalid)))
{
active_conn = nm->findConnectionByUUID(devInfo.activeConnectionUUID);
}
} }
// add all wireless connections in range // add all wireless connections in range
@ -258,6 +272,10 @@ void WirelessDeviceTray::addWirelessNetworks(TDEPopupMenu* menu)
void WirelessDeviceTray::addMenuItems(TDEPopupMenu* menu) void WirelessDeviceTray::addMenuItems(TDEPopupMenu* menu)
{ {
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
if (!dev)
{
return;
}
// get the currently active connection // get the currently active connection
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
@ -267,7 +285,8 @@ void WirelessDeviceTray::addMenuItems(TDEPopupMenu* menu)
menu->insertItem (subhead, -1, -1); menu->insertItem (subhead, -1, -1);
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
if (!deviceConnMan->deviceInformation().managed) { if (!nm || !deviceConnMan || !deviceConnMan->deviceInformation().managed)
{
// device is not managed by NM -> do not show any connections // device is not managed by NM -> do not show any connections
subhead = new Subhead(menu, "subhead2", i18n("Not managed"), SmallIcon("no", TQIconSet::Automatic)); subhead = new Subhead(menu, "subhead2", i18n("Not managed"), SmallIcon("no", TQIconSet::Automatic));
menu->insertItem(subhead, -1, -1); menu->insertItem(subhead, -1, -1);
@ -312,7 +331,12 @@ void WirelessDeviceTray::slotUpdateDeviceState(TDENetworkConnectionStatus::TDENe
{ {
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
if (dev->deviceNode() != deviceNode) { if (!dev)
{
return;
}
if (dev->deviceNode() != deviceNode)
{
kdDebug() << k_funcinfo << "WARNING: Got networkDeviceStateChanged signal for interface '" << deviceNode << "', but my interface is '" << dev->deviceNode() << "'! Ignoring..."; kdDebug() << k_funcinfo << "WARNING: Got networkDeviceStateChanged signal for interface '" << deviceNode << "', but my interface is '" << dev->deviceNode() << "'! Ignoring...";
return; return;
} }
@ -326,24 +350,33 @@ void WirelessDeviceTray::slotUpdateDeviceState(TDENetworkConnectionStatus::TDENe
if (newState == TDENetworkConnectionStatus::Connected) { if (newState == TDENetworkConnectionStatus::Connected) {
// trigger an update of the connections seen bssids property // trigger an update of the connections seen bssids property
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
TDENetworkWiFiAPInfo * ap = deviceConnMan->findAccessPointByBSSID(deviceConnMan->deviceInformation().wiFiInfo.activeAccessPointBSSID); if (deviceConnMan)
if (ap) { {
int strength = (ap->signalQuality*100.0); TDENetworkWiFiAPInfo * ap = deviceConnMan->findAccessPointByBSSID(deviceConnMan->deviceInformation().wiFiInfo.activeAccessPointBSSID);
if (ap)
if (strength > 80) { {
setPixmapForStates(newState, "nm_signal_100"); int strength = (ap->signalQuality*100.0);
}
else if (strength > 55) { if (strength > 80)
setPixmapForStates(newState, "nm_signal_75"); {
} setPixmapForStates(newState, "nm_signal_100");
else if (strength > 30) { }
setPixmapForStates(newState, "nm_signal_50"); else if (strength > 55)
} {
else if (strength > 5) { setPixmapForStates(newState, "nm_signal_75");
setPixmapForStates(newState, "nm_signal_25"); }
} else if (strength > 30)
else { {
setPixmapForStates(newState, "nm_signal_00"); setPixmapForStates(newState, "nm_signal_50");
}
else if (strength > 5)
{
setPixmapForStates(newState, "nm_signal_25");
}
else
{
setPixmapForStates(newState, "nm_signal_00");
}
} }
} }
} }
@ -361,25 +394,34 @@ void WirelessDeviceTray::slotCheckActiveAccessPoint()
// get the currently active connection // get the currently active connection
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = (dev ? dev->connectionManager() : NULL);
TDENetworkConnection* active_conn = NULL; TDENetworkConnection* active_conn = NULL;
TDENetworkDeviceInformation devInfo = deviceConnMan->deviceStatus(); if (nm && deviceConnMan)
if ((!(devInfo.statusFlags & TDENetworkConnectionStatus::Disconnected)) {
&& (!(devInfo.statusFlags & TDENetworkConnectionStatus::Invalid))) { TDENetworkDeviceInformation devInfo = deviceConnMan->deviceStatus();
active_conn = nm->findConnectionByUUID(devInfo.activeConnectionUUID); if ((!(devInfo.statusFlags & TDENetworkConnectionStatus::Disconnected))
} && (!(devInfo.statusFlags & TDENetworkConnectionStatus::Invalid)))
{
active_conn = nm->findConnectionByUUID(devInfo.activeConnectionUUID);
}
if (active_conn && devInfo.statusFlags == TDENetworkConnectionStatus::Connected) { if (active_conn && devInfo.statusFlags == TDENetworkConnectionStatus::Connected)
TDENetworkDeviceInformation devInfo = deviceConnMan->deviceInformation(); {
TDENetworkWiFiAPInfo * activeap = deviceConnMan->findAccessPointByBSSID(devInfo.wiFiInfo.activeAccessPointBSSID); TDENetworkDeviceInformation devInfo = deviceConnMan->deviceInformation();
if ( activeap != d->activeAccessPoint) { TDENetworkWiFiAPInfo * activeap = deviceConnMan->findAccessPointByBSSID(devInfo.wiFiInfo.activeAccessPointBSSID);
d->activeAccessPoint = activeap; if ( activeap != d->activeAccessPoint)
if ( d->activeAccessPoint ) { {
TDEWiFiConnection* wireless = dynamic_cast<TDEWiFiConnection*>(active_conn); d->activeAccessPoint = activeap;
if (wireless) { if ( d->activeAccessPoint )
if (!(wireless->heardBSSIDs.contains(d->activeAccessPoint->BSSID))) { {
wireless->heardBSSIDs.append(d->activeAccessPoint->BSSID); TDEWiFiConnection* wireless = dynamic_cast<TDEWiFiConnection*>(active_conn);
if (wireless)
{
if (!(wireless->heardBSSIDs.contains(d->activeAccessPoint->BSSID)))
{
wireless->heardBSSIDs.append(d->activeAccessPoint->BSSID);
}
} }
} }
} }
@ -390,30 +432,43 @@ void WirelessDeviceTray::slotCheckActiveAccessPoint()
void WirelessDeviceTray::apPropertyChanged(TDEMACAddress BSSID, TDENetworkAPEventType::TDENetworkAPEventType event) void WirelessDeviceTray::apPropertyChanged(TDEMACAddress BSSID, TDENetworkAPEventType::TDENetworkAPEventType event)
{ {
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
if (!dev)
{
return;
}
if (event == TDENetworkAPEventType::SignalStrengthChanged) { if (event == TDENetworkAPEventType::SignalStrengthChanged) {
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
TDENetworkWiFiAPInfo * ap = deviceConnMan->findAccessPointByBSSID(BSSID); if (deviceConnMan)
if (ap) { {
TQ_UINT32 strength = (ap->signalQuality*100.0); TDENetworkWiFiAPInfo * ap = deviceConnMan->findAccessPointByBSSID(BSSID);
kdDebug() << k_funcinfo << strength << endl; if (ap)
TDENetworkConnectionStatus::TDENetworkConnectionStatus state = deviceConnMan->deviceInformation().statusFlags; {
if (strength > 80) { TQ_UINT32 strength = (ap->signalQuality*100.0);
setPixmapForStates(state, "nm_signal_100"); kdDebug() << k_funcinfo << strength << endl;
} TDENetworkConnectionStatus::TDENetworkConnectionStatus state = deviceConnMan->deviceInformation().statusFlags;
else if (strength > 55) { if (strength > 80)
setPixmapForStates(state, "nm_signal_75"); {
} setPixmapForStates(state, "nm_signal_100");
else if (strength > 30) { }
setPixmapForStates(state, "nm_signal_50"); else if (strength > 55)
} {
else if (strength > 5) { setPixmapForStates(state, "nm_signal_75");
setPixmapForStates(state, "nm_signal_25"); }
} else if (strength > 30)
else { {
setPixmapForStates(state, "nm_signal_00"); setPixmapForStates(state, "nm_signal_50");
}
else if (strength > 5)
{
setPixmapForStates(state, "nm_signal_25");
}
else
{
setPixmapForStates(state, "nm_signal_00");
}
TQTimer::singleShot(0, this, TQT_SLOT(sendUpdateUI()));
} }
TQTimer::singleShot(0, this, TQT_SLOT(sendUpdateUI()));
} }
} }
} }
@ -430,17 +485,27 @@ void WirelessDeviceTray::slotAccessPointRemoved(TDEMACAddress)
void WirelessDeviceTray::tdeAccessPointStatusChangedHandler(TDEMACAddress BSSID, TDENetworkAPEventType::TDENetworkAPEventType event) { void WirelessDeviceTray::tdeAccessPointStatusChangedHandler(TDEMACAddress BSSID, TDENetworkAPEventType::TDENetworkAPEventType event) {
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
if (!dev)
{
return;
}
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
if (event == TDENetworkAPEventType::Discovered) { if (event == TDENetworkAPEventType::Discovered) {
TDENetworkWiFiAPInfo* apinfo = deviceConnMan->findAccessPointByBSSID(BSSID); if (deviceConnMan)
slotAccessPointAdded(apinfo); {
TDENetworkWiFiAPInfo* apinfo = deviceConnMan->findAccessPointByBSSID(BSSID);
slotAccessPointAdded(apinfo);
}
} }
else if (event == TDENetworkAPEventType::Lost) { else if (event == TDENetworkAPEventType::Lost) {
slotAccessPointRemoved(BSSID); slotAccessPointRemoved(BSSID);
} }
else if (event == TDENetworkAPEventType::SignalStrengthChanged) { else if (event == TDENetworkAPEventType::SignalStrengthChanged) {
if (deviceConnMan->deviceInformation().wiFiInfo.activeAccessPointBSSID == BSSID) { if (deviceConnMan &&
deviceConnMan->deviceInformation().wiFiInfo.activeAccessPointBSSID == BSSID)
{
apPropertyChanged(BSSID, event); apPropertyChanged(BSSID, event);
} }
} }

@ -82,14 +82,19 @@ TQValueList<TDENetworkWiFiAPInfo*> internalGetAccessPoints(TDENetworkDevice* dev
TQValueList<TDENetworkWiFiAPInfo*> list; TQValueList<TDENetworkWiFiAPInfo*> list;
if (dev) { if (dev) {
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
TDENetworkHWNeighbor* neighbor; if (deviceConnMan)
TDENetworkHWNeighborList* neighbors = deviceConnMan->siteSurvey(); {
for (neighbor = neighbors->first(); neighbor; neighbor = neighbors->next()) { TDENetworkHWNeighbor* neighbor;
TDENetworkWiFiAPInfo* apInfo = dynamic_cast<TDENetworkWiFiAPInfo*>(neighbor); TDENetworkHWNeighborList* neighbors = deviceConnMan->siteSurvey();
if (!apInfo) { for (neighbor = neighbors->first(); neighbor; neighbor = neighbors->next())
continue; {
TDENetworkWiFiAPInfo* apInfo = dynamic_cast<TDENetworkWiFiAPInfo*>(neighbor);
if (!apInfo)
{
continue;
}
list.append(apInfo);
} }
list.append(apInfo);
} }
} }
return list; return list;
@ -141,15 +146,21 @@ TQValueList<TDENetworkWiFiAPInfo*> internalGetAccessPointsWithESSID(TQByteArray
TQValueList<TDENetworkWiFiAPInfo*> list; TQValueList<TDENetworkWiFiAPInfo*> list;
if (dev) { if (dev) {
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
TDENetworkHWNeighbor* neighbor; if (deviceConnMan)
TDENetworkHWNeighborList* neighbors = deviceConnMan->siteSurvey(); {
for (neighbor = neighbors->first(); neighbor; neighbor = neighbors->next()) { TDENetworkHWNeighbor* neighbor;
TDENetworkWiFiAPInfo* apInfo = dynamic_cast<TDENetworkWiFiAPInfo*>(neighbor); TDENetworkHWNeighborList* neighbors = deviceConnMan->siteSurvey();
if (!apInfo) { for (neighbor = neighbors->first(); neighbor; neighbor = neighbors->next())
continue; {
} TDENetworkWiFiAPInfo* apInfo = dynamic_cast<TDENetworkWiFiAPInfo*>(neighbor);
if (apInfo->SSID == essid) { if (!apInfo)
list.append(apInfo); {
continue;
}
if (apInfo->SSID == essid)
{
list.append(apInfo);
}
} }
} }
} }

@ -56,15 +56,13 @@ using namespace ConnectionSettings;
void WirelessNetworkItem::slotActivate() void WirelessNetworkItem::slotActivate()
{ {
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(_dev)); TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(_dev));
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
TDENetworkConnection* conn = nm->findConnectionByUUID(_conn); TDENetworkConnectionManager* deviceConnMan = (dev ? dev->connectionManager() : NULL);
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
printf("slotActivate\n"); printf("slotActivate\n");
if (!_dev.isEmpty() && deviceConnMan) if (!_dev.isEmpty() && nm && deviceConnMan)
{ {
TDENetworkConnection* conn = nm->findConnectionByUUID(_conn);
if ( conn ) if ( conn )
{ {
kdDebug() << "Activate Connection " << _conn.ascii() << " on Device " << dev->deviceNode().ascii() << endl; kdDebug() << "Activate Connection " << _conn.ascii() << " on Device " << dev->deviceNode().ascii() << endl;
@ -87,7 +85,7 @@ void WirelessNetworkItem::slotActivate()
TQString WirelessNetworkItem::getDisplayText() TQString WirelessNetworkItem::getDisplayText()
{ {
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
TDENetworkConnection* conn = nm->findConnectionByUUID(_conn); TDENetworkConnection* conn = (nm ? nm->findConnectionByUUID(_conn) : 0);
TQString security = ""; TQString security = "";
if (((_net.getWpaFlags() & TDENetworkWiFiAPFlags::EncryptionFlagsMask) != TDENetworkWiFiAPFlags::None) && ((_net.getRsnFlags() & TDENetworkWiFiAPFlags::EncryptionFlagsMask) != TDENetworkWiFiAPFlags::None)) { if (((_net.getWpaFlags() & TDENetworkWiFiAPFlags::EncryptionFlagsMask) != TDENetworkWiFiAPFlags::None) && ((_net.getRsnFlags() & TDENetworkWiFiAPFlags::EncryptionFlagsMask) != TDENetworkWiFiAPFlags::None)) {

@ -90,13 +90,20 @@ bool WirelessNetwork::contains(const TDEMACAddress ap)
dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->aps[ap])); dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->aps[ap]));
if (dev) { if (dev) {
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
apInfo = deviceConnMan->findAccessPointByBSSID(ap); if (deviceConnMan)
{
apInfo = deviceConnMan->findAccessPointByBSSID(ap);
}
} }
else if (d->aps[ap] == "") { else if (d->aps[ap] == "") {
apInfo = nm->findAccessPointByBSSID(ap); if (nm)
{
apInfo = nm->findAccessPointByBSSID(ap);
}
} }
} }
else { else if (nm)
{
apInfo = nm->findAccessPointByBSSID(ap); apInfo = nm->findAccessPointByBSSID(ap);
} }
@ -137,10 +144,16 @@ const TQByteArray WirelessNetwork::getSsid() const
TDENetworkWiFiAPInfo* apInfo = NULL; TDENetworkWiFiAPInfo* apInfo = NULL;
if (dev) { if (dev) {
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
apInfo = deviceConnMan->findAccessPointByBSSID(d->aps.begin().key()); if (deviceConnMan)
{
apInfo = deviceConnMan->findAccessPointByBSSID(d->aps.begin().key());
}
} }
else if (d->aps.begin().data() == "") { else if (d->aps.begin().data() == "") {
apInfo = nm->findAccessPointByBSSID(d->aps.begin().key()); if (nm)
{
apInfo = nm->findAccessPointByBSSID(d->aps.begin().key());
}
} }
if (apInfo) { if (apInfo) {
@ -164,10 +177,16 @@ TQString WirelessNetwork::getDisplaySsid() const
TDENetworkWiFiAPInfo* apInfo = NULL; TDENetworkWiFiAPInfo* apInfo = NULL;
if (dev) { if (dev) {
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
apInfo = deviceConnMan->findAccessPointByBSSID(d->aps.begin().key()); if (deviceConnMan)
{
apInfo = deviceConnMan->findAccessPointByBSSID(d->aps.begin().key());
}
} }
else if (d->aps.begin().data() == "") { else if (d->aps.begin().data() == "") {
apInfo = nm->findAccessPointByBSSID(d->aps.begin().key()); if (nm)
{
apInfo = nm->findAccessPointByBSSID(d->aps.begin().key());
}
} }
if (apInfo) { if (apInfo) {
@ -192,10 +211,16 @@ TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags WirelessNetwork::getFlags() const
TDENetworkWiFiAPInfo* apInfo = NULL; TDENetworkWiFiAPInfo* apInfo = NULL;
if (dev) { if (dev) {
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
apInfo = deviceConnMan->findAccessPointByBSSID(it.key()); if (deviceConnMan)
{
apInfo = deviceConnMan->findAccessPointByBSSID(it.key());
}
} }
else if (it.data() == "") { else if (it.data() == "") {
apInfo = nm->findAccessPointByBSSID(it.key()); if (nm)
{
apInfo = nm->findAccessPointByBSSID(it.key());
}
} }
if (apInfo) { if (apInfo) {
@ -217,10 +242,16 @@ TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags WirelessNetwork::getWpaFlags() cons
TDENetworkWiFiAPInfo* apInfo = NULL; TDENetworkWiFiAPInfo* apInfo = NULL;
if (dev) { if (dev) {
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
apInfo = deviceConnMan->findAccessPointByBSSID(it.key()); if (deviceConnMan)
{
apInfo = deviceConnMan->findAccessPointByBSSID(it.key());
}
} }
else if (it.data() == "") { else if (it.data() == "") {
apInfo = nm->findAccessPointByBSSID(it.key()); if (nm)
{
apInfo = nm->findAccessPointByBSSID(it.key());
}
} }
if (apInfo) { if (apInfo) {
@ -241,10 +272,16 @@ TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags WirelessNetwork::getRsnFlags() cons
TDENetworkWiFiAPInfo* apInfo = NULL; TDENetworkWiFiAPInfo* apInfo = NULL;
if (dev) { if (dev) {
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
apInfo = deviceConnMan->findAccessPointByBSSID(it.key()); if (deviceConnMan)
{
apInfo = deviceConnMan->findAccessPointByBSSID(it.key());
}
} }
else if (it.data() == "") { else if (it.data() == "") {
apInfo = nm->findAccessPointByBSSID(it.key()); if (nm)
{
apInfo = nm->findAccessPointByBSSID(it.key());
}
} }
if (apInfo) { if (apInfo) {
@ -269,10 +306,16 @@ TQ_UINT8 WirelessNetwork::getStrength() const
TDENetworkWiFiAPInfo* apInfo = NULL; TDENetworkWiFiAPInfo* apInfo = NULL;
if (dev) { if (dev) {
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager(); TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
apInfo = deviceConnMan->findAccessPointByBSSID(it.key()); if (deviceConnMan)
{
apInfo = deviceConnMan->findAccessPointByBSSID(it.key());
}
} }
else if (it.data() == "") { else if (it.data() == "") {
apInfo = nm->findAccessPointByBSSID(it.key()); if (nm)
{
apInfo = nm->findAccessPointByBSSID(it.key());
}
} }
if (apInfo) { if (apInfo) {

@ -44,6 +44,10 @@ using namespace ConnectionSettings;
void VPNTrayComponent::slotShowNewConnectionDialog() void VPNTrayComponent::slotShowNewConnectionDialog()
{ {
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
if (!nm)
{
return;
}
// create a new VPN connection // create a new VPN connection
TDEVPNConnection* conn = new TDEVPNConnection(); TDEVPNConnection* conn = new TDEVPNConnection();
@ -63,6 +67,10 @@ void VPNTrayComponent::addMenuItems(TDEPopupMenu* menu)
// Get all active connections // Get all active connections
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager(); TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
if (!nm)
{
return;
}
if (tdenetworkmanager_editor_dialog_count == 0) nm->loadConnectionInformation(); if (tdenetworkmanager_editor_dialog_count == 0) nm->loadConnectionInformation();

Loading…
Cancel
Save