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 <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179622
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Tested-by: Jenkins
This commit is contained in:
Szymon Kłos
2025-01-02 16:55:56 +01:00
parent 0a78f5de99
commit 389e7d4bc5
3 changed files with 19 additions and 13 deletions
+1 -3
View File
@@ -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
+17 -7
View File
@@ -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;
+1 -3
View File
@@ -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
{