From c51d9d7d9bb5956a1c924917aab5aa5ee9826340 Mon Sep 17 00:00:00 2001 From: Rob Scheepmaker Date: Wed, 10 Dec 2008 17:29:40 +0000 Subject: [PATCH] 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 --- extenderitem.cpp | 16 ++++++++++++++++ extenderitem.h | 1 + private/extenderitem_p.h | 1 + 3 files changed, 18 insertions(+) diff --git a/extenderitem.cpp b/extenderitem.cpp index 002a0e80e..bda73a6e2 100644 --- a/extenderitem.cpp +++ b/extenderitem.cpp @@ -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 diff --git a/extenderitem.h b/extenderitem.h index 046c280f0..6d9718441 100644 --- a/extenderitem.h +++ b/extenderitem.h @@ -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; diff --git a/private/extenderitem_p.h b/private/extenderitem_p.h index 36ccddd18..e048b40f5 100644 --- a/private/extenderitem_p.h +++ b/private/extenderitem_p.h @@ -58,6 +58,7 @@ class ExtenderItemPrivate void sourceAppletRemoved(); qreal iconSize(); void resizeContent(const QSizeF &newSize); + void previousTargetExtenderDestroyed(QObject *o); ExtenderItem *q;