summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2022-06-10 00:01:23 +0200
committerEike Rathke <erack@redhat.com>2022-06-10 11:23:56 +0200
commitb7eddf3e9c2db503dde632b35513844806be3c36 (patch)
tree98329e607b9dcfae742ef0f6eb6a128b7bacd66d /sc
parentcd7e262f7e34786496103dbe2be16c198bf97c64 (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.cxx18
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);