diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-01-17 12:51:21 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-01-17 12:51:21 +0100 |
commit | 2c6e6b86ef0a6c63297f9d5daa41c294aaf31a9b (patch) | |
tree | a8bcb1c7cb5aaf8194eab09f8bc56b2659f13ea5 /src/webenginewidgets/api | |
parent | aa527a2e553bea0514bc088bfc09105703fe87ba (diff) | |
parent | 819e00f71e37f5230b9b2c2ff756db4cc4cfda5e (diff) |
Merge remote-tracking branch 'origin/5.10' into dev
Conflicts:
.qmake.conf
src/webengine/api/qquickwebengineview_p_p.h
src/webenginewidgets/api/qwebenginepage_p.h
tests/auto/quick/qmltests/data/TestWebEngineView.qml
Change-Id: Id2acc92e8d0364bdaaf5a63ea2d2cb9cd533ade3
Diffstat (limited to 'src/webenginewidgets/api')
-rw-r--r-- | src/webenginewidgets/api/qwebenginedownloaditem.cpp | 7 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 49 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage_p.h | 5 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineprofile.cpp | 24 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineprofile_p.h | 16 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.cpp | 15 |
6 files changed, 57 insertions, 59 deletions
diff --git a/src/webenginewidgets/api/qwebenginedownloaditem.cpp b/src/webenginewidgets/api/qwebenginedownloaditem.cpp index ac7a71959..8f097df6c 100644 --- a/src/webenginewidgets/api/qwebenginedownloaditem.cpp +++ b/src/webenginewidgets/api/qwebenginedownloaditem.cpp @@ -195,9 +195,10 @@ void QWebEngineDownloadItem::cancel() // We directly cancel the download request if the user cancels // before it even started, so no need to notify the profile here. - if (state == QWebEngineDownloadItem::DownloadInProgress) - d->profile->browserContext()->cancelDownload(d->downloadId); - else { + if (state == QWebEngineDownloadItem::DownloadInProgress) { + if (auto browserContext = d->profile->browserContext()) + browserContext->cancelDownload(d->downloadId); + } else { d->downloadState = QWebEngineDownloadItem::DownloadCancelled; Q_EMIT stateChanged(d->downloadState); } diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 3bb7f6c83..a8fa98bea 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtWebEngine module of the Qt Toolkit. @@ -139,7 +139,8 @@ static bool printPdfDataOnPrinter(const QByteArray& data, QPrinter& printer) QPainter painter; if (!painter.begin(&printer)) { - qWarning("Failure to print on printer %ls: Could not open printer for painting.", qUtf16Printable(printer.printerName())); + qWarning("Failure to print on printer %ls: Could not open printer for painting.", + qUtf16Printable(printer.printerName())); return false; } @@ -1475,35 +1476,36 @@ void QWebEnginePagePrivate::wasHidden() adapter->wasHidden(); } -bool QWebEnginePagePrivate::contextMenuRequested(const WebEngineContextMenuData &data) +void QWebEnginePagePrivate::contextMenuRequested(const WebEngineContextMenuData &data) { if (!view) - return false; + return; contextData.reset(); - QContextMenuEvent event(QContextMenuEvent::Mouse, data.position(), view->mapToGlobal(data.position())); switch (view->contextMenuPolicy()) { - case Qt::PreventContextMenu: - return false; case Qt::DefaultContextMenu: + { contextData = data; + QContextMenuEvent event(QContextMenuEvent::Mouse, data.position(), view->mapToGlobal(data.position())); view->contextMenuEvent(&event); - break; + return; + } case Qt::CustomContextMenu: contextData = data; Q_EMIT view->customContextMenuRequested(data.position()); - break; + return; case Qt::ActionsContextMenu: if (view->actions().count()) { + QContextMenuEvent event(QContextMenuEvent::Mouse, data.position(), view->mapToGlobal(data.position())); QMenu::exec(view->actions(), event.globalPos(), 0, view); - break; } - // fallthrough + return; + case Qt::PreventContextMenu: case Qt::NoContextMenu: - event.ignore(); - return false; + return; } - return true; + + Q_UNREACHABLE(); } void QWebEnginePagePrivate::navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) @@ -1630,12 +1632,21 @@ bool QWebEnginePagePrivate::isEnabled() const void QWebEnginePagePrivate::setToolTip(const QString &toolTipText) { - if (view) { - QString wrappedTip; - if (!toolTipText.isEmpty()) - wrappedTip = QLatin1String("<p>") % toolTipText.toHtmlEscaped().left(MaxTooltipLength) % QLatin1String("</p>"); - view->setToolTip(wrappedTip); + if (!view) + return; + + // Hide tooltip if shown. + if (toolTipText.isEmpty()) { + if (!view->toolTip().isEmpty()) + view->setToolTip(QString()); + + return; } + + // Update tooltip if text was changed. + QString wrappedTip = QLatin1String("<p>") % toolTipText.toHtmlEscaped().left(MaxTooltipLength) % QLatin1String("</p>"); + if (view->toolTip() != wrappedTip) + view->setToolTip(wrappedTip); } QMenu *QWebEnginePage::createStandardContextMenu() diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index 66f479717..270849aee 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -109,7 +109,7 @@ public: bool isBeingAdopted() override; void close() override; void windowCloseRejected() override; - bool contextMenuRequested(const QtWebEngineCore::WebEngineContextMenuData &data) override; + void contextMenuRequested(const QtWebEngineCore::WebEngineContextMenuData &data) override; void navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) override; void requestFullScreenMode(const QUrl &origin, bool fullscreen) override; bool isFullScreenMode() const override; @@ -135,8 +135,7 @@ public: void showValidationMessage(const QRect &anchor, const QString &mainText, const QString &subText) override; void hideValidationMessage() override; void moveValidationMessage(const QRect &anchor) override; - virtual void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, - int exitCode) override; + void renderProcessTerminated(RenderProcessTerminationStatus terminationStatus, int exitCode) override; void requestGeometryChange(const QRect &geometry, const QRect &frameGeometry) override; void updateScrollPosition(const QPointF &position) override; void updateContentsSize(const QSizeF &size) override; diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp index 02fdfa113..737326c24 100644 --- a/src/webenginewidgets/api/qwebengineprofile.cpp +++ b/src/webenginewidgets/api/qwebengineprofile.cpp @@ -47,8 +47,9 @@ #include "qwebenginesettings.h" #include "qwebenginescriptcollection_p.h" +#include "qwebenginebrowsercontext_p.h" +#include "qtwebenginecoreglobal.h" #include "browser_context_adapter.h" -#include <qtwebenginecoreglobal.h> #include "visited_links_manager_qt.h" #include "web_engine_settings.h" @@ -145,23 +146,6 @@ using QtWebEngineCore::BrowserContextAdapter; \sa QWebEngineDownloadItem, QWebEnginePage::download() */ -QWebEngineBrowserContext::QWebEngineBrowserContext(QSharedPointer<QtWebEngineCore::BrowserContextAdapter> browserContext, QWebEngineProfilePrivate *profile) - : QObject(BrowserContextAdapter::globalQObjectRoot()) - , browserContextRef(browserContext) - , m_profile(profile) -{ - browserContextRef->addClient(m_profile); -} - -QWebEngineBrowserContext::~QWebEngineBrowserContext() -{ - Q_ASSERT(m_profile); - // In the case the user sets this profile as the parent of the interceptor - // it can be deleted before the browser-context still referencing it is. - browserContextRef->setRequestInterceptor(nullptr); - browserContextRef->removeClient(m_profile); -} - QWebEngineProfilePrivate::QWebEngineProfilePrivate(QSharedPointer<QtWebEngineCore::BrowserContextAdapter> browserContext) : m_settings(new QWebEngineSettings()) , m_scriptCollection(new QWebEngineScriptCollection(new QWebEngineScriptCollectionPrivate(browserContext->userResourceController()))) @@ -181,11 +165,13 @@ QWebEngineProfilePrivate::~QWebEngineProfilePrivate() } m_ongoingDownloads.clear(); + if (m_browserContext) + m_browserContext->shutdown(); } QSharedPointer<QtWebEngineCore::BrowserContextAdapter> QWebEngineProfilePrivate::browserContext() const { - return m_browserContext->browserContextRef; + return m_browserContext ? m_browserContext->browserContextRef : nullptr; } void QWebEngineProfilePrivate::downloadDestroyed(quint32 downloadId) diff --git a/src/webenginewidgets/api/qwebengineprofile_p.h b/src/webenginewidgets/api/qwebengineprofile_p.h index 8cbf241f3..72fa904e4 100644 --- a/src/webenginewidgets/api/qwebengineprofile_p.h +++ b/src/webenginewidgets/api/qwebengineprofile_p.h @@ -54,6 +54,7 @@ #include "browser_context_adapter_client.h" #include "qwebengineprofile.h" #include "qwebenginescriptcollection.h" + #include <QMap> #include <QPointer> #include <QScopedPointer> @@ -65,23 +66,10 @@ class BrowserContextAdapter; QT_BEGIN_NAMESPACE +class QWebEngineBrowserContext; class QWebEngineProfilePrivate; class QWebEngineSettings; -// This is a wrapper class for BrowserContextAdapter. BrowserContextAdapter must be destructed before WebEngineContext -// is destructed. Therefore access it via the QWebEngineBrowserContext which parent is the WebEngineContext::globalQObject. -// This guarantees the destruction together with the WebEngineContext. -class QWebEngineBrowserContext : public QObject { -public: - QWebEngineBrowserContext(QSharedPointer<QtWebEngineCore::BrowserContextAdapter> browserContext, QWebEngineProfilePrivate *profile); - ~QWebEngineBrowserContext(); - - QSharedPointer<QtWebEngineCore::BrowserContextAdapter> browserContextRef; - -private: - QWebEngineProfilePrivate *m_profile; -}; - class QWebEngineProfilePrivate : public QtWebEngineCore::BrowserContextAdapterClient { public: Q_DECLARE_PUBLIC(QWebEngineProfile) diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index 9b3f62217..7ea451fc5 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -50,8 +50,9 @@ #include <QAction> #include <QMenu> #include <QContextMenuEvent> -#include <QStackedLayout> #include <QPageLayout> +#include <QStackedLayout> +#include <QToolTip> QT_BEGIN_NAMESPACE @@ -327,6 +328,18 @@ bool QWebEngineView::event(QEvent *ev) ev->accept(); return true; } + + // Override QWidget's default ToolTip handler since it doesn't hide tooltip on empty text. + if (ev->type() == QEvent::ToolTip) { + if (!toolTip().isEmpty()) + QToolTip::showText(static_cast<QHelpEvent *>(ev)->globalPos(), toolTip(), this, QRect(), toolTipDuration()); + else + QToolTip::hideText(); + + ev->accept(); + return true; + } + return QWidget::event(ev); } |