First pass of keyboard raising and lowering

This commit is contained in:
Anthony J. Thibault 2016-09-02 12:15:30 -07:00
parent 442f6207fb
commit 3d5e8fc213
5 changed files with 32 additions and 14 deletions

View file

@ -9,20 +9,22 @@
// //
(function () { (function () {
var POLL_FREQUENCY = 500; // ms var POLL_FREQUENCY = 500; // ms
var lastRaiseKeyboard = false; var MAX_WARNINGS = 3;
var numWarnings = 0;
function shouldRaiseKeyboard() { function shouldRaiseKeyboard() {
return document.activeElement.nodeName == "INPUT" || document.activeElement.nodeName == "TEXTAREA"; return document.activeElement.nodeName == "INPUT" || document.activeElement.nodeName == "TEXTAREA";
}; };
setInterval(function () { setInterval(function () {
var newRaiseKeyboard = shouldRaiseKeyboard(); var event = shouldRaiseKeyboard() ? "_RAISE_KEYBOARD" : "_LOWER_KEYBOARD";
if (newRaiseKeyboard != lastRaiseKeyboard) { if (typeof EventBridge != "undefined") {
var event = newRaiseKeyboard ? "_RAISE_KEYBOARD" : "_LOWER_KEYBOARD"; EventBridge.emitWebEvent(event);
if (typeof EventBridge != "undefined") { } else {
EventBridge.emitWebEvent(event); if (numWarnings < MAX_WARNINGS) {
} else {
console.log("WARNING: no global EventBridge object found"); console.log("WARNING: no global EventBridge object found");
numWarnings++;
} }
lastRaiseKeyboard = newRaiseKeyboard;
} }
}, POLL_FREQUENCY); }, POLL_FREQUENCY);
})(); })();

View file

@ -5,6 +5,7 @@ import QtWebChannel 1.0
Item { Item {
property alias url: root.url property alias url: root.url
property alias eventBridge: eventBridgeWrapper.eventBridge property alias eventBridge: eventBridgeWrapper.eventBridge
property bool keyboardRaised: false
QtObject { QtObject {
id: eventBridgeWrapper id: eventBridgeWrapper
@ -17,7 +18,7 @@ Item {
x: 0 x: 0
y: 0 y: 0
width: parent.width width: parent.width
height: parent.height - keyboard1.height height: keyboardRaised ? parent.height - keyboard.height : parent.height
// creates a global EventBridge object. // creates a global EventBridge object.
WebEngineScript { WebEngineScript {
@ -61,6 +62,7 @@ Item {
} }
onUrlChanged: { onUrlChanged: {
keyboardRaised = false;
var originalUrl = url.toString(); var originalUrl = url.toString();
root.newUrl = urlHandler.fixupUrl(originalUrl).toString(); root.newUrl = urlHandler.fixupUrl(originalUrl).toString();
if (root.newUrl !== originalUrl) { if (root.newUrl !== originalUrl) {
@ -104,9 +106,11 @@ Item {
// virtual keyboard // virtual keyboard
Keyboard { Keyboard {
id: keyboard1 id: keyboard
x: 197 y: keyboardRaised ? parent.height : 0
y: 182 height: keyboardRaised ? 200 : 0
visible: keyboardRaised
enabled: keyboardRaised
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: 0 anchors.rightMargin: 0
anchors.left: parent.left anchors.left: parent.left

View file

@ -55,7 +55,14 @@ void WebEntityAPIHelper::emitWebEvent(const QVariant& message) {
if (QThread::currentThread() != thread()) { if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "emitWebEvent", Qt::QueuedConnection, Q_ARG(QVariant, message)); QMetaObject::invokeMethod(this, "emitWebEvent", Qt::QueuedConnection, Q_ARG(QVariant, message));
} else { } else {
emit webEventReceived(message); // special case to handle raising and lowering the virtual keyboard
if (message.type() == QVariant::String && message.toString() == "_RAISE_KEYBOARD" && _ptr) {
_ptr->setKeyboardRaised(true);
} else if (message.type() == QVariant::String && message.toString() == "_LOWER_KEYBOARD" && _ptr) {
_ptr->setKeyboardRaised(false);
} else {
emit webEventReceived(message);
}
} }
} }
@ -357,3 +364,7 @@ void RenderableWebEntityItem::synthesizeKeyPress(QString key) {
void RenderableWebEntityItem::emitScriptEvent(const QVariant& message) { void RenderableWebEntityItem::emitScriptEvent(const QVariant& message) {
_webEntityAPIHelper.emitScriptEvent(message); _webEntityAPIHelper.emitScriptEvent(message);
} }
void RenderableWebEntityItem::setKeyboardRaised(bool raised) {
_webSurface->getRootItem()->setProperty("keyboardRaised", QVariant(raised));
}

View file

@ -64,6 +64,7 @@ public:
bool needsToCallUpdate() const override { return _webSurface != nullptr; } bool needsToCallUpdate() const override { return _webSurface != nullptr; }
void emitScriptEvent(const QVariant& message); void emitScriptEvent(const QVariant& message);
void setKeyboardRaised(bool raised);
SIMPLE_RENDERABLE(); SIMPLE_RENDERABLE();

View file

@ -21,7 +21,7 @@ Script.include("/~/system/libraries/Xform.js");
// add lines where the hand ray picking is happening // add lines where the hand ray picking is happening
// //
var WANT_DEBUG = false; var WANT_DEBUG = false;
var WANT_DEBUG_STATE = true; var WANT_DEBUG_STATE = false;
var WANT_DEBUG_SEARCH_NAME = null; var WANT_DEBUG_SEARCH_NAME = null;
// //