sc/source/ui/view/viewfun5.cxx |   20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

New commits:
commit c8af39955e2210c81882ae0676ec32a42fff7898
Author:     Dennis Francis <dennis.fran...@collabora.com>
AuthorDate: Tue Nov 2 15:37:17 2021 +0530
Commit:     Dennis Francis <dennis.fran...@collabora.com>
CommitDate: Wed Nov 10 07:56:34 2021 +0100

    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 <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Dennis Francis <dennis.fran...@collabora.com>
    (cherry picked from commit 789d19776ab451a6118b938830d488961b42dae5)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124673
    Tested-by: Jenkins

diff --git a/sc/source/ui/view/viewfun5.cxx b/sc/source/ui/view/viewfun5.cxx
index 5c6d89671da4..ef92193ad3e4 100644
--- a/sc/source/ui/view/viewfun5.cxx
+++ b/sc/source/ui/view/viewfun5.cxx
@@ -161,8 +161,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 ) );
 

Reply via email to