Yeah, finally! Fixed a crash that occurs when moving an extenderitem back to its source from an extender that was also the last one to have a spacer inserted because the same item was hovering over it. Phew, that was a mouthfull... With this fix we monitor if previousTargetExtender get's destoryed so we don't accidently try to remove it's spacer.

BUG: 171498


svn path=/trunk/KDE/kdelibs/; revision=895405
This commit is contained in:
Rob Scheepmaker 2008-12-10 17:29:40 +00:00
parent 4bca5e12ec
commit c51d9d7d9b
3 changed files with 18 additions and 0 deletions

View File

@ -625,8 +625,18 @@ void ExtenderItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
if (targetExtender != d->previousTargetExtender) {
if (d->previousTargetExtender) {
d->previousTargetExtender->itemHoverLeaveEvent(this);
d->previousTargetExtender->disconnect(this, SIGNAL(destroyed(QObject*)));
}
d->previousTargetExtender = targetExtender;
//monitor the current previousTargetExtender, so we don't accidently try to remove it's
//spacer after the extender has been destoryed.
if (targetExtender) {
connect(targetExtender, SIGNAL(destroyed(QObject*)),
this, SLOT(previousTargetExtenderDestroyed(QObject*)));
}
if (targetExtender) {
targetExtender->itemHoverEnterEvent(this);
}
@ -682,6 +692,7 @@ void ExtenderItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
if (d->dragStarted) {
d->dragStarted = false;
d->previousTargetExtender = 0;
//remove the toplevel view
if (d->toplevel) {
@ -1061,6 +1072,11 @@ void ExtenderItemPrivate::resizeContent(const QSizeF &newSize)
q->update();
}
void ExtenderItemPrivate::previousTargetExtenderDestroyed(QObject *o)
{
previousTargetExtender = 0;
}
uint ExtenderItemPrivate::s_maxExtenderItemId = 0;
} // namespace Plasma

View File

@ -248,6 +248,7 @@ class PLASMA_EXPORT ExtenderItem : public QGraphicsWidget
Q_PRIVATE_SLOT(d, void updateToolBox())
Q_PRIVATE_SLOT(d, void themeChanged())
Q_PRIVATE_SLOT(d, void sourceAppletRemoved())
Q_PRIVATE_SLOT(d, void previousTargetExtenderDestroyed(QObject*))
ExtenderItemPrivate * const d;

View File

@ -58,6 +58,7 @@ class ExtenderItemPrivate
void sourceAppletRemoved();
qreal iconSize();
void resizeContent(const QSizeF &newSize);
void previousTargetExtenderDestroyed(QObject *o);
ExtenderItem *q;