X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ae1980442d70aa04b1699fbba1c3503fdab58e6d..2f2681f464fa99abf451cb4d21d1647c215daa7b:/src/dolphinviewcontainer.cpp diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index c0ef1997a..cf7778c82 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -20,8 +20,8 @@ #include "statusbar/dolphinstatusbar.h" #include -#if HAVE_KACTIVITIES -#include +#if HAVE_PLASMA_ACTIVITIES +#include #endif #include #include @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -70,9 +71,6 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent) , m_statusBarTimer(nullptr) , m_statusBarTimestamp() , m_autoGrabFocus(true) -#if HAVE_KACTIVITIES - , m_activityResourceInstance(nullptr) -#endif { hide(); @@ -81,8 +79,9 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent) m_topLayout->setContentsMargins(0, 0, 0, 0); m_searchBox = new DolphinSearchBox(this); - m_searchBox->hide(); + m_searchBox->setVisible(false, WithoutAnimation); connect(m_searchBox, &DolphinSearchBox::activated, this, &DolphinViewContainer::activate); + connect(m_searchBox, &DolphinSearchBox::openRequest, this, &DolphinViewContainer::openSearchBox); connect(m_searchBox, &DolphinSearchBox::closeRequest, this, &DolphinViewContainer::closeSearchBox); connect(m_searchBox, &DolphinSearchBox::searchRequest, this, &DolphinViewContainer::startSearching); connect(m_searchBox, &DolphinSearchBox::focusViewRequest, this, &DolphinViewContainer::requestFocus); @@ -101,6 +100,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent) m_messageWidget = new KMessageWidget(this); m_messageWidget->setCloseButtonVisible(true); + m_messageWidget->setPosition(KMessageWidget::Header); m_messageWidget->hide(); #ifndef Q_OS_WIN @@ -112,7 +112,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent) // Initialize filter bar m_filterBar = new FilterBar(this); - m_filterBar->setVisible(GeneralSettings::filterBar()); + m_filterBar->setVisible(GeneralSettings::filterBar(), WithoutAnimation); connect(m_filterBar, &FilterBar::filterChanged, this, &DolphinViewContainer::setNameFilter); connect(m_filterBar, &FilterBar::closeRequest, this, &DolphinViewContainer::closeFilterBar); @@ -187,13 +187,6 @@ DolphinViewContainer::DolphinViewContainer(const QUrl &url, QWidget *parent) connect(placesModel, &KFilePlacesModel::rowsRemoved, this, &DolphinViewContainer::slotPlacesModelChanged); connect(this, &DolphinViewContainer::searchModeEnabledChanged, this, &DolphinViewContainer::captionChanged); - - // Initialize kactivities resource instance - -#if HAVE_KACTIVITIES - m_activityResourceInstance = new KActivities::ResourceInstance(window()->winId(), url); - m_activityResourceInstance->setParent(this); -#endif } DolphinViewContainer::~DolphinViewContainer() @@ -217,14 +210,6 @@ void DolphinViewContainer::setActive(bool active) m_urlNavigatorConnected->setActive(active); } m_view->setActive(active); - -#if HAVE_KACTIVITIES - if (active) { - m_activityResourceInstance->notifyFocusedIn(); - } else { - m_activityResourceInstance->notifyFocusedOut(); - } -#endif } bool DolphinViewContainer::isActive() const @@ -341,12 +326,14 @@ void DolphinViewContainer::setSelectionModeEnabled(bool enabled, KActionCollecti } Q_CHECK_PTR(m_selectionModeTopBar); // there is no point in disabling selectionMode when it wasn't even enabled once. Q_CHECK_PTR(m_selectionModeBottomBar); - if (m_selectionModeTopBar->isAncestorOf(QApplication::focusWidget()) || m_selectionModeBottomBar->isAncestorOf(QApplication::focusWidget())) { - m_view->setFocus(); - } m_selectionModeTopBar->setVisible(false, WithAnimation); m_selectionModeBottomBar->setVisible(false, WithAnimation); Q_EMIT selectionModeChanged(false); + + if (!QApplication::focusWidget() || m_selectionModeTopBar->isAncestorOf(QApplication::focusWidget()) + || m_selectionModeBottomBar->isAncestorOf(QApplication::focusWidget())) { + m_view->setFocus(); + } return; } @@ -462,12 +449,12 @@ void DolphinViewContainer::readSettings() bool DolphinViewContainer::isFilterBarVisible() const { - return m_filterBar->isVisible(); + return m_filterBar->isEnabled(); // Gets disabled in AnimatedHeightWidget while animating towards a hidden state. } void DolphinViewContainer::setSearchModeEnabled(bool enabled) { - m_searchBox->setVisible(enabled); + m_searchBox->setVisible(enabled, WithAnimation); if (enabled) { const QUrl &locationUrl = m_urlNavigator->locationUrl(); @@ -589,8 +576,8 @@ void DolphinViewContainer::setUrl(const QUrl &newUrl) m_urlNavigator->setLocationUrl(newUrl); } -#if HAVE_KACTIVITIES - m_activityResourceInstance->setUri(newUrl); +#if HAVE_PLASMA_ACTIVITIES + KActivities::ResourceInstance::notifyAccessed(newUrl); #endif } @@ -599,7 +586,7 @@ void DolphinViewContainer::setFilterBarVisible(bool visible) Q_ASSERT(m_filterBar); if (visible) { m_view->hideToolTip(ToolTipManager::HideBehavior::Instantly); - m_filterBar->show(); + m_filterBar->setVisible(true, WithAnimation); m_filterBar->setFocus(); m_filterBar->selectAll(); } else { @@ -726,7 +713,8 @@ void DolphinViewContainer::slotItemActivated(const KFileItem &item) } KIO::OpenUrlJob *job = new KIO::OpenUrlJob(item.targetUrl(), item.mimetype()); - job->setUiDelegate(KIO::createDefaultJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, this)); + // Auto*Warning*Handling, errors are put in a KMessageWidget by us in slotOpenUrlFinished. + job->setUiDelegate(KIO::createDefaultJobUiDelegate(KJobUiDelegate::AutoWarningHandlingEnabled, this)); job->setShowOpenOrExecuteDialog(true); connect(job, &KIO::OpenUrlJob::finished, this, &DolphinViewContainer::slotOpenUrlFinished); job->start(); @@ -736,17 +724,28 @@ void DolphinViewContainer::slotfileMiddleClickActivated(const KFileItem &item) { KService::List services = KApplicationTrader::queryByMimeType(item.mimetype()); - if (services.length() >= 2) { - auto service = services.at(1); + int indexOfAppToOpenFileWith = 1; + + // executable scripts + auto mimeType = item.currentMimeType(); + if (item.isLocalFile() && mimeType.inherits(QStringLiteral("application/x-executable")) && mimeType.inherits(QStringLiteral("text/plain")) + && QFileInfo(item.localPath()).isExecutable()) { + KConfigGroup cfgGroup(KSharedConfig::openConfig(QStringLiteral("kiorc")), QStringLiteral("Executable scripts")); + const QString value = cfgGroup.readEntry("behaviourOnLaunch", "alwaysAsk"); + + // in case KIO::WidgetsOpenOrExecuteFileHandler::promptUserOpenOrExecute would not open the file + if (value != QLatin1String("open")) { + indexOfAppToOpenFileWith = 0; + } + } + + if (services.length() >= indexOfAppToOpenFileWith + 1) { + auto service = services.at(indexOfAppToOpenFileWith); KIO::ApplicationLauncherJob *job = new KIO::ApplicationLauncherJob(service, this); job->setUrls({item.url()}); -#if KIO_VERSION >= QT_VERSION_CHECK(5, 98, 0) job->setUiDelegate(KIO::createDefaultJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, this)); -#else - job->setUiDelegate(new KIO::JobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, this)); -#endif connect(job, &KIO::OpenUrlJob::finished, this, &DolphinViewContainer::slotOpenUrlFinished); job->start(); } @@ -805,11 +804,13 @@ void DolphinViewContainer::slotUrlNavigatorLocationChanged(const QUrl &url) } if (KProtocolManager::supportsListing(url)) { - setSearchModeEnabled(isSearchUrl(url)); + const bool searchBoxInitialized = isSearchModeEnabled() && m_searchBox->text().isEmpty(); + setSearchModeEnabled(isSearchUrl(url) || searchBoxInitialized); + m_view->setUrl(url); tryRestoreViewState(); - if (m_autoGrabFocus && isActive() && !isSearchUrl(url)) { + if (m_autoGrabFocus && isActive() && !isSearchModeEnabled()) { // When an URL has been entered, the view should get the focus. // The focus must be requested asynchronously, as changing the URL might create // a new view widget. @@ -827,7 +828,11 @@ void DolphinViewContainer::slotUrlNavigatorLocationChanged(const QUrl &url) QDesktopServices::openUrl(url); redirect(QUrl(), m_urlNavigator->locationUrl(1)); } else { - showMessage(i18nc("@info:status", "Invalid protocol"), Error); + if (!url.scheme().isEmpty()) { + showMessage(i18nc("@info:status", "Invalid protocol '%1'", url.scheme()), Error); + } else { + showMessage(i18nc("@info:status", "Invalid protocol"), Error); + } m_urlNavigator->goBack(); } } @@ -879,6 +884,11 @@ void DolphinViewContainer::startSearching() } } +void DolphinViewContainer::openSearchBox() +{ + setSearchModeEnabled(true); +} + void DolphinViewContainer::closeSearchBox() { setSearchModeEnabled(false);