From b308c1957134dc50d3929ae5e82357cec7fc95b3 Mon Sep 17 00:00:00 2001 From: Montel Laurent Date: Tue, 19 Apr 2016 09:00:39 +0200 Subject: [PATCH] We need to clear selection when we switch message (it's an qtwebengine bug) --- messageviewer/src/viewer/viewer.cpp | 3 +-- messageviewer/src/viewer/viewer_p.cpp | 3 +++ .../src/viewer/webengine/mailwebenginescript.cpp | 1 + messageviewer/src/viewer/webengine/mailwebengineview.cpp | 5 +++++ messageviewer/src/viewer/webengine/mailwebengineview.h | 1 + webengineviewer/src/webenginescript.cpp | 8 ++++++++ webengineviewer/src/webenginescript.h | 1 + 7 files changed, 20 insertions(+), 2 deletions(-) diff --git a/messageviewer/src/viewer/viewer.cpp b/messageviewer/src/viewer/viewer.cpp index 1e203923..5c2d3573 100644 --- a/messageviewer/src/viewer/viewer.cpp +++ b/messageviewer/src/viewer/viewer.cpp @@ -251,8 +251,7 @@ void Viewer::slotScrollNext() QString Viewer::selectedText() const { Q_D(const Viewer); - QString temp = d->mViewer->selectedText(); - return temp; + return d->mViewer->selectedText(); } Viewer::DisplayFormatMessage Viewer::displayFormatMessageOverwrite() const diff --git a/messageviewer/src/viewer/viewer_p.cpp b/messageviewer/src/viewer/viewer_p.cpp index b6fa1b14..fa805aa6 100644 --- a/messageviewer/src/viewer/viewer_p.cpp +++ b/messageviewer/src/viewer/viewer_p.cpp @@ -1290,6 +1290,9 @@ void ViewerPrivate::printPreviewMessage(const Akonadi::Item &message) void ViewerPrivate::resetStateForNewMessage() { +#ifdef MESSAGEVIEWER_USE_QTWEBENGINE + mViewer->clearSelection(); +#endif mClickedUrl.clear(); mImageUrl.clear(); enableMessageDisplay(); // just to make sure it's on diff --git a/messageviewer/src/viewer/webengine/mailwebenginescript.cpp b/messageviewer/src/viewer/webengine/mailwebenginescript.cpp index c2a3b065..3252645a 100644 --- a/messageviewer/src/viewer/webengine/mailwebenginescript.cpp +++ b/messageviewer/src/viewer/webengine/mailwebenginescript.cpp @@ -80,3 +80,4 @@ QString MailWebEngineScript::toggleFullAddressList(const QString &field, const Q qDebug() << "QString MailWebEngineScript::injectAttachments(const QString &delayedHtml, const QString &elementStr) :" << source; return source; } + diff --git a/messageviewer/src/viewer/webengine/mailwebengineview.cpp b/messageviewer/src/viewer/webengine/mailwebengineview.cpp index 2402a682..d173cd1f 100644 --- a/messageviewer/src/viewer/webengine/mailwebengineview.cpp +++ b/messageviewer/src/viewer/webengine/mailwebengineview.cpp @@ -267,6 +267,11 @@ void MailWebEngineView::toggleFullAddressList(const QString &field, const boost: page()->runJavaScript(MessageViewer::MailWebEngineScript::replaceInnerHtml(field, html, doShow), invoke(this, &MailWebEngineView::updateToggleFullAddressList)); } +void MailWebEngineView::clearSelection() +{ + page()->runJavaScript(WebEngineViewer::WebEngineScript::clearSelection()); +} + void MailWebEngineView::updateToggleFullAddressList(const QVariant &result) { //qDebug() << " result" << result; diff --git a/messageviewer/src/viewer/webengine/mailwebengineview.h b/messageviewer/src/viewer/webengine/mailwebengineview.h index d4d97298..9a5b6abe 100644 --- a/messageviewer/src/viewer/webengine/mailwebengineview.h +++ b/messageviewer/src/viewer/webengine/mailwebengineview.h @@ -64,6 +64,7 @@ public: QList interceptorUrlActions(const WebEngineViewer::WebHitTestResult &result) const; void toggleFullAddressList(const QString &field, const boost::function &delayedHtml, bool doShow); + void clearSelection(); public Q_SLOTS: void slotZoomChanged(qreal zoom); void slotShowDetails(); diff --git a/webengineviewer/src/webenginescript.cpp b/webengineviewer/src/webenginescript.cpp index 4cca0227..b3f57c06 100644 --- a/webengineviewer/src/webenginescript.cpp +++ b/webengineviewer/src/webenginescript.cpp @@ -189,3 +189,11 @@ QString WebEngineScript::scrollToRelativePosition(int pos) const QString source = QString::fromLatin1("window.scrollTo(window.scrollX, %1); [window.scrollX, window.scrollY];").arg(pos); return source; } + +QString WebEngineScript::clearSelection() +{ + const QString source = QString::fromLatin1("if(\"document.selection\") {" + " document.selection.clear ();" + "};"); + return source; +} diff --git a/webengineviewer/src/webenginescript.h b/webengineviewer/src/webenginescript.h index 5f0c546d..a6d3d733 100644 --- a/webengineviewer/src/webenginescript.h +++ b/webengineviewer/src/webenginescript.h @@ -38,6 +38,7 @@ WEBENGINEVIEWER_EXPORT QString scrollUp(int pixel); WEBENGINEVIEWER_EXPORT QString scrollPercentage(int percent); WEBENGINEVIEWER_EXPORT QString scrollToRelativePosition(int pos); WEBENGINEVIEWER_EXPORT QString removeStyleToElement(const QString &element); +WEBENGINEVIEWER_EXPORT QString clearSelection(); } } #endif // WEBENGINESCRIPT_H -- GitLab