diff options
author | Eike Rathke <erack@redhat.com> | 2022-06-10 00:01:23 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2022-06-10 11:23:56 +0200 |
commit | b7eddf3e9c2db503dde632b35513844806be3c36 (patch) | |
tree | 98329e607b9dcfae742ef0f6eb6a128b7bacd66d /sc | |
parent | cd7e262f7e34786496103dbe2be16c198bf97c64 (diff) |
Resolves: tdf#148072 Restore sheet-local names for Undo of Cut
Undo of Cut uses CopyToTable() and not UndoToTab() as Copy does,
so copy the sheet-local names also *from* Undo and not only *to*
Undo. And mark for ScAreasChanged broadcast.
Change-Id: Ib07f711a7d407dafdf548873291f1ccc81b85d47
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135568
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/data/table2.cxx | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx index 8193d4e4328e..3ba4ce9b5bfd 100644 --- a/sc/source/core/data/table2.cxx +++ b/sc/source/core/data/table2.cxx @@ -1315,13 +1315,21 @@ void ScTable::CopyToTable( if (!ValidColRow(nCol1, nRow1) || !ValidColRow(nCol2, nRow2)) return; - bool bIsUndoDoc = pDestTab->rDocument.IsUndo(); + const bool bToUndoDoc = pDestTab->rDocument.IsUndo(); + const bool bFromUndoDoc = rDocument.IsUndo(); - if (bIsUndoDoc && (nFlags & InsertDeleteFlags::CONTENTS)) + if ((bToUndoDoc || bFromUndoDoc) && (nFlags & InsertDeleteFlags::CONTENTS) && mpRangeName) { // Copying formulas may create sheet-local named expressions on the // destination sheet. Add existing to Undo first. + // During Undo restore the previous named expressions. pDestTab->SetRangeName( std::unique_ptr<ScRangeName>( new ScRangeName( *GetRangeName()))); + if (!pDestTab->rDocument.IsClipOrUndo()) + { + ScDocShell* pDocSh = static_cast<ScDocShell*>(pDestTab->rDocument.GetDocumentShell()); + if (pDocSh) + pDocSh->SetAreasChangedNeedBroadcast(); + } } if (nFlags != InsertDeleteFlags::NONE) @@ -1333,14 +1341,14 @@ void ScTable::CopyToTable( // quadratically expensive with large groups. So do the grouping just once at the end. sc::DelayFormulaGroupingSwitch delayGrouping( pDestTab->rDocument, true ); for (SCCOL i = nCol1; i <= ClampToAllocatedColumns(nCol2); i++) - aCol[i].CopyToColumn(rCxt, nRow1, nRow2, bIsUndoDoc ? nFlags : nTempFlags, bMarked, + aCol[i].CopyToColumn(rCxt, nRow1, nRow2, bToUndoDoc ? nFlags : nTempFlags, bMarked, pDestTab->CreateColumnIfNotExists(i), pMarkData, bAsLink, bGlobalNamesToLocal); } if (!bColRowFlags) // Column widths/Row heights/Flags return; - if(bIsUndoDoc && (nFlags & InsertDeleteFlags::ATTRIB)) + if (bToUndoDoc && (nFlags & InsertDeleteFlags::ATTRIB)) { pDestTab->mpCondFormatList.reset(new ScConditionalFormatList(pDestTab->rDocument, *mpCondFormatList)); } @@ -1453,7 +1461,7 @@ void ScTable::CopyToTable( CopySparklinesToTable(nCol1, nRow1, nCol2, nRow2, pDestTab); } - if (!bIsUndoDoc && bCopyCaptions && (nFlags & (InsertDeleteFlags::NOTE | InsertDeleteFlags::ADDNOTES))) + if (!bToUndoDoc && bCopyCaptions && (nFlags & (InsertDeleteFlags::NOTE | InsertDeleteFlags::ADDNOTES))) { bool bCloneCaption = (nFlags & InsertDeleteFlags::NOCAPTIONS) == InsertDeleteFlags::NONE; CopyCaptionsToTable( nCol1, nRow1, nCol2, nRow2, pDestTab, bCloneCaption); |