diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp
index 77f6fe99f6..c2eddef3aa 100644
--- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp
+++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp
@@ -171,6 +171,7 @@ void WebEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene
_dpi = entity->getDPI();
_color = entity->getColor();
_alpha = entity->getAlpha();
+ _wantsKeyboardFocus = entity->wantsKeyboardFocus();
_pulseProperties = entity->getPulseProperties();
if (_contentType == ContentType::NoContent) {
diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.h b/libraries/entities-renderer/src/RenderableWebEntityItem.h
index 81165d140f..8182c02603 100644
--- a/libraries/entities-renderer/src/RenderableWebEntityItem.h
+++ b/libraries/entities-renderer/src/RenderableWebEntityItem.h
@@ -67,7 +67,7 @@ protected:
virtual bool isTransparent() const override;
virtual bool wantsHandControllerPointerEvents() const override { return true; }
- virtual bool wantsKeyboardFocus() const override { return true; }
+ virtual bool wantsKeyboardFocus() const override { return _wantsKeyboardFocus; }
void handlePointerEventAsTouch(const PointerEvent& event);
void handlePointerEventAsMouse(const PointerEvent& event);
@@ -103,6 +103,7 @@ private:
bool _useBackground { false };
QString _userAgent;
WebInputMode _inputMode { WebInputMode::TOUCH };
+ bool _wantsKeyboardFocus { true };
glm::vec3 _contextPosition;
diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp
index 590d93a451..27a371665d 100644
--- a/libraries/entities/src/EntityItemProperties.cpp
+++ b/libraries/entities/src/EntityItemProperties.cpp
@@ -644,6 +644,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
CHECK_PROPERTY_CHANGE(PROP_SCRIPT_URL, scriptURL);
CHECK_PROPERTY_CHANGE(PROP_MAX_FPS, maxFPS);
CHECK_PROPERTY_CHANGE(PROP_INPUT_MODE, inputMode);
+ CHECK_PROPERTY_CHANGE(PROP_WANTS_KEYBOARD_FOCUS, wantsKeyboardFocus);
CHECK_PROPERTY_CHANGE(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, showKeyboardFocusHighlight);
CHECK_PROPERTY_CHANGE(PROP_WEB_USE_BACKGROUND, useBackground);
CHECK_PROPERTY_CHANGE(PROP_USER_AGENT, userAgent);
@@ -1423,6 +1424,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
* @property {string} scriptURL="" - The URL of a JavaScript file to inject into the web page.
* @property {number} maxFPS=10 - The maximum update rate for the web content, in frames/second.
* @property {WebInputMode} inputMode="touch" - The user input mode to use.
+ * @property {boolean} wantsKeyboardFocus=true - true
if the entity should capture keyboard focus, false
if it
+ * shouldn't.
* @property {boolean} showKeyboardFocusHighlight=true - true
if the entity is highlighted when it has keyboard
* focus, false
if it isn't.
* @property {boolean} useBackground=true - true
if the web entity should have a background,
@@ -1857,6 +1860,7 @@ ScriptValue EntityItemProperties::copyToScriptValue(ScriptEngine* engine, bool s
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_SCRIPT_URL, scriptURL);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_MAX_FPS, maxFPS);
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_INPUT_MODE, inputMode, getInputModeAsString());
+ COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_WANTS_KEYBOARD_FOCUS, wantsKeyboardFocus);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, showKeyboardFocusHighlight);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_WEB_USE_BACKGROUND, useBackground);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_USER_AGENT, userAgent);
@@ -2238,6 +2242,7 @@ void EntityItemProperties::copyFromScriptValue(const ScriptValue& object, bool h
COPY_PROPERTY_FROM_QSCRIPTVALUE(scriptURL, QString, setScriptURL);
COPY_PROPERTY_FROM_QSCRIPTVALUE(maxFPS, uint8_t, setMaxFPS);
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(inputMode, InputMode);
+ COPY_PROPERTY_FROM_QSCRIPTVALUE(wantsKeyboardFocus, bool, setWantsKeyboardFocus);
COPY_PROPERTY_FROM_QSCRIPTVALUE(showKeyboardFocusHighlight, bool, setShowKeyboardFocusHighlight);
COPY_PROPERTY_FROM_QSCRIPTVALUE(useBackground, bool, setUseBackground);
COPY_PROPERTY_FROM_QSCRIPTVALUE(userAgent, QString, setUserAgent);
@@ -2522,6 +2527,7 @@ void EntityItemProperties::merge(const EntityItemProperties& other) {
COPY_PROPERTY_IF_CHANGED(scriptURL);
COPY_PROPERTY_IF_CHANGED(maxFPS);
COPY_PROPERTY_IF_CHANGED(inputMode);
+ COPY_PROPERTY_IF_CHANGED(wantsKeyboardFocus);
COPY_PROPERTY_IF_CHANGED(showKeyboardFocusHighlight);
COPY_PROPERTY_IF_CHANGED(useBackground);
COPY_PROPERTY_IF_CHANGED(userAgent);
@@ -2917,6 +2923,7 @@ bool EntityItemProperties::getPropertyInfo(const QString& propertyName, EntityPr
ADD_PROPERTY_TO_MAP(PROP_SCRIPT_URL, ScriptURL, scriptURL, QString);
ADD_PROPERTY_TO_MAP(PROP_MAX_FPS, MaxFPS, maxFPS, uint8_t);
ADD_PROPERTY_TO_MAP(PROP_INPUT_MODE, InputMode, inputMode, WebInputMode);
+ ADD_PROPERTY_TO_MAP(PROP_WANTS_KEYBOARD_FOCUS, WantsKeyboardFocus, wantsKeyboardFocus, bool);
ADD_PROPERTY_TO_MAP(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, ShowKeyboardFocusHighlight, showKeyboardFocusHighlight, bool);
ADD_PROPERTY_TO_MAP(PROP_WEB_USE_BACKGROUND, useBackground, useBackground, bool);
ADD_PROPERTY_TO_MAP(PROP_USER_AGENT, UserAgent, userAgent, QString);
@@ -3340,6 +3347,7 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy
APPEND_ENTITY_PROPERTY(PROP_SCRIPT_URL, properties.getScriptURL());
APPEND_ENTITY_PROPERTY(PROP_MAX_FPS, properties.getMaxFPS());
APPEND_ENTITY_PROPERTY(PROP_INPUT_MODE, (uint32_t)properties.getInputMode());
+ APPEND_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, properties.getWantsKeyboardFocus());
APPEND_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, properties.getShowKeyboardFocusHighlight());
APPEND_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, properties.getUseBackground());
APPEND_ENTITY_PROPERTY(PROP_USER_AGENT, properties.getUserAgent());
@@ -3806,6 +3814,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SCRIPT_URL, QString, setScriptURL);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_MAX_FPS, uint8_t, setMaxFPS);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_INPUT_MODE, WebInputMode, setInputMode);
+ READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_WANTS_KEYBOARD_FOCUS, bool, setWantsKeyboardFocus);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, bool, setShowKeyboardFocusHighlight);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_WEB_USE_BACKGROUND, bool, setUseBackground);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_USER_AGENT, QString, setUserAgent);
@@ -4169,6 +4178,7 @@ void EntityItemProperties::markAllChanged() {
_scriptURLChanged = true;
_maxFPSChanged = true;
_inputModeChanged = true;
+ _wantsKeyboardFocusChanged = true;
_showKeyboardFocusHighlightChanged = true;
_useBackgroundChanged = true;
_userAgentChanged = true;
@@ -4836,6 +4846,9 @@ QList EntityItemProperties::listChangedProperties() {
if (faceCameraChanged()) {
out += "faceCamera";
}
+ if (wantsKeyboardFocusChanged()) {
+ out += "wantsKeyboardFocus";
+ }
if (showKeyboardFocusHighlightChanged()) {
out += "showKeyboardFocusHighlight";
}
diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h
index 57d3234d90..ef54c2495d 100644
--- a/libraries/entities/src/EntityItemProperties.h
+++ b/libraries/entities/src/EntityItemProperties.h
@@ -362,6 +362,7 @@ public:
DEFINE_PROPERTY_REF(PROP_SCRIPT_URL, ScriptURL, scriptURL, QString, "");
DEFINE_PROPERTY_REF(PROP_MAX_FPS, MaxFPS, maxFPS, uint8_t, WebEntityItem::DEFAULT_MAX_FPS);
DEFINE_PROPERTY_REF_ENUM(PROP_INPUT_MODE, InputMode, inputMode, WebInputMode, WebInputMode::TOUCH);
+ DEFINE_PROPERTY_REF(PROP_WANTS_KEYBOARD_FOCUS, WantsKeyboardFocus, wantsKeyboardFocus, bool, true);
DEFINE_PROPERTY_REF(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, ShowKeyboardFocusHighlight, showKeyboardFocusHighlight, bool, true);
DEFINE_PROPERTY_REF(PROP_WEB_USE_BACKGROUND, UseBackground, useBackground, bool, true);
DEFINE_PROPERTY_REF(PROP_USER_AGENT, UserAgent, userAgent, QString, WebEntityItem::DEFAULT_USER_AGENT);
diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h
index 1117e0924f..881b4e2ba7 100644
--- a/libraries/entities/src/EntityPropertyFlags.h
+++ b/libraries/entities/src/EntityPropertyFlags.h
@@ -322,9 +322,10 @@ enum EntityPropertyList {
PROP_SCRIPT_URL = PROP_DERIVED_2,
PROP_MAX_FPS = PROP_DERIVED_3,
PROP_INPUT_MODE = PROP_DERIVED_4,
- PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT = PROP_DERIVED_5,
- PROP_WEB_USE_BACKGROUND = PROP_DERIVED_6,
- PROP_USER_AGENT = PROP_DERIVED_7,
+ PROP_WANTS_KEYBOARD_FOCUS = PROP_DERIVED_5,
+ PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT = PROP_DERIVED_6,
+ PROP_WEB_USE_BACKGROUND = PROP_DERIVED_7,
+ PROP_USER_AGENT = PROP_DERIVED_8,
// Polyline
PROP_LINE_POINTS = PROP_DERIVED_0,
diff --git a/libraries/entities/src/WebEntityItem.cpp b/libraries/entities/src/WebEntityItem.cpp
index e090ec25ae..579a656069 100644
--- a/libraries/entities/src/WebEntityItem.cpp
+++ b/libraries/entities/src/WebEntityItem.cpp
@@ -61,6 +61,7 @@ EntityItemProperties WebEntityItem::getProperties(const EntityPropertyFlags& des
COPY_ENTITY_PROPERTY_TO_PROPERTIES(scriptURL, getScriptURL);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(maxFPS, getMaxFPS);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(inputMode, getInputMode);
+ COPY_ENTITY_PROPERTY_TO_PROPERTIES(wantsKeyboardFocus, wantsKeyboardFocus);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(showKeyboardFocusHighlight, getShowKeyboardFocusHighlight);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(useBackground, getUseBackground);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(userAgent, getUserAgent);
@@ -83,6 +84,7 @@ bool WebEntityItem::setSubClassProperties(const EntityItemProperties& properties
SET_ENTITY_PROPERTY_FROM_PROPERTIES(scriptURL, setScriptURL);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(maxFPS, setMaxFPS);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(inputMode, setInputMode);
+ SET_ENTITY_PROPERTY_FROM_PROPERTIES(wantsKeyboardFocus, setWantsKeyboardFocus);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(showKeyboardFocusHighlight, setShowKeyboardFocusHighlight);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(useBackground, setUseBackground);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(userAgent, setUserAgent);
@@ -113,6 +115,7 @@ int WebEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, i
READ_ENTITY_PROPERTY(PROP_SCRIPT_URL, QString, setScriptURL);
READ_ENTITY_PROPERTY(PROP_MAX_FPS, uint8_t, setMaxFPS);
READ_ENTITY_PROPERTY(PROP_INPUT_MODE, WebInputMode, setInputMode);
+ READ_ENTITY_PROPERTY(PROP_WANTS_KEYBOARD_FOCUS, bool, setWantsKeyboardFocus);
READ_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, bool, setShowKeyboardFocusHighlight);
READ_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, bool, setUseBackground);
READ_ENTITY_PROPERTY(PROP_USER_AGENT, QString, setUserAgent);
@@ -131,6 +134,7 @@ EntityPropertyFlags WebEntityItem::getEntityProperties(EncodeBitstreamParams& pa
requestedProperties += PROP_SCRIPT_URL;
requestedProperties += PROP_MAX_FPS;
requestedProperties += PROP_INPUT_MODE;
+ requestedProperties += PROP_WANTS_KEYBOARD_FOCUS;
requestedProperties += PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT;
requestedProperties += PROP_WEB_USE_BACKGROUND;
requestedProperties += PROP_USER_AGENT;
@@ -158,6 +162,7 @@ void WebEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBitst
APPEND_ENTITY_PROPERTY(PROP_SCRIPT_URL, getScriptURL());
APPEND_ENTITY_PROPERTY(PROP_MAX_FPS, getMaxFPS());
APPEND_ENTITY_PROPERTY(PROP_INPUT_MODE, (uint32_t)getInputMode());
+ APPEND_ENTITY_PROPERTY(PROP_WANTS_KEYBOARD_FOCUS, wantsKeyboardFocus());
APPEND_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, getShowKeyboardFocusHighlight());
APPEND_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, getUseBackground());
APPEND_ENTITY_PROPERTY(PROP_USER_AGENT, getUserAgent());
@@ -269,6 +274,17 @@ WebInputMode WebEntityItem::getInputMode() const {
});
}
+void WebEntityItem::setWantsKeyboardFocus(bool value) {
+ withWriteLock([&] {
+ _needsRenderUpdate |= _wantsKeyboardFocus != value;
+ _wantsKeyboardFocus = value;
+ });
+}
+
+bool WebEntityItem::wantsKeyboardFocus() const {
+ return _wantsKeyboardFocus;
+}
+
void WebEntityItem::setShowKeyboardFocusHighlight(bool value) {
_showKeyboardFocusHighlight = value;
}
diff --git a/libraries/entities/src/WebEntityItem.h b/libraries/entities/src/WebEntityItem.h
index d607bbc99d..86a9717862 100644
--- a/libraries/entities/src/WebEntityItem.h
+++ b/libraries/entities/src/WebEntityItem.h
@@ -72,6 +72,9 @@ public:
void setInputMode(const WebInputMode& value);
WebInputMode getInputMode() const;
+ bool wantsKeyboardFocus() const;
+ void setWantsKeyboardFocus(bool value);
+
bool getShowKeyboardFocusHighlight() const;
void setShowKeyboardFocusHighlight(bool value);
@@ -94,6 +97,7 @@ protected:
QString _scriptURL;
uint8_t _maxFPS;
WebInputMode _inputMode;
+ bool _wantsKeyboardFocus { false };
bool _showKeyboardFocusHighlight { false };
bool _useBackground { false };
QString _userAgent;
diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h
index 2ee8e0f609..33ed430e41 100644
--- a/libraries/networking/src/udt/PacketHeaders.h
+++ b/libraries/networking/src/udt/PacketHeaders.h
@@ -292,6 +292,7 @@ enum class EntityVersion : PacketVersion {
TextAlignment,
Mirror,
EntityTags,
+ WantsKeyboardFocus,
// Add new versions above here
NUM_PACKET_TYPE,
diff --git a/scripts/system/create/assets/data/createAppTooltips.json b/scripts/system/create/assets/data/createAppTooltips.json
index 57cb3d1bc8..04c7d61c68 100644
--- a/scripts/system/create/assets/data/createAppTooltips.json
+++ b/scripts/system/create/assets/data/createAppTooltips.json
@@ -237,6 +237,9 @@
"showKeyboardFocusHighlight": {
"tooltip": "If enabled, highlights when it has keyboard focus."
},
+ "wantsKeyboardFocus": {
+ "tooltip": "If enabled, this web entity will capture keyboard focus once clicked."
+ },
"isEmitting": {
"tooltip": "If enabled, then particles are emitted."
},
diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js
index b509168262..140c893399 100644
--- a/scripts/system/create/entityProperties/html/js/entityProperties.js
+++ b/scripts/system/create/entityProperties/html/js/entityProperties.js
@@ -808,6 +808,11 @@ const GROUPS = [
},
propertyID: "inputMode",
},
+ {
+ label: "Wants Keyboard Focus",
+ type: "bool",
+ propertyID: "wantsKeyboardFocus",
+ },
{
label: "Focus Highlight",
type: "bool",