diff options
| author | Frank Reininghaus <[email protected]> | 2013-08-24 20:06:11 +0200 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2013-08-24 20:06:11 +0200 |
| commit | d7997f16a703990c1519bcf87806e44fb0ec73fa (patch) | |
| tree | 69e0609b10d30381e51ed6ebe120362a12d95552 | |
| parent | efdef7e40c3340e6275a72d315b3293ab6007a2b (diff) | |
Delay the deletion of the role editor as long as possible
This should prevent crashes that can be caused if the view is closed in
a nested event loop that is run from the role editor.
BUG: 322969
FIXED-IN: 4.11.1
REVIEW: 111988
| -rw-r--r-- | src/kitemviews/kstandarditemlistwidget.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp index 2a89004c6..483517ecc 100644 --- a/src/kitemviews/kstandarditemlistwidget.cpp +++ b/src/kitemviews/kstandarditemlistwidget.cpp @@ -204,8 +204,13 @@ KStandardItemListWidget::~KStandardItemListWidget() qDeleteAll(m_textInfo); m_textInfo.clear(); - delete m_roleEditor; - delete m_oldRoleEditor; + if (m_roleEditor) { + m_roleEditor->deleteLater(); + } + + if (m_oldRoleEditor) { + m_oldRoleEditor->deleteLater(); + } } void KStandardItemListWidget::setLayout(Layout layout) @@ -649,16 +654,15 @@ void KStandardItemListWidget::editedRoleChanged(const QByteArray& current, const this, SLOT(slotRoleEditingCanceled(QByteArray,QVariant))); disconnect(m_roleEditor, SIGNAL(roleEditingFinished(QByteArray,QVariant)), this, SLOT(slotRoleEditingFinished(QByteArray,QVariant))); + + if (m_oldRoleEditor) { + m_oldRoleEditor->deleteLater(); + } m_oldRoleEditor = m_roleEditor; m_roleEditor->hide(); m_roleEditor = 0; } return; - } else if (m_oldRoleEditor) { - // Delete the old editor before constructing the new one to - // prevent a memory leak. - m_oldRoleEditor->deleteLater(); - m_oldRoleEditor = 0; } Q_ASSERT(!m_roleEditor); @@ -1302,6 +1306,9 @@ void KStandardItemListWidget::closeRoleEditor() scene()->views()[0]->parentWidget()->setFocus(); } + if (m_oldRoleEditor) { + m_oldRoleEditor->deleteLater(); + } m_oldRoleEditor = m_roleEditor; m_roleEditor->hide(); m_roleEditor = 0; |
