Bug 81720

Michael Stahl mst at libreoffice.org
Tue Aug 23 11:12:34 UTC 2022


On 19.08.22 15:41, Phillips Rogfield wrote:
> Dear developers,
> 
> I would like to fix bug 81720 
> <https://bugs.documentfoundation.org/show_bug.cgi?id=81720#c22>.
> 
> Basically when you insert a ReferenceMark, if you put the cursor at the 
> edge of it (start or end), and type something, it will expand on the 
> reference mark instead of writing it as a “normal text”.
> 
> You can find how to reproduce it in comment 22 
> <https://bugs.documentfoundation.org/show_bug.cgi?id=81720#c22>.
> 
> I have set up my environment, but I’m not sure where is the code that 
> “checks” if something is a ReferenceMark, if anything.
> 
> Can you point me in the right direction, please?

so firstly, while cross references are fields, the reference marks are 
not fields in Writer.

there are 2 different kinds of reference mark, both represented by a 
SwTextAttr with ID RES_TXTATR_REFMARK.

one has a dummy character in the text, CH_TXTATR_INWORD, and behaves 
similar to a field - it does not have an end position, so it cannot mark 
text, it only contains its dummy character.

the other has a start and end position, but no dummy character - this is 
the one you're concerned about.

these SwTextAttr all exist in a SwpHints array that is a member 
SwTextNode::m_pSwpHints, sorted in multiple different ways.

when editing the text, the hints start and end positions are adjusted in 
  SwTextNode::Update() and its base class SwContentIndexReg::Update() - 
it's rather complex code but i think you need to tweak these functions 
to fix the problem.






More information about the LibreOffice mailing list