diff options
author | Viktor Engelmann <Viktor.Engelmann@qt.io> | 2017-03-13 14:30:02 +0100 |
---|---|---|
committer | Viktor Engelmann <viktor.engelmann@qt.io> | 2017-05-24 08:03:01 +0000 |
commit | b0324c5e020b98cbc0caf8176bbdfc5cd80b545e (patch) | |
tree | 8227937e524c862e0f8d72a2a16924f6d906fd13 /src/webengine/api/qquickwebengineview.cpp | |
parent | ac34e49473d731b068c7782674069cb9fcc95328 (diff) |
Handle ViewHostMsg_Focus message from chromium
Calling the method window.focus() in javascript causes chromium to send
a ViewHostMsg_Focus message, which is received by RenderViewHost,
which then calls RenderViewHost::OnFocus.
This calls WebContentsDelegate::ActivateContents, which does
nothing in the default implementation. We now override this method in
WebContentsDelegateQt::ActivateContents and call Focus() on
the WebContents object IF the new WebEngineSettings value
AllowWindowActivationFromJavaScript is true (by default, it is false).
This in turn calls QWebEnginePagePrivate::focusContainer.
The WebEnginePage now calls QWidget::activateWindow() in addition
to QWidget::setFocus, to make sure the window is also activated (which
it might not be, if multiple windows are open).
For the QML side, a new boolean Property
allowWindowActivationFromJavaScript was added.
Task-number: QTBUG-58800
Change-Id: Iabf5d4d15236c77838a3886de81e9dafcaf49f5d
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/webengine/api/qquickwebengineview.cpp')
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 45f65e49b..dac844fdb 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -564,6 +564,9 @@ void QQuickWebEngineViewPrivate::loadFinished(bool success, const QUrl &url, boo void QQuickWebEngineViewPrivate::focusContainer() { Q_Q(QQuickWebEngineView); + QQuickWindow *window = q->window(); + if (window) + window->requestActivate(); q->forceActiveFocus(); } |