[Libreoffice-commits] core.git: chart2/source cui/source extensions/source include/svx reportdesign/source sc/source sd/source svx/source sw/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Tue Mar 9 09:09:46 UTC 2021


 chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx |    4 -
 cui/source/options/optcolor.cxx                              |    2 
 cui/source/tabpages/border.cxx                               |    6 +-
 cui/source/tabpages/chardlg.cxx                              |    9 ++-
 cui/source/tabpages/numpages.cxx                             |    3 -
 cui/source/tabpages/tpgradnt.cxx                             |    6 +-
 cui/source/tabpages/tphatch.cxx                              |    6 +-
 cui/source/tabpages/tpline.cxx                               |    3 -
 cui/source/tabpages/tppattern.cxx                            |    6 +-
 cui/source/tabpages/tpshadow.cxx                             |    3 -
 extensions/source/propctrlr/propcontroller.cxx               |    4 -
 include/svx/colorbox.hxx                                     |    7 +-
 include/svx/colorwindow.hxx                                  |   13 ++--
 include/svx/tbcontrl.hxx                                     |    2 
 reportdesign/source/ui/dlg/Condition.cxx                     |    4 -
 sc/source/ui/condformat/colorformat.cxx                      |    6 +-
 sc/source/ui/condformat/condformatdlgentry.cxx               |   10 +--
 sc/source/ui/dbgui/scendlg.cxx                               |    2 
 sc/source/ui/optdlg/opredlin.cxx                             |   12 ++--
 sc/source/ui/optdlg/tpview.cxx                               |    3 -
 sd/source/ui/animations/CustomAnimationDialog.cxx            |    4 -
 sd/source/ui/dlg/BulletAndPositionDlg.cxx                    |    3 -
 sd/source/ui/dlg/copydlg.cxx                                 |    4 -
 sd/source/ui/sidebar/SlideBackground.cxx                     |    6 +-
 svx/source/dialog/_bmpmask.cxx                               |   10 +--
 svx/source/dialog/fontwork.cxx                               |    2 
 svx/source/engine3d/float3d.cxx                              |   24 ++++----
 svx/source/sidebar/area/AreaPropertyPanelBase.cxx            |    4 -
 svx/source/sidebar/effect/EffectPropertyPanel.cxx            |    3 -
 svx/source/sidebar/shadow/ShadowPropertyPanel.cxx            |    2 
 svx/source/tbxctrls/tbcontrl.cxx                             |   32 +++++------
 sw/source/ui/config/optpage.cxx                              |   12 ++--
 sw/source/ui/frmdlg/column.cxx                               |    3 -
 sw/source/ui/misc/pgfnote.cxx                                |    3 -
 sw/source/ui/misc/pggrid.cxx                                 |    3 -
 sw/source/uibase/dialog/watermarkdialog.cxx                  |    2 
 sw/source/uibase/sidebar/PageStylesPanel.cxx                 |    4 -
 37 files changed, 133 insertions(+), 99 deletions(-)

