sd/source/ui/sidebar/LayoutMenu.cxx | 6 ++---- sd/source/ui/sidebar/LayoutMenu.hxx | 3 ++- sd/source/ui/sidebar/MasterPagesSelector.cxx | 12 ++++-------- sd/source/ui/sidebar/MasterPagesSelector.hxx | 2 +- 4 files changed, 9 insertions(+), 14 deletions(-)
New commits: commit 6c2a89a6e298f0a6a3d41815c9549a9113907a27 Author: Mike Kaganski <[email protected]> AuthorDate: Sat Feb 21 15:45:44 2026 +0500 Commit: Mike Kaganski <[email protected]> CommitDate: Sat Feb 21 17:13:41 2026 +0100 fix VirtualDevice GDI handle leaks in IconView's set_image callers Similar to commit e9392c0c86fcf373e00ede92f8ceeee2c7efd233 (fix VirtualDevice GDI handle leaks across IconView callers, 2026-02-21). Change-Id: I170e0429f4393f819742824bc49a22674d31b257 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199926 Tested-by: Jenkins Reviewed-by: Mike Kaganski <[email protected]> diff --git a/sd/source/ui/sidebar/LayoutMenu.cxx b/sd/source/ui/sidebar/LayoutMenu.cxx index d235943972c5..49a6d7e60ec8 100644 --- a/sd/source/ui/sidebar/LayoutMenu.cxx +++ b/sd/source/ui/sidebar/LayoutMenu.cxx @@ -396,7 +396,7 @@ SfxRequest LayoutMenu::CreateRequest ( return aRequest; } -VclPtr<VirtualDevice> LayoutMenu::GetVirtualDevice(Image pImage) +ScopedVclPtr<VirtualDevice> LayoutMenu::GetVirtualDevice(Image pImage) { Bitmap aPreviewBitmap = pImage.GetBitmap(); VclPtr<VirtualDevice> pVDev = VclPtr<VirtualDevice>::Create(); @@ -481,11 +481,9 @@ void LayoutMenu::Fill() OUString sLayoutName = SdResId(elem.mpStrResId); if (!mxLayoutIconView->get_id(id).isEmpty()) { - VclPtr<VirtualDevice> pVDev = GetVirtualDevice(aImg); - mxLayoutIconView->set_image(id, *pVDev); + mxLayoutIconView->set_image(id, *GetVirtualDevice(aImg)); mxLayoutIconView->set_id(id, sId); mxLayoutIconView->set_text(id, sLayoutName); - pVDev.disposeAndClear(); } else { diff --git a/sd/source/ui/sidebar/LayoutMenu.hxx b/sd/source/ui/sidebar/LayoutMenu.hxx index 2632350a8a30..34763fec2673 100644 --- a/sd/source/ui/sidebar/LayoutMenu.hxx +++ b/sd/source/ui/sidebar/LayoutMenu.hxx @@ -25,6 +25,7 @@ #include <sfx2/request.hxx> #include <xmloff/autolayout.hxx> #include <vcl/image.hxx> +#include <vcl/vclptr.hxx> #include <vcl/weld/IconView.hxx> #include <map> @@ -159,7 +160,7 @@ private: DECL_LINK(EventMultiplexerListener, ::sdtools::EventMultiplexerEvent&, void); DECL_LINK(MenuSelectAsyncHdl, void*, void); - static VclPtr<VirtualDevice> GetVirtualDevice(Image pPreview); + static ScopedVclPtr<VirtualDevice> GetVirtualDevice(Image pPreview); static Bitmap GetPreviewAsBitmap(const Image& rImage); void HandleMenuSelect(std::u16string_view rIdent); }; diff --git a/sd/source/ui/sidebar/MasterPagesSelector.cxx b/sd/source/ui/sidebar/MasterPagesSelector.cxx index 685c128cc479..24725dd19c0b 100644 --- a/sd/source/ui/sidebar/MasterPagesSelector.cxx +++ b/sd/source/ui/sidebar/MasterPagesSelector.cxx @@ -368,8 +368,7 @@ void MasterPagesSelector::NotifyContainerChangeEvent (const MasterPageContainerC Image aPreview(mpContainer->GetPreviewForToken(rEvent.maChildToken)); if (aPreview.GetSizePixel().Width() > 0) { - VclPtr<VirtualDevice> pVDev = GetVirtualDevice(aPreview); - mxPreviewIconView->set_image(nIndex, *pVDev); + mxPreviewIconView->set_image(nIndex, *GetVirtualDevice(aPreview)); } } } @@ -427,10 +426,8 @@ void MasterPagesSelector::SetItem ( { if (!mxPreviewIconView->get_id(nIndex).isEmpty()) { - VclPtr<VirtualDevice> pVDev = GetVirtualDevice(aPreview); - mxPreviewIconView->set_image(nIndex, *pVDev); + mxPreviewIconView->set_image(nIndex, *GetVirtualDevice(aPreview)); mxPreviewIconView->set_id(nIndex, OUString::number(aToken)); - pVDev.disposeAndClear(); } else { @@ -503,7 +500,7 @@ void MasterPagesSelector::InvalidatePreview (const SdPage* pPage) } } -VclPtr<VirtualDevice> MasterPagesSelector::GetVirtualDevice(const Image& rImage) +ScopedVclPtr<VirtualDevice> MasterPagesSelector::GetVirtualDevice(const Image& rImage) { Bitmap aPreviewBitmap = rImage.GetBitmap(); VclPtr<VirtualDevice> pVDev = VclPtr<VirtualDevice>::Create(); @@ -540,8 +537,7 @@ void MasterPagesSelector::UpdateAllPreviews() Image aPreview(mpContainer->GetPreviewForToken(aToken)); if (aPreview.GetSizePixel().Width() > 0) { - VclPtr<VirtualDevice> pVDev = GetVirtualDevice(aPreview); - mxPreviewIconView->set_image(aIndex, *pVDev); + mxPreviewIconView->set_image(aIndex, *GetVirtualDevice(aPreview)); } else if (mpContainer->GetPreviewState(aToken) == MasterPageContainer::PS_CREATABLE) { diff --git a/sd/source/ui/sidebar/MasterPagesSelector.hxx b/sd/source/ui/sidebar/MasterPagesSelector.hxx index 93162ddf9c63..31a2e30a96b6 100644 --- a/sd/source/ui/sidebar/MasterPagesSelector.hxx +++ b/sd/source/ui/sidebar/MasterPagesSelector.hxx @@ -196,7 +196,7 @@ private: sal_uInt16 nIndex, MasterPageContainer::Token aToken); - static VclPtr<VirtualDevice> GetVirtualDevice(const Image& rPreview); + static ScopedVclPtr<VirtualDevice> GetVirtualDevice(const Image& rPreview); static Bitmap GetPreviewAsBitmap(const Image& rPreview); };
