mirror of
https://invent.kde.org/system/dolphin
synced 2024-11-05 18:47:12 +00:00
Do not crash when finishing inline renaming in unusual ways
The crash was caused by a null pointer dereference when, e.g., minimizing Dolphin. The root cause was that KStandardItemListWidget::closeRoleEditor() was called twice: once when the role editor loses focus, and once again when the window is resized. After m_roleEditor was set to 0, the second call dereferenced this null pointer. I think the best solution is to disconnect from the role editor's signals when the editor is not needed any more by the KStandardItemListWidget. BUG: 304524 FIXED-IN: 4.9.1
This commit is contained in:
parent
168d0511c7
commit
a9c2bdc3b5
1 changed files with 10 additions and 0 deletions
|
@ -594,6 +594,11 @@ void KStandardItemListWidget::editedRoleChanged(const QByteArray& current, const
|
||||||
if (current.isEmpty() || !parent || current != "text") {
|
if (current.isEmpty() || !parent || current != "text") {
|
||||||
if (m_roleEditor) {
|
if (m_roleEditor) {
|
||||||
emit roleEditingCanceled(index(), current, data().value(current));
|
emit roleEditingCanceled(index(), current, data().value(current));
|
||||||
|
|
||||||
|
disconnect(m_roleEditor, SIGNAL(roleEditingCanceled(int,QByteArray,QVariant)),
|
||||||
|
this, SLOT(slotRoleEditingCanceled(int,QByteArray,QVariant)));
|
||||||
|
disconnect(m_roleEditor, SIGNAL(roleEditingFinished(int,QByteArray,QVariant)),
|
||||||
|
this, SLOT(slotRoleEditingFinished(int,QByteArray,QVariant)));
|
||||||
m_roleEditor->deleteLater();
|
m_roleEditor->deleteLater();
|
||||||
m_roleEditor = 0;
|
m_roleEditor = 0;
|
||||||
}
|
}
|
||||||
|
@ -1253,6 +1258,11 @@ void KStandardItemListWidget::closeRoleEditor()
|
||||||
// to transfer the keyboard focus back to the KItemListContainer.
|
// to transfer the keyboard focus back to the KItemListContainer.
|
||||||
scene()->views()[0]->parentWidget()->setFocus();
|
scene()->views()[0]->parentWidget()->setFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
disconnect(m_roleEditor, SIGNAL(roleEditingCanceled(int,QByteArray,QVariant)),
|
||||||
|
this, SLOT(slotRoleEditingCanceled(int,QByteArray,QVariant)));
|
||||||
|
disconnect(m_roleEditor, SIGNAL(roleEditingFinished(int,QByteArray,QVariant)),
|
||||||
|
this, SLOT(slotRoleEditingFinished(int,QByteArray,QVariant)));
|
||||||
m_roleEditor->deleteLater();
|
m_roleEditor->deleteLater();
|
||||||
m_roleEditor = 0;
|
m_roleEditor = 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue