summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <[email protected]>2012-09-08 15:37:58 -0500
committerTimothy Pearson <[email protected]>2012-09-08 15:37:58 -0500
commit2a9e4eac1f90251bb06d9fa1da06f46e46abd3f8 (patch)
treec482de3a6cdc851f28aacc1b54524fd046eadfae
parent1a6fd0dfad42fee3e6e829a25ef767e577c283d9 (diff)
downloadtdenetworkmanager-2a9e4eac1f90251bb06d9fa1da06f46e46abd3f8.tar.gz
tdenetworkmanager-2a9e4eac1f90251bb06d9fa1da06f46e46abd3f8.zip
Connect hardware change signals
-rw-r--r--tdenetworkmanager/src/devicetraycomponent.cpp33
-rw-r--r--tdenetworkmanager/src/devicetraycomponent.h5
-rw-r--r--tdenetworkmanager/src/tdenetman-wireless_device_tray.cpp80
-rw-r--r--tdenetworkmanager/src/tdenetman-wireless_device_tray.h9
4 files changed, 87 insertions, 40 deletions
diff --git a/tdenetworkmanager/src/devicetraycomponent.cpp b/tdenetworkmanager/src/devicetraycomponent.cpp
index b277ba1..2381781 100644
--- a/tdenetworkmanager/src/devicetraycomponent.cpp
+++ b/tdenetworkmanager/src/devicetraycomponent.cpp
@@ -67,13 +67,11 @@ DeviceTrayComponent::DeviceTrayComponent(TQString device, KSystemTray * parent,
: TrayComponent(parent, name), m_device(device)
{
TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices();
- TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(m_device));
- TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
- // TDENM FIXME
- // This TQt connection will need to be re-established whenever the device list changes, e.g. after a call to TDEHardwareDevices::queryHardwareInformation()
- // Therefore, this class should listen to hardwareEvent(TDEHardwareEvent::TDEHardwareEvent, TQString) and reload devices if TDEHardwareEvent::HardwareListModified is passed
- connect(deviceConnMan, TQT_SIGNAL(StateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus)), TQT_SLOT(deviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus)));
+ // Listen for hardware change events
+ connect(hwdevices, TQT_SIGNAL(hardwareEvent(TDEHardwareEvent::TDEHardwareEvent, TQString)), this, TQT_SLOT(tdeHardwareEventHandler(TDEHardwareEvent::TDEHardwareEvent, TQString)));
+ // Trigger an initial hardware information update
+ tdeHardwareEventHandler(TDEHardwareEvent::HardwareListModified, TQString::null);
m_pixmaps[TDENetworkConnectionStatus::Invalid] = "nm_no_connection";
m_pixmaps[TDENetworkConnectionStatus::UnManaged] = "nm_no_connection";
@@ -108,6 +106,17 @@ TQString DeviceTrayComponent::device() const
return m_device;
}
+void DeviceTrayComponent::tdeHardwareEventHandler(TDEHardwareEvent::TDEHardwareEvent event, TQString)
+{
+ if (event == TDEHardwareEvent::HardwareListModified) {
+ TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices();
+ TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(m_device));
+ TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
+
+ connect(deviceConnMan, TQT_SIGNAL(networkDeviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString)), TQT_SLOT(deviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString)));
+ }
+}
+
TQStringList DeviceTrayComponent::getToolTipText()
{
TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices();
@@ -154,15 +163,19 @@ void DeviceTrayComponent::setPixmapForState(TDENetworkConnectionStatus::TDENetwo
m_pixmaps[state] = pixmap;
}
-void DeviceTrayComponent::deviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus state)
+void DeviceTrayComponent::deviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus newState, TDENetworkConnectionStatus::TDENetworkConnectionStatus prevState, TQString hwAddress)
{
-// TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices();
-// TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(m_device));
+ TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices();
+ TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(m_device));
+
+ if (dev->macAddress() != hwAddress) {
+ printf("[WARNING] Got networkDeviceStateChanged signal for HW address '%s', but my HW address is '%s'! Ignoring...\n\r", hwAddress.ascii(), dev->macAddress().ascii());
+ }
//check if our device now holds the default active connection
// if it is the default active connection
// or if it is activating. what if 2 devices are activating simultaneously?
- switch (state) {
+ switch (newState) {
case TDENetworkConnectionStatus::EstablishingLink:
emit needsCenterStage(this, true);
break;
diff --git a/tdenetworkmanager/src/devicetraycomponent.h b/tdenetworkmanager/src/devicetraycomponent.h
index 50d5d6a..316790c 100644
--- a/tdenetworkmanager/src/devicetraycomponent.h
+++ b/tdenetworkmanager/src/devicetraycomponent.h
@@ -54,7 +54,10 @@ class DeviceTrayComponent : public TrayComponent
virtual void newConnection() = 0;
protected slots:
- void deviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus);
+ void deviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString);
+
+ private slots:
+ void tdeHardwareEventHandler(TDEHardwareEvent::TDEHardwareEvent, TQString);
protected:
void setMovieForState(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString);
diff --git a/tdenetworkmanager/src/tdenetman-wireless_device_tray.cpp b/tdenetworkmanager/src/tdenetman-wireless_device_tray.cpp
index 759d2e0..d66eeeb 100644
--- a/tdenetworkmanager/src/tdenetman-wireless_device_tray.cpp
+++ b/tdenetworkmanager/src/tdenetman-wireless_device_tray.cpp
@@ -293,14 +293,18 @@ void WirelessDeviceTray::setPixmapForStates(TDENetworkConnectionStatus::TDENetwo
}
}
-void WirelessDeviceTray::slotUpdateDeviceState(TDENetworkConnectionStatus::TDENetworkConnectionStatus state)
+void WirelessDeviceTray::slotUpdateDeviceState(TDENetworkConnectionStatus::TDENetworkConnectionStatus newState, TDENetworkConnectionStatus::TDENetworkConnectionStatus prevState, TQString hwAddress)
{
TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices();
TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
+ if (dev->macAddress() != hwAddress) {
+ printf("[WARNING] Got networkDeviceStateChanged signal for HW address '%s', but my HW address is '%s'! Ignoring...\n\r", hwAddress.ascii(), dev->macAddress().ascii());
+ }
+
slotCheckActiveAccessPoint();
- if (state == TDENetworkConnectionStatus::Connected) {
+ if (newState == TDENetworkConnectionStatus::Connected) {
// trigger an update of the connections seen bssids property
TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
TDENetworkWiFiAPInfo * ap = deviceConnMan->findAccessPointByBSSID(deviceConnMan->deviceInformation().wiFiInfo.activeAccessPointBSSID);
@@ -308,19 +312,19 @@ void WirelessDeviceTray::slotUpdateDeviceState(TDENetworkConnectionStatus::TDENe
int strength = (ap->signalQuality*100.0);
if (strength > 80) {
- setPixmapForStates(state, "nm_signal_100");
+ setPixmapForStates(newState, "nm_signal_100");
}
else if (strength > 55) {
- setPixmapForStates(state, "nm_signal_75");
+ setPixmapForStates(newState, "nm_signal_75");
}
else if (strength > 30) {
- setPixmapForStates(state, "nm_signal_50");
+ setPixmapForStates(newState, "nm_signal_50");
}
else if (strength > 5) {
- setPixmapForStates(state, "nm_signal_25");
+ setPixmapForStates(newState, "nm_signal_25");
}
else {
- setPixmapForStates(state, "nm_signal_00");
+ setPixmapForStates(newState, "nm_signal_00");
}
}
}
@@ -346,13 +350,8 @@ void WirelessDeviceTray::slotCheckActiveAccessPoint()
if (active_conn && deviceConnMan->deviceInformation().statusFlags == TDENetworkConnectionStatus::Connected) {
TDENetworkWiFiAPInfo * activeap = deviceConnMan->findAccessPointByBSSID(deviceConnMan->deviceInformation().wiFiInfo.activeAccessPointBSSID);
if ( activeap != d->activeAccessPoint) {
- if (!d->activeAccessPoint.isNull()) {
- disconnect( deviceConnMan, TQT_SIGNAL(accessPointStatusChanged(TDEMACAddress, TDENetworkAPEventType::TDENetworkAPEventType)), this, TQT_SLOT(apPropertyChanged(TDEMACAddress, TDENetworkAPEventType::TDENetworkAPEventType)));
- }
-
d->activeAccessPoint = activeap;
if ( d->activeAccessPoint ) {
- connect( deviceConnMan, TQT_SIGNAL(accessPointStatusChanged(TDEMACAddress, TDENetworkAPEventType::TDENetworkAPEventType)), this, TQT_SLOT(apPropertyChanged(TDEMACAddress, TDENetworkAPEventType::TDENetworkAPEventType)));
TDEWiFiConnection* wireless = dynamic_cast<TDEWiFiConnection*>(active_conn);
if (wireless) {
if (!(wireless->heardBSSIDs.contains(d->activeAccessPoint->BSSID))) {
@@ -401,11 +400,48 @@ void WirelessDeviceTray::slotAccessPointAdded(TDENetworkWiFiAPInfo* ap)
KNotifyClient::event( tray()->winId(), "knm-nm-network-found", i18n("TDENetworkManager New Wireless Network Found") );
}
-void WirelessDeviceTray::slotAccessPointRemoved(const TQString&)
+void WirelessDeviceTray::slotAccessPointRemoved(TDEMACAddress)
{
KNotifyClient::event( tray()->winId(), "knm-nm-network-gone", i18n("TDENetworkManager Wireless Network Disappeared") );
}
+void WirelessDeviceTray::tdeHardwareEventHandler(TDEHardwareEvent::TDEHardwareEvent event, TQString)
+{
+ if (event == TDEHardwareEvent::HardwareListModified) {
+ TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices();
+ TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
+ TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
+
+ // get notified when the device state changes
+ connect(deviceConnMan, TQT_SIGNAL(networkDeviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString)), this, TQT_SLOT(slotUpdateDeviceState(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString)));
+
+ // get notified of all AP changes
+ connect(deviceConnMan, TQT_SIGNAL(accessPointStatusChanged(TDEMACAddress, TDENetworkAPEventType::TDENetworkAPEventType)), this, TQT_SLOT(tdeAccessPointStatusChangedHandler(TDEMACAddress, TDENetworkAPEventType::TDENetworkAPEventType)));
+ }
+}
+
+void WirelessDeviceTray::tdeAccessPointStatusChangedHandler(TDEMACAddress BSSID, TDENetworkAPEventType::TDENetworkAPEventType event) {
+ TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices();
+ TDENetworkDevice* dev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
+ TDENetworkConnectionManager* deviceConnMan = dev->connectionManager();
+
+ if (event == TDENetworkAPEventType::Discovered) {
+ TDENetworkWiFiAPInfo* apinfo = deviceConnMan->findAccessPointByBSSID(BSSID);
+ slotAccessPointAdded(apinfo);
+ }
+ else if (event == TDENetworkAPEventType::Lost) {
+ slotAccessPointRemoved(BSSID);
+ }
+ else if (event == TDENetworkAPEventType::SignalStrengthChanged) {
+ if (deviceConnMan->deviceInformation().wiFiInfo.activeAccessPointBSSID == BSSID) {
+ apPropertyChanged(BSSID, event);
+ }
+ }
+ else if (event == TDENetworkAPEventType::AccessPointChanged) {
+ slotCheckActiveAccessPoint();
+ }
+}
+
WirelessDeviceTray::WirelessDeviceTray (TQString dev, KSystemTray * parent, const char * name)
: DeviceTrayComponent (dev, parent, name)
{
@@ -413,7 +449,6 @@ WirelessDeviceTray::WirelessDeviceTray (TQString dev, KSystemTray * parent, cons
d->dev = dev;
TDEHardwareDevices* hwdevices = KGlobal::hardwareDevices();
- TDENetworkDevice* hwdev = dynamic_cast<TDENetworkDevice*>(hwdevices->findByUniqueID(d->dev));
// we want other icons for wireless devices
setPixmapForState(TDENetworkConnectionStatus::Invalid, "wireless_off");
@@ -422,19 +457,10 @@ WirelessDeviceTray::WirelessDeviceTray (TQString dev, KSystemTray * parent, cons
setPixmapForState(TDENetworkConnectionStatus::Disconnected, "wireless");
setPixmapForState(TDENetworkConnectionStatus::Connected, "nm_signal_50");
- // TDENM FIXME
- // These TQt connections will need to be re-established whenever the device list changes, e.g. after a call to TDEHardwareDevices::queryHardwareInformation()
- // Therefore, this class should listen to hardwareEvent(TDEHardwareEvent::TDEHardwareEvent, TQString) and reload devices if TDEHardwareEvent::HardwareListModified is passed
-
- // get notified when the device state changes
- connect(hwdev, TQT_SIGNAL(StateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus)), this, TQT_SLOT(slotUpdateDeviceState(TDENetworkConnectionStatus::TDENetworkConnectionStatus)));
-
- // if the active access point changed but not the connection we roamed to a new AP
- connect(hwdev, TQT_SIGNAL(propertiesChanged()), this, TQT_SLOT(slotCheckActiveAccessPoint()));
-
- // get notified of all AP changes
- connect(hwdev, TQT_SIGNAL(accessPointAdded(TDENetworkWiFiAPInfo*)), this, TQT_SLOT(slotAccessPointAdded(TDENetworkWiFiAPInfo*)));
- connect(hwdev, TQT_SIGNAL(accessPointRemoved(const TQString&)), this, TQT_SLOT(slotAccessPointRemoved(const TQString&)));
+ // Listen for hardware change events
+ connect(hwdevices, TQT_SIGNAL(hardwareEvent(TDEHardwareEvent::TDEHardwareEvent, TQString)), this, TQT_SLOT(tdeHardwareEventHandler(TDEHardwareEvent::TDEHardwareEvent, TQString)));
+ // Trigger an initial hardware information update
+ tdeHardwareEventHandler(TDEHardwareEvent::HardwareListModified, TQString::null);
}
WirelessDeviceTray::~WirelessDeviceTray ()
diff --git a/tdenetworkmanager/src/tdenetman-wireless_device_tray.h b/tdenetworkmanager/src/tdenetman-wireless_device_tray.h
index becae51..c7eebb8 100644
--- a/tdenetworkmanager/src/tdenetman-wireless_device_tray.h
+++ b/tdenetworkmanager/src/tdenetman-wireless_device_tray.h
@@ -54,13 +54,18 @@ class WirelessDeviceTray : public DeviceTrayComponent
TQStringList getToolTipText();
public slots:
- void slotUpdateDeviceState(TDENetworkConnectionStatus::TDENetworkConnectionStatus);
+ void slotUpdateDeviceState(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString);
void slotCheckActiveAccessPoint();
void newConnection();
protected slots:
+
void apPropertyChanged(TDEMACAddress BSSID, TDENetworkAPEventType::TDENetworkAPEventType event);
void slotAccessPointAdded(TDENetworkWiFiAPInfo*);
- void slotAccessPointRemoved(const TQString&);
+ void slotAccessPointRemoved(TDEMACAddress);
+
+ private slots:
+ void tdeHardwareEventHandler(TDEHardwareEvent::TDEHardwareEvent, TQString);
+ void tdeAccessPointStatusChangedHandler(TDEMACAddress, TDENetworkAPEventType::TDENetworkAPEventType);
private:
void addWirelessNetworks(KPopupMenu* menu);