summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2017-07-21 22:55:51 +0200
committerCaolán McNamara <caolanm@redhat.com>2017-07-27 17:29:26 +0200
commit1272e9aba878192f138247d732b6deca13f36176 (patch)
tree233a0ea97c9d0005d71ee8d40d172ccf7334a4fd
parent1a165d19761a89e1c5919cd2d03bbd448e6d84dc (diff)
tdf#99692 sw: fix bookmark positions in tables at start of redlines
The code assumes that if it can move the cursor backward in line 2038, that move can be "inverted" by moving the cursor forward after the content has been moved - but if the cursor moved back a node, and the moved content does not start with a SwTextNode, the cursor will move forward skipping over the non-text nodes, so offsets in the aSaveBkmks (and aSaveRedl, presumably) are going to be wrong. Just don't use Move() if it leaves the current node. Change-Id: I95278a10c14aeba9f76558486bb2712f6726dbcb (cherry picked from commit 850795942b3e168cab8ce88b4f2b421945ff29ca) Reviewed-on: https://gerrit.libreoffice.org/40418 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--sw/source/core/doc/DocumentContentOperationsManager.cxx13
1 files changed, 10 insertions, 3 deletions
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index 585c8c81afc2..32f7da7e99de 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -2037,12 +2037,19 @@ bool DocumentContentOperationsManager::MoveRange( SwPaM& rPaM, SwPosition& rPos,
// Put back the Pam by one "content"; so that it's always outside of
// the manipulated range.
- // If there's no content anymore, set it to the StartNode (that's
- // always there).
- const bool bNullContent = !aSavePam.Move( fnMoveBackward, GoInContent );
+ // tdf#99692 don't Move() back if that would end up in another node
+ // because moving backward is not necessarily the inverse of forward then.
+ const bool bNullContent = aSavePam.GetPoint()->nContent == 0;
if( bNullContent )
{
aSavePam.GetPoint()->nNode--;
+ aSavePam.GetPoint()->nContent.Assign(aSavePam.GetContentNode(), 0);
+ }
+ else
+ {
+ bool const success(aSavePam.Move(fnMoveBackward, GoInContent));
+ assert(success);
+ (void) success;
}
// Copy all Bookmarks that are within the Move range into an array,