]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Merge remote-tracking branch 'origin/KDE/4.11'
authorDavid Faure <faure@kde.org>
Tue, 15 Oct 2013 07:08:47 +0000 (09:08 +0200)
committerDavid Faure <faure@kde.org>
Tue, 15 Oct 2013 07:08:47 +0000 (09:08 +0200)
1  2 
src/dolphinmainwindow.cpp

index 4128cdffad89d2ed80922077954cd6a30d49cd9e,ccef356ea2a01ab9a72916918817af4cd2b84959..8767988ca7571dd2c7906f50c511d5f074adbde0
  #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"
  #include "views/viewproperties.h"
 +#include "views/dolphinnewfilemenuobserver.h"
  
  #ifndef Q_OS_WIN
  #include "panels/terminal/terminalpanel.h"
@@@ -127,9 -127,6 +128,9 @@@ DolphinMainWindow::DolphinMainWindow() 
      ViewTab& viewTab = m_viewTab[m_tabIndex];
      viewTab.wasActive = true; // The first opened tab is automatically active
  
 +    connect(&DolphinNewFileMenuObserver::instance(), SIGNAL(errorMessage(QString)),
 +            this, SLOT(showErrorMessage(QString)));
 +
      KIO::FileUndoManager* undoManager = KIO::FileUndoManager::self();
      undoManager->setUiInterface(new UndoUiInterface());
  
@@@ -247,8 -244,20 +248,20 @@@ void DolphinMainWindow::openDirectories
          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;
      }
  
  
      // 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;
@@@ -990,50 -999,23 +1003,23 @@@ void DolphinMainWindow::goHome(Qt::Mous
  
  void DolphinMainWindow::compareFiles()
  {
-     // The method is only invoked if exactly 2 files have
-     // been selected. The selected files may be:
-     // - both in the primary view
-     // - both in the secondary view
-     // - one in the primary view and the other in the secondary
-     //   view
-     Q_ASSERT(m_viewTab[m_tabIndex].primaryView);
-     KUrl urlA;
-     KUrl urlB;
-     KFileItemList items = m_viewTab[m_tabIndex].primaryView->view()->selectedItems();
-     switch (items.count()) {
-     case 0: {
-         Q_ASSERT(m_viewTab[m_tabIndex].secondaryView);
-         items = m_viewTab[m_tabIndex].secondaryView->view()->selectedItems();
-         Q_ASSERT(items.count() == 2);
-         urlA = items[0].url();
-         urlB = items[1].url();
-         break;
-     }
+     const DolphinViewContainer* primaryViewContainer = m_viewTab[m_tabIndex].primaryView;
+     Q_ASSERT(primaryViewContainer);
+     KFileItemList items = primaryViewContainer->view()->selectedItems();
  
-     case 1: {
-         urlA = items[0].url();
-         Q_ASSERT(m_viewTab[m_tabIndex].secondaryView);
-         items = m_viewTab[m_tabIndex].secondaryView->view()->selectedItems();
-         Q_ASSERT(items.count() == 1);
-         urlB = items[0].url();
-         break;
+     const DolphinViewContainer* secondaryViewContainer = m_viewTab[m_tabIndex].secondaryView;
+     if (secondaryViewContainer) {
+         items.append(secondaryViewContainer->view()->selectedItems());
      }
  
-     case 2: {
-         urlA = items[0].url();
-         urlB = items[1].url();
-         break;
+     if (items.count() != 2) {
+         // The action is disabled in this case, but it could have been triggered
+         // via D-Bus, see https://bugs.kde.org/show_bug.cgi?id=325517
+         return;
      }
  
-     default: {
-         // may not happen: compareFiles may only get invoked if 2
-         // files are selected
-         Q_ASSERT(false);
-     }
-     }
+     KUrl urlA = items.at(0).url();
+     KUrl urlB = items.at(1).url();
  
      QString command("kompare -c \"");
      command.append(urlA.pathOrUrl());
@@@ -1486,7 -1468,7 +1472,7 @@@ DolphinViewContainer* DolphinMainWindow
  void DolphinMainWindow::setupActions()
  {
      // setup 'File' menu
 -    m_newFileMenu = new DolphinNewFileMenu(this);
 +    m_newFileMenu = new DolphinNewFileMenu(actionCollection(), this);
      KMenu* menu = m_newFileMenu->menu();
      menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New"));
      menu->setIcon(KIcon("document-new"));