summaryrefslogtreecommitdiff
path: root/lotuswordpro/source/filter/lwplayout.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'lotuswordpro/source/filter/lwplayout.cxx')
-rw-r--r--lotuswordpro/source/filter/lwplayout.cxx31
1 files changed, 24 insertions, 7 deletions
diff --git a/lotuswordpro/source/filter/lwplayout.cxx b/lotuswordpro/source/filter/lwplayout.cxx
index 487058cbb08b..5e548d1a6019 100644
--- a/lotuswordpro/source/filter/lwplayout.cxx
+++ b/lotuswordpro/source/filter/lwplayout.cxx
@@ -588,6 +588,7 @@ void LwpLayoutMisc::Read(LwpObjectStream* pStrm)
LwpMiddleLayout::LwpMiddleLayout( LwpObjectHeader const &objHdr, LwpSvStream* pStrm )
: LwpVirtualLayout(objHdr, pStrm)
, m_bGettingGeometry(false)
+ , m_bGettingBackgroundStuff(false)
{
}
@@ -655,21 +656,28 @@ rtl::Reference<LwpObject> LwpMiddleLayout::GetBasedOnStyle()
* @descr: Get the geometry of current layout
*
*/
-LwpLayoutGeometry* LwpMiddleLayout::Geometry()
+LwpLayoutGeometry* LwpMiddleLayout::GetGeometry()
{
+ if (m_bGettingGeometry)
+ throw std::runtime_error("recursion in layout");
+ m_bGettingGeometry = true;
+
+ LwpLayoutGeometry* pRet = nullptr;
if( !m_LayGeometry.IsNull() )
{
- return dynamic_cast<LwpLayoutGeometry*> (m_LayGeometry.obj().get());
+ pRet = dynamic_cast<LwpLayoutGeometry*> (m_LayGeometry.obj().get());
}
else
{
rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(xBase.get()))
{
- return pLay->GetGeometry();
+ pRet = pLay->GetGeometry();
}
}
- return nullptr;
+
+ m_bGettingGeometry = false;
+ return pRet;
}
/**
@@ -818,21 +826,30 @@ LwpBorderStuff* LwpMiddleLayout::GetBorderStuff()
*/
LwpBackgroundStuff* LwpMiddleLayout::GetBackgroundStuff()
{
+ if (m_bGettingBackgroundStuff)
+ throw std::runtime_error("recursion in layout");
+ m_bGettingBackgroundStuff = true;
+
+ LwpBackgroundStuff* pRet = nullptr;
+
if(m_nOverrideFlag & OVER_BACKGROUND)
{
LwpLayoutBackground* pLayoutBackground = dynamic_cast<LwpLayoutBackground*>(m_LayBackgroundStuff.obj().get());
- return pLayoutBackground ? &pLayoutBackground->GetBackgoudStuff() : nullptr;
+ pRet = pLayoutBackground ? &pLayoutBackground->GetBackgoudStuff() : nullptr;
}
else
{
rtl::Reference<LwpObject> xBase(GetBasedOnStyle());
if (LwpMiddleLayout* pLay = dynamic_cast<LwpMiddleLayout*>(xBase.get()))
{
- return pLay->GetBackgroundStuff();
+ pRet = pLay->GetBackgroundStuff();
}
}
- return nullptr;
+
+ m_bGettingBackgroundStuff = false;
+ return pRet;
}
+
/**
* @descr: create xfborder.
*/