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:
parent
4bca5e12ec
commit
c51d9d7d9b
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -58,6 +58,7 @@ class ExtenderItemPrivate
|
||||
void sourceAppletRemoved();
|
||||
qreal iconSize();
|
||||
void resizeContent(const QSizeF &newSize);
|
||||
void previousTargetExtenderDestroyed(QObject *o);
|
||||
|
||||
ExtenderItem *q;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user