]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemmodel.cpp
Don't crash when opening a tab with enabled split view
[dolphin.git] / src / kitemviews / kfileitemmodel.cpp
index 0d851dcd9657ed6e0b6a6e82701797784d103f96..fb089077b3df31f794bb774cb99c61c72bc35914 100644 (file)
@@ -63,7 +63,7 @@ KFileItemModel::KFileItemModel(KDirLister* dirLister, QObject* parent) :
     Q_ASSERT(dirLister);
 
     connect(dirLister, SIGNAL(canceled()), this, SLOT(slotCanceled()));
-    connect(dirLister, SIGNAL(completed()), this, SLOT(slotCompleted()));
+    connect(dirLister, SIGNAL(completed(KUrl)), this, SLOT(slotCompleted()));
     connect(dirLister, SIGNAL(newItems(KFileItemList)), this, SLOT(slotNewItems(KFileItemList)));
     connect(dirLister, SIGNAL(itemsDeleted(KFileItemList)), this, SLOT(slotItemsDeleted(KFileItemList)));
     connect(dirLister, SIGNAL(refreshItems(QList<QPair<KFileItem,KFileItem> >)), this, SLOT(slotRefreshItems(QList<QPair<KFileItem,KFileItem> >)));
@@ -183,6 +183,20 @@ bool KFileItemModel::showHiddenFiles() const
     return dirLister ? dirLister->showingDotFiles() : false;
 }
 
+void KFileItemModel::setShowFoldersOnly(bool enabled)
+{
+    KDirLister* dirLister = m_dirLister.data();
+    if (dirLister) {
+        dirLister->setDirOnlyMode(enabled);
+    }
+}
+
+bool KFileItemModel::showFoldersOnly() const
+{
+    KDirLister* dirLister = m_dirLister.data();
+    return dirLister ? dirLister->dirOnlyMode() : false;
+}
+
 QMimeData* KFileItemModel::createMimeData(const QSet<int>& indexes) const
 {
     QMimeData* data = new QMimeData();
@@ -367,6 +381,7 @@ void KFileItemModel::setRoles(const QSet<QByteArray>& roles)
         }
     }
 
+    m_groups.clear();
     resetRoles();
 
     QSetIterator<QByteArray> it(roles);
@@ -467,7 +482,7 @@ void KFileItemModel::setExpanded(const QSet<KUrl>& urls)
         return;
     }
 
-    const int pos = dirLister->url().url().length();
+    const int pos = dirLister->url().path().length();
 
     // Assure that each sub-path of the URLs that should be
     // expanded is added to m_urlsToExpand too. KDirLister
@@ -478,7 +493,7 @@ void KFileItemModel::setExpanded(const QSet<KUrl>& urls)
         const KUrl& url = it1.next();
 
         KUrl urlToExpand = dirLister->url();
-        const QStringList subDirs = url.url().mid(pos).split(QDir::separator());
+        const QStringList subDirs = url.path().mid(pos).split(QDir::separator());
         for (int i = 0; i < subDirs.count(); ++i) {
             urlToExpand.addPath(subDirs.at(i));
             m_urlsToExpand.insert(urlToExpand);
@@ -1187,12 +1202,8 @@ QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem& item)
             if (forceRootExpansionLevel) {
                 m_rootExpansionLevel = ForceRootExpansionLevel;
             } else {
-                const QString rootDir = rootUrl.directory(KUrl::AppendTrailingSlash);
+                const QString rootDir = rootUrl.path(KUrl::AddTrailingSlash);
                 m_rootExpansionLevel = rootDir.count('/');
-                if (m_rootExpansionLevel == 1) {
-                    // Special case: The root is already reached and no parent is available
-                    --m_rootExpansionLevel;
-                }
             }
         }
 
@@ -1200,7 +1211,7 @@ QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem& item)
             data.insert("expansionLevel", -1);
         } else {
             const QString dir = item.url().directory(KUrl::AppendTrailingSlash);
-            const int level = dir.count('/') - m_rootExpansionLevel - 1;
+            const int level = dir.count('/') - m_rootExpansionLevel;
             data.insert("expansionLevel", level);
         }
     }