]> cloud.milkyroute.net Git - dolphin.git/commitdiff
DolphinTabBar: Open folder in new tab when dropped onto tab bar
authorKai Uwe Broulik <kde@privat.broulik.de>
Sun, 2 Oct 2022 11:09:21 +0000 (13:09 +0200)
committerKai Uwe Broulik <kde@privat.broulik.de>
Thu, 6 Oct 2022 12:21:15 +0000 (12:21 +0000)
src/dolphintabbar.cpp
src/dolphintabwidget.cpp

index 4c1d9e44ae3a954185531e3111ba636d2fd8b562..d3dc96393f3892cba9d72443bdbc0b8e9301a1d2 100644 (file)
@@ -36,13 +36,7 @@ void DolphinTabBar::dragEnterEvent(QDragEnterEvent* event)
     const int index = tabAt(event->pos());
 
     if (mimeData->hasUrls()) {
-        if (index >= 0) {
-            event->acceptProposedAction();
-        } else {
-            event->setDropAction(Qt::IgnoreAction);
-            // Still need to accept it to receive dragMoveEvent
-            event->accept();
-        }
+        event->acceptProposedAction();
         updateAutoActivationTimer(index);
     }
 
@@ -62,11 +56,6 @@ void DolphinTabBar::dragMoveEvent(QDragMoveEvent* event)
     const int index = tabAt(event->pos());
 
     if (mimeData->hasUrls()) {
-        if (index >= 0) {
-            event->acceptProposedAction();
-        } else {
-            event->setDropAction(Qt::IgnoreAction);
-        }
         updateAutoActivationTimer(index);
     }
 
@@ -81,7 +70,7 @@ void DolphinTabBar::dropEvent(QDropEvent* event)
     const QMimeData* mimeData = event->mimeData();
     const int index = tabAt(event->pos());
 
-    if (index >= 0 && mimeData->hasUrls()) {
+    if (mimeData->hasUrls()) {
         Q_EMIT tabDropEvent(index, event);
     }
 
index 7eae6f297ec3ef4154c6b31abf8144dbe028248f..6caaf174f899e2e476a6c0ac43d3d40ae291237e 100644 (file)
@@ -393,6 +393,17 @@ void DolphinTabWidget::tabDropEvent(int index, QDropEvent* event)
     if (index >= 0) {
         DolphinView* view = tabPageAt(index)->activeViewContainer()->view();
         view->dropUrls(view->url(), event, view);
+    } else {
+        const auto urls = event->mimeData()->urls();
+
+        for (const QUrl &url : urls) {
+            auto *job = KIO::statDetails(url, KIO::StatJob::SourceSide, KIO::StatDetail::StatBasic, KIO::JobFlag::HideProgressInfo);
+            connect(job, &KJob::result, this, [this, job]() {
+                if (!job->error() && job->statResult().isDir()) {
+                    openNewTab(job->url(), QUrl(), NewTabPosition::AtEnd);
+                }
+            });
+        }
     }
 }