From 539c2812c39d3f68017241bee621cc7243bba796 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Sun, 22 Jan 2023 11:24:04 +0100 Subject: [PATCH] Fixed Window.location --- libraries/script-engine/src/v8/ScriptEngineV8.cpp | 12 ++++++++++-- scripts/system/places/places.js | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/libraries/script-engine/src/v8/ScriptEngineV8.cpp b/libraries/script-engine/src/v8/ScriptEngineV8.cpp index ac9a90ab10..9fc46c15c4 100644 --- a/libraries/script-engine/src/v8/ScriptEngineV8.cpp +++ b/libraries/script-engine/src/v8/ScriptEngineV8.cpp @@ -737,10 +737,18 @@ void ScriptEngineV8::registerGetterSetter(const QString& name, ScriptEngine::Fun if (object.isValid()) { V8ScriptValue v8parent = ScriptValueV8Wrapper::fullUnwrap(this, object); Q_ASSERT(v8parent.get()->IsObject()); - v8::Local v8object = v8::Local::Cast(v8parent.get()); + v8::Local v8ParentObject = v8::Local::Cast(v8parent.get()); v8::Local v8propertyName = v8::String::NewFromUtf8(_v8Isolate, name.toStdString().c_str()).ToLocalChecked(); - if (!v8object->DefineProperty(getContext(), v8propertyName, propertyDescriptor).FromMaybe(false)) { + v8::Local v8ObjectToSetProperty; + ScriptObjectV8Proxy *proxy = ScriptObjectV8Proxy::unwrapProxy(V8ScriptValue(_v8Isolate, v8ParentObject)); + // If object is ScriptObjectV8Proxy, then setting property needs to be handled differently + if (proxy) { + v8ObjectToSetProperty = v8ParentObject->GetInternalField(2).As(); + } else { + v8ObjectToSetProperty = v8ParentObject; + } + if (!v8ObjectToSetProperty->DefineProperty(getContext(), v8propertyName, propertyDescriptor).FromMaybe(false)) { qCDebug(scriptengine) << "DefineProperty failed for registerGetterSetter \"" << name << "\" for parent: \"" << parent << "\""; } diff --git a/scripts/system/places/places.js b/scripts/system/places/places.js index ab986c1452..bd75b41129 100644 --- a/scripts/system/places/places.js +++ b/scripts/system/places/places.js @@ -80,7 +80,7 @@ transmitPortalList(); sendCurrentLocationToUI(); - + } else if (messageObj.action === "TELEPORT" && (n - timestamp) > INTERCALL_DELAY) { d = new Date(); timestamp = d.getTime();