diff options
author | Eike Rathke <erack@redhat.com> | 2022-06-10 00:01:23 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2022-06-27 13:30:24 +0200 |
commit | 3ac2a496343a5e94b0c2251783aa4932d651c720 (patch) | |
tree | 7203f76c99ed0f77bf2b3c268880d648077f7570 /sc/source | |
parent | c9ffec6cdf1af4c9c1e8c6317a59ad5d63093ac7 (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.
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135568
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Jenkins
(cherry picked from commit b7eddf3e9c2db503dde632b35513844806be3c36)
Conflicts:
sc/source/core/data/table2.cxx
Change-Id: Ib07f711a7d407dafdf548873291f1ccc81b85d47
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135587
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sc/source')
-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 32c1e34bbff4..543944c18a25 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); |