]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kstandarditemlistwidget.cpp
Prevent crashes caused by nested event loops run when renaming inline
[dolphin.git] / src / kitemviews / kstandarditemlistwidget.cpp
index bdc2859c0c1361cb97ccfa1496c7809b6f32f1e1..f92cab50f1be2274b55cba109b44608c2fcad55e 100644 (file)
@@ -609,7 +609,10 @@ void KStandardItemListWidget::editedRoleChanged(const QByteArray& current, const
                        this, SLOT(slotRoleEditingCanceled(int,QByteArray,QVariant)));
             disconnect(m_roleEditor, SIGNAL(roleEditingFinished(int,QByteArray,QVariant)),
                        this, SLOT(slotRoleEditingFinished(int,QByteArray,QVariant)));
-            m_roleEditor->deleteLater();
+            // Do not delete the role editor using deleteLater() because we might be
+            // inside a nested event loop which has been started by one of its event
+            // handlers (contextMenuEvent() or drag&drop inside mouseMoveEvent()).
+            m_roleEditor->deleteWhenIdle();
             m_roleEditor = 0;
         }
         return;
@@ -1274,7 +1277,11 @@ void KStandardItemListWidget::closeRoleEditor()
                this, SLOT(slotRoleEditingCanceled(int,QByteArray,QVariant)));
     disconnect(m_roleEditor, SIGNAL(roleEditingFinished(int,QByteArray,QVariant)),
                this, SLOT(slotRoleEditingFinished(int,QByteArray,QVariant)));
-    m_roleEditor->deleteLater();
+
+    // Do not delete the role editor using deleteLater() because we might be
+    // inside a nested event loop which has been started by one of its event
+    // handlers (contextMenuEvent() or drag&drop inside mouseMoveEvent()).
+    m_roleEditor->deleteWhenIdle();
     m_roleEditor = 0;
 }