summaryrefslogtreecommitdiffstats
path: root/tdenetworkmanager/src/tdenetman-tray.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdenetworkmanager/src/tdenetman-tray.cpp')
-rw-r--r--tdenetworkmanager/src/tdenetman-tray.cpp184
1 files changed, 111 insertions, 73 deletions
diff --git a/tdenetworkmanager/src/tdenetman-tray.cpp b/tdenetworkmanager/src/tdenetman-tray.cpp
index 173464f..e97e1ba 100644
--- a/tdenetworkmanager/src/tdenetman-tray.cpp
+++ b/tdenetworkmanager/src/tdenetman-tray.cpp
@@ -220,12 +220,16 @@ void Tray::contextMenuAboutToShow (TDEPopupMenu* menu)
{
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
- if (tdenetworkmanager_editor_dialog_count == 0) nm->loadConnectionInformation();
-
// clear menu
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
for (TQValueList<TrayComponent*>::Iterator it = d->trayComponents.begin(); it != d->trayComponents.end(); ++it) {
(*it)->addMenuItems(menu);
@@ -248,26 +252,34 @@ void Tray::contextMenuAboutToShow (TDEPopupMenu* menu)
TDEAction * deviceNewConnAction = 0;
if (dev_comp) {
TDENetworkDevice* dev_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dev_comp->device()));
- TQString actionName = TQString("new_connection_%1").arg(dev_comp_dev->deviceNode());
- TQString menuCaption = TQString("%1").arg(dev_comp_dev->deviceNode());
- if (menuCaption.contains("eth", FALSE) > 0) {
- menuCaption = menuCaption.insert(0, "Wired Connection (");
+ if (dev_comp_dev)
+ {
+ TQString actionName = TQString("new_connection_%1").arg(dev_comp_dev->deviceNode());
+ 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
@@ -277,8 +289,9 @@ void Tray::contextMenuAboutToShow (TDEPopupMenu* menu)
TQString actionName = TQString("new_connection_%1").arg("vpn");
deviceNewConnAction = new TDEAction (menuCaption, 0, TQT_TQOBJECT(this), TQT_SLOT(slotNewVPNConnection()), actionCollection(), actionName.utf8());
newConnActionMenu->insert(deviceNewConnAction);
- }
- else if ( devices == 1 ) {
+ }
+ else if ( devices == 1 )
+ {
newConnAction = actionCollection ()->action ("new_connection");
TQT_BASE_OBJECT_NAME::disconnect( newConnAction, TQT_SIGNAL(activated()) );
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;
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!
- switch (deviceConnMan->deviceType())
+ if (deviceConnMan)
{
- case TDENetworkDeviceType::WiredEthernet:
- devTray = new WiredDeviceTray(dev, this, "wired_device_tray");
- break;
- case TDENetworkDeviceType::WiFi:
- devTray = new WirelessDeviceTray(dev, this, "wireless_device_tray");
- break;
- case TDENetworkDeviceType::Modem:
- devTray = new CellularDeviceTray(dev, this, "cellular_device_tray");
- break;
- default:
- kdWarning() << k_funcinfo << "UDI: " << dev << " has unknown devicetype: " << deviceConnMan->deviceType() << endl;
+ switch (deviceConnMan->deviceType())
+ {
+ case TDENetworkDeviceType::WiredEthernet:
+ devTray = new WiredDeviceTray(dev, this, "wired_device_tray");
+ break;
+ case TDENetworkDeviceType::WiFi:
+ devTray = new WirelessDeviceTray(dev, this, "wireless_device_tray");
+ break;
+ case TDENetworkDeviceType::Modem:
+ devTray = new CellularDeviceTray(dev, this, "cellular_device_tray");
+ break;
+ default:
+ kdWarning() << k_funcinfo << "UDI: " << dev << " has unknown devicetype: " << deviceConnMan->deviceType() << endl;
+ }
}
if(devTray)
{
@@ -637,10 +653,14 @@ void Tray::trayComponentNeedsCenterStage(TrayComponent *component, bool needsIt)
TDEGlobalNetworkManager* nm = TDEGlobal::networkManager();
DeviceTrayComponent * dtc = dynamic_cast<DeviceTrayComponent*>(component);
- if (dtc) {
+ if (nm && dtc)
+ {
TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dtc->device()));
- kdDebug() << k_funcinfo << dtc_comp_dev->deviceNode() << " : " << needsIt << endl;
- TDENetworkDevice * device = dtc_comp_dev;
+ kdDebug()
+ << k_funcinfo
+ << (dtc_comp_dev ? dtc_comp_dev->deviceNode() : TQString("<unknown device>"))
+ << " : " << needsIt
+ << endl;
if (needsIt) {
if (d->foregroundTrayComponent) {
disconnectTrayDeviceManager();
@@ -663,8 +683,14 @@ void Tray::trayComponentNeedsCenterStage(TrayComponent *component, bool needsIt)
break;
}
}
- kdDebug() << " Device " << dtc_comp_dev->deviceNode() << " background, new foreground device: " << device->deviceNode() << endl;
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();
updateTrayDeviceManagerState();
}
@@ -702,26 +728,34 @@ void Tray::trayUiChanged()
DeviceTrayComponent * dtc = d->foregroundTrayComponent;
if (dtc) {
TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(dtc->device()));
- TDENetworkConnectionManager* deviceConnMan = dtc_comp_dev->connectionManager();
- updateTrayIcon(deviceConnMan->deviceStatus().statusFlags);
+ if (dtc_comp_dev)
+ {
+ TDENetworkConnectionManager* deviceConnMan = dtc_comp_dev->connectionManager();
+ if (deviceConnMan)
+ {
+ updateTrayIcon(deviceConnMan->deviceStatus().statusFlags);
+ }
+ }
}
}
void Tray::showActiveDeviceTray() {
// If the current foreground tray device is deactivated, find the first active device and use it instead
bool needsNewDeviceTrayComponent = true;
- if (d->foregroundTrayComponent) {
+ if (d->foregroundTrayComponent)
+ {
+ needsNewDeviceTrayComponent = false;
TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->foregroundTrayComponent->device()));
- TDENetworkConnectionManager* deviceConnMan = dtc_comp_dev->connectionManager();
- TDENetworkConnectionStatus::TDENetworkConnectionStatus statusFlags = deviceConnMan->deviceStatus().statusFlags;
- if ((statusFlags == TDENetworkConnectionStatus::Disconnected)
- || (statusFlags == (TDENetworkConnectionStatus::Disconnected | TDENetworkConnectionStatus::LinkUnavailable))
- || (statusFlags & TDENetworkConnectionStatus::Invalid)
- ) {
- needsNewDeviceTrayComponent = true;
- }
- else {
- needsNewDeviceTrayComponent = false;
+ TDENetworkConnectionManager* deviceConnMan = (dtc_comp_dev ? dtc_comp_dev->connectionManager() : NULL);
+ if (deviceConnMan)
+ {
+ TDENetworkConnectionStatus::TDENetworkConnectionStatus statusFlags = deviceConnMan->deviceStatus().statusFlags;
+ if ((statusFlags == TDENetworkConnectionStatus::Disconnected)
+ || (statusFlags == (TDENetworkConnectionStatus::Disconnected | TDENetworkConnectionStatus::LinkUnavailable))
+ || (statusFlags & TDENetworkConnectionStatus::Invalid))
+ {
+ needsNewDeviceTrayComponent = true;
+ }
}
}
@@ -734,17 +768,22 @@ void Tray::showActiveDeviceTray() {
DeviceTrayComponent* newDtc = dynamic_cast<DeviceTrayComponent*> (*it);
if (newDtc) {
TDENetworkDevice* dtc_comp_dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(newDtc->device()));
- TDENetworkConnectionManager* deviceConnMan = dtc_comp_dev->connectionManager();
- TDENetworkConnectionStatus::TDENetworkConnectionStatus statusFlags = deviceConnMan->deviceStatus().statusFlags;
- if ((statusFlags == TDENetworkConnectionStatus::Disconnected)
- || (statusFlags == (TDENetworkConnectionStatus::Disconnected | TDENetworkConnectionStatus::LinkUnavailable))
- || (statusFlags & TDENetworkConnectionStatus::Invalid)
- ) {
- continue;
- }
- else {
- d->foregroundTrayComponent = newDtc;
- break;
+ TDENetworkConnectionManager* deviceConnMan = (dtc_comp_dev ? dtc_comp_dev->connectionManager() : NULL);
+ if (deviceConnMan)
+ {
+ TDENetworkConnectionStatus::TDENetworkConnectionStatus statusFlags = deviceConnMan->deviceStatus().statusFlags;
+ if ((statusFlags == TDENetworkConnectionStatus::Disconnected)
+ || (statusFlags == (TDENetworkConnectionStatus::Disconnected | TDENetworkConnectionStatus::LinkUnavailable))
+ || (statusFlags & TDENetworkConnectionStatus::Invalid)
+ )
+ {
+ continue;
+ }
+ 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
active_vpn = 0;
@@ -796,7 +835,7 @@ void Tray::updateTrayIcon(TDENetworkConnectionStatus::TDENetworkConnectionStatus
// }
#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)) {
active_vpn = 0;
}
@@ -840,11 +879,11 @@ void Tray::updateTrayIcon(TDENetworkConnectionStatus::TDENetworkConnectionStatus
}
}
else {
- setBaseStateIcon(nm->backendStatus());
+ setBaseStateIcon(globalState);
}
}
else {
- TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags current_vpn_state = (TDEGlobal::networkManager()->backendStatus() & TDENetworkGlobalManagerFlags::VPNMask);
+ TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags current_vpn_state = (globalState & TDENetworkGlobalManagerFlags::VPNMask);
#ifdef DEBUG_STATE
printf("VPN state: 0x%08x\n", current_vpn_state);
//printf("Activated is: %d\n", TDENetworkConnectionStatus::Connected);
@@ -905,7 +944,7 @@ void Tray::updateActiveConnection(TDENetworkConnectionStatus::TDENetworkConnecti
void Tray::slotDeviceAddedNotify(TDENetworkDevice* dev)
{
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()) );
}
}
@@ -913,7 +952,7 @@ void Tray::slotDeviceAddedNotify(TDENetworkDevice* dev)
void Tray::slotDeviceRemovedNotify(TDENetworkDevice* dev)
{
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()) );
}
}
@@ -1100,7 +1139,7 @@ Tray::Tray() : KSystemTray()
// initial setup of the device-trays
updateDeviceTrays();
- slotStateChanged(TDEGlobal::networkManager()->backendStatus(), TDENetworkGlobalManagerFlags::Unknown);
+ slotStateChanged(nm ? nm->backendStatus() : TDENetworkGlobalManagerFlags::Unknown, TDENetworkGlobalManagerFlags::Unknown);
}
Tray::~Tray ()
@@ -1109,4 +1148,3 @@ Tray::~Tray ()
}
#include "tdenetman-tray.moc"
-