]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Inline renaming: Improve focus handling
authorPeter Penz <peter.penz19@gmail.com>
Fri, 8 Jun 2012 20:43:43 +0000 (22:43 +0200)
committerPeter Penz <peter.penz19@gmail.com>
Fri, 8 Jun 2012 20:51:01 +0000 (22:51 +0200)
Fix issue that cancelling the inline-renaming by clicking
on the other split view applies the wrong focus.

Thanks to Frank Reininghaus for the initial patch and noticing
this issue.

CCBUG: 301252

src/kitemviews/kstandarditemlistwidget.cpp
src/kitemviews/kstandarditemlistwidget.h
src/views/dolphinview.cpp
src/views/dolphinview.h

index 4a0ad07f949ad494c4affe4f8d697c4ecf851d5a..69f818c4e87bee0a71b3701488ce19989580f8a1 100644 (file)
@@ -688,8 +688,7 @@ void KStandardItemListWidget::slotRoleEditingCanceled(int index,
                                                   const QByteArray& role,
                                                   const QVariant& value)
 {
-    m_roleEditor->deleteLater();
-    m_roleEditor = 0;
+    closeRoleEditor();
     emit roleEditingCanceled(index, role, value);
     setEditedRole(QByteArray());
 }
@@ -698,8 +697,7 @@ void KStandardItemListWidget::slotRoleEditingFinished(int index,
                                                   const QByteArray& role,
                                                   const QVariant& value)
 {
-    m_roleEditor->deleteLater();
-    m_roleEditor = 0;
+    closeRoleEditor();
     emit roleEditingFinished(index, role, value);
     setEditedRole(QByteArray());
 }
@@ -1241,6 +1239,17 @@ QRectF KStandardItemListWidget::roleEditingRect(const QByteArray& role) const
     return rect;
 }
 
+void KStandardItemListWidget::closeRoleEditor()
+{
+    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();
+    }
+    m_roleEditor->deleteLater();
+    m_roleEditor = 0;
+}
+
 QPixmap KStandardItemListWidget::pixmapForIcon(const QString& name, int size)
 {
     const KIcon icon(name);
index 76b0d143ca9734756ee648ac99f5afd64c7ea5db..222d7b5f491b271482281fd1d01a25d45532aab7 100644 (file)
@@ -165,6 +165,12 @@ private:
 
     QRectF roleEditingRect(const QByteArray &role) const;
 
+    /**
+     * Closes the role editor and returns the focus back
+     * to the KItemListContainer.
+     */
+    void closeRoleEditor();
+
     static QPixmap pixmapForIcon(const QString& name, int size);
 
     /**
index 53f9b45bf8f148f67e8a322ea7b7baefb684a6c2..e06aad6f26899f8116ee657923386336aa5e66d5 100644 (file)
@@ -168,8 +168,6 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
             this, SLOT(slotSortRoleChangedByHeader(QByteArray,QByteArray)));
     connect(m_view, SIGNAL(visibleRolesChanged(QList<QByteArray>,QList<QByteArray>)),
             this, SLOT(slotVisibleRolesChangedByHeader(QList<QByteArray>,QList<QByteArray>)));
-    connect(m_view, SIGNAL(roleEditingCanceled(int,QByteArray,QVariant)),
-            this, SLOT(slotRoleEditingCanceled(int,QByteArray,QVariant)));
     connect(m_view, SIGNAL(roleEditingFinished(int,QByteArray,QVariant)),
             this, SLOT(slotRoleEditingFinished(int,QByteArray,QVariant)));
     connect(m_view->header(), SIGNAL(columnWidthChanged(QByteArray,qreal,qreal)),
@@ -1320,14 +1318,6 @@ void DolphinView::slotVisibleRolesChangedByHeader(const QList<QByteArray>& curre
     emit visibleRolesChanged(m_visibleRoles, previousVisibleRoles);
 }
 
-void DolphinView::slotRoleEditingCanceled(int index, const QByteArray& role, const QVariant& value)
-{
-    Q_UNUSED(index);
-    Q_UNUSED(role);
-    Q_UNUSED(value);
-    setFocus();
-}
-
 void DolphinView::slotRoleEditingFinished(int index, const QByteArray& role, const QVariant& value)
 {
     if (role == "text") {
@@ -1343,7 +1333,6 @@ void DolphinView::slotRoleEditingFinished(int index, const QByteArray& role, con
             KonqOperations::rename(this, oldUrl, newName);
         }
     }
-    setFocus();
 }
 
 void DolphinView::loadDirectory(const KUrl& url, bool reload)
index f4b00823655ebb2250914f95c8680e7a74b5e4b3..b2c4121a0f024ea8dab2a421312117fae41e64fb 100644 (file)
@@ -628,7 +628,6 @@ private slots:
     void slotVisibleRolesChangedByHeader(const QList<QByteArray>& current,
                                          const QList<QByteArray>& previous);
 
-    void slotRoleEditingCanceled(int index, const QByteArray& role, const QVariant& value);
     void slotRoleEditingFinished(int index, const QByteArray& role, const QVariant& value);
 
     /**