]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/panels/places/placespanel.cpp
Revert "DragAndDropHelper::updateDropAction: use StatJob for remote URLs"
[dolphin.git] / src / panels / places / placespanel.cpp
index bea2f0614f54f4a5d037c1bb0c9e54f05addd9f3..ba3451bd5e603f353e38fa4ec01f5e6590cceaf0 100644 (file)
@@ -42,6 +42,14 @@ PlacesPanel::PlacesPanel(QWidget *parent)
         slotTearDownRequested(index);
     });
 
+    m_openInSplitView = new QAction(QIcon::fromTheme(QStringLiteral("view-right-new")), i18nc("@action:inmenu", "Open in Split View"));
+    m_openInSplitView->setPriority(QAction::HighPriority);
+    connect(m_openInSplitView, &QAction::triggered, this, [this]() {
+        const QUrl url = currentIndex().data(KFilePlacesModel::UrlRole).toUrl();
+        Q_EMIT openInSplitViewRequested(url);
+    });
+    addAction(m_openInSplitView);
+
     m_configureTrashAction = new QAction(QIcon::fromTheme(QStringLiteral("configure")), i18nc("@action:inmenu", "Configure Trash…"));
     m_configureTrashAction->setPriority(QAction::HighPriority);
     connect(m_configureTrashAction, &QAction::triggered, this, &PlacesPanel::slotConfigureTrash);
@@ -141,16 +149,20 @@ static bool isInternalDrag(const QMimeData *mimeData)
 
 void PlacesPanel::dragMoveEvent(QDragMoveEvent *event)
 {
-    const QModelIndex index = indexAt(event->pos());
+    const QModelIndex index = indexAt(event->position().toPoint());
     if (index.isValid()) {
         auto *placesModel = static_cast<KFilePlacesModel *>(model());
 
         // Reject drag ontop of a non-writable protocol
         // We don't know whether we're dropping inbetween or ontop of a place
         // so still allow internal drag events so that re-arranging still works.
-        const QUrl url = placesModel->url(index);
-        if (url.isValid() && !isInternalDrag(event->mimeData()) && !KProtocolManager::supportsWriting(url)) {
-            event->setDropAction(Qt::IgnoreAction);
+        if (!isInternalDrag(event->mimeData())) {
+            const QUrl url = placesModel->url(index);
+            if (!url.isValid() || !KProtocolManager::supportsWriting(url)) {
+                event->setDropAction(Qt::IgnoreAction);
+            } else {
+                DragAndDropHelper::updateDropAction(event, url);
+            }
         }
     }
 
@@ -188,6 +200,7 @@ void PlacesPanel::slotContextMenuAboutToShow(const QModelIndex &index, QMenu *me
     const Solid::Device device = placesModel->deviceForIndex(index);
 
     m_configureTrashAction->setVisible(url.scheme() == QLatin1String("trash"));
+    m_openInSplitView->setVisible(url.isValid());
 
     // show customContextMenuActions only on the view's context menu
     if (!url.isValid() && !device.isValid()) {
@@ -275,3 +288,5 @@ void PlacesPanel::connectDeviceSignals(const QModelIndex &index)
 
     connect(storageAccess, &Solid::StorageAccess::teardownRequested, this, &PlacesPanel::slotTearDownRequestedExternally);
 }
+
+#include "moc_placespanel.cpp"