summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-03-12 17:28:10 +0100
committerCaolán McNamara <caolanm@redhat.com>2014-03-14 20:49:17 +0000
commit8f4324d0f407868a5dcc71c8ffcafaf9809f3b8f (patch)
treed0b45f5b88ffbe2eab96adf4ab153cffa262cf97
parent74c240387637417583a8d7d4705a68a5777eecfc (diff)
fdo#75110 SwEditShell::DeleteSel fix start of selection when bSelAll == true
(cherry picked from commit f9b62506b22c3eb885ffd5a4ec8025c33df7b2d4) Conflicts: sw/qa/extras/uiwriter/uiwriter.cxx Change-Id: I3e8ce585b29619061b18ab1ab8f0cf6c7d421074 Reviewed-on: https://gerrit.libreoffice.org/8559 Reviewed-by: Björn Michaelsen <bjoern.michaelsen@canonical.com> Tested-by: Björn Michaelsen <bjoern.michaelsen@canonical.com> (cherry picked from commit fea99d32aec1c24b7cbc7a4063b21a471072509b) Reviewed-on: https://gerrit.libreoffice.org/8571 Tested-by: Michael Stahl <mstahl@redhat.com> Reviewed-by: Michael Stahl <mstahl@redhat.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--sw/qa/extras/uiwriter/data/fdo75110.odtbin0 -> 13169 bytes
-rw-r--r--sw/qa/extras/uiwriter/uiwriter.cxx15
-rw-r--r--sw/source/core/edit/eddel.cxx9
3 files changed, 22 insertions, 2 deletions
diff --git a/sw/qa/extras/uiwriter/data/fdo75110.odt b/sw/qa/extras/uiwriter/data/fdo75110.odt
new file mode 100644
index 000000000000..f4c2f2bb699b
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/fdo75110.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index 12c76b8a6af7..a86d2ca786f2 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -23,11 +23,13 @@ public:
//EDITING: undo search&replace corrupt text when searching backward
void testReplaceBackward();
void testFdo69893();
+ void testFdo75110();
CPPUNIT_TEST_SUITE(SwUiWriterTest);
CPPUNIT_TEST(testReplaceForward);
CPPUNIT_TEST(testReplaceBackward);
CPPUNIT_TEST(testFdo69893);
+ CPPUNIT_TEST(testFdo75110);
CPPUNIT_TEST_SUITE_END();
private:
@@ -78,6 +80,19 @@ void SwUiWriterTest::testReplaceForward()
CPPUNIT_ASSERT_EQUAL(ORIGINAL_REPLACE_CONTENT, pTxtNode->GetTxt());
}
+void SwUiWriterTest::testFdo75110()
+{
+ SwDoc* pDoc = createDoc("fdo75110.odt");
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ pWrtShell->SelAll();
+ // The problem was that SwEditShell::DeleteSel() what this Delete() invokes took the wrong selection...
+ pWrtShell->Delete();
+ sw::UndoManager& rUndoManager = pDoc->GetUndoManager();
+ // ... so this Undo() call resulted in a crash.
+ rUndoManager.Undo();
+}
+
void SwUiWriterTest::testReplaceBackward()
{
SwDoc* pDoc = createDoc();
diff --git a/sw/source/core/edit/eddel.cxx b/sw/source/core/edit/eddel.cxx
index e94ea3bc43af..6a4fc8715668 100644
--- a/sw/source/core/edit/eddel.cxx
+++ b/sw/source/core/edit/eddel.cxx
@@ -89,9 +89,14 @@ void SwEditShell::DeleteSel( SwPaM& rPam, sal_Bool* pUndo )
}
else
{
+ SwPaM aPam(rPam);
+ if (bSelectAll)
+ // Selection starts at the first para of the first cell, but we
+ // want to delete the table node before the first cell as well.
+ aPam.Start()->nNode = aPam.Start()->nNode.GetNode().FindTableNode()->GetIndex();
// delete everything
- GetDoc()->DeleteAndJoin( rPam );
- SaveTblBoxCntnt( rPam.GetPoint() );
+ GetDoc()->DeleteAndJoin( aPam );
+ SaveTblBoxCntnt( aPam.GetPoint() );
}
// Selection is not needed anymore