summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2013-10-28 11:15:43 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2013-10-28 12:00:22 +0100
commitd1eb536c7e410d40fd94c76b157bbd4ed7944d4c (patch)
tree41318621a75eb281cfaf081c0cb654e73a41ea33
parented2790435f74d6eaa28fcc758d2db9e1c77b5170 (diff)
fdo#69893 fix SwWrtShell::SelAll() to work with empty table at doc start
In theory, it was a problem to have the table cursor around when having the selection outside the table; but it didn't cause a problem so far. However, when the table has one or more empty cells, we really need to leave table mode, otherwise only the table gets selected. Change-Id: I766903ed624b9338f0612697b4c03f44de1d2e41
-rw-r--r--sw/qa/extras/uiwriter/data/fdo69893.odtbin0 -> 7178 bytes
-rw-r--r--sw/qa/extras/uiwriter/uiwriter.cxx16
-rw-r--r--sw/source/ui/wrtsh/select.cxx6
3 files changed, 22 insertions, 0 deletions
diff --git a/sw/qa/extras/uiwriter/data/fdo69893.odt b/sw/qa/extras/uiwriter/data/fdo69893.odt
new file mode 100644
index 000000000000..a2f7aa7695c7
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/fdo69893.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index fa0bb144dbeb..8fd994724cb1 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -8,6 +8,7 @@
#include <swmodeltestbase.hxx>
#include <ndtxt.hxx>
+#include <wrtsh.hxx>
#include "UndoManager.hxx"
@@ -21,10 +22,12 @@ public:
//Regression test of fdo#70143
//EDITING: undo search&replace corrupt text when searching backward
void testReplaceBackward();
+ void testFdo69893();
CPPUNIT_TEST_SUITE(SwUiWriterTest);
CPPUNIT_TEST(testReplaceForward);
CPPUNIT_TEST(testReplaceBackward);
+ CPPUNIT_TEST(testFdo69893);
CPPUNIT_TEST_SUITE_END();
private:
@@ -97,6 +100,19 @@ void SwUiWriterTest::testReplaceBackward()
CPPUNIT_ASSERT_EQUAL(ORIGINAL_REPLACE_CONTENT, pTxtNode->GetTxt());
}
+void SwUiWriterTest::testFdo69893()
+{
+ SwDoc* pDoc = createDoc("fdo69893.odt");
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ pWrtShell->SelAll();
+
+ SwShellCrsr* pShellCrsr = pWrtShell->getShellCrsr(false);
+ SwTxtNode& rEnd = dynamic_cast<SwTxtNode&>(pShellCrsr->End()->nNode.GetNode());
+ // Selection did not include the para after table, this was "B1".
+ CPPUNIT_ASSERT_EQUAL(OUString("Para after table."), rEnd.GetTxt());
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/ui/wrtsh/select.cxx b/sw/source/ui/wrtsh/select.cxx
index 8eb0d6a53392..972e3ef6e8f3 100644
--- a/sw/source/ui/wrtsh/select.cxx
+++ b/sw/source/ui/wrtsh/select.cxx
@@ -162,7 +162,13 @@ long SwWrtShell::SelAll()
bool bStartsWithTable = StartsWithTable();
if (bStartsWithTable)
+ {
+ // Disable table cursor to make sure getShellCrsr() returns m_pCurCrsr, not m_pTblCrsr.
+ if (IsTableMode())
+ TblCrsrToCursor();
+ // Do the extended select all on m_pCurCrsr.
ExtendedSelectAll(/*bFootnotes =*/ false);
+ }
if( pStartPos )
{