diff options
| author | Peter Penz <[email protected]> | 2012-06-09 13:01:19 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2012-06-09 13:12:23 +0200 |
| commit | 57cde56158f6dd3bf198fb6ae1fca51e96038919 (patch) | |
| tree | 8c5098eb84519a5a9fb5887d7c1b2dfc1fde15b4 | |
| parent | 1ddd9c4032870f97fd2e578b246a923cce72088e (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.cpp | 8 | ||||
| -rw-r--r-- | src/kitemviews/private/kitemlistroleeditor.cpp | 22 | ||||
| -rw-r--r-- | src/kitemviews/private/kitemlistroleeditor.h | 9 |
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 |
