From ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kded/kdedmodule.cpp | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 kded/kdedmodule.cpp (limited to 'kded/kdedmodule.cpp') diff --git a/kded/kdedmodule.cpp b/kded/kdedmodule.cpp new file mode 100644 index 000000000..8755c19da --- /dev/null +++ b/kded/kdedmodule.cpp @@ -0,0 +1,129 @@ +/* + This file is part of the KDE libraries + + Copyright (c) 2001 Waldo Bastian + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +#include + +#include "kded.h" +#include "kdedmodule.h" +#include "kconfigdata.h" + +typedef QMap > KDEDObjectMap; + +class KDEDModulePrivate +{ +public: + KDEDObjectMap *objMap; + int timeout; + QTimer timer; +}; + +KDEDModule::KDEDModule(const QCString &name) : QObject(), DCOPObject(name) +{ + d = new KDEDModulePrivate; + d->objMap = 0; + d->timeout = 0; + connect(&(d->timer), SIGNAL(timeout()), this, SLOT(idle())); +} + +KDEDModule::~KDEDModule() +{ + emit moduleDeleted(this); + delete d; d = 0; +} + +void KDEDModule::setIdleTimeout(int secs) +{ + d->timeout = secs*1000; +} + +void KDEDModule::resetIdle() +{ + d->timer.stop(); + if (!d->objMap || d->objMap->isEmpty()) + d->timer.start(d->timeout, true); +} + +void KDEDModule::insert(const QCString &app, const QCString &key, KShared *obj) +{ + if (!d->objMap) + d->objMap = new KDEDObjectMap; + + // appKey acts as a placeholder + KEntryKey appKey(app, 0); + d->objMap->replace(appKey, 0); + + KEntryKey indexKey(app, key); + + // Prevent deletion in case the same object is inserted again. + KSharedPtr _obj = obj; + + d->objMap->replace(indexKey, _obj); + resetIdle(); +} + +KShared * KDEDModule::find(const QCString &app, const QCString &key) +{ + if (!d->objMap) + return 0; + KEntryKey indexKey(app, key); + + KDEDObjectMap::Iterator it = d->objMap->find(indexKey); + if (it == d->objMap->end()) + return 0; + + return it.data().data(); +} + +void KDEDModule::remove(const QCString &app, const QCString &key) +{ + if (!d->objMap) + return; + KEntryKey indexKey(app, key); + + d->objMap->remove(indexKey); + resetIdle(); +} + +void KDEDModule::removeAll(const QCString &app) +{ + if (!d->objMap) + return; + + KEntryKey indexKey(app, 0); + // Search for placeholder. + + KDEDObjectMap::Iterator it = d->objMap->find(indexKey); + while (it != d->objMap->end()) + { + KDEDObjectMap::Iterator it2 = it++; + if (it2.key().mGroup != app) + break; // All keys for this app have been removed. + d->objMap->remove(it2); + } + resetIdle(); +} + +bool KDEDModule::isWindowRegistered(long windowId) +{ + return Kded::self()->isWindowRegistered(windowId); +} +#include "kdedmodule.moc" -- cgit v1.2.1