vcl/inc/jsdialog/jsdialogbuilder.hxx | 1 + vcl/jsdialog/jsdialogbuilder.cxx | 12 ++++++++++++ 2 files changed, 13 insertions(+)
New commits: commit ccd514c6fa759181a41706ba8cf6205e89b05e0f Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Tue Nov 3 13:27:47 2020 +0100 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Mon Nov 30 15:03:23 2020 +0100 jsdialog: cleanup when destroying builder Change-Id: I38bf65eb96b560970fb03eafaea89446e89a2896 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106568 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 0682cc0d1bc5..709030d0c931 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -64,6 +64,7 @@ class JSInstanceBuilder : public SalInstanceBuilder /// used in case of tab pages where dialog is not a direct top level VclPtr<vcl::Window> m_aParentDialog; VclPtr<vcl::Window> m_aContentWindow; + std::list<std::string> m_aRememberedWidgets; std::string m_sTypeOfJSON; bool m_bHasTopLevelDialog; bool m_bIsNotebookbar; diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index 92f0dc9769ea..827cb6aaa44d 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -167,7 +167,18 @@ JSInstanceBuilder* JSInstanceBuilder::CreateAutofilterWindowBuilder(vcl::Window* JSInstanceBuilder::~JSInstanceBuilder() { if (m_nWindowId && (m_bHasTopLevelDialog || m_bIsNotebookbar)) + { GetLOKWeldWidgetsMap().erase(m_nWindowId); + } + else + { + auto it = GetLOKWeldWidgetsMap().find(m_nWindowId); + if (it != GetLOKWeldWidgetsMap().end()) + { + std::for_each(m_aRememberedWidgets.begin(), m_aRememberedWidgets.end(), + [it](std::string& sId) { it->second.erase(sId.c_str()); }); + } + } } std::map<sal_uInt64, WidgetMap>& JSInstanceBuilder::GetLOKWeldWidgetsMap() @@ -207,6 +218,7 @@ void JSInstanceBuilder::RememberWidget(const OString& id, weld::Widget* pWidget) { it->second.erase(id); it->second.insert(WidgetMap::value_type(id, pWidget)); + m_aRememberedWidgets.push_back(id.getStr()); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits