sc/source/ui/view/viewfun5.cxx |    6 ++++++
 1 file changed, 6 insertions(+)

New commits:
commit 89e901484cba0a988d46da39cef357b34a935142
Author:     Dennis Francis <[email protected]>
AuthorDate: Tue Nov 2 12:51:30 2021 +0530
Commit:     Dennis Francis <[email protected]>
CommitDate: Wed Nov 10 07:47:16 2021 +0100

    sc: fix clip cell range for clip with no content
    
    The problem was observed in LOK mode with the following step:
    1. Select and copy a sheet area with no content.
    2. Paste this into another document.
    => You get an error dialog saying "Protected cells cannot be modified".
    
    The issue here is in ScViewFunc::PasteDataFormat, rSrcDoc.GetDataStart()
    gives the correct cell indices of the clip selection, but GetCellArea()
    truncates the range to empty range as there is no content. Since these
    functions are used in many places which might depend on this behaviour,
    it seems right to fix it just for this usecase.
    
    Change-Id: Ibc85a8d7dd33b377a37298ea9a2a7ebb55eccf1d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124627
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Dennis Francis <[email protected]>
    (cherry picked from commit 4ff08a1332e5150d7ef978572e747ac8da3a0820)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124668
    Reviewed-by: Luboš Luňák <[email protected]>

diff --git a/sc/source/ui/view/viewfun5.cxx b/sc/source/ui/view/viewfun5.cxx
index facb25c9ddb1..655d7a1554fa 100644
--- a/sc/source/ui/view/viewfun5.cxx
+++ b/sc/source/ui/view/viewfun5.cxx
@@ -147,7 +147,13 @@ bool ScViewFunc::PasteDataFormat( SotClipboardFormatId 
nFormatId,
                     SCCOL nFirstCol, nLastCol;
                     SCROW nFirstRow, nLastRow;
                     if ( rSrcDoc.GetDataStart( nSrcTab, nFirstCol, nFirstRow ) 
)
+                    {
                         rSrcDoc.GetCellArea( nSrcTab, nLastCol, nLastRow );
+                        if (nLastCol < nFirstCol)
+                            nLastCol = nFirstCol;
+                        if (nLastRow < nFirstRow)
+                            nLastRow = nFirstRow;
+                    }
                     else
                     {
                         nFirstCol = nLastCol = 0;

Reply via email to