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 (targetExtender != d->previousTargetExtender) {
|
||||||
if (d->previousTargetExtender) {
|
if (d->previousTargetExtender) {
|
||||||
d->previousTargetExtender->itemHoverLeaveEvent(this);
|
d->previousTargetExtender->itemHoverLeaveEvent(this);
|
||||||
|
d->previousTargetExtender->disconnect(this, SIGNAL(destroyed(QObject*)));
|
||||||
}
|
}
|
||||||
|
|
||||||
d->previousTargetExtender = targetExtender;
|
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) {
|
if (targetExtender) {
|
||||||
targetExtender->itemHoverEnterEvent(this);
|
targetExtender->itemHoverEnterEvent(this);
|
||||||
}
|
}
|
||||||
@ -682,6 +692,7 @@ void ExtenderItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
|||||||
|
|
||||||
if (d->dragStarted) {
|
if (d->dragStarted) {
|
||||||
d->dragStarted = false;
|
d->dragStarted = false;
|
||||||
|
d->previousTargetExtender = 0;
|
||||||
|
|
||||||
//remove the toplevel view
|
//remove the toplevel view
|
||||||
if (d->toplevel) {
|
if (d->toplevel) {
|
||||||
@ -1061,6 +1072,11 @@ void ExtenderItemPrivate::resizeContent(const QSizeF &newSize)
|
|||||||
q->update();
|
q->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ExtenderItemPrivate::previousTargetExtenderDestroyed(QObject *o)
|
||||||
|
{
|
||||||
|
previousTargetExtender = 0;
|
||||||
|
}
|
||||||
|
|
||||||
uint ExtenderItemPrivate::s_maxExtenderItemId = 0;
|
uint ExtenderItemPrivate::s_maxExtenderItemId = 0;
|
||||||
|
|
||||||
} // namespace Plasma
|
} // namespace Plasma
|
||||||
|
@ -248,6 +248,7 @@ class PLASMA_EXPORT ExtenderItem : public QGraphicsWidget
|
|||||||
Q_PRIVATE_SLOT(d, void updateToolBox())
|
Q_PRIVATE_SLOT(d, void updateToolBox())
|
||||||
Q_PRIVATE_SLOT(d, void themeChanged())
|
Q_PRIVATE_SLOT(d, void themeChanged())
|
||||||
Q_PRIVATE_SLOT(d, void sourceAppletRemoved())
|
Q_PRIVATE_SLOT(d, void sourceAppletRemoved())
|
||||||
|
Q_PRIVATE_SLOT(d, void previousTargetExtenderDestroyed(QObject*))
|
||||||
|
|
||||||
ExtenderItemPrivate * const d;
|
ExtenderItemPrivate * const d;
|
||||||
|
|
||||||
|
@ -58,6 +58,7 @@ class ExtenderItemPrivate
|
|||||||
void sourceAppletRemoved();
|
void sourceAppletRemoved();
|
||||||
qreal iconSize();
|
qreal iconSize();
|
||||||
void resizeContent(const QSizeF &newSize);
|
void resizeContent(const QSizeF &newSize);
|
||||||
|
void previousTargetExtenderDestroyed(QObject *o);
|
||||||
|
|
||||||
ExtenderItem *q;
|
ExtenderItem *q;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user