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
 {

Reply via email to