X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/2ef87708fdc0ff9d0337482b994bd6efa6b9b623..f0749ee42ccb2e0a7caee165b9934de8e61bfcbc:/src/dolphinviewcontainer.cpp diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 4ec855226..5d177c93a 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -17,7 +17,7 @@ #include "views/viewproperties.h" #include "dolphin_detailsmodesettings.h" -#ifdef HAVE_KACTIVITIES +#if HAVE_KACTIVITIES #include #endif #include @@ -32,6 +32,7 @@ #include #include +#include #include #include #include @@ -53,7 +54,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : m_statusBarTimer(nullptr), m_statusBarTimestamp(), m_autoGrabFocus(true) -#ifdef HAVE_KACTIVITIES +#if HAVE_KACTIVITIES , m_activityResourceInstance(nullptr) #endif { @@ -213,7 +214,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : // Initialize kactivities resource instance -#ifdef HAVE_KACTIVITIES +#if HAVE_KACTIVITIES m_activityResourceInstance = new KActivities::ResourceInstance(window()->winId(), url); m_activityResourceInstance->setParent(this); #endif @@ -236,7 +237,7 @@ void DolphinViewContainer::setActive(bool active) } m_view->setActive(active); -#ifdef HAVE_KACTIVITIES +#if HAVE_KACTIVITIES if (active) { m_activityResourceInstance->notifyFocusedIn(); } else { @@ -529,7 +530,7 @@ void DolphinViewContainer::setUrl(const QUrl& newUrl) m_urlNavigator->setLocationUrl(newUrl); } -#ifdef HAVE_KACTIVITIES +#if HAVE_KACTIVITIES m_activityResourceInstance->setUri(newUrl); #endif } @@ -642,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 @@ -651,13 +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->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(); } @@ -829,6 +841,13 @@ void DolphinViewContainer::slotSortHiddenLastChanged(bool 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"));