]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Files passed as arguments: Ignore unsupported files
authorErik Hahn <erik_hahn@gmx.de>
Sun, 13 Oct 2013 08:44:13 +0000 (10:44 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Sun, 13 Oct 2013 08:48:00 +0000 (10:48 +0200)
With this patch, Dolphin ignores all files passed to it that it can't

Also, archives are now opened inside Dolphin so it can be used as an
archive manager at least for local files. If the user tries to open a
remote archive Dolphin still opens it externally; I have observed that
if it receives one as an argument, it will display a pseudo-folder that
contains only said archive. So having it set as the archive handler is
still broken, but in a less annoying way.

CCBUG: 318683
REVIEW: 113191
FIXED-IN: 4.11.3

src/dolphinmainwindow.cpp

index 73001bf54e957c967b8203fc06af7556005f8d12..a11fb0c5b39f1220479cbef10429a1f797b35828 100644 (file)
@@ -31,6 +31,7 @@
 #include "panels/information/informationpanel.h"
 #include "settings/dolphinsettingsdialog.h"
 #include "statusbar/dolphinstatusbar.h"
+#include "views/dolphinview.h"
 #include "views/dolphinviewactionhandler.h"
 #include "views/dolphinremoteencoding.h"
 #include "views/draganddrophelper.h"
@@ -243,8 +244,20 @@ void DolphinMainWindow::openDirectories(const QList<KUrl>& dirs)
         return;
     }
 
-    if (dirs.count() == 1) {
-        m_activeViewContainer->setUrl(dirs.first());
+    // dirs could contain URLs that actually point to archives or other files.
+    // Replace them by URLs we can open where possible and filter the rest out.
+    QList<KUrl> urlsToOpen;
+    foreach (const KUrl& rawUrl, dirs) {
+        const KFileItem& item = KFileItem(KFileItem::Unknown, KFileItem::Unknown, rawUrl);
+        item.determineMimeType();
+        const KUrl& url = DolphinView::openItemAsFolderUrl(item);
+        if (!url.isEmpty()) {
+            urlsToOpen.append(url);
+        }
+    }
+
+    if (urlsToOpen.count() == 1) {
+        m_activeViewContainer->setUrl(urlsToOpen.first());
         return;
     }
 
@@ -254,12 +267,12 @@ void DolphinMainWindow::openDirectories(const QList<KUrl>& dirs)
 
     // Open each directory inside a new tab. If the "split view" option has been enabled,
     // always show two directories within one tab.
-    QList<KUrl>::const_iterator it = dirs.begin();
-    while (it != dirs.end()) {
+    QList<KUrl>::const_iterator it = urlsToOpen.begin();
+    while (it != urlsToOpen.end()) {
         openNewTab(*it);
         ++it;
 
-        if (hasSplitView && (it != dirs.end())) {
+        if (hasSplitView && (it != urlsToOpen.end())) {
             const int tabIndex = m_viewTab.count() - 1;
             m_viewTab[tabIndex].secondaryView->setUrl(*it);
             ++it;