diff options
-rw-r--r-- | src/core/render_widget_host_view_qt_delegate.h | 1 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt_delegate_client.cpp | 3 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt_delegate_item.cpp | 7 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt_delegate_item.h | 1 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 11 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.h | 1 |
6 files changed, 24 insertions, 0 deletions
diff --git a/src/core/render_widget_host_view_qt_delegate.h b/src/core/render_widget_host_view_qt_delegate.h index 40f341fd5..649fda77b 100644 --- a/src/core/render_widget_host_view_qt_delegate.h +++ b/src/core/render_widget_host_view_qt_delegate.h @@ -50,6 +50,7 @@ public: virtual void setInputMethodHints(Qt::InputMethodHints hints) = 0; virtual void setClearColor(const QColor &color) = 0; virtual void adapterClientChanged(WebContentsAdapterClient *client) = 0; + virtual void updateAdapterClientIfNeeded(WebContentsAdapterClient *client) = 0; virtual void unhandledWheelEvent(QWheelEvent *) {} }; diff --git a/src/core/render_widget_host_view_qt_delegate_client.cpp b/src/core/render_widget_host_view_qt_delegate_client.cpp index 3935517b6..2abfb4121 100644 --- a/src/core/render_widget_host_view_qt_delegate_client.cpp +++ b/src/core/render_widget_host_view_qt_delegate_client.cpp @@ -476,6 +476,9 @@ void RenderWidgetHostViewQtDelegateClient::handleKeyEvent(QKeyEvent *event) if (event->type() == QEvent::KeyRelease && event->isAutoRepeat()) return; + if (!m_rwhv->GetFocusedWidget()) + return; + content::NativeWebKeyboardEvent webEvent = WebEventFactory::toWebKeyboardEvent(event); if (webEvent.GetType() == blink::WebInputEvent::Type::kRawKeyDown && !m_editCommand.empty()) { ui::LatencyInfo latency; diff --git a/src/core/render_widget_host_view_qt_delegate_item.cpp b/src/core/render_widget_host_view_qt_delegate_item.cpp index 674b1ee73..f6962da14 100644 --- a/src/core/render_widget_host_view_qt_delegate_item.cpp +++ b/src/core/render_widget_host_view_qt_delegate_item.cpp @@ -395,6 +395,13 @@ void RenderWidgetHostViewQtDelegateItem::adapterClientChanged(WebContentsAdapter m_widgetDelegate->Bind(client); } +void RenderWidgetHostViewQtDelegateItem::updateAdapterClientIfNeeded(WebContentsAdapterClient *client) +{ + if (client == m_adapterClient) + return; + adapterClientChanged(client); +} + void RenderWidgetHostViewQtDelegateItem::unhandledWheelEvent(QWheelEvent *ev) { if (QWindow *w = Window()) { diff --git a/src/core/render_widget_host_view_qt_delegate_item.h b/src/core/render_widget_host_view_qt_delegate_item.h index afa1de44e..e057d37d9 100644 --- a/src/core/render_widget_host_view_qt_delegate_item.h +++ b/src/core/render_widget_host_view_qt_delegate_item.h @@ -96,6 +96,7 @@ protected: QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override; void adapterClientChanged(WebContentsAdapterClient *client) override; + void updateAdapterClientIfNeeded(WebContentsAdapterClient *client) override; private Q_SLOTS: void onBeforeRendering(); diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index 512c9a403..66598203e 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -308,6 +308,17 @@ void WebContentsDelegateQt::RenderViewHostChanged(content::RenderViewHost *, con } } +void WebContentsDelegateQt::RenderViewReady() +{ + // The render view might have returned after a crash without us getting a RenderViewHostChanged call + content::RenderWidgetHostView *newHostView = web_contents()->GetRenderWidgetHostView(); + if (newHostView) { + auto *rwhv = static_cast<RenderWidgetHostViewQt *>(newHostView); + Q_ASSERT(rwhv->delegate()); + rwhv->delegate()->updateAdapterClientIfNeeded(m_viewClient); + } +} + void WebContentsDelegateQt::emitLoadStarted(bool isErrorPage) { for (auto &&wc : m_certificateErrorControllers) diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h index 7157b5130..37ab7ef5d 100644 --- a/src/core/web_contents_delegate_qt.h +++ b/src/core/web_contents_delegate_qt.h @@ -116,6 +116,7 @@ public: void PrimaryMainFrameRenderProcessGone(base::TerminationStatus status) override; void RenderFrameHostChanged(content::RenderFrameHost *old_host, content::RenderFrameHost *new_host) override; void RenderViewHostChanged(content::RenderViewHost *old_host, content::RenderViewHost *new_host) override; + void RenderViewReady() override; void DidStartNavigation(content::NavigationHandle *navigation_handle) override; void DidFinishNavigation(content::NavigationHandle *navigation_handle) override; void PrimaryPageChanged(content::Page &page) override; |