diff options
-rw-r--r-- | src/core/render_widget_host_view_qt.cpp | 4 | ||||
-rw-r--r-- | src/core/web_contents_adapter_client.h | 2 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 6 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.h | 1 | ||||
-rw-r--r-- | src/core/web_contents_view_qt.cpp | 40 | ||||
-rw-r--r-- | src/core/web_contents_view_qt.h | 23 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 8 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p_p.h | 2 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 5 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage_p.h | 2 |
10 files changed, 61 insertions, 32 deletions
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 40ed75973..c6db88658 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -1124,7 +1124,7 @@ void RenderWidgetHostViewQt::closePopup() // (hiding the widget and automatic memory cleanup via // RenderWidget::CloseWidgetSoon() -> RenderWidgetHostImpl::ShutdownAndDestroyWidget(true). host()->SetActive(false); - host()->Blur(); + host()->LostFocus(); } void RenderWidgetHostViewQt::ProcessAckedTouchEvent(const content::TouchEventWithLatencyInfo &touch, content::InputEventAckState ack_result) { @@ -1644,7 +1644,7 @@ void RenderWidgetHostViewQt::handleFocusEvent(QFocusEvent *ev) ev->accept(); } else if (ev->lostFocus()) { host()->SetActive(false); - host()->Blur(); + host()->LostFocus(); ev->accept(); } } diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h index 28be33c23..75d010865 100644 --- a/src/core/web_contents_adapter_client.h +++ b/src/core/web_contents_adapter_client.h @@ -446,7 +446,7 @@ public: virtual void didFindText(quint64 requestId, int matchCount) = 0; virtual void didPrintPage(quint64 requestId, const QByteArray &result) = 0; virtual void didPrintPageToPdf(const QString &filePath, bool success) = 0; - virtual void passOnFocus(bool reverse) = 0; + virtual bool passOnFocus(bool reverse) = 0; // returns the last QObject (QWidget/QQuickItem) based object in the accessibility // hierarchy before going into the BrowserAccessibility tree virtual QObject *accessibilityParentObject() = 0; diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index 4bde93fd3..5cb94de5c 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -684,6 +684,12 @@ void WebContentsDelegateQt::UnregisterProtocolHandler(content::WebContents *webC registry->RemoveHandler(handler); } +bool WebContentsDelegateQt::TakeFocus(content::WebContents *source, bool reverse) +{ + Q_UNUSED(source); + return m_viewClient->passOnFocus(reverse); +} + FaviconManager *WebContentsDelegateQt::faviconManager() { return m_faviconManager.data(); diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h index 9c0f8f484..2baa1176f 100644 --- a/src/core/web_contents_delegate_qt.h +++ b/src/core/web_contents_delegate_qt.h @@ -127,6 +127,7 @@ public: bool CheckMediaAccessPermission(content::RenderFrameHost* render_frame_host, const GURL& security_origin, content::MediaStreamType type) override; void RegisterProtocolHandler(content::WebContents* web_contents, const std::string& protocol, const GURL& url, bool user_gesture) override; void UnregisterProtocolHandler(content::WebContents* web_contents, const std::string& protocol, const GURL& url, bool user_gesture) override; + bool TakeFocus(content::WebContents *source, bool reverse) override; // WebContentsObserver overrides void RenderFrameDeleted(content::RenderFrameHost *render_frame_host) override; diff --git a/src/core/web_contents_view_qt.cpp b/src/core/web_contents_view_qt.cpp index 3c4465ae3..7e0275aa0 100644 --- a/src/core/web_contents_view_qt.cpp +++ b/src/core/web_contents_view_qt.cpp @@ -51,6 +51,7 @@ #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/web_contents/web_contents_impl.h" +#include "content/public/browser/web_contents_delegate.h" #include "content/public/common/context_menu_params.h" #include <ui/gfx/image/image_skia.h> @@ -128,6 +129,22 @@ void WebContentsViewQt::SetInitialFocus() Focus(); } +void WebContentsViewQt::FocusThroughTabTraversal(bool reverse) +{ + content::WebContentsImpl *web_contents = static_cast<content::WebContentsImpl*>(m_webContents); + if (web_contents->ShowingInterstitialPage()) { + web_contents->GetInterstitialPage()->FocusThroughTabTraversal(reverse); + return; + } + content::RenderWidgetHostView *fullscreen_view = web_contents->GetFullscreenRenderWidgetHostView(); + if (fullscreen_view) { + fullscreen_view->Focus(); + return; + } + web_contents->GetRenderViewHost()->SetInitialFocus(reverse); +} + + ASSERT_ENUMS_MATCH(WebEngineContextMenuData::MediaTypeNone, blink::WebContextMenuData::kMediaTypeNone) ASSERT_ENUMS_MATCH(WebEngineContextMenuData::MediaTypeImage, blink::WebContextMenuData::kMediaTypeImage) ASSERT_ENUMS_MATCH(WebEngineContextMenuData::MediaTypeVideo, blink::WebContextMenuData::kMediaTypeVideo) @@ -247,25 +264,22 @@ void WebContentsViewQt::UpdateDragCursor(blink::WebDragOperation dragOperation) #endif // QT_CONFIG(draganddrop) } -void WebContentsViewQt::TakeFocus(bool reverse) +void WebContentsViewQt::GotFocus(content::RenderWidgetHostImpl* render_widget_host) { - m_client->passOnFocus(reverse); + content::WebContentsImpl *web_contents = static_cast<content::WebContentsImpl*>(m_webContents); + web_contents->NotifyWebContentsFocused(render_widget_host); } -void WebContentsViewQt::FocusThroughTabTraversal(bool reverse) +void WebContentsViewQt::LostFocus(content::RenderWidgetHostImpl* render_widget_host) { content::WebContentsImpl *web_contents = static_cast<content::WebContentsImpl*>(m_webContents); - if (web_contents->ShowingInterstitialPage()) { - web_contents->GetInterstitialPage()->FocusThroughTabTraversal(reverse); - return; - } - content::RenderWidgetHostView *fullscreen_view = web_contents->GetFullscreenRenderWidgetHostView(); - if (fullscreen_view) { - fullscreen_view->Focus(); - return; - } - web_contents->GetRenderViewHost()->SetInitialFocus(reverse); + web_contents->NotifyWebContentsLostFocus(render_widget_host); } +void WebContentsViewQt::TakeFocus(bool reverse) +{ + if (m_webContents->GetDelegate()) + m_webContents->GetDelegate()->TakeFocus(m_webContents, reverse); +} } // namespace QtWebEngineCore diff --git a/src/core/web_contents_view_qt.h b/src/core/web_contents_view_qt.h index d1a2ff81e..7036907c5 100644 --- a/src/core/web_contents_view_qt.h +++ b/src/core/web_contents_view_qt.h @@ -69,6 +69,7 @@ public: void initialize(WebContentsAdapterClient* client); WebContentsAdapterClient *client() { return m_client; } + // content::WebContentsView overrides: content::RenderWidgetHostViewBase *CreateViewForWidget(content::RenderWidgetHost* render_widget_host, bool is_guest_view_hack) override; void CreateView(const gfx::Size& initial_size, gfx::NativeView context) override; @@ -107,6 +108,16 @@ public: gfx::Rect GetViewBounds() const override { QT_NOT_YET_IMPLEMENTED return gfx::Rect(); } + void FocusThroughTabTraversal(bool reverse) override; + +#if defined(OS_MACOSX) + void SetAllowOtherViews(bool allow) override { m_allowOtherViews = allow; } + bool GetAllowOtherViews() const override { return m_allowOtherViews; } + void CloseTabAfterEventTracking() override { QT_NOT_YET_IMPLEMENTED } + bool IsEventTracking() const override { QT_NOT_YET_IMPLEMENTED; return false; } +#endif // defined(OS_MACOSX) + + // content::RenderViewHostDelegateView overrides: void StartDragging(const content::DropData& drop_data, blink::WebDragOperationsMask allowed_ops, const gfx::ImageSkia& image, const gfx::Vector2d& image_offset, const content::DragEventSourceInfo& event_info, @@ -116,18 +127,10 @@ public: void ShowContextMenu(content::RenderFrameHost *, const content::ContextMenuParams ¶ms) override; + void GotFocus(content::RenderWidgetHostImpl *render_widget_host) override; + void LostFocus(content::RenderWidgetHostImpl *render_widget_host) override; void TakeFocus(bool reverse) override; - void FocusThroughTabTraversal(bool reverse) override; - - -#if defined(OS_MACOSX) - void SetAllowOtherViews(bool allow) override { m_allowOtherViews = allow; } - bool GetAllowOtherViews() const override { return m_allowOtherViews; } - void CloseTabAfterEventTracking() override { QT_NOT_YET_IMPLEMENTED } - bool IsEventTracking() const override { QT_NOT_YET_IMPLEMENTED; return false; } -#endif // defined(OS_MACOSX) - private: content::WebContents *m_webContents; WebContentsAdapterClient *m_client; diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 53f12fa97..fd3cc8e82 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -333,12 +333,16 @@ void QQuickWebEngineViewPrivate::runFileChooser(QSharedPointer<FilePickerControl ui()->showFilePicker(controller); } -void QQuickWebEngineViewPrivate::passOnFocus(bool reverse) +bool QQuickWebEngineViewPrivate::passOnFocus(bool reverse) { Q_Q(QQuickWebEngineView); // The child delegate currently has focus, find the next one from there and give it focus. QQuickItem *next = q->scopedFocusItem()->nextItemInFocusChain(!reverse); - next->forceActiveFocus(reverse ? Qt::BacktabFocusReason : Qt::TabFocusReason); + if (next) { + next->forceActiveFocus(reverse ? Qt::BacktabFocusReason : Qt::TabFocusReason); + return true; + } + return false; } void QQuickWebEngineViewPrivate::titleChanged(const QString &title) diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index bc7a05b67..3c4189fd9 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -130,7 +130,7 @@ public: void didFindText(quint64, int) override; void didPrintPage(quint64 requestId, const QByteArray &result) override; void didPrintPageToPdf(const QString &filePath, bool success) override; - void passOnFocus(bool reverse) override; + bool passOnFocus(bool reverse) override; void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) override; void authenticationRequired(QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) override; void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) override; diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index fae34ae8d..63863ab34 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -522,10 +522,11 @@ void QWebEnginePagePrivate::didPrintPage(quint64 requestId, const QByteArray &re #endif } -void QWebEnginePagePrivate::passOnFocus(bool reverse) +bool QWebEnginePagePrivate::passOnFocus(bool reverse) { if (view) - view->focusNextPrevChild(!reverse); + return view->focusNextPrevChild(!reverse); + return false; } void QWebEnginePagePrivate::authenticationRequired(QSharedPointer<AuthenticationDialogController> controller) diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index a50a1972a..25ed89371 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -126,7 +126,7 @@ public: void didFindText(quint64 requestId, int matchCount) override; void didPrintPage(quint64 requestId, const QByteArray &result) override; void didPrintPageToPdf(const QString &filePath, bool success) override; - void passOnFocus(bool reverse) override; + bool passOnFocus(bool reverse) override; void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) override; void authenticationRequired(QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) override; void releaseProfile() override; |