sw/source/core/edit/autofmt.cxx | 61 ++++++++++++++++++++++++--- sw/uiconfig/swriter/ui/queryredlinedialog.ui | 2 2 files changed, 57 insertions(+), 6 deletions(-)
New commits: commit a2a046bb0d13e05215ac67dabcdcab637aa545c6 Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Fri Nov 23 18:02:49 2018 +0100 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Nov 23 18:02:49 2018 +0100 sw_redlinehide_4a: SwAutoFormat: manually skip redlines when deleting Change-Id: I001e61305ee8416f851f834d3068bd91de8281f8 diff --git a/sw/source/core/edit/autofmt.cxx b/sw/source/core/edit/autofmt.cxx index fac1e373b1bb..1fad5bd5e5b1 100644 --- a/sw/source/core/edit/autofmt.cxx +++ b/sw/source/core/edit/autofmt.cxx @@ -38,6 +38,8 @@ #include <IDocumentUndoRedo.hxx> #include <DocumentRedlineManager.hxx> #include <IDocumentStylePoolAccess.hxx> +#include <redline.hxx> +#include <unocrsr.hxx> #include <docary.hxx> #include <editsh.hxx> #include <index.hxx> @@ -172,6 +174,7 @@ class SwAutoFormat static bool HasSelBlanks( SwPaM& rPam ); static bool HasBreakAttr( const SwTextNode& ); void DeleteSel( SwPaM& rPam ); + void DeleteSelImpl(SwPaM & rDelPam, SwPaM & rPamToCorrect); bool DeleteCurNxtPara( const OUString& rNxtPara ); /// delete in the node start and/or end void DeleteLeadingTrailingBlanks( bool bStart = true, bool bEnd = true ); @@ -1079,7 +1082,55 @@ void SwAutoFormat::DeleteLeadingTrailingBlanks(bool bStart, bool bEnd) } } -void SwAutoFormat::DeleteSel( SwPaM& rDelPam ) +bool GetRanges(std::vector<std::shared_ptr<SwUnoCursor>> & rRanges, + SwDoc & rDoc, SwPaM const& rDelPam) +{ + bool isNoRedline(true); + SwRedlineTable::size_type tmp; + IDocumentRedlineAccess const& rIDRA(rDoc.getIDocumentRedlineAccess()); + rIDRA.GetRedline(*rDelPam.Start(), &tmp); + SwPosition const* pCurrent(rDelPam.Start()); + for ( ; tmp < rIDRA.GetRedlineTable().size(); ++tmp) + { + SwRangeRedline const*const pRedline(rIDRA.GetRedlineTable()[tmp]); + if (rDelPam.End() <= pRedline->Start()) + { + break; + } + if (pRedline->GetType() == nsRedlineType_t::REDLINE_DELETE) + { + assert(*pRedline->Start() != *pRedline->End()); + isNoRedline = false; + if (*pCurrent < *pRedline->Start()) + { + rRanges.push_back(rDoc.CreateUnoCursor(*pCurrent, pRedline->Start())); + } + else + { + pCurrent = pRedline->End(); + } + } + } + return isNoRedline; +} + +void SwAutoFormat::DeleteSel(SwPaM & rDelPam) +{ + std::vector<std::shared_ptr<SwUnoCursor>> ranges; // need correcting cursor + if (GetRanges(ranges, *m_pDoc, rDelPam)) + { + DeleteSelImpl(rDelPam, rDelPam); + } + else + { + for (auto const& pCursor : ranges) + { + DeleteSelImpl(*pCursor, rDelPam); + } + } +} + +void SwAutoFormat::DeleteSelImpl(SwPaM & rDelPam, SwPaM & rPamToCorrect) { if( m_aFlags.bWithRedlining ) { @@ -1087,18 +1138,18 @@ void SwAutoFormat::DeleteSel( SwPaM& rDelPam ) SwPaM* pShCursor = m_pEditShell->GetCursor_(); SwPaM aTmp( *m_pCurTextNd, 0, pShCursor ); - SwPaM* pPrev = rDelPam.GetPrev(); - rDelPam.GetRingContainer().merge( pShCursor->GetRingContainer() ); + SwPaM* pPrev = rPamToCorrect.GetPrev(); + rPamToCorrect.GetRingContainer().merge( pShCursor->GetRingContainer() ); m_pEditShell->DeleteSel( rDelPam ); // and remove Pam again: SwPaM* p; - SwPaM* pNext = &rDelPam; + SwPaM* pNext = &rPamToCorrect; do { p = pNext; pNext = p->GetNext(); - p->MoveTo( &rDelPam ); + p->MoveTo( &rPamToCorrect ); } while( p != pPrev ); m_aNdIdx = aTmp.GetPoint()->nNode; commit cc5d238e74e588aab4bd3dea696acacf904b744d Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Fri Nov 23 14:14:17 2018 +0100 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Nov 23 14:14:17 2018 +0100 sw: fix wrong title of AutoFormat with redlining dialog (regression from 9fcef57a34dbd88a98621dfaf8668fa076dd98f1) Change-Id: Id6ea5841dd25a30519deb825c3ae0aaa7469c250 diff --git a/sw/uiconfig/swriter/ui/queryredlinedialog.ui b/sw/uiconfig/swriter/ui/queryredlinedialog.ui index 946547f6fb43..490d09a7ebbc 100644 --- a/sw/uiconfig/swriter/ui/queryredlinedialog.ui +++ b/sw/uiconfig/swriter/ui/queryredlinedialog.ui @@ -4,7 +4,7 @@ <requires lib="gtk+" version="3.18"/> <object class="GtkMessageDialog" id="QueryRedlineDialog"> <property name="can_focus">False</property> - <property name="title" translatable="yes" context="queryredlinedialog|QueryRedlineDialog">Delete this theme?</property> + <property name="title" translatable="yes" context="queryredlinedialog|QueryRedlineDialog">AutoCorrect</property> <property name="resizable">False</property> <property name="modal">True</property> <property name="type_hint">dialog</property> _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits