diff --git a/interface/resources/html/raiseAndLowerKeyboard.js b/interface/resources/html/raiseAndLowerKeyboard.js
index f40c0d7376..8cdb3c2327 100644
--- a/interface/resources/html/raiseAndLowerKeyboard.js
+++ b/interface/resources/html/raiseAndLowerKeyboard.js
@@ -18,6 +18,11 @@
window.isKeyboardRaised = false;
window.isNumericKeyboard = false;
window.isPasswordField = false;
+ window.lastActiveElement = null;
+
+ function getActiveElement() {
+ return document.activeElement;
+ }
function shouldSetPasswordField() {
var nodeType = document.activeElement.type;
@@ -65,10 +70,11 @@
var keyboardRaised = shouldRaiseKeyboard();
var numericKeyboard = shouldSetNumeric();
var passwordField = shouldSetPasswordField();
+ var activeElement = getActiveElement();
if (isWindowFocused &&
(keyboardRaised !== window.isKeyboardRaised || numericKeyboard !== window.isNumericKeyboard
- || passwordField !== window.isPasswordField)) {
+ || passwordField !== window.isPasswordField || activeElement !== window.lastActiveElement)) {
if (typeof EventBridge !== "undefined" && EventBridge !== null) {
EventBridge.emitWebEvent(
@@ -90,6 +96,7 @@
window.isKeyboardRaised = keyboardRaised;
window.isNumericKeyboard = numericKeyboard;
window.isPasswordField = passwordField;
+ window.lastActiveElement = activeElement;
}
}, POLL_FREQUENCY);
diff --git a/interface/resources/qml/controls/FlickableWebViewCore.qml b/interface/resources/qml/controls/FlickableWebViewCore.qml
index 943f15e1de..bc5883425f 100644
--- a/interface/resources/qml/controls/FlickableWebViewCore.qml
+++ b/interface/resources/qml/controls/FlickableWebViewCore.qml
@@ -34,10 +34,34 @@ Item {
webViewCore.stop();
}
+ Timer {
+ id: delayedUnfocuser
+ repeat: false
+ interval: 200
+ onTriggered: {
+
+ // The idea behind this is to delay unfocusing, so that fast lower/raise will not result actual unfocusing.
+ // Fast lower/raise happens every time keyboard is being re-raised (see the code below in OffscreenQmlSurface::setKeyboardRaised)
+ //
+ // if (raised) {
+ // item->setProperty("keyboardRaised", QVariant(!raised));
+ // }
+ //
+ // item->setProperty("keyboardRaised", QVariant(raised));
+ //
+
+ webViewCore.runJavaScript("if (document.activeElement) document.activeElement.blur();", function(result) {
+ console.log('unfocus completed: ', result);
+ });
+ }
+ }
+
function unfocus() {
- webViewCore.runJavaScript("if (document.activeElement) document.activeElement.blur();", function(result) {
- console.log('unfocus completed: ', result);
- });
+ delayedUnfocuser.start();
+ }
+
+ function stopUnfocus() {
+ delayedUnfocuser.stop();
}
function onLoadingChanged(loadRequest) {
diff --git a/interface/resources/qml/controls/TabletWebScreen.qml b/interface/resources/qml/controls/TabletWebScreen.qml
index bb037ad478..a33dc8a1d7 100644
--- a/interface/resources/qml/controls/TabletWebScreen.qml
+++ b/interface/resources/qml/controls/TabletWebScreen.qml
@@ -13,6 +13,8 @@ Item {
onKeyboardRaisedChanged: {
if(!keyboardRaised) {
webroot.unfocus();
+ } else {
+ webroot.stopUnfocus();
}
}
property bool punctuationMode: false
diff --git a/interface/resources/qml/controls/TabletWebView.qml b/interface/resources/qml/controls/TabletWebView.qml
index db695dbfb2..41127c2190 100644
--- a/interface/resources/qml/controls/TabletWebView.qml
+++ b/interface/resources/qml/controls/TabletWebView.qml
@@ -17,6 +17,8 @@ Item {
onKeyboardRaisedChanged: {
if(!keyboardRaised) {
webroot.unfocus();
+ } else {
+ webroot.stopUnfocus();
}
}
property bool punctuationMode: false
diff --git a/interface/resources/qml/controls/WebView.qml b/interface/resources/qml/controls/WebView.qml
index 71bf69fdc8..8e7e5493ae 100644
--- a/interface/resources/qml/controls/WebView.qml
+++ b/interface/resources/qml/controls/WebView.qml
@@ -15,6 +15,8 @@ Item {
onKeyboardRaisedChanged: {
if(!keyboardRaised) {
webroot.unfocus();
+ } else {
+ webroot.stopUnfocus();
}
}
property bool punctuationMode: false