svx/source/svdraw/svdograf.cxx | 53 +++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 31 deletions(-)
New commits: commit 9e5fae358cb22256b34bab85d06fbd75821aead4 Author: Caolán McNamara <[email protected]> AuthorDate: Thu Oct 9 19:50:11 2025 +0100 Commit: Miklos Vajna <[email protected]> CommitDate: Fri Oct 10 11:28:44 2025 +0200 create drawing document directly and work directly with the view-less models's SdrPage Change-Id: I32432ad0479d8d1faa3646d2059e2a7e8b56e26f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192124 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Miklos Vajna <[email protected]> diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx index 63579069896b..98c7dcbf0800 100644 --- a/svx/source/svdraw/svdograf.cxx +++ b/svx/source/svdraw/svdograf.cxx @@ -60,8 +60,7 @@ #include <comphelper/processfactory.hxx> #include <com/sun/star/drawing/XDrawPagesSupplier.hpp> #include <com/sun/star/frame/DispatchHelper.hpp> -#include <com/sun/star/frame/XDesktop2.hpp> -#include <com/sun/star/frame/Desktop.hpp> +#include <com/sun/star/frame/XLoadable.hpp> #include <vcl/filter/PDFiumLibrary.hxx> #include <svdpdf.hxx> #include <svx/unoapi.hxx> @@ -380,18 +379,15 @@ css::uno::Reference<css::lang::XComponent> SdrGrafObj::GetReplacementGraphicMode // Create an empty Draw component. uno::Reference<uno::XComponentContext> xContext = ::comphelper::getProcessComponentContext(); - uno::Reference<frame::XDesktop2> xDesktop = css::frame::Desktop::create(xContext); - if (!xDesktop) - return nullptr; - uno::Reference<lang::XComponent> xComponent = xDesktop->loadComponentFromURL(u"private:factory/sdraw"_ustr, u"_default"_ustr, 0, {}); - uno::Reference<frame::XModel> xModel(xComponent, uno::UNO_QUERY); + uno::Reference<frame::XModel> xModel(xContext->getServiceManager()->createInstanceWithContext(u"com.sun.star.drawing.DrawingDocument"_ustr, xContext), + uno::UNO_QUERY); if (!xModel) return nullptr; + uno::Reference<css::frame::XLoadable> xModelLoad(xModel, uno::UNO_QUERY); + if (xModelLoad) + xModelLoad->initNew(); uno::Reference<frame::XController> xController(xModel->getCurrentController()); - SfxViewShell* pViewShell = SfxViewShell::Get(xController); - if (!pViewShell) - return nullptr; - uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(xComponent, uno::UNO_QUERY); + uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(xModel, uno::UNO_QUERY); if (!xDrawPagesSupplier) return nullptr; uno::Reference<drawing::XDrawPages> xDrawPages = xDrawPagesSupplier->getDrawPages(); @@ -412,30 +408,25 @@ css::uno::Reference<css::lang::XComponent> SdrGrafObj::GetReplacementGraphicMode aFilter.DoImport(*pSdrPage, 0, rGraphic.getPageNumber(), nullptr); } - if (SdrView* pView = pViewShell->GetDrawView()) - { - if (SdrPageView* pPV = pView->GetSdrPageView()) - { - // Group shapes together, including invisible objects - - rtl::Reference<SdrObject> xGrp(new SdrObjGroup(rSdrModel)); - SdrObjList* pDstList = xGrp->GetSubList(); + // Group shapes together, including invisible objects + size_t nSrcObjCount = pSdrPage->GetObjCount(); + if (!nSrcObjCount) + return xModel; - SdrObjList* pSrcList = pPV->GetObjList(); - size_t i = pSrcList->GetObjCount(); - while (i > 0) - { - --i; - rtl::Reference<SdrObject> xObj(pSrcList->GetObj(i)); - pSrcList->RemoveObject(i); - pDstList->InsertObject(xObj.get(), 0); - } + rtl::Reference<SdrObject> xGrp(new SdrObjGroup(rSdrModel)); + SdrObjList* pDstList = xGrp->GetSubList(); - pSrcList->InsertObject(xGrp.get(), 0); - } + while (nSrcObjCount > 0) + { + --nSrcObjCount; + rtl::Reference<SdrObject> xObj(pSdrPage->GetObj(nSrcObjCount)); + pSdrPage->RemoveObject(nSrcObjCount); + pDstList->InsertObject(xObj.get(), 0); } - return xComponent; + pSdrPage->InsertObject(xGrp.get(), 0); + + return xModel; } void SdrGrafObj::NbcSetGraphic(const Graphic& rGraphic)
