X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/67099640b90588af1c72c340756253400da3e95b..702429ac8e64a5aff4e110a56f526b96ecb795fd:/src/dolphinviewcontainer.cpp diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 1c43fc977..83b9f4343 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -24,11 +24,13 @@ #include #include #include +#include #include #include #include #include +#include #include #include #include @@ -40,6 +42,7 @@ #endif #include "global.h" +#include "dolphindebug.h" #include "dolphin_generalsettings.h" #include "filterbar/filterbar.h" #include "search/dolphinsearchbox.h" @@ -49,14 +52,14 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : QWidget(parent), - m_topLayout(0), - m_urlNavigator(0), - m_searchBox(0), - m_messageWidget(0), - m_view(0), - m_filterBar(0), - m_statusBar(0), - m_statusBarTimer(0), + m_topLayout(nullptr), + m_urlNavigator(nullptr), + m_searchBox(nullptr), + m_messageWidget(nullptr), + m_view(nullptr), + m_filterBar(nullptr), + m_statusBar(nullptr), + m_statusBarTimer(nullptr), m_statusBarTimestamp(), m_autoGrabFocus(true) #ifdef KActivities_FOUND @@ -98,8 +101,6 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : m_urlNavigator, &KUrlNavigator::setLocationUrl); connect(m_view, &DolphinView::urlChanged, m_messageWidget, &KMessageWidget::hide); - connect(m_view, &DolphinView::directoryLoadingCompleted, - m_messageWidget, &KMessageWidget::hide); connect(m_view, &DolphinView::writeStateChanged, this, &DolphinViewContainer::writeStateChanged); connect(m_view, &DolphinView::requestItemInfo, @@ -124,8 +125,6 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : this, &DolphinViewContainer::updateDirectorySortingProgress); connect(m_view, &DolphinView::selectionChanged, this, &DolphinViewContainer::delayedStatusBarUpdate); - connect(m_view, &DolphinView::urlAboutToBeChanged, - this, &DolphinViewContainer::slotViewUrlAboutToBeChanged); connect(m_view, &DolphinView::errorMessage, this, &DolphinViewContainer::showErrorMessage); connect(m_view, &DolphinView::urlIsFileError, @@ -137,12 +136,18 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : this, &DolphinViewContainer::slotUrlNavigatorLocationAboutToBeChanged); connect(m_urlNavigator, &KUrlNavigator::urlChanged, this, &DolphinViewContainer::slotUrlNavigatorLocationChanged); - connect(m_urlNavigator, &KUrlNavigator::historyChanged, - this, &DolphinViewContainer::slotHistoryChanged); + connect(m_urlNavigator, &KUrlNavigator::urlSelectionRequested, + this, &DolphinViewContainer::slotUrlSelectionRequested); connect(m_urlNavigator, &KUrlNavigator::returnPressed, this, &DolphinViewContainer::slotReturnPressed); - connect(m_urlNavigator, &KUrlNavigator::urlsDropped, - m_view, &DolphinView::dropUrls); + connect(m_urlNavigator, &KUrlNavigator::urlsDropped, this, [=](const QUrl &destination, QDropEvent *event) { +#if KIO_VERSION >= QT_VERSION_CHECK(5, 37, 0) + m_view->dropUrls(destination, event, m_urlNavigator->dropWidget()); +#else + // TODO: remove as soon as we can hard-depend of KF5 >= 5.37 + m_view->dropUrls(destination, event, m_view); +#endif + }); // Initialize status bar m_statusBar = new DolphinStatusBar(this); @@ -240,6 +245,11 @@ bool DolphinViewContainer::autoGrabFocus() const return m_autoGrabFocus; } +QString DolphinViewContainer::currentSearchText() const +{ + return m_searchBox->text(); +} + const DolphinStatusBar* DolphinViewContainer::statusBar() const { return m_statusBar; @@ -357,17 +367,26 @@ QString DolphinViewContainer::placesText() const QString text; if (isSearchModeEnabled()) { - text = m_searchBox->searchPath().fileName() + QLatin1String(": ") + m_searchBox->text(); + text = i18n("Search for %1 in %2", m_searchBox->text(), m_searchBox->searchPath().fileName()); } else { text = url().fileName(); if (text.isEmpty()) { text = url().host(); } + if (text.isEmpty()) { + text = url().scheme(); + } } return text; } +void DolphinViewContainer::reload() +{ + view()->reload(); + m_messageWidget->hide(); +} + void DolphinViewContainer::setUrl(const QUrl& newUrl) { if (newUrl != m_urlNavigator->locationUrl()) { @@ -482,7 +501,7 @@ void DolphinViewContainer::slotUrlIsFileError(const QUrl& url) item.determineMimeType(); const QUrl& folderUrl = DolphinView::openItemAsFolderUrl(item, true); if (!folderUrl.isEmpty()) { - m_view->setUrl(folderUrl); + setUrl(folderUrl); } else { slotItemActivated(item); } @@ -497,7 +516,7 @@ void DolphinViewContainer::slotItemActivated(const KFileItem& item) const QUrl& url = DolphinView::openItemAsFolderUrl(item, GeneralSettings::browseThroughArchives()); if (!url.isEmpty()) { - m_view->setUrl(url); + setUrl(url); return; } @@ -540,28 +559,9 @@ void DolphinViewContainer::activate() setActive(true); } -void DolphinViewContainer::slotViewUrlAboutToBeChanged(const QUrl& url) +void DolphinViewContainer::slotUrlNavigatorLocationAboutToBeChanged(const QUrl&) { - // URL changes of the view can happen in two ways: - // 1. The URL navigator gets changed and will trigger the view to update its URL - // 2. The URL of the view gets changed and will trigger the URL navigator to update - // its URL (e.g. by clicking on an item) - // In this scope the view-state may only get saved in case 2: - if (url != m_urlNavigator->locationUrl()) { - saveViewState(); - } -} - -void DolphinViewContainer::slotUrlNavigatorLocationAboutToBeChanged(const QUrl& url) -{ - // URL changes of the view can happen in two ways: - // 1. The URL navigator gets changed and will trigger the view to update its URL - // 2. The URL of the view gets changed and will trigger the URL navigator to update - // its URL (e.g. by clicking on an item) - // In this scope the view-state may only get saved in case 1: - if (url != m_view->url()) { - saveViewState(); - } + saveViewState(); } void DolphinViewContainer::slotUrlNavigatorLocationChanged(const QUrl& url) @@ -571,6 +571,7 @@ void DolphinViewContainer::slotUrlNavigatorLocationChanged(const QUrl& url) if (KProtocolManager::supportsListing(url)) { setSearchModeEnabled(isSearchUrl(url)); m_view->setUrl(url); + tryRestoreViewState(); if (m_autoGrabFocus && isActive() && !isSearchUrl(url)) { // When an URL has been entered, the view should get the focus. @@ -608,6 +609,13 @@ void DolphinViewContainer::slotUrlNavigatorLocationChanged(const QUrl& url) } } +void DolphinViewContainer::slotUrlSelectionRequested(const QUrl& url) +{ + qCDebug(DolphinDebug) << "slotUrlSelectionRequested: " << url; + m_view->markUrlsAsSelected({url}); + m_view->markUrlAsCurrent(url); // makes the item scroll into view +} + void DolphinViewContainer::redirect(const QUrl& oldUrl, const QUrl& newUrl) { Q_UNUSED(oldUrl); @@ -634,15 +642,6 @@ void DolphinViewContainer::saveUrlCompletionMode(KCompletion::CompletionMode com GeneralSettings::setUrlCompletionMode(completion); } -void DolphinViewContainer::slotHistoryChanged() -{ - QByteArray locationState = m_urlNavigator->locationState(); - if (!locationState.isEmpty()) { - QDataStream stream(&locationState, QIODevice::ReadOnly); - m_view->restoreState(stream); - } -} - void DolphinViewContainer::slotReturnPressed() { if (!GeneralSettings::editableUrl()) { @@ -692,3 +691,12 @@ void DolphinViewContainer::saveViewState() m_view->saveState(stream); m_urlNavigator->saveLocationState(locationState); } + +void DolphinViewContainer::tryRestoreViewState() +{ + QByteArray locationState = m_urlNavigator->locationState(); + if (!locationState.isEmpty()) { + QDataStream stream(&locationState, QIODevice::ReadOnly); + m_view->restoreState(stream); + } +}