abstract the bit of data engine management code out into a small class that the private classes can then subclass, and add dataEngine(const QString &) to Wallpaper

svn path=/trunk/KDE/kdelibs/; revision=947636
This commit is contained in:
Aaron J. Seigo 2009-03-31 23:51:52 +00:00
parent d0e40170fa
commit 89b70374c3
5 changed files with 99 additions and 18 deletions

View File

@ -574,17 +574,7 @@ ConfigLoader *Applet::configScheme() const
DataEngine *Applet::dataEngine(const QString &name) const
{
int index = d->loadedEngines.indexOf(name);
if (index != -1) {
return DataEngineManager::self()->engine(name);
}
DataEngine *engine = DataEngineManager::self()->loadEngine(name);
if (engine->isValid()) {
d->loadedEngines.append(name);
}
return engine;
return d->dataEngine(name);
}
const Package *Applet::package() const
@ -2035,10 +2025,6 @@ AppletPrivate::~AppletPrivate()
activationAction->forgetGlobalShortcut();
}
foreach (const QString &engine, loadedEngines) {
DataEngineManager::self()->unloadEngine(engine);
}
if (extender) {
delete extender;
extender = 0;

View File

@ -26,6 +26,8 @@
#include <kactioncollection.h>
#include "plasma/private/dataengineconsumer_p.h"
class KKeySequenceWidget;
namespace Plasma
@ -51,7 +53,7 @@ protected Q_SLOTS:
void overlayAnimationComplete();
};
class AppletPrivate
class AppletPrivate : public DataEngineConsumer
{
public:
AppletPrivate(KService::Ptr service, int uniqueID, Applet *applet);
@ -107,7 +109,6 @@ public:
AppletOverlayWidget *messageOverlay;
Plasma::BusyWidget *busyWidget;
QSet<QGraphicsItem*> registeredAsDragHandle;
QStringList loadedEngines;
Plasma::FrameSvg *background;
AppletScript *script;
QVariantList args;

View File

@ -0,0 +1,65 @@
/*
* Copyright 2005 by Aaron Seigo <aseigo@kde.org>
* Copyright 2007 by Riccardo Iaconelli <riccardo@kde.org>
* Copyright 2008 by Ménard Alexis <darktears31@gmail.com>
*
* This program 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, or
* (at your option) any later version.
*
* This program 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 General Public License for more details
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef PLASMA_DATAENGINECONSUMER_H
#define PLASMA_DATAENGINECONSUMER_H
#include <QtCore/QStringList>
#include "plasma/dataenginemanager.h"
namespace Plasma
{
class DataEngineConsumer
{
public:
~DataEngineConsumer()
{
foreach (const QString &engine, m_loadedEngines) {
DataEngineManager::self()->unloadEngine(engine);
}
}
DataEngine *dataEngine(const QString &name)
{
int index = m_loadedEngines.indexOf(name);
if (index != -1) {
return DataEngineManager::self()->engine(name);
}
DataEngine *engine = DataEngineManager::self()->loadEngine(name);
if (engine->isValid()) {
m_loadedEngines.append(name);
}
return engine;
}
private:
QStringList m_loadedEngines;
};
} // namespace Plasma
#endif

View File

@ -25,10 +25,12 @@
#include <version.h>
#include "plasma/private/dataengineconsumer_p.h"
namespace Plasma
{
class WallpaperPrivate
class WallpaperPrivate : public DataEngineConsumer
{
public:
WallpaperPrivate(KService::Ptr service, Wallpaper *wallpaper) :
@ -109,6 +111,7 @@ Wallpaper *Wallpaper::load(const QString &wallpaperName, const QVariantList &arg
if (!wallpaper) {
kDebug() << "Couldn't load wallpaper \"" << wallpaperName << "\"! reason given: " << error;
}
return wallpaper;
}
@ -237,6 +240,11 @@ void Wallpaper::wheelEvent(QGraphicsSceneWheelEvent *event)
Q_UNUSED(event)
}
DataEngine *Wallpaper::dataEngine(const QString &name) const
{
return d->dataEngine(name);
}
} // Plasma namespace
#include "wallpaper.moc"

View File

@ -28,6 +28,8 @@
namespace Plasma
{
class DataEngine;
class WallpaperPrivate;
/**
@ -204,6 +206,25 @@ class PLASMA_EXPORT Wallpaper : public QObject
*/
virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
/**
* Loads the given DataEngine
*
* Tries to load the data engine given by @p name. Each engine is
* only loaded once, and that instance is re-used on all subsequent
* requests.
*
* If the data engine was not found, an invalid data engine is returned
* (see DataEngine::isValid()).
*
* Note that you should <em>not</em> delete the returned engine.
*
* @param name Name of the data engine to load
* @return pointer to the data engine if it was loaded,
* or an invalid data engine if the requested engine
* could not be loaded
*/
Q_INVOKABLE DataEngine *dataEngine(const QString &name) const;
Q_SIGNALS:
/**
* This signal indicates that wallpaper needs to be repainted.