From 8681257ee91ac1bde53ff3a65cea2f2c2fd12792 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Wed, 30 Mar 2011 00:44:19 +0200 Subject: Implement/fix drag and drop handling of text & url in the webview BUG:254102 --- src/webview.cpp | 33 +++++++++++++++++++++++++++++++++ src/webview.h | 2 ++ 2 files changed, 35 insertions(+) diff --git a/src/webview.cpp b/src/webview.cpp index 16c9c2e5..91910970 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -472,6 +472,7 @@ void WebView::enterEvent(QEvent *event) void WebView::dropEvent(QDropEvent *event) { + bool isEditable = page()->frameAt(event->pos())->hitTestContent(event->pos()).isContentEditable(); if (event->mimeData()->hasFormat("application/rekonq-bookmark")) { QByteArray addresses = event->mimeData()->data("application/rekonq-bookmark"); @@ -485,6 +486,20 @@ void WebView::dropEvent(QDropEvent *event) emit loadUrl(bookmark.url(), Rekonq::CurrentTab); } } + else if (event->mimeData()->hasUrls() && event->source() != this && !isEditable) //dropped links + { + Q_FOREACH (const QUrl &url, event->mimeData()->urls()) + { + emit loadUrl(url, Rekonq::NewFocusedTab); + } + } + else if (event->mimeData()->hasFormat("text/plain") && event->source() != this && !isEditable) //dropped plain text with url format + { + QUrl url = QUrl::fromUserInput(event->mimeData()->data("text/plain")); + + if (url.isValid()) + emit loadUrl(url, Rekonq::NewFocusedTab); + } else { KWebView::dropEvent(event); @@ -800,3 +815,21 @@ void WebView::stopScrolling() m_dy = 0; m_smoothScrolling = false; } + + +void WebView::dragEnterEvent(QDragEnterEvent *event) +{ + if (event->mimeData()->hasUrls() || event->mimeData()->hasText()) + event->acceptProposedAction(); + else + KWebView::dragEnterEvent(event); +} + + +void WebView::dragMoveEvent(QDragMoveEvent *event) +{ + if (event->mimeData()->hasUrls() || event->mimeData()->hasText()) + event->acceptProposedAction(); + else + KWebView::dragMoveEvent(event); +} diff --git a/src/webview.h b/src/webview.h index b954c17e..1fec1ae4 100644 --- a/src/webview.h +++ b/src/webview.h @@ -65,6 +65,8 @@ protected: void keyPressEvent(QKeyEvent *event); void wheelEvent(QWheelEvent *event); void dropEvent(QDropEvent *event); + void dragEnterEvent(QDragEnterEvent *event); + void dragMoveEvent(QDragMoveEvent * event); private Q_SLOTS: void search(); -- cgit v1.2.1