[libreoffice/f20] Resolves: fdo#85282: Correct adjustment of range reference on delete & shift.

Eike Rathke erack at fedoraproject.org
Fri Nov 7 18:44:53 UTC 2014


commit 22325c12c93b8ab05f6bbd04f6b6f1fb9ff1eb55
Author: Eike Rathke <erack at redhat.com>
Date:   Fri Nov 7 19:42:45 2014 +0100

    Resolves: fdo#85282: Correct adjustment of range reference on delete & shift.

 ...orrect-adjustment-of-range-reference-on-d.patch |  127 ++++++++++++++++++++
 libreoffice.spec                                   |    2 +
 2 files changed, 129 insertions(+), 0 deletions(-)
---
diff --git a/0001-fdo-85282-Correct-adjustment-of-range-reference-on-d.patch b/0001-fdo-85282-Correct-adjustment-of-range-reference-on-d.patch
new file mode 100644
index 0000000..173fb96
--- /dev/null
+++ b/0001-fdo-85282-Correct-adjustment-of-range-reference-on-d.patch
@@ -0,0 +1,127 @@
+From f5312e6cf22a9d9806267deda6e09ead0b66498b Mon Sep 17 00:00:00 2001
+Message-Id: <f5312e6cf22a9d9806267deda6e09ead0b66498b.1415379439.git.erack at redhat.com>
+From: Kohei Yoshida <kohei.yoshida at collabora.com>
+Date: Mon, 27 Oct 2014 07:32:32 -0700
+Subject: [PATCH] fdo#85282: Correct adjustment of range reference on delete &
+ shift.
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="------------erAck-patch-parts"
+
+This is a multi-part message in MIME format.
+--------------erAck-patch-parts
+Content-Type: text/plain; charset=UTF-8; format=fixed
+Content-Transfer-Encoding: 8bit
+
+
+Change-Id: I6e01c160f77599dfa4a2e55b60e23d256184c822
+(cherry picked from commit c3c16d5b74fb5707691283538a969a03c2f918b0)
+Reviewed-on: https://gerrit.libreoffice.org/12111
+Reviewed-by: Eike Rathke <erack at redhat.com>
+Tested-by: Eike Rathke <erack at redhat.com>
+(cherry picked from commit bc38612d349b9efd877dec23f3e68a3f7b945cec)
+---
+ sc/source/core/tool/token.cxx | 67 +++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 61 insertions(+), 6 deletions(-)
+
+
+--------------erAck-patch-parts
+Content-Type: text/x-patch; name="0001-fdo-85282-Correct-adjustment-of-range-reference-on-d.patch"
+Content-Transfer-Encoding: 8bit
+Content-Disposition: attachment; filename="0001-fdo-85282-Correct-adjustment-of-range-reference-on-d.patch"
+
+diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
+index 77d7d1d..af39acc 100644
+--- a/sc/source/core/tool/token.cxx
++++ b/sc/source/core/tool/token.cxx
+@@ -2536,6 +2536,9 @@ void setRefDeleted( ScComplexRefData& rRef, const sc::RefUpdateContext& rCxt )
+ 
+ bool shrinkRange( const sc::RefUpdateContext& rCxt, ScRange& rRefRange, const ScRange& rDeletedRange )
+ {
++    if (!rDeletedRange.Intersects(rRefRange))
++        return false;
++
+     if (rCxt.mnColDelta < 0)
+     {
+         // Shifting left.
+@@ -2543,9 +2546,35 @@ bool shrinkRange( const sc::RefUpdateContext& rCxt, ScRange& rRefRange, const Sc
+             // Deleted range is only partially overlapping in vertical direction. Bail out.
+             return false;
+ 
+-        // Move the last column position to the left.
+-        SCCOL nDelta = rDeletedRange.aStart.Col() - rDeletedRange.aEnd.Col() - 1;
+-        rRefRange.aEnd.IncCol(nDelta);
++        if (rDeletedRange.aStart.Col() <= rRefRange.aStart.Col())
++        {
++            if (rRefRange.aEnd.Col() <= rDeletedRange.aEnd.Col())
++            {
++                // Reference is entirely deleted.
++                rRefRange.SetInvalid();
++            }
++            else
++            {
++                // The reference range is truncated on the left.
++                SCCOL nOffset = rDeletedRange.aStart.Col() - rRefRange.aStart.Col();
++                SCCOL nDelta = rRefRange.aStart.Col() - rDeletedRange.aEnd.Col() - 1;
++                rRefRange.aStart.IncCol(nOffset);
++                rRefRange.aEnd.IncCol(nDelta+nOffset);
++            }
++        }
++        else if (rDeletedRange.aEnd.Col() < rRefRange.aEnd.Col())
++        {
++            // Reference is deleted in the middle. Move the last column
++            // position to the left.
++            SCCOL nDelta = rDeletedRange.aStart.Col() - rDeletedRange.aEnd.Col() - 1;
++            rRefRange.aEnd.IncCol(nDelta);
++        }
++        else
++        {
++            // The reference range is truncated on the right.
++            SCCOL nDelta = rDeletedRange.aStart.Col() - rRefRange.aEnd.Col() - 1;
++            rRefRange.aEnd.IncCol(nDelta);
++        }
+         return true;
+     }
+     else if (rCxt.mnRowDelta < 0)
+@@ -2556,9 +2585,35 @@ bool shrinkRange( const sc::RefUpdateContext& rCxt, ScRange& rRefRange, const Sc
+             // Deleted range is only partially overlapping in horizontal direction. Bail out.
+             return false;
+ 
+-        // Move the last row position up.
+-        SCROW nDelta = rDeletedRange.aStart.Row() - rDeletedRange.aEnd.Row() - 1;
+-        rRefRange.aEnd.IncRow(nDelta);
++        if (rDeletedRange.aStart.Row() <= rRefRange.aStart.Row())
++        {
++            if (rRefRange.aEnd.Row() <= rDeletedRange.aEnd.Row())
++            {
++                // Reference is entirely deleted.
++                rRefRange.SetInvalid();
++            }
++            else
++            {
++                // The reference range is truncated on the top.
++                SCCOL nOffset = rDeletedRange.aStart.Row() - rRefRange.aStart.Row();
++                SCCOL nDelta = rRefRange.aStart.Row() - rDeletedRange.aEnd.Row() - 1;
++                rRefRange.aStart.IncRow(nOffset);
++                rRefRange.aEnd.IncRow(nDelta+nOffset);
++            }
++        }
++        else if (rDeletedRange.aEnd.Row() < rRefRange.aEnd.Row())
++        {
++            // Reference is deleted in the middle. Move the last row
++            // position upward.
++            SCCOL nDelta = rDeletedRange.aStart.Row() - rDeletedRange.aEnd.Row() - 1;
++            rRefRange.aEnd.IncRow(nDelta);
++        }
++        else
++        {
++            // The reference range is truncated on the bottom.
++            SCCOL nDelta = rDeletedRange.aStart.Row() - rRefRange.aEnd.Row() - 1;
++            rRefRange.aEnd.IncRow(nDelta);
++        }
+         return true;
+     }
+ 
+
+--------------erAck-patch-parts--
+
+
diff --git a/libreoffice.spec b/libreoffice.spec
index 9cf5ca5..8881522 100644
--- a/libreoffice.spec
+++ b/libreoffice.spec
@@ -318,6 +318,7 @@ Patch62: 0002-fdo-79602-sw-add-new-compatibiltiy-flag-PropLineSpac.patch
 Patch63: 0001-fdo-85403-broadcast-changes-after-TextToColumn.patch
 Patch64: 0001-Resolves-fdo-37559-revert-adding-extra-dummy-polygon.patch
 Patch65: 0001-resolved-fdo-82936-do-not-clear-the-3D-flag-on-refup.patch
+Patch66: 0001-fdo-85282-Correct-adjustment-of-range-reference-on-d.patch
 
 %define instdir %{_libdir}
 %define baseinstdir %{instdir}/libreoffice
@@ -2261,6 +2262,7 @@ update-desktop-database %{_datadir}/applications &> /dev/null || :
 %changelog
 * Fri Nov 07 2014 Eike Rathke <erack at redhat.com> - 1:4.2.7.2-6-UNBUILT
 - Resolves: rhbz#1160924 do not clear the 3D flag on refupdate (fdo#82936)
+- Resolves: fdo#85282: Correct adjustment of range reference on delete & shift.
 
 * Wed Nov 05 2014 Caolán McNamara <caolanm at redhat.com> - 1:4.2.7.2-5
 - Resolves: fdo#37559 revert adding extra dummy polygons


More information about the scm-commits mailing list