sw/source/core/text/itrform2.cxx | 61 ++++++++++++++++++--------------------- sw/source/core/text/portxt.cxx | 2 + 2 files changed, 31 insertions(+), 32 deletions(-)
New commits: commit c3916303ebe63f9910cd2a4a38ac6a8d6ccee3e0 Author: Michael Stahl <mst...@redhat.com> Date: Thu Jul 24 23:02:12 2014 +0200 fdo#81502: sw: fix spurious "[" being painted for field marks There is a special SwFieldMarkPortion sub-class that is supposed to be created for these, which overrides Paint() to do nothing; unfortunately at least for the CH_TXT_ATR_FIELDSTART at beginning of a paragraph a plain SwTxtPortion is created, because the check of rInf.Len() is checking the length of the _previous_ text portion; the call to rInf.SetLen() only happens after creation, in last line of SwTxtFormatter::NewTxtPortion(). This problem affects RTF and DOCX files since commit c6b99eedda03461202f9bf012a422dfd81da72ec. Change-Id: I447b21e841d22558d689f0f244d811c32e4923ec diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx index 537e163..f116565 100644 --- a/sw/source/core/text/itrform2.cxx +++ b/sw/source/core/text/itrform2.cxx @@ -870,41 +870,38 @@ SwTxtPortion *SwTxtFormatter::WhichTxtPor( SwTxtFormatInfo &rInf ) const // Only at the End! // If pCurr does not have a width, it can however aready have content. // E.g. for non-displayable characters - if( rInf.GetLen() > 0 ) + if (rInf.GetTxt()[rInf.GetIdx()]==CH_TXT_ATR_FIELDSTART) + pPor = new SwFieldMarkPortion(); + else if (rInf.GetTxt()[rInf.GetIdx()]==CH_TXT_ATR_FIELDEND) + pPor = new SwFieldMarkPortion(); + else if (rInf.GetTxt()[rInf.GetIdx()]==CH_TXT_ATR_FORMELEMENT) { - if( rInf.GetTxt()[rInf.GetIdx()]==CH_TXT_ATR_FIELDSTART ) - pPor = new SwFieldMarkPortion(); - else if( rInf.GetTxt()[rInf.GetIdx()]==CH_TXT_ATR_FIELDEND ) - pPor = new SwFieldMarkPortion(); - else if( rInf.GetTxt()[rInf.GetIdx()]==CH_TXT_ATR_FORMELEMENT ) + SwTxtNode *pNd = const_cast<SwTxtNode *>(rInf.GetTxtFrm()->GetTxtNode()); + const SwDoc *doc = pNd->GetDoc(); + SwIndex aIndex(pNd, rInf.GetIdx()); + SwPosition aPosition(*pNd, aIndex); + sw::mark::IFieldmark *pBM = doc->getIDocumentMarkAccess()->getFieldmarkFor(aPosition); + OSL_ENSURE(pBM != NULL, "Where is my form field bookmark???"); + if (pBM != NULL) { - SwTxtNode *pNd = const_cast<SwTxtNode *>(rInf.GetTxtFrm()->GetTxtNode()); - const SwDoc *doc = pNd->GetDoc(); - SwIndex aIndex(pNd, rInf.GetIdx()); - SwPosition aPosition(*pNd, aIndex); - sw::mark::IFieldmark *pBM = doc->getIDocumentMarkAccess()->getFieldmarkFor(aPosition); - OSL_ENSURE(pBM != NULL, "Where is my form field bookmark???"); - if (pBM != NULL) + if (pBM->GetFieldname( ) == ODF_FORMCHECKBOX) { - if (pBM->GetFieldname( ) == ODF_FORMCHECKBOX) - { - pPor = new SwFieldFormCheckboxPortion(); - } - else if (pBM->GetFieldname( ) == ODF_FORMDROPDOWN) - { - pPor = new SwFieldFormDropDownPortion(sw::mark::ExpandFieldmark(pBM)); - } - /* we need to check for ODF_FORMTEXT for scenario having FormFields inside FORMTEXT. - * Otherwise file will crash on open. - */ - else if (pBM->GetFieldname( ) == ODF_FORMTEXT) - { - pPor = new SwFieldMarkPortion(); - } - else - { - assert( false ); // unknown type... - } + pPor = new SwFieldFormCheckboxPortion(); + } + else if (pBM->GetFieldname( ) == ODF_FORMDROPDOWN) + { + pPor = new SwFieldFormDropDownPortion(sw::mark::ExpandFieldmark(pBM)); + } + /* we need to check for ODF_FORMTEXT for scenario having FormFields inside FORMTEXT. + * Otherwise file will crash on open. + */ + else if (pBM->GetFieldname( ) == ODF_FORMTEXT) + { + pPor = new SwFieldMarkPortion(); + } + else + { + assert( false ); // unknown type... } } } diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx index 60db276..bf5cb99 100644 --- a/sw/source/core/text/portxt.cxx +++ b/sw/source/core/text/portxt.cxx @@ -517,12 +517,14 @@ void SwTxtPortion::Paint( const SwTxtPaintInfo &rInf ) const { if (rInf.OnWin() && 1==rInf.GetLen() && CH_TXT_ATR_FIELDEND==rInf.GetTxt()[rInf.GetIdx()]) { + assert(false); // this is some debugging only code rInf.DrawBackBrush( *this ); const OUString aTxt(CH_TXT_ATR_SUBST_FIELDEND); rInf.DrawText( aTxt, *this, 0, aTxt.getLength(), false ); } else if (rInf.OnWin() && 1==rInf.GetLen() && CH_TXT_ATR_FIELDSTART==rInf.GetTxt()[rInf.GetIdx()]) { + assert(false); // this is some debugging only code rInf.DrawBackBrush( *this ); const OUString aTxt(CH_TXT_ATR_SUBST_FIELDSTART); rInf.DrawText( aTxt, *this, 0, aTxt.getLength(), false ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits