diff --git a/src/filewidgets/kurlnavigatorbutton.cpp b/src/filewidgets/kurlnavigatorbutton.cpp --- a/src/filewidgets/kurlnavigatorbutton.cpp +++ b/src/filewidgets/kurlnavigatorbutton.cpp @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -407,7 +408,17 @@ return; } - const QUrl url = m_replaceButton ? KIO::upUrl(m_url) : m_url; + QUrl url = m_url; + if (m_replaceButton) { + url = KIO::upUrl(m_url); + } else if ((m_url.scheme() == QLatin1String("tar")) || (m_url.scheme() == QLatin1String("zip"))) { + // We are in an archive, check whether the subdir we have to list is part of the archive + // or is a parent directory. + QDir test_dir(url.path()); + if (test_dir.exists()) { + url.setScheme(QStringLiteral("file")); + } + } m_subDirsJob = KIO::listDir(url, KIO::HideProgressInfo, false /*no hidden files*/); m_subDirs.clear(); // just to be ++safe