]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Inline renaming: ESC should cancel the renaming
authorPeter Penz <peter.penz19@gmail.com>
Sat, 9 Jun 2012 11:01:19 +0000 (13:01 +0200)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 9 Jun 2012 11:12:23 +0000 (13:12 +0200)
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

src/kitemviews/kstandarditemlistwidget.cpp
src/kitemviews/private/kitemlistroleeditor.cpp
src/kitemviews/private/kitemlistroleeditor.h

index 69f818c4e87bee0a71b3701488ce19989580f8a1..d87ae949776ca2257017fedb522d28252ce11aef 100644 (file)
@@ -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);
index 594b05338ffa5dfe1ba478666694578a855c455e..1e4b5fd4e0988c7ce38160124c5d9392cb94f65b 100644 (file)
@@ -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"
index 652bd904c32dd4265ac1f4a38a4ec91ad85ca0ed..aa2c977541f0841132f708027da575632b425626 100644 (file)
@@ -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