diff options
author | Stephan Bergmann <stephan.bergmann@allotropia.de> | 2025-02-18 13:43:39 +0100 |
---|---|---|
committer | Stephan Bergmann <stephan.bergmann@allotropia.de> | 2025-02-18 16:01:25 +0100 |
commit | 46cadd6b03294202ac27f1c3587d66e08e0b797e (patch) | |
tree | 71ea4c0e531dc9408d69da7de014893fc3447e8e | |
parent | 0b7e2e77b745a5f510b5192f487aab4bf8a8ab20 (diff) |
Some more need for EmscriptenLightweightRunInMainThread
This code can be reached e.g. when
<https://github.com/allotropia/zetajs/blob/main/examples/simple-examples/rainbow_writer.js>
is executed not on the main browser thread,
> Aborted(Assertion failed: invalid handle: 14)
> threadPrintErr @ soffice.js:900
> abort @ soffice.js:1202
> assert @ soffice.js:658
> toValue @ soffice.js:7308
> __emval_call_method @ soffice.js:9856
> $QWasmWindow::frameMargins() const @ soffice.wasm:0x83de160
> $QWasmWindow::setGeometry(QRect const&) @ soffice.wasm:0x83dd1a6
> $QWindow::setGeometry(QRect const&) @ soffice.wasm:0x7cfd8a1
> $QWindow::setPosition(int, int) @ soffice.wasm:0x7cff114
> $QWidgetPrivate::setGeometry_sys(int, int, int, int, bool) @ soffice.wasm:0x8041fd9
> $QWidget::move(QPoint const&) @ soffice.wasm:0x80419ab
> $QtFrame::SetScreenNumber(unsigned int) @ soffice.wasm:0x65b5c61
> $QtFrame::ShowFullScreen(bool, long) @ soffice.wasm:0x65b418f
> $non-virtual thunk to QtFrame::ShowFullScreen(bool, long) @ soffice.wasm:0x65b4231
> $WorkWindow::ShowFullScreenMode(bool) @ soffice.wasm:0x1553b3f
> $VCLXTopWindow::setFullScreen(unsigned char) @ soffice.wasm:0x123f6b4
> $non-virtual thunk to VCLXTopWindow::setFullScreen(unsigned char) @ soffice.wasm:0x123f727
> $callVirtualFunction_vii @ soffice.wasm:0x659ab75
> $callVirtualFunction(std::__2::basic_string_view<char, std::__2::char_traits<char>>, unsigned long, unsigned long long const*, void*) @ soffice.wasm:0x6526a40
> $(anonymous namespace)::call(bridges::cpp_uno::shared::UnoInterfaceProxy*, bridges::cpp_uno::shared::VtableSlot, _typelib_TypeDescriptionReference*, long, _typelib_MethodParameter*, void*, void**, _uno_Any**) @ soffice.wasm:0x651f2ea
> $unoInterfaceProxyDispatch @ soffice.wasm:0x651e742
> $stoc_corefl::(anonymous namespace)::IdlAttributeFieldImpl::set(com::sun::star::uno::Any&, com::sun::star::uno::Any const&) @ soffice.wasm:0x64ec9ec
> $non-virtual thunk to stoc_corefl::(anonymous namespace)::IdlAttributeFieldImpl::set(com::sun::star::uno::Any&, com::sun::star::uno::Any const&) @ soffice.wasm:0x64ecb76
> $(anonymous namespace)::ImplIntrospectionAccess::setPropertyValue(rtl::OUString const&, com::sun::star::uno::Any const&) @ soffice.wasm:0x64a4ec4
> $non-virtual thunk to (anonymous namespace)::ImplIntrospectionAccess::setPropertyValue(rtl::OUString const&, com::sun::star::uno::Any const&) @ soffice.wasm:0x64a8b18
> $stoc_inv::(anonymous namespace)::Invocation_Impl::setValue(rtl::OUString const&, com::sun::star::uno::Any const&) @ soffice.wasm:0x64b3e81
> $non-virtual thunk to stoc_inv::(anonymous namespace)::Invocation_Impl::setValue(rtl::OUString const&, com::sun::star::uno::Any const&) @ soffice.wasm:0x64b66bc
> $emscripten::internal::MethodInvoker<emscripten::internal::rvp::default_tag, void (com::sun::star::script::XInvocation::*)(rtl::OUString const&, com::sun::star::uno::Any const&), void, com::sun::star::script::XInvocation*, rtl::OUString const&, com::sun::star::uno::Any const&>::invoke(void (com::sun::star::script::XInvocation::* const&)(rtl::OUString const&, com::sun::star::uno::Any const&), com::sun::star::script::XInvocation*, rtl::OUString*, com::sun::star::uno::Any*) @ soffice.wasm:0x48dbe6
> uno_Type_com$sun$star$script$XInvocation.setValue @ VM1145:10
> invokeSetter @ zeta.js:444
> Object.defineProperty.set @ zeta.js:485
> (anonymous) @ rainbow_writer.js:36
> setInterval
> demo @ rainbow_writer.js:36
Change-Id: I9380e2aba1d87cef6ce858b7755bdd3f01484021
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181832
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
-rw-r--r-- | vcl/qt5/QtFrame.cxx | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/vcl/qt5/QtFrame.cxx b/vcl/qt5/QtFrame.cxx index e7f12183bbc5..ff20afa94363 100644 --- a/vcl/qt5/QtFrame.cxx +++ b/vcl/qt5/QtFrame.cxx @@ -1333,7 +1333,8 @@ void QtFrame::SetScreenNumber(unsigned int nScreen) // setScreen by itself has no effect, explicitly move the widget to // the new screen - asChild()->move(screenGeo.topLeft()); + GetQtInstance().EmscriptenLightweightRunInMainThread( + [ child = asChild(), topLeft = screenGeo.topLeft() ] { child->move(topLeft); }); } void QtFrame::SetApplicationID(const OUString& rWMClass) |