compilerplugins/clang/badstatics.cxx | 4 +--- vcl/inc/jsdialog/jsdialogbuilder.hxx | 24 +++++++++++++++++------- vcl/jsdialog/jsdialogregister.cxx | 4 +--- 3 files changed, 19 insertions(+), 13 deletions(-)
New commits: commit 41a2c9894e40cfb9ed99081b5c5cb1d6016b9ed5 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Thu Dec 12 09:37:42 2024 +0100 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Thu Dec 12 13:08:08 2024 +0100 jsdialog: use single static register followup for commit 13af671fda1317175a93fd747e5455ce897ed167 jsdialog: share code for widget registry this way we avoid modyfying compilerplugins every time we add new thing we need to remember Change-Id: I6b750175e7dcb31d62666f53c9275a2c5d879150 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178344 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/compilerplugins/clang/badstatics.cxx b/compilerplugins/clang/badstatics.cxx index 6f6a99b535f6..0d9929fb4f68 100644 --- a/compilerplugins/clang/badstatics.cxx +++ b/compilerplugins/clang/badstatics.cxx @@ -209,9 +209,7 @@ public: .Class("ScDocument").GlobalNamespace()) // not owning || name == "s_aLOKWindowsMap" // LOK only, guarded by assert, and LOK never tries to perform a VCL cleanup // vcl/inc/jsdialog/jsdialogbuilder.hxx - || name == "m_aWidgets" // LOK only, similar case as above - || name == "m_aPopups" // LOK only, similar case as above - || name == "m_aMenus" // LOK only, similar case as above + || name == "m_aWidgetRegister" // LOK only, similar case as above // || name == "gNotebookBarManager" // LOK only case, when notebookbar is closed - VclPtr instance is removed || name == "gStaticManager" // vcl/source/graphic/Manager.cxx - stores non-owning pointers diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index fc8f13fdd502..4bcc839f07fb 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -83,6 +83,14 @@ class JSInstanceBuilder final : public SalInstanceBuilder, public JSDialogSender Menu, }; + struct JSDialogRegister + { + jsdialog::WidgetRegister<std::shared_ptr<WidgetMap>> aWidgets; + jsdialog::WidgetRegister<VclPtr<vcl::Window>> aPopups; + jsdialog::WidgetRegister<weld::Menu*> aMenus; + }; + static JSDialogRegister m_aWidgetRegister; + void initializeDialogSender(); void initializePopupSender(); void initializeSidebarSender(sal_uInt64 nLOKWindowId, const std::u16string_view& rUIFile); @@ -91,10 +99,6 @@ class JSInstanceBuilder final : public SalInstanceBuilder, public JSDialogSender vcl::Window* pVclParent); void initializeMenuSender(weld::Widget* pParent); - static jsdialog::WidgetRegister<std::shared_ptr<WidgetMap>> m_aWidgets; - static jsdialog::WidgetRegister<VclPtr<vcl::Window>> m_aPopups; - static jsdialog::WidgetRegister<weld::Menu*> m_aMenus; - sal_uInt64 m_nWindowId; /// used in case of tab pages where dialog is not a direct top level VclPtr<vcl::Window> m_aParentDialog; @@ -208,13 +212,19 @@ public: const vcl::ILibreOfficeKitNotifier* pNotifier = nullptr); // regular widgets - static jsdialog::WidgetRegister<std::shared_ptr<WidgetMap>>& Widgets() { return m_aWidgets; }; + static jsdialog::WidgetRegister<std::shared_ptr<WidgetMap>>& Widgets() + { + return m_aWidgetRegister.aWidgets; + }; // we need to remember original popup window to close it properly (its handled by vcl) - static jsdialog::WidgetRegister<VclPtr<vcl::Window>>& Popups() { return m_aPopups; } + static jsdialog::WidgetRegister<VclPtr<vcl::Window>>& Popups() + { + return m_aWidgetRegister.aPopups; + } // menus in separate container as they don't share base class with weld::Widget - static jsdialog::WidgetRegister<weld::Menu*>& Menus() { return m_aMenus; } + static jsdialog::WidgetRegister<weld::Menu*>& Menus() { return m_aWidgetRegister.aMenus; } private: const OUString& GetTypeOfJSON() const; diff --git a/vcl/jsdialog/jsdialogregister.cxx b/vcl/jsdialog/jsdialogregister.cxx index 66f4d21fa349..fc2ceb845dc9 100644 --- a/vcl/jsdialog/jsdialogregister.cxx +++ b/vcl/jsdialog/jsdialogregister.cxx @@ -10,9 +10,7 @@ #include <jsdialog/jsdialogregister.hxx> #include <jsdialog/jsdialogbuilder.hxx> -jsdialog::WidgetRegister<std::shared_ptr<WidgetMap>> JSInstanceBuilder::m_aWidgets; -jsdialog::WidgetRegister<VclPtr<vcl::Window>> JSInstanceBuilder::m_aPopups; -jsdialog::WidgetRegister<weld::Menu*> JSInstanceBuilder::m_aMenus; +JSInstanceBuilder::JSDialogRegister JSInstanceBuilder::m_aWidgetRegister; OUString JSInstanceBuilder::getMapIdFromWindowId() const {