From 8d312ad132e5cddfd9207360a9a495e1ce050d9c Mon Sep 17 00:00:00 2001 From: David Rosca Date: Fri, 23 Oct 2015 11:50:56 +0200 Subject: [PATCH] WebView: Accept drops with urls and open them First dropped url is opened with current webview, the others are opened in new tabs --- src/lib/webengine/webview.cpp | 26 ++++++++++++++++++++++++++ src/lib/webengine/webview.h | 3 ++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/lib/webengine/webview.cpp b/src/lib/webengine/webview.cpp index e7e7384cb..b384a2214 100644 --- a/src/lib/webengine/webview.cpp +++ b/src/lib/webengine/webview.cpp @@ -48,6 +48,7 @@ #include #include #include +#include bool WebView::s_forceContextMenuOnMouseRelease = false; @@ -67,6 +68,7 @@ WebView::WebView(QWidget* parent) m_currentZoomLevel = zoomLevels().indexOf(100); + setAcceptDrops(true); installEventFilter(this); WebInspector::registerView(this); @@ -578,6 +580,30 @@ void WebView::userDefinedOpenUrlInBgTab(const QUrl &url) userDefinedOpenUrlInNewTab(actionUrl, true); } +void WebView::dragEnterEvent(QDragEnterEvent *event) +{ + if (event->mimeData()->hasUrls()) { + event->accept(); + return; + } + + QWebEngineView::dragEnterEvent(event); +} + +void WebView::dropEvent(QDropEvent *event) +{ + if (event->mimeData()->hasUrls()) { + const QList &urls = event->mimeData()->urls(); + load(urls.at(0)); + for (int i = 1; i < urls.size(); ++i) { + openUrlInNewTab(urls.at(i), Qz::NT_CleanSelectedTab); + } + return; + } + + QWebEngineView::dropEvent(event); +} + void WebView::createContextMenu(QMenu *menu, const WebHitTestResult &hitTest) { // cppcheck-suppress variableScope diff --git a/src/lib/webengine/webview.h b/src/lib/webengine/webview.h index 8fcb56d3e..33ec7f1b0 100644 --- a/src/lib/webengine/webview.h +++ b/src/lib/webengine/webview.h @@ -134,6 +134,8 @@ protected slots: void userDefinedOpenUrlInBgTab(const QUrl &url = QUrl()); protected: + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent *event); void resizeEvent(QResizeEvent *event); void contextMenuEvent(QContextMenuEvent *event); @@ -158,7 +160,6 @@ protected: void checkForForm(QAction *action, const QPoint &pos); void createSearchEngine(); - private slots: void addSpeedDial(); void configureSpeedDial();