]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinviewcontainer.cpp
Update copyright and maintainership info
[dolphin.git] / src / dolphinviewcontainer.cpp
index a647b6f43f9d1286fc319d94c05cd55b4c8c3c4e..5d177c93a1ba22f92d7a450766729348d5f82d18 100644 (file)
@@ -17,7 +17,7 @@
 #include "views/viewproperties.h"
 #include "dolphin_detailsmodesettings.h"
 
-#ifdef HAVE_KACTIVITIES
+#if HAVE_KACTIVITIES
 #include <KActivities/ResourceInstance>
 #endif
 #include <KFileItemActions>
@@ -32,6 +32,7 @@
 #include <KUrlComboBox>
 
 #include <QDropEvent>
+#include <QGuiApplication>
 #include <QLoggingCategory>
 #include <QMimeData>
 #include <QTimer>
@@ -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 KFileItemitem)
+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,11 +652,21 @@ 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());
+    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);