┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2012-06-09 13:01:19 +0200
committerPeter Penz <[email protected]>2012-06-09 13:12:23 +0200
commit57cde56158f6dd3bf198fb6ae1fca51e96038919 (patch)
tree8c5098eb84519a5a9fb5887d7c1b2dfc1fde15b4
parent1ddd9c4032870f97fd2e578b246a923cce72088e (diff)
Inline renaming: ESC should cancel the renaming
When emitting the roleEditingCanceled-signal it must be prevented that a roleEditingFinished-signal is emitted because of some action taken in the receiver-slot. BUG: 301480 FIXED-IN: 4.9.0
-rw-r--r--src/kitemviews/kstandarditemlistwidget.cpp8
-rw-r--r--src/kitemviews/private/kitemlistroleeditor.cpp22
-rw-r--r--src/kitemviews/private/kitemlistroleeditor.h9
3 files changed, 30 insertions, 9 deletions
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
index 69f818c4e..d87ae9497 100644
--- a/src/kitemviews/kstandarditemlistwidget.cpp
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
@@ -685,8 +685,8 @@ void KStandardItemListWidget::slotCutItemsChanged()
}
void KStandardItemListWidget::slotRoleEditingCanceled(int index,
- const QByteArray& role,
- const QVariant& value)
+ const QByteArray& role,
+ const QVariant& value)
{
closeRoleEditor();
emit roleEditingCanceled(index, role, value);
@@ -694,8 +694,8 @@ void KStandardItemListWidget::slotRoleEditingCanceled(int index,
}
void KStandardItemListWidget::slotRoleEditingFinished(int index,
- const QByteArray& role,
- const QVariant& value)
+ const QByteArray& role,
+ const QVariant& value)
{
closeRoleEditor();
emit roleEditingFinished(index, role, value);
diff --git a/src/kitemviews/private/kitemlistroleeditor.cpp b/src/kitemviews/private/kitemlistroleeditor.cpp
index 594b05338..1e4b5fd4e 100644
--- a/src/kitemviews/private/kitemlistroleeditor.cpp
+++ b/src/kitemviews/private/kitemlistroleeditor.cpp
@@ -25,7 +25,8 @@
KItemListRoleEditor::KItemListRoleEditor(QWidget *parent) :
KTextEdit(parent),
m_index(0),
- m_role()
+ m_role(),
+ m_blockFinishedSignal(false)
{
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -66,7 +67,7 @@ QByteArray KItemListRoleEditor::role() const
bool KItemListRoleEditor::eventFilter(QObject* watched, QEvent* event)
{
if (watched == parentWidget() && event->type() == QEvent::Resize) {
- emit roleEditingFinished(m_index, m_role, toPlainText());
+ emitRoleEditingFinished();
}
return KTextEdit::eventFilter(watched, event);
@@ -77,7 +78,7 @@ bool KItemListRoleEditor::event(QEvent* event)
if (event->type() == QEvent::FocusOut) {
QFocusEvent* focusEvent = static_cast<QFocusEvent*>(event);
if (focusEvent->reason() != Qt::PopupFocusReason) {
- emit roleEditingFinished(m_index, m_role, toPlainText());
+ emitRoleEditingFinished();
}
}
return KTextEdit::event(event);
@@ -87,12 +88,18 @@ void KItemListRoleEditor::keyPressEvent(QKeyEvent* event)
{
switch (event->key()) {
case Qt::Key_Escape:
+ // Emitting the signal roleEditingCanceled might result
+ // in losing the focus. Per default losing the focus emits
+ // a roleEditingFinished signal (see KItemListRoleEditor::event),
+ // which is not wanted in this case.
+ m_blockFinishedSignal = true;
emit roleEditingCanceled(m_index, m_role, toPlainText());
+ m_blockFinishedSignal = false;
event->accept();
return;
case Qt::Key_Enter:
case Qt::Key_Return:
- emit roleEditingFinished(m_index, m_role, toPlainText());
+ emitRoleEditingFinished();
event->accept();
return;
default:
@@ -127,4 +134,11 @@ void KItemListRoleEditor::autoAdjustSize()
}
}
+void KItemListRoleEditor::emitRoleEditingFinished()
+{
+ if (!m_blockFinishedSignal) {
+ emit roleEditingFinished(m_index, m_role, toPlainText());
+ }
+}
+
#include "kitemlistroleeditor.moc"
diff --git a/src/kitemviews/private/kitemlistroleeditor.h b/src/kitemviews/private/kitemlistroleeditor.h
index 652bd904c..aa2c97754 100644
--- a/src/kitemviews/private/kitemlistroleeditor.h
+++ b/src/kitemviews/private/kitemlistroleeditor.h
@@ -65,9 +65,16 @@ private slots:
void autoAdjustSize();
private:
+ /**
+ * Emits the signal roleEditingFinished if m_blockFinishedSignal
+ * is false.
+ */
+ void emitRoleEditingFinished();
+
+private:
int m_index;
QByteArray m_role;
-
+ bool m_blockFinishedSignal;
};
#endif