include/vcl/vclptr.hxx | 11 +++++++++++ include/vcl/weld.hxx | 2 +- sc/source/ui/inc/checklistmenu.hxx | 3 +-- sc/source/ui/sidebar/CellLineStyleControl.cxx | 2 +- svx/inc/tbxcolorupdate.hxx | 6 +++--- svx/source/tbxctrls/tbxcolorupdate.cxx | 8 +++----- sw/source/ui/frmdlg/column.cxx | 2 +- sw/source/uibase/inc/FrameControl.hxx | 2 +- sw/source/uibase/inc/HeaderFooterWin.hxx | 2 +- sw/source/uibase/inc/PageBreakWin.hxx | 2 +- vcl/inc/qt5/QtInstanceWidget.hxx | 2 +- vcl/inc/salvtables.hxx | 2 +- vcl/qt5/QtInstanceWidget.cxx | 4 ++-- vcl/source/app/salvtables.cxx | 3 +-- vcl/unx/gtk3/gtkinst.cxx | 5 ++--- 15 files changed, 31 insertions(+), 25 deletions(-)
New commits: commit 5d0b55252de85500e8be36e5c1daa754a34c83b9 Author: Noel Grandin <[email protected]> AuthorDate: Sun Feb 22 12:05:53 2026 +0200 Commit: Mike Kaganski <[email protected]> CommitDate: Fri Mar 6 06:01:44 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]> (cherry picked from commit 8dd92537cc839b4567e09e84ce854d14a4af5bad) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200999 Tested-by: Jenkins CollaboraOffice <[email protected]> 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.hxx b/include/vcl/weld.hxx index b1182382e570..51048f5a0c3f 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -360,7 +360,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 03dc2cf498a0..ee2eae332439 100644 --- a/sc/source/ui/inc/checklistmenu.hxx +++ b/sc/source/ui/inc/checklistmenu.hxx @@ -382,8 +382,7 @@ public: ScViewData& GetViewData() const { return mrParentControl.GetViewData(); } ScCheckListMenuControl::ExtendedData* getExtendedData() { return mrParentControl.getExtendedData(); } - // [-loplugin:scopedvclptr] - 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 b8a3ce30db2a..11b8f85345ed 100644 --- a/sc/source/ui/sidebar/CellLineStyleControl.cxx +++ b/sc/source/ui/sidebar/CellLineStyleControl.cxx @@ -79,7 +79,7 @@ CellLineStylePopup::~CellLineStylePopup() 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/svx/inc/tbxcolorupdate.hxx b/svx/inc/tbxcolorupdate.hxx index d14ba4bd1ec7..d7fc59787dd3 100644 --- a/svx/inc/tbxcolorupdate.hxx +++ b/svx/inc/tbxcolorupdate.hxx @@ -81,7 +81,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; @@ -103,7 +103,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; @@ -123,7 +123,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 44dfca847e6f..4bad267c93b3 100644 --- a/svx/source/tbxctrls/tbxcolorupdate.cxx +++ b/svx/source/tbxctrls/tbxcolorupdate.cxx @@ -193,10 +193,9 @@ void VclToolboxButtonColorUpdater::SetImage(VirtualDevice* pVirDev) mpTbx->SetItemImage(mnBtnId, Image(aGraphic.GetXGraphic())); } -// [-loplugin:scopedvclptr] -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,8 +350,7 @@ void ToolboxButtonColorUpdater::SetImage(VirtualDevice* pVirDev) mpTbx->set_item_image(msBtnId, pVirDev); } -// [-loplugin:scopedvclptr] -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 9de3bb9f4fa7..bb4a39704173 100644 --- a/sw/source/ui/frmdlg/column.cxx +++ b/sw/source/ui/frmdlg/column.cxx @@ -1339,7 +1339,7 @@ void SwColumnPage::SetInSection(bool bSet) ScopedVclPtr<VirtualDevice> SwColumnPage::CreateColumnLayoutVDev(sal_uInt16 nItemId) { - VclPtr<VirtualDevice> pVDev = VclPtr<VirtualDevice>::Create(); + ScopedVclPtr<VirtualDevice> pVDev(VclPtr<VirtualDevice>::Create()); const Size aSize(30, 30); pVDev->SetOutputSizePixel(aSize); diff --git a/sw/source/uibase/inc/FrameControl.hxx b/sw/source/uibase/inc/FrameControl.hxx index b6a761feef6a..e9e670f1e9fe 100644 --- a/sw/source/uibase/inc/FrameControl.hxx +++ b/sw/source/uibase/inc/FrameControl.hxx @@ -55,7 +55,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 859745292437..739df08aaf4f 100644 --- a/sw/source/uibase/inc/HeaderFooterWin.hxx +++ b/sw/source/uibase/inc/HeaderFooterWin.hxx @@ -67,7 +67,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 b4d559db38a1..4a04848db9bf 100644 --- a/sw/source/uibase/inc/PageBreakWin.hxx +++ b/sw/source/uibase/inc/PageBreakWin.hxx @@ -60,7 +60,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/vcl/inc/qt5/QtInstanceWidget.hxx b/vcl/inc/qt5/QtInstanceWidget.hxx index 8a77f7898be5..a1a53f18a257 100644 --- a/vcl/inc/qt5/QtInstanceWidget.hxx +++ b/vcl/inc/qt5/QtInstanceWidget.hxx @@ -153,7 +153,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 ded6170b5990..90f292f96d90 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -367,7 +367,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 c8457995f37c..8de7549d8196 100644 --- a/vcl/qt5/QtInstanceWidget.cxx +++ b/vcl/qt5/QtInstanceWidget.cxx @@ -755,9 +755,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 bc2eefd6f44f..f870237d2b87 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -665,8 +665,7 @@ OUString SalInstanceWidget::escape_ui_str(const OUString& rLabel) const return rLabel.replaceAll("~", "~~"); } -// [-loplugin:scopedvclptr] -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 300ab96536e1..ec8846cd1591 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -4296,11 +4296,10 @@ public: return rLabel.replaceAll("_", "__"); } - // [-loplugin:scopedvclptr] - 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; }
