add bool isUsed() const and remove checkUsage()

This commit is contained in:
Aaron Seigo 2011-06-03 16:04:50 +02:00
parent 69e9b84371
commit ecbca8f142
4 changed files with 28 additions and 18 deletions

View File

@ -287,7 +287,7 @@ void DataContainer::disconnectVisualization(QObject *visualization)
} }
d->relayObjects.erase(objIt); d->relayObjects.erase(objIt);
checkUsage(); d->checkUsage();
} }
void DataContainer::checkForUpdate() void DataContainer::checkForUpdate()
@ -328,13 +328,18 @@ void DataContainer::setNeedsUpdate(bool update)
d->cached = update; d->cached = update;
} }
void DataContainer::checkUsage() bool DataContainer::isUsed() const
{ {
if (d->relays.count() < 1 && return !d->relays.isEmpty() &&
receivers(SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data))) < 1) { receivers(SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data))) > 0;
}
void DataContainerPrivate::checkUsage()
{
if (!q->isUsed()) {
// DO NOT CALL ANYTHING AFTER THIS LINE AS IT MAY GET DELETED! // DO NOT CALL ANYTHING AFTER THIS LINE AS IT MAY GET DELETED!
kDebug() << objectName() << "is unused"; //kDebug() << q->objectName() << "is unused";
emit becameUnused(objectName()); emit q->becameUnused(q->objectName());
} }
} }

View File

@ -154,6 +154,11 @@ class PLASMA_EXPORT DataContainer : public QObject
*/ */
DataEngine* getDataEngine(); DataEngine* getDataEngine();
/**
* @return true if one or more visualizations is connected to this DataContainer
*/
bool isUsed() const;
public Q_SLOTS: public Q_SLOTS:
/** /**
* Disconnects an object from this DataContainer. * Disconnects an object from this DataContainer.
@ -234,17 +239,6 @@ class PLASMA_EXPORT DataContainer : public QObject
**/ **/
void setNeedsUpdate(bool update = true); void setNeedsUpdate(bool update = true);
protected Q_SLOTS:
/**
* Check if the DataContainer is still in use.
*
* If not the signal "becameUnused" will be emitted.
*
* Warning: The DataContainer may be invalid after calling this function, because a listener
* to becameUnused() may have deleted it.
**/
void checkUsage();
private: private:
friend class SignalRelay; friend class SignalRelay;
friend class DataContainerPrivate; friend class DataContainerPrivate;

View File

@ -39,6 +39,7 @@
#include "service.h" #include "service.h"
#include "scripting/dataenginescript.h" #include "scripting/dataenginescript.h"
#include "private/datacontainer_p.h"
#include "private/dataengineservice_p.h" #include "private/dataengineservice_p.h"
#include "private/remotedataengine_p.h" #include "private/remotedataengine_p.h"
#include "private/service_p.h" #include "private/service_p.h"
@ -146,7 +147,7 @@ DataEngine::Data DataEngine::query(const QString &source) const
} }
DataEngine::Data data = s->data(); DataEngine::Data data = s->data();
s->checkUsage(); s->d->checkUsage();
return data; return data;
} }

View File

@ -46,6 +46,16 @@ public:
{ {
} }
/**
* Check if the DataContainer is still in use.
*
* If not the signal "becameUnused" will be emitted.
*
* Warning: The DataContainer may be invalid after calling this function, because a listener
* to becameUnused() may have deleted it.
**/
void checkUsage();
SignalRelay *signalRelay(const DataContainer *dc, QObject *visualization, SignalRelay *signalRelay(const DataContainer *dc, QObject *visualization,
uint pollingInterval, Plasma::IntervalAlignment align, uint pollingInterval, Plasma::IntervalAlignment align,
bool immediateUpdate); bool immediateUpdate);