sw/source/core/doc/docfld.cxx | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-)
New commits: commit d2a5e4bb705673119b13c2e203562fecfd386be8 Author: Miklos Vajna <vmik...@suse.cz> Date: Fri Aug 10 21:09:40 2012 +0200 fdo#53210 SwDoc::UpdateExpFlds don't crash when hiding all sections (cherry picked from commit bb6bd1ff9cd3eecec7eb2cd7bd0a4dcef584c903) Change-Id: I9b7a61f18f987214708195a89f6e346c865c7f9f Signed-off-by: Petr Mladek <pmla...@suse.cz> diff --git a/sw/source/core/doc/docfld.cxx b/sw/source/core/doc/docfld.cxx index b7c6549..9e3e564 100644 --- a/sw/source/core/doc/docfld.cxx +++ b/sw/source/core/doc/docfld.cxx @@ -1300,18 +1300,44 @@ void SwDoc::UpdateExpFlds( SwTxtFld* pUpdtFld, bool bUpdRefFlds ) SwNewDBMgr* pMgr = GetNewDBMgr(); pMgr->CloseAll(sal_False); - String aNew; + // Make sure we don't hide all sections, which would lead to a crash. First, count how many of them do we have. + int nShownSections = 0; const _SetGetExpFldPtr* ppSortLst = pUpdtFlds->GetSortLst()->GetData(); for( n = pUpdtFlds->GetSortLst()->Count(); n; --n, ++ppSortLst ) { SwSection* pSect = (SwSection*)(*ppSortLst)->GetSection(); + if ( pSect && !pSect->IsCondHidden()) + nShownSections++; + } + + String aNew; + ppSortLst = pUpdtFlds->GetSortLst()->GetData(); + for( n = pUpdtFlds->GetSortLst()->Count(); n; --n, ++ppSortLst ) + { + SwSection* pSect = (SwSection*)(*ppSortLst)->GetSection(); if( pSect ) { SwSbxValue aValue = aCalc.Calculate( pSect->GetCondition() ); if(!aValue.IsVoidValue()) - pSect->SetCondHidden( aValue.GetBool() ); + { + // Do we want to hide this one? + bool bHide = aValue.GetBool(); + if (bHide && !pSect->IsCondHidden()) + { + // This section will be hidden, but it wasn't before + if (nShownSections == 1) + { + // This would be the last section, so set its condition to false, and avoid hiding it. + rtl::OUString aCond(RTL_CONSTASCII_USTRINGPARAM("0")); + pSect->SetCondition(aCond); + bHide = false; + } + nShownSections--; + } + pSect->SetCondHidden( bHide ); + } continue; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits