]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Merge remote-tracking branch 'origin/KDE/4.11'
authorFrank Reininghaus <frank78ac@googlemail.com>
Sat, 24 Aug 2013 18:27:30 +0000 (20:27 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Sat, 24 Aug 2013 18:27:30 +0000 (20:27 +0200)
src/kitemviews/kfileitemmodel.cpp
src/kitemviews/kstandarditemlistwidget.cpp

index eb7b1646135b822ea0b26cf7c61aad269ab77dac..37a30519af74277a985d977cd2acbc0eb8bb3618 100644 (file)
@@ -972,7 +972,7 @@ void KFileItemModel::slotRefreshItems(const QList<QPair<KFileItem, KFileItem> >&
     emit itemsChanged(itemRangeList, changedRoles);
 
     if (changedRoles.contains(sortRole())) {
-        resortAllItems();
+        m_resortAllItemsTimer->start();
     }
 }
 
@@ -1405,6 +1405,9 @@ QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem& item,
         if (m_requestRole[TypeRole]) {
             data.insert(sharedValue("type"), item.mimeComment());
         }
+    } else if (m_requestRole[TypeRole] && isDir) {
+        static const QString folderMimeType = item.mimeComment();
+        data.insert(sharedValue("type"), folderMimeType);
     }
 
     return data;
@@ -2011,7 +2014,15 @@ void KFileItemModel::determineMimeTypes(const KFileItemList& items, int timeout)
     QElapsedTimer timer;
     timer.start();
     foreach (const KFileItem& item, items) { // krazy:exclude=foreach
-        item.determineMimeType();
+        // Only determine mime types for files here. For directories,
+        // KFileItem::determineMimeType() reads the .directory file inside to
+        // load the icon, but this is not necessary at all if we just need the
+        // type. Some special code for setting the correct mime type for
+        // directories is in retrieveData().
+        if (!item.isDir()) {
+            item.determineMimeType();
+        }
+
         if (timer.elapsed() > timeout) {
             // Don't block the user interface, let the remaining items
             // be resolved asynchronously.
index 2a89004c63e580d45913e394dd6fa224d18d4a70..483517ecc6f08de7f44eda242cc7fc77233d212b 100644 (file)
@@ -204,8 +204,13 @@ KStandardItemListWidget::~KStandardItemListWidget()
     qDeleteAll(m_textInfo);
     m_textInfo.clear();
 
-    delete m_roleEditor;
-    delete m_oldRoleEditor;
+    if (m_roleEditor) {
+        m_roleEditor->deleteLater();
+    }
+
+    if (m_oldRoleEditor) {
+        m_oldRoleEditor->deleteLater();
+    }
 }
 
 void KStandardItemListWidget::setLayout(Layout layout)
@@ -649,16 +654,15 @@ void KStandardItemListWidget::editedRoleChanged(const QByteArray& current, const
                        this, SLOT(slotRoleEditingCanceled(QByteArray,QVariant)));
             disconnect(m_roleEditor, SIGNAL(roleEditingFinished(QByteArray,QVariant)),
                        this, SLOT(slotRoleEditingFinished(QByteArray,QVariant)));
+
+            if (m_oldRoleEditor) {
+                m_oldRoleEditor->deleteLater();
+            }
             m_oldRoleEditor = m_roleEditor;
             m_roleEditor->hide();
             m_roleEditor = 0;
         }
         return;
-    } else if (m_oldRoleEditor) {
-        // Delete the old editor before constructing the new one to
-        // prevent a memory leak.
-        m_oldRoleEditor->deleteLater();
-        m_oldRoleEditor = 0;
     }
 
     Q_ASSERT(!m_roleEditor);
@@ -1302,6 +1306,9 @@ void KStandardItemListWidget::closeRoleEditor()
         scene()->views()[0]->parentWidget()->setFocus();
     }
 
+    if (m_oldRoleEditor) {
+        m_oldRoleEditor->deleteLater();
+    }
     m_oldRoleEditor = m_roleEditor;
     m_roleEditor->hide();
     m_roleEditor = 0;