* simplify some of the code

* put warning comments about using config() prematurely
* improve addApplet(Applet *) by having it remove the applet from the other containment, reset the config, deal with scene event filters....
* be less noisy with kdebugamania

svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=742103
This commit is contained in:
Aaron J. Seigo 2007-11-27 06:08:44 +00:00
parent 37498d2541
commit 51e828917e

View File

@ -84,6 +84,8 @@ Containment::Containment(QGraphicsItem* parent,
: Applet(parent, serviceId, containmentId), : Applet(parent, serviceId, containmentId),
d(new Private) d(new Private)
{ {
// WARNING: do not access config() OR globalConfig() in this method!
// that requires a scene, which is not available at this point
setDrawStandardBackground(false); setDrawStandardBackground(false);
} }
@ -91,6 +93,8 @@ Containment::Containment(QObject* parent, const QVariantList& args)
: Applet(parent, args), : Applet(parent, args),
d(new Private) d(new Private)
{ {
// WARNING: do not access config() OR globalConfig() in this method!
// that requires a scene, which is not available at this point
setDrawStandardBackground(false); setDrawStandardBackground(false);
} }
@ -394,10 +398,22 @@ Applet* Containment::addApplet(const QString& name, const QVariantList& args, ui
return applet; return applet;
} }
void Containment::addApplet(Applet * applet) void Containment::addApplet(Applet *applet)
{ {
Containment *currentContainment = applet->containment();
if (currentContainment && currentContainment != this) {
applet->removeSceneEventFilter(currentContainment);
applet->resetConfigurationObject();
currentContainment->d->applets.removeAll(applet);
}
d->applets << applet; d->applets << applet;
addChild(applet); addChild(applet);
if (currentContainment) {
applet->installSceneEventFilter(this);
}
connect(applet, SIGNAL(destroyed(QObject*)), connect(applet, SIGNAL(destroyed(QObject*)),
this, SLOT(appletDestroyed(QObject*))); this, SLOT(appletDestroyed(QObject*)));
} }
@ -409,11 +425,7 @@ void Containment::appletDestroyed(QObject* object)
// try and do anything with it, we just need the value of the pointer // try and do anything with it, we just need the value of the pointer
// so this unsafe looking code is actually just fine. // so this unsafe looking code is actually just fine.
Applet* applet = static_cast<Plasma::Applet*>(object); Applet* applet = static_cast<Plasma::Applet*>(object);
int index = d->applets.indexOf(applet); d->applets.removeAll(applet);
if (index > -1) {
d->applets.removeAt(index);
}
} }
void Containment::appletAnimationComplete(QGraphicsItem *item, Plasma::Phase::Animation anim) void Containment::appletAnimationComplete(QGraphicsItem *item, Plasma::Phase::Animation anim)
@ -428,6 +440,8 @@ void Containment::appletAnimationComplete(QGraphicsItem *item, Plasma::Phase::An
if (applet) { if (applet) {
applet->destroy(); applet->destroy();
} }
break;
} }
parent = parent->parentItem(); parent = parent->parentItem();
@ -608,7 +622,7 @@ bool Containment::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
//QEvent::GraphicsSceneHoverEnter //QEvent::GraphicsSceneHoverEnter
// Otherwise we're watching something we shouldn't be... // Otherwise we're watching something we shouldn't be...
kDebug() << "got sceneEvent"; //kDebug() << "got sceneEvent";
Q_ASSERT(applet!=0); Q_ASSERT(applet!=0);
if (!d->applets.contains(applet)) { if (!d->applets.contains(applet)) {
return false; return false;
@ -616,9 +630,9 @@ bool Containment::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
switch (event->type()) { switch (event->type()) {
case QEvent::GraphicsSceneHoverEnter: case QEvent::GraphicsSceneHoverEnter:
kDebug() << "got hoverenterEvent" << d->immutable << " " << applet->isImmutable(); //kDebug() << "got hoverenterEvent" << d->immutable << " " << applet->isImmutable();
if (!d->immutable && !applet->isImmutable() && !d->handles.contains(applet)) { if (!d->immutable && !applet->isImmutable() && !d->handles.contains(applet)) {
kDebug() << "generated applet handle"; //kDebug() << "generated applet handle";
AppletHandle *handle = new AppletHandle(this, applet); AppletHandle *handle = new AppletHandle(this, applet);
d->handles[applet] = handle; d->handles[applet] = handle;
connect(handle, SIGNAL(disappearDone(AppletHandle*)), connect(handle, SIGNAL(disappearDone(AppletHandle*)),