From b6b28931435e44aca92b8c0e1659f701e3ed1a87 Mon Sep 17 00:00:00 2001 From: Jan Holesovsky Date: Fri, 25 Jan 2019 14:40:40 +0100 Subject: sw: Ctrl + shape insertion was not setting up the layer. The consequence was that the shapes were inserted into the background layer. The problem was particularly visible with the LOK, but reproducible on the desktop too. Includes unit test. Change-Id: I16137331f944101e25679ec8c4a034bea658bc57 Reviewed-on: https://gerrit.libreoffice.org/66917 Tested-by: Jenkins Reviewed-by: Jan Holesovsky --- svx/source/svdraw/svdcrtv.cxx | 45 ++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 20 deletions(-) (limited to 'svx') diff --git a/svx/source/svdraw/svdcrtv.cxx b/svx/source/svdraw/svdcrtv.cxx index 911481038d79..711080113382 100644 --- a/svx/source/svdraw/svdcrtv.cxx +++ b/svx/source/svdraw/svdcrtv.cxx @@ -569,6 +569,30 @@ void SdrCreateView::MovCreateObj(const Point& rPnt) } } +void SdrCreateView::SetupObjLayer(const SdrPageView* pPageView, const OUString& aActiveLayer, SdrObject* pObj) +{ + const SdrLayerAdmin& rAd = pPageView->GetPage()->GetLayerAdmin(); + SdrLayerID nLayer(0); + + // #i72535# + if(dynamic_cast( pObj) != nullptr) + { + // for FormControls, force to form layer + nLayer = rAd.GetLayerID(rAd.GetControlLayerName()); + } + else + { + nLayer = rAd.GetLayerID(aActiveLayer); + } + + if(SDRLAYER_NOTFOUND == nLayer) + { + nLayer = SdrLayerID(0); + } + + pObj->SetLayer(nLayer); +} + bool SdrCreateView::EndCreateObj(SdrCreateCmd eCmd) { bool bRet=false; @@ -599,26 +623,7 @@ bool SdrCreateView::EndCreateObj(SdrCreateCmd eCmd) SdrObject* pObj=pCurrentCreate; pCurrentCreate=nullptr; - const SdrLayerAdmin& rAd = pCreatePV->GetPage()->GetLayerAdmin(); - SdrLayerID nLayer(0); - - // #i72535# - if(dynamic_cast( pObj) != nullptr) - { - // for FormControls, force to form layer - nLayer = rAd.GetLayerID(rAd.GetControlLayerName()); - } - else - { - nLayer = rAd.GetLayerID(maActualLayer); - } - - if(SDRLAYER_NOTFOUND == nLayer) - { - nLayer = SdrLayerID(0); - } - - pObj->SetLayer(nLayer); + SetupObjLayer(pCreatePV, maActualLayer, pObj); // recognize creation of a new 3D object inside a 3D scene bool bSceneIntoScene(false); -- cgit