summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2014-07-24 23:02:12 +0200
committerMichael Stahl <mstahl@redhat.com>2014-07-24 23:24:04 +0200
commitc3916303ebe63f9910cd2a4a38ac6a8d6ccee3e0 (patch)
treed3ae2bb55d6ad1a5a203f9f0233033f256d493a5
parent678ad50a5eaf2b8826e7f8b0f34eb3229559d4ec (diff)
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
-rw-r--r--sw/source/core/text/itrform2.cxx61
-rw-r--r--sw/source/core/text/portxt.cxx2
2 files changed, 31 insertions, 32 deletions
diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx
index 537e1632ee44..f1165656522b 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 60db2763a473..bf5cb992fee1 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 );