diff options
Diffstat (limited to 'editeng')
-rw-r--r-- | editeng/source/editeng/editstt2.hxx | 7 | ||||
-rw-r--r-- | editeng/source/editeng/impedit2.cxx | 15 | ||||
-rw-r--r-- | editeng/source/editeng/impedit3.cxx | 7 |
3 files changed, 25 insertions, 4 deletions
diff --git a/editeng/source/editeng/editstt2.hxx b/editeng/source/editeng/editstt2.hxx index 15a8a0ed239e..fe51f3b6168d 100644 --- a/editeng/source/editeng/editstt2.hxx +++ b/editeng/source/editeng/editstt2.hxx @@ -81,8 +81,11 @@ public: bool AutoPageHeight() const { return bool( nControlBits & EEControlBits::AUTOPAGESIZEY ); } - bool MarkFields() const - { return bool( nControlBits & EEControlBits::MARKFIELDS ); } + bool MarkNonUrlFields() const + { return bool( nControlBits & EEControlBits::MARKNONURLFIELDS ); } + + bool MarkUrlFields() const + { return bool( nControlBits & EEControlBits::MARKURLFIELDS ); } bool DoRestoreFont() const { return bool( nControlBits & EEControlBits::RESTOREFONT ); } diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx index c15f0fde7cbf..025182a07bb8 100644 --- a/editeng/source/editeng/impedit2.cxx +++ b/editeng/source/editeng/impedit2.cxx @@ -2973,8 +2973,21 @@ bool ImpEditEngine::UpdateFields() std::unique_ptr<EditCharAttribField> pCurrent(new EditCharAttribField(rField)); rField.Reset(); - if ( aStatus.MarkFields() ) + if (!aStatus.MarkNonUrlFields() && !aStatus.MarkUrlFields()) + ; // nothing marked + else if (aStatus.MarkNonUrlFields() && aStatus.MarkUrlFields()) rField.GetFieldColor() = GetColorConfig().GetColorValue( svtools::WRITERFIELDSHADINGS ).nColor; + else + { + bool bURL = false; + if (const SvxFieldItem* pFieldItem = dynamic_cast<const SvxFieldItem*>(rField.GetItem())) + { + if (const SvxFieldData* pFieldData = pFieldItem->GetField()) + bURL = (dynamic_cast<const SvxURLField* >(pFieldData) != nullptr); + } + if ((bURL && aStatus.MarkUrlFields()) || (!bURL && aStatus.MarkNonUrlFields())) + rField.GetFieldColor() = GetColorConfig().GetColorValue( svtools::WRITERFIELDSHADINGS ).nColor; + } const OUString aFldValue = GetEditEnginePtr()->CalcFieldValue( diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index afadc820687b..631893e8326c 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -3182,7 +3182,12 @@ void ImpEditEngine::Paint( OutputDevice* pOutDev, tools::Rectangle aClipRect, Po pDXArray = pLine->GetCharPosArray().data() + (nIndex - pLine->GetStart()); // Paint control characters (#i55716#) - if ( aStatus.MarkFields() ) + /* XXX: Given that there's special handling + * only for some specific characters + * (U+200B ZERO WIDTH SPACE and U+2060 WORD + * JOINER) it is assumed to be not relevant + * for MarkUrlFields(). */ + if ( aStatus.MarkNonUrlFields() ) { sal_Int32 nTmpIdx; const sal_Int32 nTmpEnd = nTextStart + rTextPortion.GetLen(); |