Kaydet (Commit) eed72a8c authored tarafından Jan Holesovsky's avatar Jan Holesovsky Kaydeden (comit) Miklos Vajna

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/66915Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.com>
Tested-by: 's avatarMiklos Vajna <vmiklos@collabora.com>
üst 4627da3a
......@@ -114,6 +114,9 @@ public:
bool IsCreateObj() const { return pAktCreate!=nullptr; }
SdrObject* GetCreateObj() const { return pAktCreate; }
/// Setup layer (eg. foreground / background) of the given object.
static void SetupObjLayer(const SdrPageView* pPageView, const OUString& aActiveLayer, SdrObject* pObj);
// BegCreateCaptionObj() creates a SdrCaptionObj (legend item).
// rObjSiz is the initial size of the legend text frame.
// Only the length of the tip is dragged
......
......@@ -575,6 +575,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<const FmFormObj*>( 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;
......@@ -605,26 +629,7 @@ bool SdrCreateView::EndCreateObj(SdrCreateCmd eCmd)
SdrObject* pObj=pAktCreate;
pAktCreate=nullptr;
const SdrLayerAdmin& rAd = pCreatePV->GetPage()->GetLayerAdmin();
SdrLayerID nLayer(0);
// #i72535#
if(dynamic_cast<const FmFormObj*>( 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);
......
......@@ -466,10 +466,14 @@ void SwTiledRenderingTest::testInsertShape()
comphelper::dispatchCommand(".uno:BasicShapes.circle", uno::Sequence<beans::PropertyValue>());
// check that the shape was inserted in the visible area, not outside
SdrPage* pPage = pWrtShell->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
IDocumentDrawModelAccess &rDrawModelAccess = pWrtShell->GetDoc()->getIDocumentDrawModelAccess();
SdrPage* pPage = rDrawModelAccess.GetDrawModel()->GetPage(0);
SdrObject* pObject = pPage->GetObj(0);
CPPUNIT_ASSERT_EQUAL(tools::Rectangle(2736, 868, 7264, 3132), pObject->GetSnapRect());
// check that it is in the foreground layer
CPPUNIT_ASSERT(rDrawModelAccess.GetHeavenId() == pObject->GetLayer());
comphelper::LibreOfficeKit::setActive(false);
}
......
......@@ -3119,6 +3119,7 @@ long SwFEShell::GetSectionWidth( SwFormat const & rFormat ) const
}
}
SdrPageView* pPageView = pDrawView->GetSdrPageView();
SdrCreateView::SetupObjLayer(pPageView, pDrawView->GetActiveLayer(), pObj);
pDrawView->InsertObjectAtView(pObj, *pPageView);
}
ImpEndCreate();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment