include/sfx2/charmapcontainer.hxx | 4 ++-- include/vcl/vclptr.hxx | 11 +++++++++++ include/vcl/weld/weld.hxx | 3 ++- sc/source/ui/inc/checklistmenu.hxx | 2 +- sc/source/ui/sidebar/CellLineStyleControl.cxx | 4 ++-- sc/source/ui/sidebar/CellLineStyleControl.hxx | 2 +- sfx2/source/control/charmapcontainer.cxx | 4 ++-- svx/inc/tbxcolorupdate.hxx | 6 +++--- svx/source/tbxctrls/tbxcolorupdate.cxx | 6 +++--- sw/source/ui/frmdlg/column.cxx | 4 ++-- sw/source/uibase/inc/FrameControl.hxx | 2 +- sw/source/uibase/inc/HeaderFooterWin.hxx | 2 +- sw/source/uibase/inc/PageBreakWin.hxx | 2 +- sw/source/uibase/inc/column.hxx | 2 +- sw/source/uibase/sidebar/ThemePanel.cxx | 4 ++-- sw/source/uibase/sidebar/ThemePanel.hxx | 2 +- vcl/inc/qt5/QtInstanceWidget.hxx | 2 +- vcl/inc/salvtables.hxx | 2 +- vcl/qt5/QtInstanceWidget.cxx | 4 ++-- vcl/source/app/salvtables.cxx | 2 +- vcl/unx/gtk3/gtkinst.cxx | 4 ++-- 21 files changed, 43 insertions(+), 31 deletions(-)
New commits: commit 8dd92537cc839b4567e09e84ce854d14a4af5bad Author: Noel Grandin <[email protected]> AuthorDate: Sun Feb 22 12:05:53 2026 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Mon Feb 23 17:30:22 2026 +0100 use more ScopedVclPtr<VirtualDevice> in create_virtual_device which requires making the move constructor explicit in ScopedVclPtr. Change-Id: I2e4caec45c27ed444a81c121d426a5988bd65015 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200005 Reviewed-by: Noel Grandin <[email protected]> Tested-by: Jenkins Reviewed-by: Mike Kaganski <[email protected]> diff --git a/include/sfx2/charmapcontainer.hxx b/include/sfx2/charmapcontainer.hxx index cfc40e2455b2..e9b366777f3f 100644 --- a/include/sfx2/charmapcontainer.hxx +++ b/include/sfx2/charmapcontainer.hxx @@ -92,8 +92,8 @@ public: const Link<void*, void>& rUpdateFavHdl, const Link<void*, void>& rUpdateRecentHdl, const Link<const CharAndFont&, void>& rCharSelectedHdl); - static VclPtr<VirtualDevice> CreateIcon(weld::IconView& rIconView, const OUString& rFont, - const OUString& rText); + static ScopedVclPtr<VirtualDevice> CreateIcon(weld::IconView& rIconView, const OUString& rFont, + const OUString& rText); void getFavCharacterList(); void updateFavCharControl(); diff --git a/include/vcl/vclptr.hxx b/include/vcl/vclptr.hxx index 34de43334a82..b55f9f76c2ef 100644 --- a/include/vcl/vclptr.hxx +++ b/include/vcl/vclptr.hxx @@ -83,6 +83,7 @@ class VclPtr nullptr), "template argument type must be derived from VclReferenceBase"); +protected: ::rtl::Reference<reference_type> m_rInnerRef; public: @@ -295,6 +296,9 @@ public: : VclPtr<reference_type>(handle) {} + /** Move constructor */ + ScopedVclPtr(ScopedVclPtr<reference_type> &&) = default; + /** Assignment that releases the last reference. */ @@ -328,6 +332,13 @@ public: return operator=(rRef.get()); } + ScopedVclPtr& operator = (ScopedVclPtr<reference_type> && rRef) + { + assert(!VclPtr<reference_type>::m_rInnerRef); + VclPtr<reference_type>::m_rInnerRef = std::move(rRef.m_rInnerRef); + return *this; + } + /** * Override and disallow this, to prevent people accidentally calling it and actually * getting VclPtr::Create and getting a naked VclPtr<> instance diff --git a/include/vcl/weld/weld.hxx b/include/vcl/weld/weld.hxx index c4285e20ab22..1e1cc539f07d 100644 --- a/include/vcl/weld/weld.hxx +++ b/include/vcl/weld/weld.hxx @@ -13,6 +13,7 @@ #include <rtl/ustring.hxx> #include <tools/gen.hxx> #include <tools/link.hxx> +#include <vcl/vclptr.hxx> #include <vcl/dllapi.h> #include <utility> @@ -368,7 +369,7 @@ public: */ virtual OUString escape_ui_str(const OUString& rLabel) const = 0; - virtual VclPtr<VirtualDevice> create_virtual_device() const = 0; + virtual ScopedVclPtr<VirtualDevice> create_virtual_device() const = 0; //do something transient to attract the attention of the user to the widget virtual void call_attention_to() = 0; diff --git a/sc/source/ui/inc/checklistmenu.hxx b/sc/source/ui/inc/checklistmenu.hxx index f5916782b191..210940284827 100644 --- a/sc/source/ui/inc/checklistmenu.hxx +++ b/sc/source/ui/inc/checklistmenu.hxx @@ -385,7 +385,7 @@ public: ScViewData& GetViewData() const { return mrParentControl.GetViewData(); } ScCheckListMenuControl::ExtendedData* getExtendedData() { return mrParentControl.getExtendedData(); } - VclPtr<VirtualDevice> create_virtual_device() const { return mxMenu->create_virtual_device(); } + ScopedVclPtr<VirtualDevice> create_virtual_device() const { return mxMenu->create_virtual_device(); } /** * Dismiss all visible popup menus and set focus back to the application diff --git a/sc/source/ui/sidebar/CellLineStyleControl.cxx b/sc/source/ui/sidebar/CellLineStyleControl.cxx index 2729fea06126..1faa2ca54ad9 100644 --- a/sc/source/ui/sidebar/CellLineStyleControl.cxx +++ b/sc/source/ui/sidebar/CellLineStyleControl.cxx @@ -78,9 +78,9 @@ CellLineStylePopup::~CellLineStylePopup() { } -VclPtr<VirtualDevice> CellLineStylePopup::CreateImage(int nIndex) +ScopedVclPtr<VirtualDevice> CellLineStylePopup::CreateImage(int nIndex) { - VclPtr<VirtualDevice> pDev = mxCellLineStyleTreeView->create_virtual_device(); + ScopedVclPtr<VirtualDevice> pDev = mxCellLineStyleTreeView->create_virtual_device(); const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); pDev->SetBackground(rStyleSettings.GetFieldColor()); pDev->SetLineColor(rStyleSettings.GetFieldTextColor()); diff --git a/sc/source/ui/sidebar/CellLineStyleControl.hxx b/sc/source/ui/sidebar/CellLineStyleControl.hxx index af70d0df9bc9..6d1454a30a0b 100644 --- a/sc/source/ui/sidebar/CellLineStyleControl.hxx +++ b/sc/source/ui/sidebar/CellLineStyleControl.hxx @@ -40,7 +40,7 @@ private: DECL_LINK(StyleSelectHdl, weld::TreeView&, bool); DECL_LINK(PBClickHdl, weld::Button&, void); - VclPtr<VirtualDevice> CreateImage(int nIndex); + ScopedVclPtr<VirtualDevice> CreateImage(int nIndex); public: CellLineStylePopup(weld::Toolbar* pParent, const OUString& rId, SfxDispatcher* pDispatcher); diff --git a/sfx2/source/control/charmapcontainer.cxx b/sfx2/source/control/charmapcontainer.cxx index 43abdfcfbe92..efbdc5dc88ea 100644 --- a/sfx2/source/control/charmapcontainer.cxx +++ b/sfx2/source/control/charmapcontainer.cxx @@ -73,7 +73,7 @@ void SfxCharmapContainer::init(const Link<const CharAndFont&, void>& rActivateHd m_xFavIconView->connect_command(LINK(this, SfxCharmapContainer, FavContextMenuHdl)); } -VclPtr<VirtualDevice> SfxCharmapContainer::CreateIcon(weld::IconView& rIconView, +ScopedVclPtr<VirtualDevice> SfxCharmapContainer::CreateIcon(weld::IconView& rIconView, const OUString& rFont, const OUString& rText) { const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); @@ -81,7 +81,7 @@ VclPtr<VirtualDevice> SfxCharmapContainer::CreateIcon(weld::IconView& rIconView, Size aFontSize = aFont.GetFontSize(); aFont.SetFontSize(Size(aFontSize.Width() * 2, aFontSize.Height() * 2)); - VclPtr<VirtualDevice> pDev = rIconView.create_virtual_device(); + ScopedVclPtr<VirtualDevice> pDev = rIconView.create_virtual_device(); Size aSize; { diff --git a/svx/inc/tbxcolorupdate.hxx b/svx/inc/tbxcolorupdate.hxx index ff952b6c0c29..6bb6c0164be0 100644 --- a/svx/inc/tbxcolorupdate.hxx +++ b/svx/inc/tbxcolorupdate.hxx @@ -82,7 +82,7 @@ protected: virtual void SetQuickHelpText(const OUString& rText) = 0; virtual OUString GetQuickHelpText() const = 0; virtual void SetImage(VirtualDevice* pVirDev) = 0; - virtual VclPtr<VirtualDevice> CreateVirtualDevice() const = 0; + virtual ScopedVclPtr<VirtualDevice> CreateVirtualDevice() const = 0; // true -> use Device to Record to Metafile, false -> Render to Device virtual bool RecordVirtualDevice() const = 0; virtual vcl::ImageType GetImageSize() const = 0; @@ -104,7 +104,7 @@ private: virtual void SetQuickHelpText(const OUString& rText) override; virtual OUString GetQuickHelpText() const override; virtual void SetImage(VirtualDevice* pVirDev) override; - virtual VclPtr<VirtualDevice> CreateVirtualDevice() const override; + virtual ScopedVclPtr<VirtualDevice> CreateVirtualDevice() const override; virtual bool RecordVirtualDevice() const override { return true; } virtual vcl::ImageType GetImageSize() const override; virtual Size GetItemSize(const Size& rImageSize) const override; @@ -124,7 +124,7 @@ private: virtual void SetQuickHelpText(const OUString& rText) override; virtual OUString GetQuickHelpText() const override; virtual void SetImage(VirtualDevice* pVirDev) override; - virtual VclPtr<VirtualDevice> CreateVirtualDevice() const override; + virtual ScopedVclPtr<VirtualDevice> CreateVirtualDevice() const override; virtual bool RecordVirtualDevice() const override { return false; } virtual vcl::ImageType GetImageSize() const override; virtual Size GetItemSize(const Size& rImageSize) const override; diff --git a/svx/source/tbxctrls/tbxcolorupdate.cxx b/svx/source/tbxctrls/tbxcolorupdate.cxx index a2fcf6c5bdfb..82d43c27942a 100644 --- a/svx/source/tbxctrls/tbxcolorupdate.cxx +++ b/svx/source/tbxctrls/tbxcolorupdate.cxx @@ -194,9 +194,9 @@ void VclToolboxButtonColorUpdater::SetImage(VirtualDevice* pVirDev) mpTbx->SetItemImage(mnBtnId, Image(aGraphic.GetXGraphic())); } -VclPtr<VirtualDevice> VclToolboxButtonColorUpdater::CreateVirtualDevice() const +ScopedVclPtr<VirtualDevice> VclToolboxButtonColorUpdater::CreateVirtualDevice() const { - auto xVD = VclPtr<VirtualDevice>::Create(*mpTbx->GetOutDev()); + ScopedVclPtr<VirtualDevice> xVD = VclPtr<VirtualDevice>::Create(*mpTbx->GetOutDev()); xVD->SetBackground(Wallpaper(COL_WHITE)); return xVD; } @@ -351,7 +351,7 @@ void ToolboxButtonColorUpdater::SetImage(VirtualDevice* pVirDev) mpTbx->set_item_image(msBtnId, pVirDev); } -VclPtr<VirtualDevice> ToolboxButtonColorUpdater::CreateVirtualDevice() const +ScopedVclPtr<VirtualDevice> ToolboxButtonColorUpdater::CreateVirtualDevice() const { return mpTbx->create_virtual_device(); } diff --git a/sw/source/ui/frmdlg/column.cxx b/sw/source/ui/frmdlg/column.cxx index 9f2bfda0d678..28d577069e90 100644 --- a/sw/source/ui/frmdlg/column.cxx +++ b/sw/source/ui/frmdlg/column.cxx @@ -1319,7 +1319,7 @@ void SwColumnPage::SetInSection(bool bSet) m_xTextDirectionLB->set_visible(bSet); } -VclPtr<VirtualDevice> SwColumnPage::CreateIconViewImage(int nIndex) +ScopedVclPtr<VirtualDevice> SwColumnPage::CreateIconViewImage(int nIndex) { const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); @@ -1327,7 +1327,7 @@ VclPtr<VirtualDevice> SwColumnPage::CreateIconViewImage(int nIndex) tools::Long nRectWidth = aSize.getWidth(); tools::Long nRectHeight = aSize.getHeight(); - VclPtr<VirtualDevice> pDev = m_xDefaultIconView->create_virtual_device(); + ScopedVclPtr<VirtualDevice> pDev = m_xDefaultIconView->create_virtual_device(); pDev->SetOutputSizePixel(aSize); pDev->SetFillColor(rStyleSettings.GetFieldColor()); diff --git a/sw/source/uibase/inc/FrameControl.hxx b/sw/source/uibase/inc/FrameControl.hxx index 39e74de38fad..098cb1be850c 100644 --- a/sw/source/uibase/inc/FrameControl.hxx +++ b/sw/source/uibase/inc/FrameControl.hxx @@ -56,7 +56,7 @@ public: class SwFrameMenuButtonBase : public InterimItemWindow, public ISwFrameControl { protected: - VclPtr<VirtualDevice> m_xVirDev; + ScopedVclPtr<VirtualDevice> m_xVirDev; private: VclPtr<SwEditWin> m_pEditWin; const SwFrame* m_pFrame; diff --git a/sw/source/uibase/inc/HeaderFooterWin.hxx b/sw/source/uibase/inc/HeaderFooterWin.hxx index 63de3e9d2cce..3c9c0c65fe9e 100644 --- a/sw/source/uibase/inc/HeaderFooterWin.hxx +++ b/sw/source/uibase/inc/HeaderFooterWin.hxx @@ -72,7 +72,7 @@ class SwHeaderFooterWin final : public InterimItemWindow std::unique_ptr<weld::MenuButton> m_xMenuButton; std::unique_ptr<weld::Button> m_xPushButton; VclPtr<SwEditWin> m_pEditWin; - VclPtr<VirtualDevice> m_xVirDev; + ScopedVclPtr<VirtualDevice> m_xVirDev; const SwFrame* m_pFrame; OUString m_sLabel; bool m_bIsHeader; diff --git a/sw/source/uibase/inc/PageBreakWin.hxx b/sw/source/uibase/inc/PageBreakWin.hxx index 0112640caaf5..83cca13ea8f0 100644 --- a/sw/source/uibase/inc/PageBreakWin.hxx +++ b/sw/source/uibase/inc/PageBreakWin.hxx @@ -65,7 +65,7 @@ class SwPageBreakWin final : public InterimItemWindow std::unique_ptr<weld::MenuButton> m_xMenuButton; VclPtr<SwBreakDashedLine> m_pLine; VclPtr<SwEditWin> m_pEditWin; - VclPtr<VirtualDevice> m_xVirDev; + ScopedVclPtr<VirtualDevice> m_xVirDev; const SwFrame* m_pFrame; bool m_bIsAppearing; int m_nFadeRate; diff --git a/sw/source/uibase/inc/column.hxx b/sw/source/uibase/inc/column.hxx index e179768c76cc..26deb8e91864 100644 --- a/sw/source/uibase/inc/column.hxx +++ b/sw/source/uibase/inc/column.hxx @@ -137,7 +137,7 @@ class SwColumnPage final : public SfxTabPage DECL_LINK(UpdateColMgrColorBox, ColorListBox&, void); void Timeout(); - VclPtr<VirtualDevice> CreateIconViewImage(int nIndex); + ScopedVclPtr<VirtualDevice> CreateIconViewImage(int nIndex); void Update(const weld::MetricSpinButton* pInteractiveField); void UpdateCols(); void Init(); diff --git a/sw/source/uibase/sidebar/ThemePanel.cxx b/sw/source/uibase/sidebar/ThemePanel.cxx index 74d23240e121..2451f0d7d9bc 100644 --- a/sw/source/uibase/sidebar/ThemePanel.cxx +++ b/sw/source/uibase/sidebar/ThemePanel.cxx @@ -74,7 +74,7 @@ IMPL_LINK_NOARG(ThemePanel, ItemActivatedHdl, weld::IconView&, bool) return true; } -VclPtr<VirtualDevice> ThemePanel::CreateImage(const model::ColorSet& rColorSet) +ScopedVclPtr<VirtualDevice> ThemePanel::CreateImage(const model::ColorSet& rColorSet) { constexpr tools::Long BORDER = 4; constexpr tools::Long SIZE = 16; @@ -86,7 +86,7 @@ VclPtr<VirtualDevice> ThemePanel::CreateImage(const model::ColorSet& rColorSet) BORDER * 3 + SIZE * 2 + LABEL_HEIGHT); const Size aSize(aMin.Width() + 40, aMin.Height()); - VclPtr<VirtualDevice> pDev = mxIconViewColors->create_virtual_device(); + ScopedVclPtr<VirtualDevice> pDev = mxIconViewColors->create_virtual_device(); pDev->SetOutputSizePixel(aSize); tools::Long startX = (aSize.Width() / 2.0) - (aMin.Width() / 2.0); diff --git a/sw/source/uibase/sidebar/ThemePanel.hxx b/sw/source/uibase/sidebar/ThemePanel.hxx index 5f78b48ba8be..71147f66c390 100644 --- a/sw/source/uibase/sidebar/ThemePanel.hxx +++ b/sw/source/uibase/sidebar/ThemePanel.hxx @@ -43,7 +43,7 @@ private: DECL_LINK(ClickHdl, weld::Button&, void); DECL_LINK(ItemActivatedHdl, weld::IconView&, bool); void DoubleClickHdl(); - VclPtr<VirtualDevice> CreateImage(const model::ColorSet& rColorSet); + ScopedVclPtr<VirtualDevice> CreateImage(const model::ColorSet& rColorSet); }; } // end of namespace sw::sidebar diff --git a/vcl/inc/qt5/QtInstanceWidget.hxx b/vcl/inc/qt5/QtInstanceWidget.hxx index 70adb55d894c..ffa949d8326c 100644 --- a/vcl/inc/qt5/QtInstanceWidget.hxx +++ b/vcl/inc/qt5/QtInstanceWidget.hxx @@ -147,7 +147,7 @@ public: virtual OUString escape_ui_str(const OUString& rLabel) const override; - virtual VclPtr<VirtualDevice> create_virtual_device() const override; + virtual ScopedVclPtr<VirtualDevice> create_virtual_device() const override; virtual css::uno::Reference<css::datatransfer::dnd::XDropTarget> get_drop_target() override; diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index 04f2eabd2d24..1e3a7c810e50 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -387,7 +387,7 @@ public: virtual OUString strip_mnemonic(const OUString& rLabel) const override; virtual OUString escape_ui_str(const OUString& rLabel) const override; - virtual VclPtr<VirtualDevice> create_virtual_device() const override; + virtual ScopedVclPtr<VirtualDevice> create_virtual_device() const override; virtual css::uno::Reference<css::datatransfer::dnd::XDropTarget> get_drop_target() override; virtual css::uno::Reference<css::datatransfer::clipboard::XClipboard> diff --git a/vcl/qt5/QtInstanceWidget.cxx b/vcl/qt5/QtInstanceWidget.cxx index 00a101e6b0bb..0d7e9afb4143 100644 --- a/vcl/qt5/QtInstanceWidget.cxx +++ b/vcl/qt5/QtInstanceWidget.cxx @@ -764,9 +764,9 @@ OUString QtInstanceWidget::escape_ui_str(const OUString& rLabel) const return rLabel.replaceAll("&", "&&"); } -VclPtr<VirtualDevice> QtInstanceWidget::create_virtual_device() const +ScopedVclPtr<VirtualDevice> QtInstanceWidget::create_virtual_device() const { - VclPtr<VirtualDevice> xRet = VclPtr<VirtualDevice>::Create(); + ScopedVclPtr<VirtualDevice> xRet(VclPtr<VirtualDevice>::Create()); xRet->SetBackground(); return xRet; } diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index f2fd5701a180..ae6b31d986fd 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -666,7 +666,7 @@ OUString SalInstanceWidget::escape_ui_str(const OUString& rLabel) const return rLabel.replaceAll("~", "~~"); } -VclPtr<VirtualDevice> SalInstanceWidget::create_virtual_device() const +ScopedVclPtr<VirtualDevice> SalInstanceWidget::create_virtual_device() const { // create with (annoying) separate alpha layer that LibreOffice itself uses return VclPtr<VirtualDevice>::Create(*Application::GetDefaultDevice(), diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 70269889a08f..c2c901ab2fb8 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -4334,10 +4334,10 @@ public: return rLabel.replaceAll("_", "__"); } - virtual VclPtr<VirtualDevice> create_virtual_device() const override + virtual ScopedVclPtr<VirtualDevice> create_virtual_device() const override { // create with no separate alpha layer like everything sane does - auto xRet = VclPtr<VirtualDevice>::Create(); + ScopedVclPtr<VirtualDevice> xRet(VclPtr<VirtualDevice>::Create()); xRet->SetBackground(); return xRet; }
