From: David Faure Date: Tue, 15 Oct 2013 07:08:47 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/KDE/4.11' X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/8bbddb3b6324dfa22d0a57805d387d19db9a3afe?hp=-c Merge remote-tracking branch 'origin/KDE/4.11' --- 8bbddb3b6324dfa22d0a57805d387d19db9a3afe diff --combined src/dolphinmainwindow.cpp index 4128cdffa,ccef356ea..8767988ca --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@@ -31,11 -31,11 +31,12 @@@ #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 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; } @@@ -258,12 -267,12 +271,12 @@@ // Open each directory inside a new tab. If the "split view" option has been enabled, // always show two directories within one tab. - QList::const_iterator it = dirs.begin(); - while (it != dirs.end()) { + QList::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"));