diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2022-02-23 11:18:59 +0100 |
---|---|---|
committer | Gökay ŞATIR <gokaysatir@collabora.com> | 2022-02-25 13:30:47 +0100 |
commit | 935d708c23a829b5eb8a483daf2079e94b4ff14c (patch) | |
tree | 7f56517d2f75da8e742bb33814f4f73e13563cec /svx | |
parent | 6092b48a08d463deb8f02131fbec74fa2424c4fe (diff) |
tdf#72776 Allow text removal in the shapes
Previous fix had crafted condition for fixing one specific
case but it was braking other cases.
(svx/source/unodraw/unoshtxt.cxx)
For example it was not possible to remove text inside textbox
and save that -> it was not saved in LOK case.
Problem is that we had not saved text inside shape and due
to calling GetBackgroundTextForwarder() we did reset to
empty content. In this patch we force UpdateData() call
by releasing lock just before we try to do some final
text cursor operations what applies changes in the content
and prevents us from losing it.
Call which was invoking GetBackgroundTextForwarder() was:
file: xmloff/source/draw/ximpshap.cxx
method: SdXMLShapeContext::endFastElement
line: mxCursor->gotoEnd( false );
After that I found that we had bug which breaks test:
sd/qa/unit/import-tests.cxx odp/shapes-test.odp
It occurs when using this patch or when not using my code
but removing locking functionality for SvxTextEditSourceImpl.
NbcSetOutlinerParaObjectForText triggers shape resizing
even when no text is present inside.
Summary:
1. revert hack from https://git.libreoffice.org/core/+/71b66b0039819f38c935b4eb5d5951ceaf6e8468%5E%21
2. trigger text update by releasing lock for a moment to keep
correct state
3. fix bug with resizing empty shape
Change-Id: Idf1fc6caf19dfb932ce7caa21034f76fa04ce5f9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130415
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Mert Tumer <mert.tumer@collabora.com>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/unodraw/unoshtxt.cxx | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/svx/source/unodraw/unoshtxt.cxx b/svx/source/unodraw/unoshtxt.cxx index 39cad52c073b..e6d80c17ffe1 100644 --- a/svx/source/unodraw/unoshtxt.cxx +++ b/svx/source/unodraw/unoshtxt.cxx @@ -545,10 +545,7 @@ SvxTextForwarder* SvxTextEditSourceImpl::GetBackgroundTextForwarder() if( pOutlinerParaObject && ( bOwnParaObj || !mpObject->IsEmptyPresObj() || mpObject->getSdrPageFromSdrObject()->IsMasterPage() ) ) { - // tdf#72776: do not set empty text to SdrOutliner, if it is already set - if( !mpOutliner->GetEditEngine().GetTextLen() || pOutlinerParaObject->Count() > 1 || ( pOutlinerParaObject->Count() == 1 && - !pOutlinerParaObject->GetTextObject().GetText(0).isEmpty() ) ) - mpOutliner->SetText( *pOutlinerParaObject ); + mpOutliner->SetText( *pOutlinerParaObject ); // put text to object and set EmptyPresObj to FALSE if( mpText && bOwnParaObj && mpObject->IsEmptyPresObj() && pTextObj->IsReallyEdited() ) @@ -778,7 +775,8 @@ void SvxTextEditSourceImpl::UpdateData() SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( mpObject ); if( pTextObj ) { - if( mpOutliner->GetParagraphCount() != 1 || mpOutliner->GetEditEngine().GetTextLen( 0 ) ) + if( (mpOutliner->GetParagraphCount() != 1 && mpOutliner->GetParagraphCount() != 2) + || mpOutliner->GetEditEngine().GetTextLen( 0 ) ) { pTextObj->NbcSetOutlinerParaObjectForText( mpOutliner->CreateParaObject(), mpText ); } |