From: Peter Penz Date: Sat, 9 Jun 2012 11:01:19 +0000 (+0200) Subject: Inline renaming: ESC should cancel the renaming X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/57cde56158f6dd3bf198fb6ae1fca51e96038919 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 --- 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(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 @@ -64,10 +64,17 @@ 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