New commits:
commit 862fd2fa19b64972247bde9b171ec828a30e1676
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Mar 8 17:18:06 2021 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Mar 9 10:08:45 2021 +0100

    defer getting toplevel for color picker until we need it
    
    Change-Id: I60f4ded47f7d80b397647ea3344e83a5dfd1b11e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112183
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx
index 16fd2d2c9f56..c4b28162d08c 100644
--- a/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx
+++ b/chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx
@@ -201,9 +201,9 @@ ThreeD_SceneIllumination_TabPage::ThreeD_SceneIllumination_TabPage(weld::Contain
     , m_xBtn_Light6(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_6")))
     , m_xBtn_Light7(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_7")))
     , m_xBtn_Light8(new LightButton(m_xBuilder->weld_toggle_button("BTN_LIGHT_8")))
-    , m_xLB_LightSource(new ColorListBox(m_xBuilder->weld_menu_button("LB_LIGHTSOURCE"), pTopLevel))
+    , m_xLB_LightSource(new ColorListBox(m_xBuilder->weld_menu_button("LB_LIGHTSOURCE"), [this]{ return m_pTopLevel; }))
     , m_xBtn_LightSource_Color(m_xBuilder->weld_button("BTN_LIGHTSOURCE_COLOR"))
-    , m_xLB_AmbientLight(new ColorListBox(m_xBuilder->weld_menu_button("LB_AMBIENTLIGHT"), pTopLevel))
+    , m_xLB_AmbientLight(new ColorListBox(m_xBuilder->weld_menu_button("LB_AMBIENTLIGHT"), [this]{ return m_pTopLevel; }))
     , m_xBtn_AmbientLight_Color(m_xBuilder->weld_button("BTN_AMBIENT_COLOR"))
     , m_xHoriScale(m_xBuilder->weld_scale("hori"))
     , m_xVertScale(m_xBuilder->weld_scale("vert"))
diff --git a/cui/source/options/optcolor.cxx b/cui/source/options/optcolor.cxx
index c17e9a1ce5c0..8567189e6cc4 100644
--- a/cui/source/options/optcolor.cxx
+++ b/cui/source/options/optcolor.cxx
@@ -281,7 +281,7 @@ ColorConfigWindow_Impl::Entry::Entry(weld::Window* pTopLevel, weld::Builder& rBu
                                      const char* pTextWidget, const char* pColorWidget,
                                      const Color& rColor,
                                      tools::Long nCheckBoxLabelOffset, bool bCheckBox, bool bShow)
-    : m_xColorList(new ColorListBox(rBuilder.weld_menu_button(pColorWidget), pTopLevel))
+    : m_xColorList(new ColorListBox(rBuilder.weld_menu_button(pColorWidget), [pTopLevel]{ return pTopLevel; }))
     , m_aDefaultColor(rColor)
 {
     if (bCheckBox)
diff --git a/cui/source/tabpages/border.cxx b/cui/source/tabpages/border.cxx
index cb7429928d44..8e6a7fa8f3c2 100644
--- a/cui/source/tabpages/border.cxx
+++ b/cui/source/tabpages/border.cxx
@@ -292,7 +292,8 @@ SvxBorderTabPage::SvxBorderTabPage(weld::Container* pPage, weld::DialogControlle
     , m_xUserDefFT(m_xBuilder->weld_label("userdefft"))
     , m_xFrameSelWin(new weld::CustomWeld(*m_xBuilder, "framesel", m_aFrameSel))
     , m_xLbLineStyle(new SvtLineListBox(m_xBuilder->weld_menu_button("linestylelb")))
-    , m_xLbLineColor(new ColorListBox(m_xBuilder->weld_menu_button("linecolorlb"), pController->getDialog()))
+    , m_xLbLineColor(new ColorListBox(m_xBuilder->weld_menu_button("linecolorlb"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xLineWidthMF(m_xBuilder->weld_metric_spin_button("linewidthmf", FieldUnit::POINT))
     , m_xSpacingFrame(m_xBuilder->weld_container("spacing"))
     , m_xLeftFT(m_xBuilder->weld_label("leftft"))
@@ -310,7 +311,8 @@ SvxBorderTabPage::SvxBorderTabPage(weld::Container* pPage, weld::DialogControlle
     , m_xFtShadowSize(m_xBuilder->weld_label("distanceft"))
     , m_xEdShadowSize(m_xBuilder->weld_metric_spin_button("distancemf", FieldUnit::MM))
     , m_xFtShadowColor(m_xBuilder->weld_label("shadowcolorft"))
-    , m_xLbShadowColor(new ColorListBox(m_xBuilder->weld_menu_button("shadowcolorlb"), pController->getDialog()))
+    , m_xLbShadowColor(new ColorListBox(m_xBuilder->weld_menu_button("shadowcolorlb"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xPropertiesFrame(m_xBuilder->weld_container("properties"))
     , m_xMergeWithNextCB(m_xBuilder->weld_check_button("mergewithnext"))
     , m_xMergeAdjacentBordersCB(m_xBuilder->weld_check_button("mergeadjacent"))
diff --git a/cui/source/tabpages/chardlg.cxx b/cui/source/tabpages/chardlg.cxx
index 6a35b45ba46f..836739d44f86 100644
--- a/cui/source/tabpages/chardlg.cxx
+++ b/cui/source/tabpages/chardlg.cxx
@@ -1308,7 +1308,8 @@ SvxCharEffectsPage::SvxCharEffectsPage(weld::Container* pPage, weld::DialogContr
     , m_bNewFontColor(false)
     , m_bEnableNoneFontColor(false)
     , m_xFontColorFT(m_xBuilder->weld_label("fontcolorft"))
-    , m_xFontColorLB(new ColorListBox(m_xBuilder->weld_menu_button("fontcolorlb"), pController->getDialog()))
+    , m_xFontColorLB(new ColorListBox(m_xBuilder->weld_menu_button("fontcolorlb"),
+        [this]{ return GetDialogController()->getDialog(); }))
     , m_xFontTransparencyFT(m_xBuilder->weld_label("fonttransparencyft"))
     , m_xFontTransparencyMtr(
           m_xBuilder->weld_metric_spin_button("fonttransparencymtr", FieldUnit::PERCENT))
@@ -1321,11 +1322,13 @@ SvxCharEffectsPage::SvxCharEffectsPage(weld::Container* pPage, weld::DialogContr
     , m_xHiddenBtn(m_xBuilder->weld_check_button("hiddencb"))
     , m_xOverlineLB(m_xBuilder->weld_combo_box("overlinelb"))
     , m_xOverlineColorFT(m_xBuilder->weld_label("overlinecolorft"))
-    , m_xOverlineColorLB(new ColorListBox(m_xBuilder->weld_menu_button("overlinecolorlb"), pController->getDialog()))
+    , m_xOverlineColorLB(new ColorListBox(m_xBuilder->weld_menu_button("overlinecolorlb"),
+        [this]{ return GetDialogController()->getDialog(); }))
     , m_xStrikeoutLB(m_xBuilder->weld_combo_box("strikeoutlb"))
     , m_xUnderlineLB(m_xBuilder->weld_combo_box("underlinelb"))
     , m_xUnderlineColorFT(m_xBuilder->weld_label("underlinecolorft"))
-    , m_xUnderlineColorLB(new ColorListBox(m_xBuilder->weld_menu_button("underlinecolorlb"), pController->getDialog()))
+    , m_xUnderlineColorLB(new ColorListBox(m_xBuilder->weld_menu_button("underlinecolorlb"),
+        [this]{ return GetDialogController()->getDialog(); }))
     , m_xIndividualWordsBtn(m_xBuilder->weld_check_button("individualwordscb"))
     , m_xEmphasisFT(m_xBuilder->weld_label("emphasisft"))
     , m_xEmphasisLB(m_xBuilder->weld_combo_box("emphasislb"))
diff --git a/cui/source/tabpages/numpages.cxx b/cui/source/tabpages/numpages.cxx
index 48f1a246b0ce..f93ebc8ed497 100644
--- a/cui/source/tabpages/numpages.cxx
+++ b/cui/source/tabpages/numpages.cxx
@@ -1032,7 +1032,8 @@ SvxNumOptionsTabPage::SvxNumOptionsTabPage(weld::Container* pPage, weld::DialogC
     , m_xCharFmtFT(m_xBuilder->weld_label("charstyleft"))
     , m_xCharFmtLB(m_xBuilder->weld_combo_box("charstyle"))
     , m_xBulColorFT(m_xBuilder->weld_label("colorft"))
-    , m_xBulColLB(new ColorListBox(m_xBuilder->weld_menu_button("color"), pController->getDialog()))
+    , m_xBulColLB(new ColorListBox(m_xBuilder->weld_menu_button("color"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xBulRelSizeFT(m_xBuilder->weld_label("relsizeft"))
     , m_xBulRelSizeMF(m_xBuilder->weld_metric_spin_button("relsize", FieldUnit::PERCENT))
     , m_xAllLevelFT(m_xBuilder->weld_label("sublevelsft"))
diff --git a/cui/source/tabpages/tpgradnt.cxx b/cui/source/tabpages/tpgradnt.cxx
index 573659a471aa..51f6ecca35db 100644
--- a/cui/source/tabpages/tpgradnt.cxx
+++ b/cui/source/tabpages/tpgradnt.cxx
@@ -56,9 +56,11 @@ SvxGradientTabPage::SvxGradientTabPage(weld::Container* pPage, weld::DialogContr
     , m_xSliderAngle(m_xBuilder->weld_scale("angleslider"))
     , m_xMtrBorder(m_xBuilder->weld_metric_spin_button("bordermtr", FieldUnit::PERCENT))
     , m_xSliderBorder(m_xBuilder->weld_scale("borderslider"))
-    , m_xLbColorFrom(new ColorListBox(m_xBuilder->weld_menu_button("colorfromlb"), pController->getDialog()))
+    , m_xLbColorFrom(new ColorListBox(m_xBuilder->weld_menu_button("colorfromlb"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xMtrColorFrom(m_xBuilder->weld_metric_spin_button("colorfrommtr", FieldUnit::PERCENT))
-    , m_xLbColorTo(new ColorListBox(m_xBuilder->weld_menu_button("colortolb"), pController->getDialog()))
+    , m_xLbColorTo(new ColorListBox(m_xBuilder->weld_menu_button("colortolb"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xMtrColorTo(m_xBuilder->weld_metric_spin_button("colortomtr", FieldUnit::PERCENT))
     , m_xGradientLB(new SvxPresetListBox(m_xBuilder->weld_scrolled_window("gradientpresetlistwin", true)))
     , m_xMtrIncrement(m_xBuilder->weld_spin_button("incrementmtr"))
diff --git a/cui/source/tabpages/tphatch.cxx b/cui/source/tabpages/tphatch.cxx
index ec391dba935d..57d34031fe00 100644
--- a/cui/source/tabpages/tphatch.cxx
+++ b/cui/source/tabpages/tphatch.cxx
@@ -54,9 +54,11 @@ SvxHatchTabPage::SvxHatchTabPage(weld::Container* pPage, weld::DialogController*
     , m_xMtrAngle(m_xBuilder->weld_metric_spin_button("anglemtr", FieldUnit::DEGREE))
     , m_xSliderAngle(m_xBuilder->weld_scale("angleslider"))
     , m_xLbLineType(m_xBuilder->weld_combo_box("linetypelb"))
-    , m_xLbLineColor(new ColorListBox(m_xBuilder->weld_menu_button("linecolorlb"), pController->getDialog()))
+    , m_xLbLineColor(new ColorListBox(m_xBuilder->weld_menu_button("linecolorlb"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xCbBackgroundColor(m_xBuilder->weld_check_button("backgroundcolor"))
-    , m_xLbBackgroundColor(new ColorListBox(m_xBuilder->weld_menu_button("backgroundcolorlb"), pController->getDialog()))
+    , m_xLbBackgroundColor(new ColorListBox(m_xBuilder->weld_menu_button("backgroundcolorlb"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xHatchLB(new SvxPresetListBox(m_xBuilder->weld_scrolled_window("hatchpresetlistwin", true)))
     , m_xBtnAdd(m_xBuilder->weld_button("add"))
     , m_xBtnModify(m_xBuilder->weld_button("modify"))
diff --git a/cui/source/tabpages/tpline.cxx b/cui/source/tabpages/tpline.cxx
index 2a9fc74cc429..796eda3c51f2 100644
--- a/cui/source/tabpages/tpline.cxx
+++ b/cui/source/tabpages/tpline.cxx
@@ -102,7 +102,8 @@ SvxLineTabPage::SvxLineTabPage(weld::Container* pPage, weld::DialogController* p
     , m_pPosLineEndLb(nullptr)
     , m_xBoxColor(m_xBuilder->weld_widget("boxCOLOR"))
     , m_xLbLineStyle(new SvxLineLB(m_xBuilder->weld_combo_box("LB_LINE_STYLE")))
-    , m_xLbColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_COLOR"), pController->getDialog()))
+    , m_xLbColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_COLOR"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xBoxWidth(m_xBuilder->weld_widget("boxWIDTH"))
     , m_xMtrLineWidth(m_xBuilder->weld_metric_spin_button("MTR_FLD_LINE_WIDTH", FieldUnit::CM))
     , m_xBoxTransparency(m_xBuilder->weld_widget("boxTRANSPARENCY"))
diff --git a/cui/source/tabpages/tppattern.cxx b/cui/source/tabpages/tppattern.cxx
index 9dfa12799c93..598ffb5304be 100644
--- a/cui/source/tabpages/tppattern.cxx
+++ b/cui/source/tabpages/tppattern.cxx
@@ -77,8 +77,10 @@ SvxPatternTabPage::SvxPatternTabPage(weld::Container* pPage, weld::DialogControl
     , m_aXFillAttr(rInAttrs.GetPool())
     , m_rXFSet(m_aXFillAttr.GetItemSet())
     , m_xCtlPixel(new SvxPixelCtl(this))
-    , m_xLbColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_COLOR"), pController->getDialog()))
-    , m_xLbBackgroundColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_BACKGROUND_COLOR"), pController->getDialog()))
+    , m_xLbColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_COLOR"),
+                [this]{ return GetDialogController()->getDialog(); }))
+    , m_xLbBackgroundColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_BACKGROUND_COLOR"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xPatternLB(new SvxPresetListBox(m_xBuilder->weld_scrolled_window("patternpresetlistwin", true)))
     , m_xBtnAdd(m_xBuilder->weld_button("BTN_ADD"))
     , m_xBtnModify(m_xBuilder->weld_button("BTN_MODIFY"))
diff --git a/cui/source/tabpages/tpshadow.cxx b/cui/source/tabpages/tpshadow.cxx
index a02d7d6b92b8..64da825d685f 100644
--- a/cui/source/tabpages/tpshadow.cxx
+++ b/cui/source/tabpages/tpshadow.cxx
@@ -66,7 +66,8 @@ SvxShadowTabPage::SvxShadowTabPage(weld::Container* pPage, weld::DialogControlle
     , m_xTsbShowShadow(m_xBuilder->weld_check_button("TSB_SHOW_SHADOW"))
     , m_xGridShadow(m_xBuilder->weld_widget("gridSHADOW"))
     , m_xMtrDistance(m_xBuilder->weld_metric_spin_button("MTR_FLD_DISTANCE", FieldUnit::CM))
-    , m_xLbShadowColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_SHADOW_COLOR"), pController->getDialog()))
+    , m_xLbShadowColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_SHADOW_COLOR"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xMtrTransparent(m_xBuilder->weld_metric_spin_button("MTR_SHADOW_TRANSPARENT", FieldUnit::PERCENT))
     , m_xLbShadowBlurMetric(m_xBuilder->weld_metric_spin_button("LB_SHADOW_BLUR", FieldUnit::POINT))
     , m_xCtlPosition(new weld::CustomWeld(*m_xBuilder, "CTL_POSITION", m_aCtlPosition))
diff --git a/extensions/source/propctrlr/propcontroller.cxx b/extensions/source/propctrlr/propcontroller.cxx
index 4ed339fb2d42..1835501e5525 100644
--- a/extensions/source/propctrlr/propcontroller.cxx
+++ b/extensions/source/propctrlr/propcontroller.cxx
@@ -774,10 +774,10 @@ namespace pcr
 
             case PropertyControlType::ColorListBox:
             {
-                weld::Window* pTopLevel = PropertyHandlerHelper::getDialogParentFrame(m_xContext);
+                auto lambda = [this]{ return PropertyHandlerHelper::getDialogParentFrame(m_xContext); };
                 std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/colorlistbox.ui", m_xContext));
                 auto pMenuButton = xBuilder->weld_menu_button("colorlistbox");
-                rtl::Reference<OColorControl> pControl = new OColorControl(std::make_unique<ColorListBox>(std::move(pMenuButton), pTopLevel), std::move(xBuilder), bCreateReadOnly);
+                rtl::Reference<OColorControl> pControl = new OColorControl(std::make_unique<ColorListBox>(std::move(pMenuButton), lambda), std::move(xBuilder), bCreateReadOnly);
                 pControl->SetModifyHandler();
                 xControl = pControl;
                 break;
diff --git a/include/svx/colorbox.hxx b/include/svx/colorbox.hxx
index a8d5f368daac..c303a312820d 100644
--- a/include/svx/colorbox.hxx
+++ b/include/svx/colorbox.hxx
@@ -32,7 +32,6 @@ private:
     friend class ListBoxColorWrapper;
     std::unique_ptr<ColorWindow> m_xColorWindow;
     std::unique_ptr<weld::MenuButton> m_xButton;
-    weld::Window* m_pTopLevel;
     Link<ColorListBox&, void> m_aSelectedLink;
     ListBoxColorWrapper m_aColorWrapper;
     Color m_aAutoDisplayColor;
@@ -41,6 +40,7 @@ private:
     sal_uInt16 m_nSlotId;
     bool m_bShowNoneButton;
     std::shared_ptr<PaletteManager> m_xPaletteManager;
+    TopLevelParentFunction m_aTopLevelParentFunction;
     ColorStatus m_aColorStatus;
 
     void Selected(const NamedColor& rNamedColor);
@@ -51,8 +51,9 @@ private:
     DECL_LINK(ToggleHdl, weld::ToggleButton&, void);
 
 public:
-    // pTopLevelWindow will be used as parent for any color picker dialog created
-    ColorListBox(std::unique_ptr<weld::MenuButton> pControl, weld::Window* pTopLevelWindow);
+    // rTopLevelParentFunction will be used to get parent for any color picker dialog created
+    ColorListBox(std::unique_ptr<weld::MenuButton> pControl,
+                 TopLevelParentFunction const& rTopLevelParentFunction);
     ~ColorListBox();
 
     void SetSelectHdl(const Link<ColorListBox&, void>& rLink) { m_aSelectedLink = rLink; }
diff --git a/include/svx/colorwindow.hxx b/include/svx/colorwindow.hxx
index 136d7621c0e7..784f273e87a7 100644
--- a/include/svx/colorwindow.hxx
+++ b/include/svx/colorwindow.hxx
@@ -26,6 +26,8 @@
 #include <svx/Palette.hxx>
 #include <vcl/toolbox.hxx>
 
+typedef std::function<weld::Window*()> TopLevelParentFunction;
+
 namespace com::sun::star::frame { class XFrame; }
 
 class PaletteManager;
@@ -81,11 +83,11 @@ class SVXCORE_DLLPUBLIC ColorWindow final : public WeldToolbarPopup
 private:
     const sal_uInt16    theSlotId;
     OUString            maCommand;
-    weld::Window*       mpParentWindow;
     MenuOrToolMenuButton maMenuButton;
     std::shared_ptr<PaletteManager> mxPaletteManager;
-    ColorStatus&  mrColorStatus;
-    ColorSelectFunction  maColorSelectFunction;
+    ColorStatus& mrColorStatus;
+    TopLevelParentFunction maTopLevelParentFunction;
+    ColorSelectFunction maColorSelectFunction;
 
     std::unique_ptr<SvxColorValueSet> mxColorSet;
     std::unique_ptr<SvxColorValueSet> mxRecentColorSet;
@@ -113,8 +115,9 @@ public:
                 std::shared_ptr<PaletteManager> const & rPaletteManager,
                 ColorStatus& rColorStatus,
                 sal_uInt16 nSlotId,
-                const css::uno::Reference< css::frame::XFrame >& rFrame,
-                weld::Window* pParentWindow, const MenuOrToolMenuButton &rMenuButton,
+                const css::uno::Reference<css::frame::XFrame>& rFrame,
+                const MenuOrToolMenuButton &rMenuButton,
+                TopLevelParentFunction const& rTopLevelParentFunction,
                 ColorSelectFunction const& rColorSelectFunction);
     virtual ~ColorWindow() override;
     void                ShowNoneButton();
diff --git a/include/svx/tbcontrl.hxx b/include/svx/tbcontrl.hxx
index 995bbb05a1cb..aa1f421a4b1b 100644
--- a/include/svx/tbcontrl.hxx
+++ b/include/svx/tbcontrl.hxx
@@ -213,6 +213,8 @@ class SVXCORE_DLLPUBLIC SvxColorToolBoxControl final : public cppu::ImplInherita
     ColorSelectFunction m_aColorSelectFunction;
     DECL_LINK(SelectedHdl, const NamedColor&, void);
 
+    weld::Window* GetParentFrame() const;
+
 public:
     explicit SvxColorToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext );
     virtual ~SvxColorToolBoxControl() override;
diff --git a/reportdesign/source/ui/dlg/Condition.cxx b/reportdesign/source/ui/dlg/Condition.cxx
index 1b51d1998ac5..c4a05704c177 100644
--- a/reportdesign/source/ui/dlg/Condition.cxx
+++ b/reportdesign/source/ui/dlg/Condition.cxx
@@ -157,8 +157,8 @@ void Condition::SetBackgroundDropdownClick()
                             m_aColorStatus,
                             SID_BACKGROUND_COLOR,
                             nullptr,
-                            m_pDialog,
                             MenuOrToolMenuButton(m_xActions.get(), "background"),
+                            [this]{ return m_pDialog; },
                             m_aBackColorWrapper));
 
     m_xActions->set_item_popover("background", m_xBackColorFloat->getTopLevel());
@@ -172,8 +172,8 @@ void Condition::SetForegroundDropdownClick()
                             m_aColorStatus,
                             SID_ATTR_CHAR_COLOR2,
                             nullptr,
-                            m_pDialog,
                             MenuOrToolMenuButton(m_xActions.get(), "foreground"),
+                            [this]{ return m_pDialog; },
                             m_aForeColorWrapper));
 
     m_xActions->set_item_popover("foreground", m_xForeColorFloat->getTopLevel());
diff --git a/sc/source/ui/condformat/colorformat.cxx b/sc/source/ui/condformat/colorformat.cxx
index c4d2a79effd2..e74507776e25 100644
--- a/sc/source/ui/condformat/colorformat.cxx
+++ b/sc/source/ui/condformat/colorformat.cxx
@@ -74,9 +74,9 @@ ScDataBarSettingsDlg::ScDataBarSettingsDlg(weld::Window* pParent, const ScDataBa
     , maPos(rPos)
     , mxBtnOk(m_xBuilder->weld_button("ok"))
     , mxBtnCancel(m_xBuilder->weld_button("cancel"))
-    , mxLbPos(new ColorListBox(m_xBuilder->weld_menu_button("positive_colour"), pParent))
-    , mxLbNeg(new ColorListBox(m_xBuilder->weld_menu_button("negative_colour"), pParent))
-    , mxLbAxisCol(new ColorListBox(m_xBuilder->weld_menu_button("axis_colour"), pParent))
+    , mxLbPos(new ColorListBox(m_xBuilder->weld_menu_button("positive_colour"), [this]{ return m_xDialog.get(); }))
+    , mxLbNeg(new ColorListBox(m_xBuilder->weld_menu_button("negative_colour"), [this]{ return m_xDialog.get(); }))
+    , mxLbAxisCol(new ColorListBox(m_xBuilder->weld_menu_button("axis_colour"), [this]{ return m_xDialog.get(); }))
     , mxLbFillType(m_xBuilder->weld_combo_box("fill_type"))
     , mxLbTypeMin(m_xBuilder->weld_combo_box("min"))
     , mxLbTypeMax(m_xBuilder->weld_combo_box("max"))
diff --git a/sc/source/ui/condformat/condformatdlgentry.cxx b/sc/source/ui/condformat/condformatdlgentry.cxx
index d997a91fd429..9eb310528063 100644
--- a/sc/source/ui/condformat/condformatdlgentry.cxx
+++ b/sc/source/ui/condformat/condformatdlgentry.cxx
@@ -722,8 +722,8 @@ ScColorScale2FrmtEntry::ScColorScale2FrmtEntry(ScCondFormatList* pParent, ScDocu
     , mxLbEntryTypeMax(mxBuilder->weld_combo_box("colscalemax"))
     , mxEdMin(mxBuilder->weld_entry("edcolscalemin"))
     , mxEdMax(mxBuilder->weld_entry("edcolscalemax"))
-    , mxLbColMin(new ColorListBox(mxBuilder->weld_menu_button("lbcolmin"), pParent->GetFrameWeld()))
-    , mxLbColMax(new ColorListBox(mxBuilder->weld_menu_button("lbcolmax"), pParent->GetFrameWeld()))
+    , mxLbColMin(new ColorListBox(mxBuilder->weld_menu_button("lbcolmin"), [this]{ return mpParent->GetFrameWeld(); }))
+    , mxLbColMax(new ColorListBox(mxBuilder->weld_menu_button("lbcolmax"), [this]{ return mpParent->GetFrameWeld(); }))
     , mxFtMin(mxBuilder->weld_label("Label_minimum"))
     , mxFtMax(mxBuilder->weld_label("Label_maximum"))
 {
@@ -859,9 +859,9 @@ ScColorScale3FrmtEntry::ScColorScale3FrmtEntry(ScCondFormatList* pParent, ScDocu
     , mxEdMin(mxBuilder->weld_entry("edcolscalemin"))
     , mxEdMiddle(mxBuilder->weld_entry("edcolscalemiddle"))
     , mxEdMax(mxBuilder->weld_entry("edcolscalemax"))
-    , mxLbColMin(new ColorListBox(mxBuilder->weld_menu_button("lbcolmin"), pParent->GetFrameWeld()))
-    , mxLbColMiddle(new ColorListBox(mxBuilder->weld_menu_button("lbcolmiddle"), pParent->GetFrameWeld()))
-    , mxLbColMax(new ColorListBox(mxBuilder->weld_menu_button("lbcolmax"), pParent->GetFrameWeld()))
+    , mxLbColMin(new ColorListBox(mxBuilder->weld_menu_button("lbcolmin"), [this]{ return mpParent->GetFrameWeld(); }))
+    , mxLbColMiddle(new ColorListBox(mxBuilder->weld_menu_button("lbcolmiddle"), [this]{ return mpParent->GetFrameWeld(); }))
+    , mxLbColMax(new ColorListBox(mxBuilder->weld_menu_button("lbcolmax"), [this]{ return mpParent->GetFrameWeld(); }))
     , mxFtMin(mxBuilder->weld_label("Label_minimum"))
     , mxFtMax(mxBuilder->weld_label("Label_maximum"))
 {
diff --git a/sc/source/ui/dbgui/scendlg.cxx b/sc/source/ui/dbgui/scendlg.cxx
index 42c27e558210..a1bc89825196 100644
--- a/sc/source/ui/dbgui/scendlg.cxx
+++ b/sc/source/ui/dbgui/scendlg.cxx
@@ -41,7 +41,7 @@ ScNewScenarioDlg::ScNewScenarioDlg(weld::Window* pParent, const OUString& rName,
     , m_xEdName(m_xBuilder->weld_entry("name"))
     , m_xEdComment(m_xBuilder->weld_text_view("comment"))
     , m_xCbShowFrame(m_xBuilder->weld_check_button("showframe"))
-    , m_xLbColor(new ColorListBox(m_xBuilder->weld_menu_button("bordercolor"), pParent))
+    , m_xLbColor(new ColorListBox(m_xBuilder->weld_menu_button("bordercolor"), [this] { return m_xDialog.get(); }))
     , m_xCbTwoWay(m_xBuilder->weld_check_button("copyback"))
     , m_xCbCopyAll(m_xBuilder->weld_check_button("copysheet"))
     , m_xCbProtect(m_xBuilder->weld_check_button("preventchanges"))
diff --git a/sc/source/ui/optdlg/opredlin.cxx b/sc/source/ui/optdlg/opredlin.cxx
index 4d8f1a24c483..963ea1bb3e52 100644
--- a/sc/source/ui/optdlg/opredlin.cxx
+++ b/sc/source/ui/optdlg/opredlin.cxx
@@ -30,10 +30,14 @@
 
 ScRedlineOptionsTabPage::ScRedlineOptionsTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rSet)
     : SfxTabPage(pPage, pController, "modules/scalc/ui/optchangespage.ui", "OptChangesPage", &rSet)
-    , m_xContentColorLB(new ColorListBox(m_xBuilder->weld_menu_button("changes"), pController->getDialog()))
-    , m_xRemoveColorLB(new ColorListBox(m_xBuilder->weld_menu_button("deletions"), pController->getDialog()))
-    , m_xInsertColorLB(new ColorListBox(m_xBuilder->weld_menu_button("entries"), pController->getDialog()))
-    , m_xMoveColorLB(new ColorListBox(m_xBuilder->weld_menu_button("insertions"), pController->getDialog()))
+    , m_xContentColorLB(new ColorListBox(m_xBuilder->weld_menu_button("changes"),
+                [this]{ return GetDialogController()->getDialog(); }))
+    , m_xRemoveColorLB(new ColorListBox(m_xBuilder->weld_menu_button("deletions"),
+                [this]{ return GetDialogController()->getDialog(); }))
+    , m_xInsertColorLB(new ColorListBox(m_xBuilder->weld_menu_button("entries"),
+                [this]{ return GetDialogController()->getDialog(); }))
+    , m_xMoveColorLB(new ColorListBox(m_xBuilder->weld_menu_button("insertions"),
+                [this]{ return GetDialogController()->getDialog(); }))
 {
     m_xContentColorLB->SetSlotId(SID_AUTHOR_COLOR);
     m_xRemoveColorLB->SetSlotId(SID_AUTHOR_COLOR);
diff --git a/sc/source/ui/optdlg/tpview.cxx b/sc/source/ui/optdlg/tpview.cxx
index bf1db08d8cb3..a5f56979e3cd 100644
--- a/sc/source/ui/optdlg/tpview.cxx
+++ b/sc/source/ui/optdlg/tpview.cxx
@@ -36,7 +36,8 @@ ScTpContentOptions::ScTpContentOptions(weld::Container* pPage, weld::DialogContr
     : SfxTabPage(pPage, pController, "modules/scalc/ui/tpviewpage.ui", "TpViewPage", &rArgSet)
     , m_xGridLB(m_xBuilder->weld_combo_box("grid"))
     , m_xColorFT(m_xBuilder->weld_label("color_label"))
-    , m_xColorLB(new ColorListBox(m_xBuilder->weld_menu_button("color"), pController->getDialog()))
+    , m_xColorLB(new ColorListBox(m_xBuilder->weld_menu_button("color"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xBreakCB(m_xBuilder->weld_check_button("break"))
     , m_xGuideLineCB(m_xBuilder->weld_check_button("guideline"))
     , m_xFormulaCB(m_xBuilder->weld_check_button("formula"))
diff --git a/sd/source/ui/animations/CustomAnimationDialog.cxx b/sd/source/ui/animations/CustomAnimationDialog.cxx
index 16df53997094..b202ddbfc931 100644
--- a/sd/source/ui/animations/CustomAnimationDialog.cxx
+++ b/sd/source/ui/animations/CustomAnimationDialog.cxx
@@ -201,7 +201,7 @@ private:
 SdColorPropertyBox::SdColorPropertyBox(weld::Label* pLabel, weld::Container* pParent, weld::Window* pTopLevel, const Any& rValue, const Link<LinkParamNone*,void>& rModifyHdl)
     : SdPropertySubControl(pParent)
     , maModifyLink(rModifyHdl)
-    , mxControl(new ColorListBox(mxBuilder->weld_menu_button("color"), pTopLevel))
+    , mxControl(new ColorListBox(mxBuilder->weld_menu_button("color"), [pTopLevel]{ return pTopLevel; }))
 {
     mxControl->SetSelectHdl(LINK(this, SdColorPropertyBox, OnSelect));
     mxControl->set_help_id(HID_SD_CUSTOMANIMATIONPANE_COLORPROPERTYBOX);
@@ -913,7 +913,7 @@ CustomAnimationEffectTabPage::CustomAnimationEffectTabPage(weld::Container* pPar
     , mxFTAfterEffect(mxBuilder->weld_label("aeffect_label"))
     , mxLBAfterEffect(mxBuilder->weld_combo_box("aeffect_list"))
     , mxFTDimColor(mxBuilder->weld_label("dim_color_label"))
-    , mxCLBDimColor(new ColorListBox(mxBuilder->weld_menu_button("dim_color_list"), pDialog))
+    , mxCLBDimColor(new ColorListBox(mxBuilder->weld_menu_button("dim_color_list"), [pDialog]{ return pDialog; }))
     , mxFTTextAnim(mxBuilder->weld_label("text_animation_label"))
     , mxLBTextAnim(mxBuilder->weld_combo_box("text_animation_list"))
     , mxMFTextDelay(mxBuilder->weld_metric_spin_button("text_delay", FieldUnit::PERCENT))
diff --git a/sd/source/ui/dlg/BulletAndPositionDlg.cxx b/sd/source/ui/dlg/BulletAndPositionDlg.cxx
index b5a41054b3b1..9523e711a911 100644
--- a/sd/source/ui/dlg/BulletAndPositionDlg.cxx
+++ b/sd/source/ui/dlg/BulletAndPositionDlg.cxx
@@ -95,7 +95,8 @@ SvxBulletAndPositionDlg::SvxBulletAndPositionDlg(weld::Window* pWindow, const Sf
     , m_xSuffixED(m_xBuilder->weld_entry("suffix"))
     , m_xBeforeAfter(m_xBuilder->weld_frame("beforeafter"))
     , m_xBulColorFT(m_xBuilder->weld_label("colorft"))
-    , m_xBulColLB(new ColorListBox(m_xBuilder->weld_menu_button("color"), pWindow))
+    , m_xBulColLB(new ColorListBox(m_xBuilder->weld_menu_button("color"),
+                                   [this] { return m_xDialog.get(); }))
     , m_xBulRelSizeFT(m_xBuilder->weld_label("relsizeft"))
     , m_xBulRelSizeMF(m_xBuilder->weld_metric_spin_button("relsize", FieldUnit::PERCENT))
     , m_xStartFT(m_xBuilder->weld_label("startatft"))
diff --git a/sd/source/ui/dlg/copydlg.cxx b/sd/source/ui/dlg/copydlg.cxx
index 89eb7992ea73..7dd290bdb9e7 100644
--- a/sd/source/ui/dlg/copydlg.cxx
+++ b/sd/source/ui/dlg/copydlg.cxx
@@ -51,8 +51,8 @@ CopyDlg::CopyDlg(weld::Window* pWindow, const SfxItemSet& rInAttrs, ::sd::View*
     , m_xMtrFldHeight(m_xBuilder->weld_metric_spin_button("height", FieldUnit::CM))
     , m_xFtEndColor(m_xBuilder->weld_label("endlabel"))
     , m_xBtnSetDefault(m_xBuilder->weld_button("default"))
-    , m_xLbStartColor(new ColorListBox(m_xBuilder->weld_menu_button("start"), pWindow))
-    , m_xLbEndColor(new ColorListBox(m_xBuilder->weld_menu_button("end"), pWindow))
+    , m_xLbStartColor(new ColorListBox(m_xBuilder->weld_menu_button("start"), [this]{ return m_xDialog.get(); } ))
+    , m_xLbEndColor(new ColorListBox(m_xBuilder->weld_menu_button("end"), [this]{ return m_xDialog.get(); } ))
 {
     m_xLbStartColor->SetSelectHdl( LINK( this, CopyDlg, SelectColorHdl ) );
     m_xBtnSetViewData->connect_clicked( LINK( this, CopyDlg, SetViewData ) );
diff --git a/sd/source/ui/sidebar/SlideBackground.cxx b/sd/source/ui/sidebar/SlideBackground.cxx
index f4896c00aecd..8a41a1adeac2 100644
--- a/sd/source/ui/sidebar/SlideBackground.cxx
+++ b/sd/source/ui/sidebar/SlideBackground.cxx
@@ -98,10 +98,10 @@ SlideBackground::SlideBackground(
     mxMasterSlide(m_xBuilder->weld_combo_box("masterslide")),
     mxBackgroundLabel(m_xBuilder->weld_label("label3")),
     mxFillStyle(m_xBuilder->weld_combo_box("fillstyle")),
-    mxFillLB(new ColorListBox(m_xBuilder->weld_menu_button("fillattr"), GetFrameWeld())),
+    mxFillLB(new ColorListBox(m_xBuilder->weld_menu_button("fillattr"), [this]{ return GetFrameWeld(); })),
     mxFillAttr(m_xBuilder->weld_combo_box("fillattr1")),
-    mxFillGrad1(new ColorListBox(m_xBuilder->weld_menu_button("fillattr2"), GetFrameWeld())),
-    mxFillGrad2(new ColorListBox(m_xBuilder->weld_menu_button("fillattr3"), GetFrameWeld())),
+    mxFillGrad1(new ColorListBox(m_xBuilder->weld_menu_button("fillattr2"), [this]{ return GetFrameWeld(); })),
+    mxFillGrad2(new ColorListBox(m_xBuilder->weld_menu_button("fillattr3"), [this]{ return GetFrameWeld(); })),
     mxInsertImage(m_xBuilder->weld_button("button2")),
     mxDspMasterBackground(m_xBuilder->weld_check_button("displaymasterbackground")),
     mxDspMasterObjects(m_xBuilder->weld_check_button("displaymasterobjects")),
diff --git a/svx/source/dialog/_bmpmask.cxx b/svx/source/dialog/_bmpmask.cxx
index 5fc50dfca233..2515a8850408 100644
--- a/svx/source/dialog/_bmpmask.cxx
+++ b/svx/source/dialog/_bmpmask.cxx
@@ -355,24 +355,24 @@ SvxBmpMask::SvxBmpMask(SfxBindings *pBindinx, SfxChildWindow *pCW, vcl::Window*
     , m_xQSet1(new MaskSet(this))
     , m_xQSetWin1(new weld::CustomWeld(*m_xBuilder, "qset1", *m_xQSet1))
     , m_xSp1(m_xBuilder->weld_metric_spin_button("tol1", FieldUnit::PERCENT))
-    , m_xLbColor1(new ColorListBox(m_xBuilder->weld_menu_button("color1"), GetFrameWeld()))
+    , m_xLbColor1(new ColorListBox(m_xBuilder->weld_menu_button("color1"), [this]{ return GetFrameWeld(); }))
     , m_xCbx2(m_xBuilder->weld_check_button("cbx2"))
     , m_xQSet2(new MaskSet(this))
     , m_xQSetWin2(new weld::CustomWeld(*m_xBuilder, "qset2", *m_xQSet2))
      , m_xSp2(m_xBuilder->weld_metric_spin_button("tol2", FieldUnit::PERCENT))
-    , m_xLbColor2(new ColorListBox(m_xBuilder->weld_menu_button("color2"), GetFrameWeld()))
+    , m_xLbColor2(new ColorListBox(m_xBuilder->weld_menu_button("color2"), [this]{ return GetFrameWeld(); }))
     , m_xCbx3(m_xBuilder->weld_check_button("cbx3"))
     , m_xQSet3(new MaskSet(this))
     , m_xQSetWin3(new weld::CustomWeld(*m_xBuilder, "qset3", *m_xQSet3))
     , m_xSp3(m_xBuilder->weld_metric_spin_button("tol3", FieldUnit::PERCENT))
-    , m_xLbColor3(new ColorListBox(m_xBuilder->weld_menu_button("color3"), GetFrameWeld()))
+    , m_xLbColor3(new ColorListBox(m_xBuilder->weld_menu_button("color3"), [this]{ return GetFrameWeld(); }))
     , m_xCbx4(m_xBuilder->weld_check_button("cbx4"))
     , m_xQSet4(new MaskSet(this))
     , m_xQSetWin4(new weld::CustomWeld(*m_xBuilder, "qset4", *m_xQSet4))
     , m_xSp4(m_xBuilder->weld_metric_spin_button("tol4", FieldUnit::PERCENT))
-    , m_xLbColor4(new ColorListBox(m_xBuilder->weld_menu_button("color4"), GetFrameWeld()))
+    , m_xLbColor4(new ColorListBox(m_xBuilder->weld_menu_button("color4"), [this]{ return GetFrameWeld(); }))
     , m_xCbxTrans(m_xBuilder->weld_check_button("cbx5"))
-    , m_xLbColorTrans(new ColorListBox(m_xBuilder->weld_menu_button("color5"), GetFrameWeld()))
+    , m_xLbColorTrans(new ColorListBox(m_xBuilder->weld_menu_button("color5"), [this]{ return GetFrameWeld(); }))
     , m_xData(new MaskData(this, *pBindinx))
     , aPipetteColor(COL_WHITE)
     , aSelItem(*this, *pBindinx)
diff --git a/svx/source/dialog/fontwork.cxx b/svx/source/dialog/fontwork.cxx
index ef4bfe327364..23d7a6782bb2 100644
--- a/svx/source/dialog/fontwork.cxx
+++ b/svx/source/dialog/fontwork.cxx
@@ -192,7 +192,7 @@ SvxFontWorkDialog::SvxFontWorkDialog(SfxBindings *pBindinx,
     , m_xMtrFldShadowX(m_xBuilder->weld_metric_spin_button("distancex", FieldUnit::CM))
     , m_xFbShadowY(m_xBuilder->weld_image("shadowy"))
     , m_xMtrFldShadowY(m_xBuilder->weld_metric_spin_button("distancey", FieldUnit::CM))
-    , m_xShadowColorLB(new ColorListBox(m_xBuilder->weld_menu_button("color"), GetFrameWeld()))
+    , m_xShadowColorLB(new ColorListBox(m_xBuilder->weld_menu_button("color"), [this]{ return GetFrameWeld(); } ))
 {
     SetText(SvxResId(RID_SVXSTR_FONTWORK));
 
diff --git a/svx/source/engine3d/float3d.cxx b/svx/source/engine3d/float3d.cxx
index a93b7ff2ed8c..28b9ac9909ca 100644
--- a/svx/source/engine3d/float3d.cxx
+++ b/svx/source/engine3d/float3d.cxx
@@ -137,16 +137,16 @@ Svx3DWin::Svx3DWin(SfxBindings* pInBindings, SfxChildWindow *pCW, vcl::Window* p
     , m_xBtnLight6(new LightButton(m_xBuilder->weld_toggle_button("light6")))
     , m_xBtnLight7(new LightButton(m_xBuilder->weld_toggle_button("light7")))
     , m_xBtnLight8(new LightButton(m_xBuilder->weld_toggle_button("light8")))
-    , m_xLbLight1(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor1"), GetFrameWeld()))
-    , m_xLbLight2(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor2"), GetFrameWeld()))
-    , m_xLbLight3(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor3"), GetFrameWeld()))
-    , m_xLbLight4(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor4"), GetFrameWeld()))
-    , m_xLbLight5(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor5"), GetFrameWeld()))
-    , m_xLbLight6(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor6"), GetFrameWeld()))
-    , m_xLbLight7(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor7"), GetFrameWeld()))
-    , m_xLbLight8(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor8"), GetFrameWeld()))
+    , m_xLbLight1(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor1"), [this]{ return GetFrameWeld(); }))
+    , m_xLbLight2(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor2"), [this]{ return GetFrameWeld(); }))
+    , m_xLbLight3(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor3"), [this]{ return GetFrameWeld(); }))
+    , m_xLbLight4(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor4"), [this]{ return GetFrameWeld(); }))
+    , m_xLbLight5(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor5"), [this]{ return GetFrameWeld(); }))
+    , m_xLbLight6(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor6"), [this]{ return GetFrameWeld(); }))
+    , m_xLbLight7(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor7"), [this]{ return GetFrameWeld(); }))
+    , m_xLbLight8(new ColorListBox(m_xBuilder->weld_menu_button("lightcolor8"), [this]{ return GetFrameWeld(); }))
     , m_xBtnLightColor(m_xBuilder->weld_button("colorbutton1"))
-    , m_xLbAmbientlight(new ColorListBox(m_xBuilder->weld_menu_button("ambientcolor"), GetFrameWeld()))
+    , m_xLbAmbientlight(new ColorListBox(m_xBuilder->weld_menu_button("ambientcolor"), [this]{ return GetFrameWeld(); }))
     , m_xBtnAmbientColor(m_xBuilder->weld_button("colorbutton2"))
 
     , m_xFLTexture(m_xBuilder->weld_container("textureframe"))
@@ -164,13 +164,13 @@ Svx3DWin::Svx3DWin(SfxBindings* pInBindings, SfxChildWindow *pCW, vcl::Window* p
 
     , m_xFLMaterial(m_xBuilder->weld_container("materialframe"))
     , m_xLbMatFavorites(m_xBuilder->weld_combo_box("favorites"))
-    , m_xLbMatColor(new ColorListBox(m_xBuilder->weld_menu_button("objcolor"), GetFrameWeld()))
+    , m_xLbMatColor(new ColorListBox(m_xBuilder->weld_menu_button("objcolor"), [this]{ return GetFrameWeld(); }))
     , m_xBtnMatColor(m_xBuilder->weld_button("colorbutton3"))
-    , m_xLbMatEmission(new ColorListBox(m_xBuilder->weld_menu_button("illumcolor"), GetFrameWeld()))
+    , m_xLbMatEmission(new ColorListBox(m_xBuilder->weld_menu_button("illumcolor"), [this]{ return GetFrameWeld(); }))
     , m_xBtnEmissionColor(m_xBuilder->weld_button("colorbutton4"))
 
     , m_xFLMatSpecular(m_xBuilder->weld_container("specframe"))
-    , m_xLbMatSpecular(new ColorListBox(m_xBuilder->weld_menu_button("speccolor"), GetFrameWeld()))
+    , m_xLbMatSpecular(new ColorListBox(m_xBuilder->weld_menu_button("speccolor"), [this]{ return GetFrameWeld(); }))
     , m_xBtnSpecularColor(m_xBuilder->weld_button("colorbutton5"))
     , m_xMtrMatSpecularIntensity(m_xBuilder->weld_metric_spin_button("intensity", FieldUnit::PERCENT))
 
diff --git a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
index 903c6701bb04..876249873c38 100644
--- a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
+++ b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
@@ -78,8 +78,8 @@ AreaPropertyPanelBase::AreaPropertyPanelBase(
       mxColorTextFT(m_xBuilder->weld_label("filllabel")),
       mxLbFillType(m_xBuilder->weld_combo_box("fillstylearea")),
       mxLbFillAttr(m_xBuilder->weld_combo_box("fillattrhb")),
-      mxLbFillGradFrom(new ColorListBox(m_xBuilder->weld_menu_button("fillgrad1"), GetFrameWeld())),
-      mxLbFillGradTo(new ColorListBox(m_xBuilder->weld_menu_button("fillgrad2"), GetFrameWeld())),
+      mxLbFillGradFrom(new ColorListBox(m_xBuilder->weld_menu_button("fillgrad1"), [this]{ return GetFrameWeld(); })),
+      mxLbFillGradTo(new ColorListBox(m_xBuilder->weld_menu_button("fillgrad2"), [this]{ return GetFrameWeld(); })),
       mxToolBoxColor(m_xBuilder->weld_toolbar("selectcolor")),
       mxColorDispatch(new ToolbarUnoDispatcher(*mxToolBoxColor, *m_xBuilder, rxFrame)),
       mxTrspTextFT(m_xBuilder->weld_label("transparencylabel")),
diff --git a/svx/source/sidebar/effect/EffectPropertyPanel.cxx b/svx/source/sidebar/effect/EffectPropertyPanel.cxx
index d6fde80e7911..85f43813ecc4 100644
--- a/svx/source/sidebar/effect/EffectPropertyPanel.cxx
+++ b/svx/source/sidebar/effect/EffectPropertyPanel.cxx
@@ -32,7 +32,8 @@ EffectPropertyPanel::EffectPropertyPanel(vcl::Window* pParent,
     , maSoftEdgeRadiusController(SID_ATTR_SOFTEDGE_RADIUS, *pBindings, *this)
     , mpBindings(pBindings)
     , mxGlowRadius(m_xBuilder->weld_metric_spin_button("LB_GLOW_RADIUS", FieldUnit::POINT))
-    , mxLBGlowColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_GLOW_COLOR"), GetFrameWeld()))
+    , mxLBGlowColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_GLOW_COLOR"),
+                                     [this] { return GetFrameWeld(); }))
     , mxGlowTransparency(
           m_xBuilder->weld_metric_spin_button("LB_GLOW_TRANSPARENCY", FieldUnit::PERCENT))
     , mxFTRadiusSoftEdge(m_xBuilder->weld_label("radiussoftedge"))
diff --git a/svx/source/sidebar/shadow/ShadowPropertyPanel.cxx b/svx/source/sidebar/shadow/ShadowPropertyPanel.cxx
index 62e4c5471a29..c180e4f3d712 100644
--- a/svx/source/sidebar/shadow/ShadowPropertyPanel.cxx
+++ b/svx/source/sidebar/shadow/ShadowPropertyPanel.cxx
@@ -45,7 +45,7 @@ ShadowPropertyPanel::ShadowPropertyPanel(
     nXY(0),
     mxShowShadow(m_xBuilder->weld_check_button("SHOW_SHADOW")),
     mxShadowDistance(m_xBuilder->weld_metric_spin_button("LB_DISTANCE", FieldUnit::POINT)),
-    mxLBShadowColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_SHADOW_COLOR"), GetFrameWeld())),
+    mxLBShadowColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_SHADOW_COLOR"), [this]{ return GetFrameWeld(); })),
     mxShadowAngle(m_xBuilder->weld_combo_box("LB_ANGLE")),
     mxFTAngle(m_xBuilder->weld_label("angle")),
     mxFTDistance(m_xBuilder->weld_label("distance")),
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index ab4a7d124e63..df71726fc214 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -1760,17 +1760,17 @@ ColorWindow::ColorWindow(const OUString& rCommand,
                          ColorStatus&               rColorStatus,
                          sal_uInt16                 nSlotId,
                          const Reference< XFrame >& rFrame,
-                         weld::Window*              pParentWindow,
                          const MenuOrToolMenuButton& rMenuButton,
-                         ColorSelectFunction const & aFunction)
+                         TopLevelParentFunction const& rTopLevelParentFunction,
+                         ColorSelectFunction const & rColorSelectFunction)
     : WeldToolbarPopup(rFrame, rMenuButton.get_widget(), "svx/ui/colorwindow.ui", "palette_popup_window")
     , theSlotId(nSlotId)
     , maCommand(rCommand)
-    , mpParentWindow(pParentWindow)
     , maMenuButton(rMenuButton)
     , mxPaletteManager(rPaletteManager)
     , mrColorStatus(rColorStatus)
-    , maColorSelectFunction(aFunction)
+    , maTopLevelParentFunction(rTopLevelParentFunction)
+    , maColorSelectFunction(rColorSelectFunction)
     , mxColorSet(new SvxColorValueSet(m_xBuilder->weld_scrolled_window("colorsetwin", true)))
     , mxRecentColorSet(new SvxColorValueSet(nullptr))
     , mxPaletteListBox(m_xBuilder->weld_combo_box("palette_listbox"))
@@ -2005,7 +2005,7 @@ IMPL_LINK_NOARG(ColorWindow, OpenPickerClickHdl, weld::Button&, void)
 {
     // copy before set_inactive
     auto nColor = GetSelectEntryColor().first;
-    auto pParentWindow = mpParentWindow;
+    auto pParentWindow = maTopLevelParentFunction();
     OUString sCommand = maCommand;
     std::shared_ptr<PaletteManager> xPaletteManager(mxPaletteManager);
 
@@ -3236,13 +3236,16 @@ void SvxColorToolBoxControl::setColorSelectFunction(const ColorSelectFunction& a
         m_xPaletteManager->SetColorSelectFunction(aColorSelectFunction);
 }
 
+weld::Window* SvxColorToolBoxControl::GetParentFrame() const
+{
+    const css::uno::Reference<css::awt::XWindow> xParent = m_xFrame->getContainerWindow();
+    return Application::GetFrameWeld(xParent);
+}
+
 std::unique_ptr<WeldToolbarPopup> SvxColorToolBoxControl::weldPopupWindow()
 {
     EnsurePaletteManager();
 
-    const css::uno::Reference<css::awt::XWindow> xParent = m_xFrame->getContainerWindow();
-    weld::Window* pParentFrame = Application::GetFrameWeld(xParent);
-
     const OString aId(m_aCommandURL.toUtf8());
 
     auto xPopover = std::make_unique<ColorWindow>(
@@ -3251,8 +3254,8 @@ std::unique_ptr<WeldToolbarPopup> SvxColorToolBoxControl::weldPopupWindow()
                         m_aColorStatus,
                         m_nSlotId,
                         m_xFrame,
-                        pParentFrame,
                         MenuOrToolMenuButton(m_pToolbar, aId),
+                        [this] { return GetParentFrame(); },
                         m_aColorSelectFunction);
 
     if ( m_bSplitButton )
@@ -3268,9 +3271,6 @@ VclPtr<vcl::Window> SvxColorToolBoxControl::createVclPopupWindow( vcl::Window* p
     if (!getToolboxId(nId, &pToolBox))
         return nullptr;
 
-    const css::uno::Reference<css::awt::XWindow> xParent = m_xFrame->getContainerWindow();
-    weld::Window* pParentFrame = Application::GetFrameWeld(xParent);
-
     EnsurePaletteManager();
 
     auto xPopover = std::make_unique<ColorWindow>(
@@ -3279,8 +3279,8 @@ VclPtr<vcl::Window> SvxColorToolBoxControl::createVclPopupWindow( vcl::Window* p
                         m_aColorStatus,
                         m_nSlotId,
                         m_xFrame,
-                        pParentFrame,
                         MenuOrToolMenuButton(this, pToolBox, nId),
+                        [this] { return GetParentFrame(); },
                         m_aColorSelectFunction);
 
     if ( m_bSplitButton )
@@ -3829,13 +3829,13 @@ void ColorListBox::SetSlotId(sal_uInt16 nSlotId, bool bShowNoneButton)
     createColorWindow();
 }
 
-ColorListBox::ColorListBox(std::unique_ptr<weld::MenuButton> pControl, weld::Window* pTopLevel)
+ColorListBox::ColorListBox(std::unique_ptr<weld::MenuButton> pControl, TopLevelParentFunction const& rTopLevelParentFunction)
     : m_xButton(std::move(pControl))
-    , m_pTopLevel(pTopLevel)
     , m_aColorWrapper(this)
     , m_aAutoDisplayColor(Application::GetSettings().GetStyleSettings().GetDialogColor())
     , m_nSlotId(0)
     , m_bShowNoneButton(false)
+    , m_aTopLevelParentFunction(rTopLevelParentFunction)
 {
     m_xButton->connect_toggled(LINK(this, ColorListBox, ToggleHdl));
     m_aSelectedColor = GetAutoColor(m_nSlotId);
@@ -3874,8 +3874,8 @@ void ColorListBox::createColorWindow()
                             m_aColorStatus,
                             m_nSlotId,
                             xFrame,
-                            m_pTopLevel,
                             m_xButton.get(),
+                            m_aTopLevelParentFunction,
                             m_aColorWrapper));
 
     SetNoSelection();
diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx
index 57615feabf6d..9bd987be67e5 100644
--- a/sw/source/ui/config/optpage.cxx
+++ b/sw/source/ui/config/optpage.cxx
@@ -1568,19 +1568,23 @@ SwRedlineOptionsTabPage::SwRedlineOptionsTabPage(weld::Container* pPage, weld::D
                                                  const SfxItemSet& rSet)
     : SfxTabPage(pPage, pController, "modules/swriter/ui/optredlinepage.ui", "OptRedLinePage", &rSet)
     , m_xInsertLB(m_xBuilder->weld_combo_box("insert"))
-    , m_xInsertColorLB(new ColorListBox(m_xBuilder->weld_menu_button("insertcolor"), pController->getDialog()))
+    , m_xInsertColorLB(new ColorListBox(m_xBuilder->weld_menu_button("insertcolor"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xInsertedPreviewWN(new SvxFontPrevWindow)
     , m_xInsertedPreview(new weld::CustomWeld(*m_xBuilder, "insertedpreview", *m_xInsertedPreviewWN))
     , m_xDeletedLB(m_xBuilder->weld_combo_box("deleted"))
-    , m_xDeletedColorLB(new ColorListBox(m_xBuilder->weld_menu_button("deletedcolor"), pController->getDialog()))
+    , m_xDeletedColorLB(new ColorListBox(m_xBuilder->weld_menu_button("deletedcolor"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xDeletedPreviewWN(new SvxFontPrevWindow)
     , m_xDeletedPreview(new weld::CustomWeld(*m_xBuilder, "deletedpreview", *m_xDeletedPreviewWN))
     , m_xChangedLB(m_xBuilder->weld_combo_box("changed"))
-    , m_xChangedColorLB(new ColorListBox(m_xBuilder->weld_menu_button("changedcolor"), pController->getDialog()))
+    , m_xChangedColorLB(new ColorListBox(m_xBuilder->weld_menu_button("changedcolor"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xChangedPreviewWN(new SvxFontPrevWindow)
     , m_xChangedPreview(new weld::CustomWeld(*m_xBuilder, "changedpreview", *m_xChangedPreviewWN))
     , m_xMarkPosLB(m_xBuilder->weld_combo_box("markpos"))
-    , m_xMarkColorLB(new ColorListBox(m_xBuilder->weld_menu_button("markcolor"), pController->getDialog()))
+    , m_xMarkColorLB(new ColorListBox(m_xBuilder->weld_menu_button("markcolor"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xMarkPreviewWN(new SwMarkPreview)
     , m_xMarkPreview(new weld::CustomWeld(*m_xBuilder, "markpreview", *m_xMarkPreviewWN))
 {
diff --git a/sw/source/ui/frmdlg/column.cxx b/sw/source/ui/frmdlg/column.cxx
index 472ce06acb82..9dbe84c5e5f1 100644
--- a/sw/source/ui/frmdlg/column.cxx
+++ b/sw/source/ui/frmdlg/column.cxx
@@ -398,7 +398,8 @@ SwColumnPage::SwColumnPage(weld::Container* pPage, weld::DialogController* pCont
     , m_xLinePosDLB(m_xBuilder->weld_combo_box("lineposlb"))
     , m_xTextDirectionFT(m_xBuilder->weld_label("textdirectionft"))
     , m_xTextDirectionLB(new svx::FrameDirectionListBox(m_xBuilder->weld_combo_box("textdirectionlb")))
-    , m_xLineColorDLB(new ColorListBox(m_xBuilder->weld_menu_button("colorlb"), pController->getDialog()))
+    , m_xLineColorDLB(new ColorListBox(m_xBuilder->weld_menu_button("colorlb"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xLineTypeDLB(new SvtLineListBox(m_xBuilder->weld_menu_button("linestylelb")))
     , m_xEd1(new SwPercentField(m_xBuilder->weld_metric_spin_button("width1mf", FieldUnit::CM)))
     , m_xEd2(new SwPercentField(m_xBuilder->weld_metric_spin_button("width2mf", FieldUnit::CM)))
diff --git a/sw/source/ui/misc/pgfnote.cxx b/sw/source/ui/misc/pgfnote.cxx
index 4415ae8ab7a2..51b41703a82c 100644
--- a/sw/source/ui/misc/pgfnote.cxx
+++ b/sw/source/ui/misc/pgfnote.cxx
@@ -106,7 +106,8 @@ SwFootNotePage::SwFootNotePage(weld::Container* pPage, weld::DialogController* p
     , m_xLinePosBox(m_xBuilder->weld_combo_box("position"))
     , m_xLineTypeBox(new SvtLineListBox(m_xBuilder->weld_menu_button("style")))
     , m_xLineWidthEdit(m_xBuilder->weld_metric_spin_button("thickness", FieldUnit::POINT))
-    , m_xLineColorBox(new ColorListBox(m_xBuilder->weld_menu_button("color"), pController->getDialog()))
+    , m_xLineColorBox(new ColorListBox(m_xBuilder->weld_menu_button("color"),
+                [this]{ return GetDialogController()->getDialog(); }))
     , m_xLineLengthEdit(m_xBuilder->weld_metric_spin_button("length", FieldUnit::PERCENT))
     , m_xLineDistEdit(m_xBuilder->weld_metric_spin_button("spacingtocontents", FieldUnit::CM))
 {
diff --git a/sw/source/ui/misc/pggrid.cxx b/sw/source/ui/misc/pggrid.cxx
index 88d045d31a6d..19faefe56827 100644
--- a/sw/source/ui/misc/pggrid.cxx
+++ b/sw/source/ui/misc/pggrid.cxx
@@ -64,7 +64,8 @@ SwTextGridPage::SwTextGridPage(weld::Container* pPage, weld::DialogController* p
     , m_xDisplayFL(m_xBuilder->weld_widget("frameFL_DISPLAY"))
     , m_xDisplayCB(m_xBuilder->weld_check_button("checkCB_DISPLAY"))
     , m_xPrintCB(m_xBuilder->weld_check_button("checkCB_PRINT"))
-    , m_xColorLB(new ColorListBox(m_xBuilder->weld_menu_button("listLB_COLOR"), pController->getDialog()))
+    , m_xColorLB(new ColorListBox(m_xBuilder->weld_menu_button("listLB_COLOR"),
+                [this]{ return GetDialogController()->getDialog(); }))
 {
     Link<weld::SpinButton&,void> aLink = LINK(this, SwTextGridPage, CharorLineChangedHdl);
     m_xCharsPerLineNF->connect_value_changed(aLink);
diff --git a/sw/source/uibase/dialog/watermarkdialog.cxx b/sw/source/uibase/dialog/watermarkdialog.cxx
index 71ab0a74046c..62dbe8711f23 100644
--- a/sw/source/uibase/dialog/watermarkdialog.cxx
+++ b/sw/source/uibase/dialog/watermarkdialog.cxx
@@ -32,7 +32,7 @@ SwWatermarkDialog::SwWatermarkDialog(weld::Window* pParent, SfxBindings& rBindin
     , m_xFont(m_xBuilder->weld_combo_box("FontBox"))
     , m_xAngle(m_xBuilder->weld_metric_spin_button("Angle", FieldUnit::DEGREE))
     , m_xTransparency(m_xBuilder->weld_metric_spin_button("Transparency", FieldUnit::PERCENT))
-    , m_xColor(new ColorListBox(m_xBuilder->weld_menu_button("Color"), m_xDialog.get()))
+    , m_xColor(new ColorListBox(m_xBuilder->weld_menu_button("Color"), [this]{ return m_xDialog.get(); }))
 {
     InitFields();
 
diff --git a/sw/source/uibase/sidebar/PageStylesPanel.cxx b/sw/source/uibase/sidebar/PageStylesPanel.cxx
index 8f4c8d88adb1..a2cf10cd3faf 100644
--- a/sw/source/uibase/sidebar/PageStylesPanel.cxx
+++ b/sw/source/uibase/sidebar/PageStylesPanel.cxx
@@ -107,9 +107,9 @@ PageStylesPanel::PageStylesPanel(
     maBgGradientControl( SID_ATTR_PAGE_GRADIENT, *pBindings, *this ),
     maBgBitmapControl( SID_ATTR_PAGE_BITMAP, *pBindings, *this ),
     maBgFillStyleControl(SID_ATTR_PAGE_FILLSTYLE, *pBindings, *this),
-    mxBgColorLB(new ColorListBox(m_xBuilder->weld_menu_button("lbcolor"), GetFrameWeld())),
+    mxBgColorLB(new ColorListBox(m_xBuilder->weld_menu_button("lbcolor"), [this]{ return GetFrameWeld(); })),
     mxBgHatchingLB(m_xBuilder->weld_combo_box("lbhatching")),
-    mxBgGradientLB(new ColorListBox(m_xBuilder->weld_menu_button("lbgradient"), GetFrameWeld())),
+    mxBgGradientLB(new ColorListBox(m_xBuilder->weld_menu_button("lbgradient"), [this]{ return GetFrameWeld(); })),
     mxBgBitmapLB(m_xBuilder->weld_combo_box("lbbitmap")),
     mxLayoutSelectLB(m_xBuilder->weld_combo_box("layoutbox")),
     mxColumnCount(m_xBuilder->weld_combo_box("columnbox")),


More information about the Libreoffice-commits mailing list