diff options
Diffstat (limited to 'src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp')
-rw-r--r-- | src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp | 58 |
1 files changed, 27 insertions, 31 deletions
diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp index d56f644d3..8dd5c158b 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp @@ -51,10 +51,6 @@ #include <QWindow> #include <private/qquickwindow_p.h> -#if (QT_VERSION < QT_VERSION_CHECK(5, 8, 0)) -#include <QSGSimpleRectNode> -#include <QSGSimpleTextureNode> -#endif #include <private/qwidget_p.h> namespace QtWebEngineCore { @@ -71,7 +67,8 @@ protected: bool event(QEvent *event) override { if (event->type() == QEvent::ShortcutOverride) - return m_client->handleShortcutOverrideEvent(static_cast<QKeyEvent *>(event)); + return m_client->forwardEvent(event); + return QQuickItem::event(event); } void focusInEvent(QFocusEvent *event) override @@ -112,11 +109,10 @@ RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(Rende , m_client(client) , m_rootItem(new RenderWidgetHostViewQuickItem(client)) , m_isPopup(false) + , m_isPasswordInput(false) { setFocusPolicy(Qt::StrongFocus); -#if (QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)) - QSurfaceFormat format; format.setDepthBufferSize(24); format.setStencilBufferSize(8); @@ -142,15 +138,30 @@ RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(Rende // Make sure the OpenGL profile of the QQuickWidget matches the shared context profile. if (sharedFormat.profile() == QSurfaceFormat::CoreProfile) { - format.setMajorVersion(sharedFormat.majorVersion()); - format.setMinorVersion(sharedFormat.minorVersion()); - format.setProfile(sharedFormat.profile()); + int major; + int minor; + QSurfaceFormat::OpenGLContextProfile profile; + +#ifdef Q_OS_MACOS + // Due to QTBUG-63180, requesting the sharedFormat.majorVersion() on macOS will lead to + // a failed creation of QQuickWidget shared context. Thus make sure to request the + // major version specified in the defaultFormat instead. + major = defaultFormat.majorVersion(); + minor = defaultFormat.minorVersion(); + profile = defaultFormat.profile(); +#else + major = sharedFormat.majorVersion(); + minor = sharedFormat.minorVersion(); + profile = sharedFormat.profile(); +#endif + format.setMajorVersion(major); + format.setMinorVersion(minor); + format.setProfile(profile); } } setFormat(format); #endif -#endif setMouseTracking(true); setAttribute(Qt::WA_AcceptTouchEvents); setAttribute(Qt::WA_OpaquePaintEvent); @@ -297,30 +308,17 @@ QSGLayer *RenderWidgetHostViewQtDelegateWidget::createLayer() QSGInternalImageNode *RenderWidgetHostViewQtDelegateWidget::createImageNode() { QSGRenderContext *renderContext = QQuickWindowPrivate::get(quickWindow())->context; -#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)) return renderContext->sceneGraphContext()->createInternalImageNode(); -#else - return renderContext->sceneGraphContext()->createImageNode(); -#endif } QSGTextureNode *RenderWidgetHostViewQtDelegateWidget::createTextureNode() { -#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)) return quickWindow()->createImageNode(); -#else - return new QSGSimpleTextureNode(); -#endif } QSGRectangleNode *RenderWidgetHostViewQtDelegateWidget::createRectangleNode() { -#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)) return quickWindow()->createRectangleNode(); -#else - QSGRenderContext *renderContext = QQuickWindowPrivate::get(quickWindow())->context; - return renderContext->sceneGraphContext()->createRectangleNode(); -#endif } void RenderWidgetHostViewQtDelegateWidget::update() @@ -344,12 +342,14 @@ void RenderWidgetHostViewQtDelegateWidget::move(const QPoint &screenPos) QQuickWidget::move(screenPos); } -void RenderWidgetHostViewQtDelegateWidget::inputMethodStateChanged(bool editorVisible) +void RenderWidgetHostViewQtDelegateWidget::inputMethodStateChanged(bool editorVisible, bool passwordInput) { - if (qApp->inputMethod()->isVisible() == editorVisible) + if (qApp->inputMethod()->isVisible() == editorVisible && m_isPasswordInput == passwordInput) return; - QQuickWidget::setAttribute(Qt::WA_InputMethodEnabled, editorVisible); + QQuickWidget::setAttribute(Qt::WA_InputMethodEnabled, editorVisible && !passwordInput); + m_isPasswordInput = passwordInput; + qApp->inputMethod()->update(Qt::ImQueryInput | Qt::ImEnabled | Qt::ImHints); qApp->inputMethod()->setVisible(editorVisible); } @@ -449,10 +449,6 @@ bool RenderWidgetHostViewQtDelegateWidget::event(QEvent *event) case QEvent::FocusOut: // We forward focus events later, once they have made it to the m_rootItem. return QQuickWidget::event(event); - case QEvent::ShortcutOverride: - if (m_client->handleShortcutOverrideEvent(static_cast<QKeyEvent *>(event))) - return true; - break; case QEvent::DragEnter: case QEvent::DragLeave: case QEvent::DragMove: |