diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2020-03-05 12:18:38 +0100 |
---|---|---|
committer | Szymon Kłos <szymon.klos@collabora.com> | 2020-06-19 11:16:48 +0200 |
commit | 6bbc740b72f1629c82440b3b4f09849d3d49c01a (patch) | |
tree | dd919b95e5b00869a50c3048949e44f851e7fc8e /vcl/jsdialog | |
parent | 3bb145bd4665a871491b08f75057223bab798d45 (diff) |
jsdialog: Remember builder connected with LOK window id
Change-Id: I9e38fe570b2296341c1694fe8128da30ba209494
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94184
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94616
Tested-by: Jenkins
Diffstat (limited to 'vcl/jsdialog')
-rw-r--r-- | vcl/jsdialog/jsdialogbuilder.cxx | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index 759007ce46d1..938cf471cc76 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1,4 +1,4 @@ -#include <jsdialog/jsdialogbuilder.hxx> +#include <vcl/jsdialog/jsdialogbuilder.hxx> #include <sal/log.hxx> #include <boost/property_tree/json_parser.hpp> #include <comphelper/lok.hxx> @@ -29,12 +29,41 @@ JSInstanceBuilder::JSInstanceBuilder(weld::Widget* pParent, const OUString& rUIR ? dynamic_cast<SalInstanceWidget*>(pParent)->getWidget() : nullptr, rUIRoot, rUIFile) + , m_nWindowId(0) { } +JSInstanceBuilder::~JSInstanceBuilder() +{ + if (m_nWindowId) + GetLOKWeldBuilderMap().erase(m_nWindowId); +} + +std::map<vcl::LOKWindowId, JSInstanceBuilder*>& JSInstanceBuilder::GetLOKWeldBuilderMap() +{ + // Map to remember the LOKWindowId <-> Builder binding. + static std::map<vcl::LOKWindowId, JSInstanceBuilder*> s_aLOKWeldBuildersMap; + + return s_aLOKWeldBuildersMap; +} + +JSInstanceBuilder* JSInstanceBuilder::FindLOKWeldBuilder(vcl::LOKWindowId nWindowId) +{ + const auto it = GetLOKWeldBuilderMap().find(nWindowId); + if (it != GetLOKWeldBuilderMap().end()) + return it->second; + + return nullptr; +} + std::unique_ptr<weld::Dialog> JSInstanceBuilder::weld_dialog(const OString& id, bool bTakeOwnership) { ::Dialog* pDialog = m_xBuilder->get<::Dialog>(id); + m_nWindowId = pDialog->GetLOKWindowId(); + + GetLOKWeldBuilderMap().insert( + std::map<vcl::LOKWindowId, JSInstanceBuilder*>::value_type(m_nWindowId, this)); + std::unique_ptr<weld::Dialog> pRet(pDialog ? new SalInstanceDialog(pDialog, this, false) : nullptr); if (bTakeOwnership && pDialog) |