]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemmodelrolesupdater.cpp
[Places Panel] Make use of KFilePlacesView::dragAutoActivationDelay
[dolphin.git] / src / kitemviews / kfileitemmodelrolesupdater.cpp
index 978f5df6e0b35abee929ad86be36019557e44100..e13b3dedfd2f75a4cc1993b2fc7944c1d60cd134 100644 (file)
@@ -18,7 +18,7 @@
 #include <KIconLoader>
 #include <KJobWidgets>
 #include <KOverlayIconPlugin>
-#include <KPluginLoader>
+#include <KPluginMetaData>
 #include <KSharedConfig>
 
 #ifdef HAVE_BALOO
@@ -30,6 +30,7 @@
 #include <QApplication>
 #include <QIcon>
 #include <QPainter>
+#include <QPluginLoader>
 #include <QElapsedTimer>
 #include <QTimer>
 
@@ -120,15 +121,16 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO
     connect(m_directoryContentsCounter, &KDirectoryContentsCounter::result,
             this,                       &KFileItemModelRolesUpdater::slotDirectoryContentsCountReceived);
 
-    const auto plugins = KPluginLoader::instantiatePlugins(QStringLiteral("kf5/overlayicon"), nullptr, qApp);
-    for (QObject *it : plugins) {
-        auto plugin = qobject_cast<KOverlayIconPlugin*>(it);
+    const auto plugins = KPluginMetaData::findPlugins(QStringLiteral("kf5/overlayicon"));
+    for (const KPluginMetaData &data : plugins) {
+        auto instance = QPluginLoader(data.fileName()).instance();
+        auto plugin = qobject_cast<KOverlayIconPlugin *>(instance);
         if (plugin) {
             m_overlayIconsPlugin.append(plugin);
             connect(plugin, &KOverlayIconPlugin::overlaysChanged, this, &KFileItemModelRolesUpdater::slotOverlaysChanged);
         } else {
             // not our/valid plugin, so delete the created object
-            it->deleteLater();
+            delete instance;
         }
     }
 }
@@ -1024,7 +1026,7 @@ void KFileItemModelRolesUpdater::startPreviewJob()
 
     KIO::PreviewJob* job = new KIO::PreviewJob(itemSubSet, cacheSize, &m_enabledPlugins);
 
-    job->setIgnoreMaximumSize(itemSubSet.first().isLocalFile() && m_localFileSizePreviewLimit <= 0);
+    job->setIgnoreMaximumSize(itemSubSet.first().isLocalFile() && !itemSubSet.first().isSlow() && m_localFileSizePreviewLimit <= 0);
     if (job->uiDelegate()) {
         KJobWidgets::setWindow(job, qApp->activeWindow());
     }
@@ -1133,7 +1135,7 @@ void KFileItemModelRolesUpdater::loadNextHoverSequencePreview()
     KIO::PreviewJob* job = new KIO::PreviewJob({m_hoverSequenceItem}, cacheSize, &m_enabledPlugins);
 
     job->setSequenceIndex(loadSeqIdx);
-    job->setIgnoreMaximumSize(m_hoverSequenceItem.isLocalFile() && m_localFileSizePreviewLimit <= 0);
+    job->setIgnoreMaximumSize(m_hoverSequenceItem.isLocalFile() && !m_hoverSequenceItem.isSlow() && m_localFileSizePreviewLimit <= 0);
     if (job->uiDelegate()) {
         KJobWidgets::setWindow(job, qApp->activeWindow());
     }
@@ -1405,10 +1407,19 @@ QList<int> KFileItemModelRolesUpdater::indexesToResolve() const
                                (2 * m_maximumVisibleItems)));
 
     // Add visible items.
+    // Resolve files first, their previews are quicker.
+    QList<int> visibleDirs;
     for (int i = m_firstVisibleIndex; i <= m_lastVisibleIndex; ++i) {
-        result.append(i);
+        const KFileItem item = m_model->fileItem(i);
+        if (item.isDir()) {
+            visibleDirs.append(i);
+        } else {
+            result.append(i);
+        }
     }
 
+    result.append(visibleDirs);
+
     // We need a reasonable upper limit for number of items to resolve after
     // and before the visible range. m_maximumVisibleItems can be quite large
     // when using Compact View.