summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Francis <dennis.francis@collabora.com>2021-11-02 15:37:17 +0530
committerDennis Francis <dennis.francis@collabora.com>2021-11-04 08:23:22 +0100
commit789d19776ab451a6118b938830d488961b42dae5 (patch)
treee90f38215174948dd6bbffe3dbfd51867148cb6e
parent430a3e123c24ba2e87d89dddebb4fda4d3ff2e93 (diff)
sc: EMBED_SOURCE: extend copy to clip area...
to include the draw objects in the sheet read from system clipboard. This is needed because GetCellArea() computes the "last row" and "last column" only based on the cell contents and not the drawing layer contents. So copying a "empty cells" range that has images in it and pasting it will not include any images without this fix. Change-Id: I56ffb14e881a1aecc5b43590ea4fb3fc1c35ace8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124629 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Dennis Francis <dennis.francis@collabora.com>
-rw-r--r--sc/source/ui/view/viewfun5.cxx20
1 files changed, 19 insertions, 1 deletions
diff --git a/sc/source/ui/view/viewfun5.cxx b/sc/source/ui/view/viewfun5.cxx
index c1c156c04724..5df9d2e1202e 100644
--- a/sc/source/ui/view/viewfun5.cxx
+++ b/sc/source/ui/view/viewfun5.cxx
@@ -159,8 +159,26 @@ bool ScViewFunc::PasteDataFormat( SotClipboardFormatId nFormatId,
nFirstCol = nLastCol = 0;
nFirstRow = nLastRow = 0;
}
+
+ bool bIncludeObjects = false; // include drawing layer objects in CopyToClip ?
+
+ if (nFormatId == SotClipboardFormatId::EMBED_SOURCE)
+ {
+ const ScDrawLayer* pDraw = rSrcDoc.GetDrawLayer();
+ SCCOL nPrintEndCol = nFirstCol;
+ SCROW nPrintEndRow = nFirstRow;
+ bool bHasObjects = pDraw && pDraw->HasObjects();
+ // Extend the range to include the drawing layer objects.
+ if (bHasObjects && rSrcDoc.GetPrintArea(nSrcTab, nPrintEndCol, nPrintEndRow, true))
+ {
+ nLastCol = std::max<SCCOL>(nLastCol, nPrintEndCol);
+ nLastRow = std::max<SCROW>(nLastRow, nPrintEndRow);
+ }
+
+ bIncludeObjects = bHasObjects;
+ }
+
ScClipParam aClipParam(ScRange(nFirstCol, nFirstRow, nSrcTab, nLastCol, nLastRow, nSrcTab), false);
- bool bIncludeObjects = (nFormatId == SotClipboardFormatId::EMBED_SOURCE);
rSrcDoc.CopyToClip(aClipParam, pClipDoc.get(), &aSrcMark, false, bIncludeObjects);
ScGlobal::SetClipDocName( xDocShRef->GetTitle( SFX_TITLE_FULLNAME ) );