diff --git a/gui/SensorBrowser.h b/gui/SensorBrowser.h --- a/gui/SensorBrowser.h +++ b/gui/SensorBrowser.h @@ -28,6 +28,7 @@ #include #include #include +#include #include "ksortfilterproxymodel.h" class QMouseEvent; @@ -64,7 +65,6 @@ int makeSensor(HostInfo *hostInfo, int parentId, const QString &sensorName, const QString &name, const QString &sensorType); void removeSensor(HostInfo *hostInfo, int parentId, const QString &sensorName); void addHost(KSGRD::SensorAgent *sensorAgent, const QString &hostName); - void clear(); void disconnectHost(uint id); void disconnectHost(const HostInfo *hostInfo); void disconnectHost(const QString &hostname); @@ -187,7 +187,12 @@ class HostInfo { public: - HostInfo( int id, KSGRD::SensorAgent *agent, const QString &name) : mId(id), mSensorAgent(agent), mHostName(name) {} + HostInfo( int id, KSGRD::SensorAgent *agent, const QString &name, KSGRD::SensorClient* client) + : mId(id), mSensorAgent(agent), mHostName(name), mSensorClient(client) {} + + ~HostInfo() { + mSensorAgent->disconnectClient(mSensorClient); + } /** Returns the unique id of the host. @@ -208,6 +213,7 @@ int mId; KSGRD::SensorAgent* mSensorAgent; const QString mHostName; + KSGRD::SensorClient* mSensorClient; //< for disconnect call }; #endif diff --git a/gui/SensorBrowser.cpp b/gui/SensorBrowser.cpp --- a/gui/SensorBrowser.cpp +++ b/gui/SensorBrowser.cpp @@ -503,12 +503,6 @@ // TODO: not yet implemented. } -void SensorBrowserModel::clear() { - qDeleteAll(mHostInfoMap); - mHostInfoMap.clear(); - -} - void SensorBrowserModel::disconnectHost(uint id) { disconnectHost(mHostInfoMap.value(id)); @@ -580,7 +574,7 @@ void SensorBrowserModel::addHost(KSGRD::SensorAgent *sensorAgent, const QString &hostName) { beginInsertRows( QModelIndex() , mHostInfoMap.size(), mHostInfoMap.size() ); - HostInfo* hostInfo = new HostInfo( mIdCount, sensorAgent, hostName); + HostInfo* hostInfo = new HostInfo( mIdCount, sensorAgent, hostName, this); mHostInfoMap.insert(mIdCount, hostInfo); mTreeMap.insert(mIdCount, QList()); mHostSensorsMap.insert(mIdCount, QHash()); diff --git a/gui/ksysguard.h b/gui/ksysguard.h --- a/gui/ksysguard.h +++ b/gui/ksysguard.h @@ -45,6 +45,7 @@ public: TopLevel(); + ~TopLevel(); void saveProperties( KConfigGroup& ) override; void readProperties( const KConfigGroup& ) override; diff --git a/gui/ksysguard.cpp b/gui/ksysguard.cpp --- a/gui/ksysguard.cpp +++ b/gui/ksysguard.cpp @@ -148,6 +148,11 @@ retranslateUi(); } +TopLevel::~TopLevel() +{ + KSGRD::SensorMgr->disconnectClient(this); +} + void TopLevel::toggleShowMenuBar() { if (mShowMenuBarAction->isChecked()) {