toolkit/source/helper/unowrapper.cxx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
New commits: commit 481a435d1ea2ab210c826fe77b632fc76b8f830e Author: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> AuthorDate: Thu Jun 2 15:51:47 2022 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> CommitDate: Tue Jun 7 08:36:29 2022 +0200 Fix leak with stock widgets in a dialog from an extension When loading a dialog from XDL, buttons can have dlg:button-type="cancel" or dlg:button-type="help". These buttons might not have a peer when they are not referenced from the extension. In this case, they also weren't disposed when the dialog was disposed, leading to an abort on exit. Change-Id: I799d7535b766984fde47cafbe41ee6e89e476205 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135316 Tested-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> diff --git a/toolkit/source/helper/unowrapper.cxx b/toolkit/source/helper/unowrapper.cxx index 13fa5aeb7537..938aa8d75983 100644 --- a/toolkit/source/helper/unowrapper.cxx +++ b/toolkit/source/helper/unowrapper.cxx @@ -224,10 +224,13 @@ void UnoWrapper::WindowDestroyed( vcl::Window* pWindow ) VclPtr< vcl::Window > pNextChild = pChild->GetWindow( GetWindowType::Next ); VclPtr< vcl::Window > pClient = pChild->GetWindow( GetWindowType::Client ); - if ( pClient && pClient->GetWindowPeer() ) + if ( pClient ) { - css::uno::Reference< css::lang::XComponent > xComp = pClient->GetComponentInterface( false ); - xComp->dispose(); + // Create the window peer (true argument for pClient->GetComponentInterface) when it's not yet there. + // We need it to dispose the child windows properly, otherwise the vcl::Window will be leaked. + css::uno::Reference< css::lang::XComponent > xComp = pClient->GetComponentInterface( true ); + if (xComp.is()) + xComp->dispose(); } pChild = pNextChild;