X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/e5eae108ca4511be9dae5f8bb4a4e1fbb0d89c7a..7eeb8dba6aeba09aa3dfa7fa5f0b00840d4d8317:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 002551318..da4cab597 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -121,7 +121,8 @@ DolphinMainWindow::DolphinMainWindow(int id) : m_actionHandler(0), m_remoteEncoding(0), m_settingsDialog(0), - m_captionStatJob(0) + m_captionStatJob(0), + m_lastHandleUrlStatJob(0) { setObjectName("Dolphin#"); @@ -632,7 +633,7 @@ void DolphinMainWindow::readProperties(const KConfigGroup& group) void DolphinMainWindow::updateNewMenu() { m_newMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->showHiddenFiles()); - m_newMenu->slotCheckUpToDate(); + m_newMenu->checkUpToDate(); m_newMenu->setPopupFiles(activeViewContainer()->url()); } @@ -1132,13 +1133,44 @@ void DolphinMainWindow::showSearchOptions() void DolphinMainWindow::handleUrl(const KUrl& url) { - if (KProtocolManager::supportsListing(url)) { + delete m_lastHandleUrlStatJob; + m_lastHandleUrlStatJob = 0; + + if (url.isLocalFile() && QFileInfo(url.toLocalFile()).isDir()) { + activeViewContainer()->setUrl(url); + } else if (KProtocolManager::supportsListing(url)) { + // stat the URL to see if it is a dir or not + m_lastHandleUrlStatJob = KIO::stat(url, KIO::HideProgressInfo); + connect(m_lastHandleUrlStatJob, SIGNAL(result(KJob*)), + this, SLOT(slotHandleUrlStatFinished(KJob*))); + + } else { + new KRun(url, this); + } +} + +void DolphinMainWindow::slotHandleUrlStatFinished(KJob* job) +{ + m_lastHandleUrlStatJob = 0; + const KIO::UDSEntry entry = static_cast(job)->statResult(); + const KUrl url = static_cast(job)->url(); + if ( entry.isDir() ) { activeViewContainer()->setUrl(url); } else { new KRun(url, this); } } +void DolphinMainWindow::tabDropEvent(int tab, QDropEvent* event) +{ + const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData()); + if (!urls.isEmpty() && tab != -1) { + const ViewTab& viewTab = m_viewTab[tab]; + const KUrl destPath = viewTab.isPrimaryViewActive ? viewTab.primaryView->url() : viewTab.secondaryView->url(); + DragAndDropHelper::instance().dropUrls(KFileItem(), destPath, event, m_tabBar); + } +} + void DolphinMainWindow::slotCaptionStatFinished(KJob* job) { m_captionStatJob = 0; @@ -1227,6 +1259,8 @@ void DolphinMainWindow::init() this, SLOT(closeTab(int))); connect(m_tabBar, SIGNAL(tabMoved(int, int)), this, SLOT(slotTabMoved(int, int))); + connect(m_tabBar, SIGNAL(receivedDropEvent(int, QDropEvent*)), + this, SLOT(tabDropEvent(int, QDropEvent*))); m_tabBar->blockSignals(true); // signals get unblocked after at least 2 tabs are open @@ -1711,6 +1745,8 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) this, SLOT(updateHistory())); connect(navigator, SIGNAL(editableStateChanged(bool)), this, SLOT(slotEditableStateChanged(bool))); + connect(navigator, SIGNAL(tabRequested(const KUrl&)), + this, SLOT(openNewTab(KUrl))); } void DolphinMainWindow::updateSplitAction()