diff --git a/compilerplugins/clang/badstatics.cxx b/compilerplugins/clang/badstatics.cxx index bb4663f71e35..aa16d44b7d42 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 e4456af57666..4484292fea95 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> aWidgets; + jsdialog::WidgetRegister> aPopups; + jsdialog::WidgetRegister 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> m_aWidgets; - static jsdialog::WidgetRegister> m_aPopups; - static jsdialog::WidgetRegister m_aMenus; - sal_uInt64 m_nWindowId; /// used in case of tab pages where dialog is not a direct top level VclPtr m_aParentDialog; @@ -208,13 +212,19 @@ public: const vcl::ILibreOfficeKitNotifier* pNotifier = nullptr); // regular widgets - static jsdialog::WidgetRegister>& Widgets() { return m_aWidgets; }; + static jsdialog::WidgetRegister>& Widgets() + { + return m_aWidgetRegister.aWidgets; + }; // we need to remember original popup window to close it properly (its handled by vcl) - static jsdialog::WidgetRegister>& Popups() { return m_aPopups; } + static jsdialog::WidgetRegister>& Popups() + { + return m_aWidgetRegister.aPopups; + } // menus in separate container as they don't share base class with weld::Widget - static jsdialog::WidgetRegister& Menus() { return m_aMenus; } + static jsdialog::WidgetRegister& 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 #include -jsdialog::WidgetRegister> JSInstanceBuilder::m_aWidgets; -jsdialog::WidgetRegister> JSInstanceBuilder::m_aPopups; -jsdialog::WidgetRegister JSInstanceBuilder::m_aMenus; +JSInstanceBuilder::JSDialogRegister JSInstanceBuilder::m_aWidgetRegister; OUString JSInstanceBuilder::getMapIdFromWindowId() const {