jsdialog: remember dialog instance & handle close
Change-Id: I1b10d12edfa7ffca1061f50b5219baae1ac3caeb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106706
Tested-by: Jenkins
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 13ffc1a..83d19fd 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -242,6 +242,18 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& rWidget, StringMap& rDat
}
}
}
else if (sControlType == "dialog")
{
auto pDialog = dynamic_cast<weld::Dialog*>(pWidget);
if (pDialog)
{
if (sAction == "close")
{
pDialog->response(RET_CANCEL);
return true;
}
}
}
}
return false;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 58c8c64..13b4380 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -365,6 +365,9 @@ std::unique_ptr<weld::Dialog> JSInstanceBuilder::weld_dialog(const OString& id)
std::unique_ptr<weld::Dialog> pRet(pDialog ? new JSDialog(m_aOwnedToplevel, m_aOwnedToplevel,
pDialog, this, false, m_sTypeOfJSON)
: nullptr);
RememberWidget("__DIALOG__", pRet.get());
if (pDialog)
{
assert(!m_aOwnedToplevel && "only one toplevel per .ui allowed");