┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kstandarditemlistwidget.cpp
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2012-12-07 22:31:24 +0100
committerFrank Reininghaus <[email protected]>2012-12-07 22:31:24 +0100
commitb2a580c2b9b85a5a5b91e2eb3f218cea3b7b98c3 (patch)
tree322ef1d66572d86ce2dcbcab859535d64cd3fec4 /src/kitemviews/kstandarditemlistwidget.cpp
parent46f2c2ef3c90ccb5741455d488cec578ff981ddf (diff)
parente97c050157890dd1adf14d98bbed4aa86af98354 (diff)
Merge remote-tracking branch 'origin/KDE/4.9'
Diffstat (limited to 'src/kitemviews/kstandarditemlistwidget.cpp')
-rw-r--r--src/kitemviews/kstandarditemlistwidget.cpp31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
index 4d1031943..e1f0f9df1 100644
--- a/src/kitemviews/kstandarditemlistwidget.cpp
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
@@ -194,7 +194,8 @@ KStandardItemListWidget::KStandardItemListWidget(KItemListWidgetInformant* infor
m_additionalInfoTextColor(),
m_overlay(),
m_rating(),
- m_roleEditor(0)
+ m_roleEditor(0),
+ m_oldRoleEditor(0)
{
}
@@ -204,6 +205,7 @@ KStandardItemListWidget::~KStandardItemListWidget()
m_textInfo.clear();
delete m_roleEditor;
+ delete m_oldRoleEditor;
}
void KStandardItemListWidget::setLayout(Layout layout)
@@ -610,13 +612,16 @@ 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)));
- // 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_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);
@@ -1268,21 +1273,19 @@ QRectF KStandardItemListWidget::roleEditingRect(const QByteArray& role) const
void KStandardItemListWidget::closeRoleEditor()
{
+ 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)));
+
if (m_roleEditor->hasFocus()) {
// If the editing was not ended by a FocusOut event, we have
// to transfer the keyboard focus back to the KItemListContainer.
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)));
-
- // 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_oldRoleEditor = m_roleEditor;
+ m_roleEditor->hide();
m_roleEditor = 0;
}