X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c95d7fae79a309ed7f2df393fa20257cb20d54a8..d658c7e09024db81266d210fa8932cb5ab2d6190:/src/dolphinviewcontainer.cpp diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 8dd309314..eec2d4c86 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -30,9 +30,9 @@ #include #include #include -#include #include +#include #include #include #include @@ -152,6 +152,10 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : this, &DolphinViewContainer::slotUrlIsFileError); connect(m_view, &DolphinView::activated, this, &DolphinViewContainer::activate); + connect(m_view, &DolphinView::hiddenFilesShownChanged, + this, &DolphinViewContainer::slotHiddenFilesShownChanged); + connect(m_view, &DolphinView::sortHiddenLastChanged, + this, &DolphinViewContainer::slotSortHiddenLastChanged); // Initialize status bar m_statusBar = new DolphinStatusBar(this); @@ -165,6 +169,10 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : m_statusBar, &DolphinStatusBar::setText); connect(m_view, &DolphinView::operationCompletedMessage, m_statusBar, &DolphinStatusBar::setText); + connect(m_view, &DolphinView::statusBarTextChanged, + m_statusBar, &DolphinStatusBar::setDefaultText); + connect(m_view, &DolphinView::statusBarTextChanged, + m_statusBar, &DolphinStatusBar::resetToDefaultText); connect(m_statusBar, &DolphinStatusBar::stopPressed, this, &DolphinViewContainer::stopDirectoryLoading); connect(m_statusBar, &DolphinStatusBar::zoomLevelChanged, @@ -193,6 +201,17 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : } }); + KFilePlacesModel *placesModel = DolphinPlacesModelSingleton::instance().placesModel(); + connect(placesModel, &KFilePlacesModel::dataChanged, + this, &DolphinViewContainer::slotPlacesModelChanged); + connect(placesModel, &KFilePlacesModel::rowsInserted, + this, &DolphinViewContainer::slotPlacesModelChanged); + connect(placesModel, &KFilePlacesModel::rowsRemoved, + this, &DolphinViewContainer::slotPlacesModelChanged); + + connect(this, &DolphinViewContainer::searchModeEnabledChanged, + this, &DolphinViewContainer::captionChanged); + // Initialize kactivities resource instance #ifdef HAVE_KACTIVITIES @@ -295,6 +314,8 @@ void DolphinViewContainer::connectUrlNavigator(DolphinUrlNavigator *urlNavigator Q_CHECK_PTR(m_view); urlNavigator->setLocationUrl(m_view->url()); + urlNavigator->setShowHiddenFolders(m_view->hiddenFilesShown()); + urlNavigator->setSortHiddenFoldersLast(m_view->sortHiddenLast()); if (m_urlNavigatorVisualState) { urlNavigator->setVisualState(*m_urlNavigatorVisualState.get()); m_urlNavigatorVisualState.reset(); @@ -472,7 +493,8 @@ QString DolphinViewContainer::caption() const } KFilePlacesModel *placesModel = DolphinPlacesModelSingleton::instance().placesModel(); - const auto& matchedPlaces = placesModel->match(placesModel->index(0,0), KFilePlacesModel::UrlRole, QUrl(url().adjusted(QUrl::StripTrailingSlash).toString(QUrl::FullyEncoded).append("/?")), 1, Qt::MatchRegExp); + const QString pattern = url().adjusted(QUrl::StripTrailingSlash).toString(QUrl::FullyEncoded).append("/?"); + const auto& matchedPlaces = placesModel->match(placesModel->index(0,0), KFilePlacesModel::UrlRole, QRegularExpression::anchoredPattern(pattern), 1, Qt::MatchRegularExpression); if (!matchedPlaces.isEmpty()) { return placesModel->text(matchedPlaces.first()); @@ -544,10 +566,7 @@ void DolphinViewContainer::delayedStatusBarUpdate() void DolphinViewContainer::updateStatusBar() { m_statusBarTimestamp.start(); - - const QString text = m_view->statusBarText(); - m_statusBar->setDefaultText(text); - m_statusBar->resetToDefaultText(); + m_view->requestStatusBarText(); } void DolphinViewContainer::updateDirectoryLoadingProgress(int percent) @@ -624,7 +643,7 @@ void DolphinViewContainer::slotUrlIsFileError(const QUrl& url) } } -void DolphinViewContainer::slotItemActivated(const KFileItem& item) +void DolphinViewContainer::slotItemActivated(const KFileItem &item) { // It is possible to activate items on inactive views by // drag & drop operations. Assure that activating an item always @@ -633,14 +652,24 @@ void DolphinViewContainer::slotItemActivated(const KFileItem& item) const QUrl& url = DolphinView::openItemAsFolderUrl(item, GeneralSettings::browseThroughArchives()); if (!url.isEmpty()) { - setUrl(url); + const auto modifiers = QGuiApplication::keyboardModifiers(); + // keep in sync with KUrlNavigator::slotNavigatorButtonClicked + if (modifiers & Qt::ControlModifier && modifiers & Qt::ShiftModifier) { + Q_EMIT activeTabRequested(url); + } else if (modifiers & Qt::ControlModifier) { + Q_EMIT tabRequested(url); + } else if (modifiers & Qt::ShiftModifier) { + Dolphin::openNewWindow({KFilePlacesModel::convertedUrl(url)}, this); + } else { + setUrl(url); + } return; } - KIO::OpenUrlJob *job = new KIO::OpenUrlJob(item.targetUrl()); - job->setRunExecutables(true); - job->setUiDelegate(new KIO::JobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, this)); + KIO::OpenUrlJob *job = new KIO::OpenUrlJob(item.targetUrl(), item.mimetype()); + job->setUiDelegate(new KIO::JobUiDelegate(KJobUiDelegate::AutoWarningHandlingEnabled, this)); job->setShowOpenOrExecuteDialog(true); + connect(job, &KIO::OpenUrlJob::finished, this, &DolphinViewContainer::slotOpenUrlFinished); job->start(); } @@ -649,7 +678,7 @@ void DolphinViewContainer::slotItemsActivated(const KFileItemList& items) Q_ASSERT(items.count() >= 2); KFileItemActions fileItemActions(this); - fileItemActions.runPreferredApplications(items, QString()); + fileItemActions.runPreferredApplications(items); } void DolphinViewContainer::showItemInfo(const KFileItem& item) @@ -727,6 +756,18 @@ void DolphinViewContainer::slotUrlSelectionRequested(const QUrl& url) m_view->markUrlAsCurrent(url); // makes the item scroll into view } +void DolphinViewContainer::disableUrlNavigatorSelectionRequests() +{ + disconnect(m_urlNavigator.get(), &KUrlNavigator::urlSelectionRequested, + this, &DolphinViewContainer::slotUrlSelectionRequested); +} + +void DolphinViewContainer::enableUrlNavigatorSelectionRequests() +{ + connect(m_urlNavigator.get(), &KUrlNavigator::urlSelectionRequested, + this, &DolphinViewContainer::slotUrlSelectionRequested); +} + void DolphinViewContainer::redirect(const QUrl& oldUrl, const QUrl& newUrl) { Q_UNUSED(oldUrl) @@ -779,6 +820,34 @@ void DolphinViewContainer::showErrorMessage(const QString& msg) showMessage(msg, Error); } +void DolphinViewContainer::slotPlacesModelChanged() +{ + if (!GeneralSettings::showFullPathInTitlebar() && !isSearchModeEnabled()) { + Q_EMIT captionChanged(); + } +} + +void DolphinViewContainer::slotHiddenFilesShownChanged(bool showHiddenFiles) +{ + if (m_urlNavigatorConnected) { + m_urlNavigatorConnected->setShowHiddenFolders(showHiddenFiles); + } +} + +void DolphinViewContainer::slotSortHiddenLastChanged(bool hiddenLast) +{ + if (m_urlNavigatorConnected) { + m_urlNavigatorConnected->setSortHiddenFoldersLast(hiddenLast); + } +} + +void DolphinViewContainer::slotOpenUrlFinished(KJob *job) +{ + if (job->error() && job->error() != KIO::ERR_USER_CANCELED) { + showErrorMessage(job->errorString()); + } +} + bool DolphinViewContainer::isSearchUrl(const QUrl& url) const { return url.scheme().contains(QLatin1String("search"));