summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-03-13 15:03:33 +0100
committerBjörn Michaelsen <bjoern.michaelsen@canonical.com>2014-03-14 04:54:27 -0500
commit9b0cffd68316e6ecb6f11f77504bca64ff34ba72 (patch)
tree4eb91a6b15fee497f471d28d881e9ab3eb2561ae
parent00b7d4c8043a0c6b9e267f0fd5d7389128628ca0 (diff)
fdo#75898 SwFEShell::InsertRow: fix this in case bSelectAll == true
Change-Id: Iaf59db6a55c3f81d11d0196d5d3e52056e31c4b1 (cherry picked from commit f1f9b5b1b73218274ee69cf4e518c2ba926458af) Reviewed-on: https://gerrit.libreoffice.org/8574 Reviewed-by: Björn Michaelsen <bjoern.michaelsen@canonical.com> Tested-by: Björn Michaelsen <bjoern.michaelsen@canonical.com>
-rw-r--r--sw/qa/extras/uiwriter/data/fdo75898.odtbin0 -> 9446 bytes
-rw-r--r--sw/qa/extras/uiwriter/uiwriter.cxx17
-rw-r--r--sw/source/core/frmedt/fetab.cxx8
-rw-r--r--sw/source/ui/shells/tabsh.cxx3
4 files changed, 27 insertions, 1 deletions
diff --git a/sw/qa/extras/uiwriter/data/fdo75898.odt b/sw/qa/extras/uiwriter/data/fdo75898.odt
new file mode 100644
index 000000000000..81a50625227d
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/fdo75898.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index a86d2ca786f2..e30db243494c 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -24,12 +24,14 @@ public:
void testReplaceBackward();
void testFdo69893();
void testFdo75110();
+ void testFdo75898();
CPPUNIT_TEST_SUITE(SwUiWriterTest);
CPPUNIT_TEST(testReplaceForward);
CPPUNIT_TEST(testReplaceBackward);
CPPUNIT_TEST(testFdo69893);
CPPUNIT_TEST(testFdo75110);
+ CPPUNIT_TEST(testFdo75898);
CPPUNIT_TEST_SUITE_END();
private:
@@ -93,6 +95,21 @@ void SwUiWriterTest::testFdo75110()
rUndoManager.Undo();
}
+void SwUiWriterTest::testFdo75898()
+{
+ SwDoc* pDoc = createDoc("fdo75898.odt");
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->SelAll();
+ pWrtShell->InsertRow(1, true);
+ pWrtShell->InsertRow(1, true);
+
+ // Now check if the table has 3 lines.
+ SwShellCrsr* pShellCrsr = pWrtShell->getShellCrsr(false);
+ SwTableNode* pTableNode = pShellCrsr->Start()->nNode.GetNode().FindTableNode();
+ // This was 1, when doing the same using the UI, Writer even crashed.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), pTableNode->GetTable().GetTabLines().size());
+}
+
void SwUiWriterTest::testReplaceBackward()
{
SwDoc* pDoc = createDoc();
diff --git a/sw/source/core/frmedt/fetab.cxx b/sw/source/core/frmedt/fetab.cxx
index b2589d017cf1..f3e9491c7818 100644
--- a/sw/source/core/frmedt/fetab.cxx
+++ b/sw/source/core/frmedt/fetab.cxx
@@ -207,6 +207,14 @@ bool SwFEShell::InsertRow( sal_uInt16 nCnt, bool bBehind )
// search boxes via the layout
SwSelBoxes aBoxes;
+ bool bSelectAll = StartsWithTable() && ExtendedSelectedAll(/*bFootnotes=*/false);
+ if (bSelectAll)
+ {
+ SwPaM* pPaM = getShellCrsr(false);
+ SwNode* pNode = pPaM->Start()->nNode.GetNode().FindTableNode()->EndOfSectionNode();
+ pPaM->End()->nNode = pNode->GetIndex() - 2;
+ pPaM->End()->nContent.Assign(pPaM->End()->nNode.GetNode().GetCntntNode(), 0);
+ }
GetTblSel( *this, aBoxes, nsSwTblSearchType::TBLSEARCH_ROW );
TblWait( nCnt, pFrm, *GetDoc()->GetDocShell(), aBoxes.size() );
diff --git a/sw/source/ui/shells/tabsh.cxx b/sw/source/ui/shells/tabsh.cxx
index 44ddfca35e2e..10a11a0698c3 100644
--- a/sw/source/ui/shells/tabsh.cxx
+++ b/sw/source/ui/shells/tabsh.cxx
@@ -165,7 +165,8 @@ static SwTableRep* lcl_TableParamToItemSet( SfxItemSet& rSet, SwWrtShell &rSh )
if(rSh.GetBoxDirection( aBoxDirection ))
rSet.Put(aBoxDirection, FN_TABLE_BOX_TEXTORIENTATION);
- sal_Bool bTableSel = rSh.IsTableMode();
+ bool bSelectAll = rSh.StartsWithTable() && rSh.ExtendedSelectedAll(/*bFootnotes=*/false);
+ sal_Bool bTableSel = rSh.IsTableMode() || bSelectAll;
if(!bTableSel)
{
rSh.StartAllAction();