diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-01-03 11:40:41 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-01-24 20:41:26 +0000 |
commit | d41349d8456361f8507f579d5bab388f56530b33 (patch) | |
tree | b91b9426c54f3fca2eb6711c546afdb885c3f9b8 | |
parent | 2e44619d919b60fabf0fc528d6e0ac5c997069c0 (diff) |
fdo#72486 SwWrtShell::SelAll: if in table, then call extended select all ...
... only in case the whole table is already selected
Change-Id: If7626954460e16945af6b21402a84e90c71ae138
(cherry picked from commit fa39e7970496537258eaad1f5351db2d675225b6)
Reviewed-on: https://gerrit.libreoffice.org/14157
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | sw/qa/extras/odfimport/odfimport.cxx | 20 | ||||
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter.cxx | 3 | ||||
-rw-r--r-- | sw/source/uibase/wrtsh/select.cxx | 21 |
3 files changed, 35 insertions, 9 deletions
diff --git a/sw/qa/extras/odfimport/odfimport.cxx b/sw/qa/extras/odfimport/odfimport.cxx index 2b24dc58fbef..f1ea610060c9 100644 --- a/sw/qa/extras/odfimport/odfimport.cxx +++ b/sw/qa/extras/odfimport/odfimport.cxx @@ -397,7 +397,13 @@ DECLARE_ODFIMPORT_TEST(testFdo37606, "fdo37606.odt") SwShellCrsr* pShellCrsr = pWrtShell->getShellCrsr(false); { - pWrtShell->SelAll(); + pWrtShell->SelAll(); // Selects A1. + SwTxtNode& rCellEnd = dynamic_cast<SwTxtNode&>(pShellCrsr->End()->nNode.GetNode()); + // fdo#72486 This was "Hello.", i.e. a single select-all selected the whole document, not just the cell only. + CPPUNIT_ASSERT_EQUAL(OUString("A1"), rCellEnd.GetTxt()); + + pWrtShell->SelAll(); // Selects the whole table. + pWrtShell->SelAll(); // Selects the whole document. SwTxtNode& rStart = dynamic_cast<SwTxtNode&>(pShellCrsr->Start()->nNode.GetNode()); CPPUNIT_ASSERT_EQUAL(OUString("A1"), rStart.GetTxt()); @@ -434,7 +440,9 @@ DECLARE_ODFIMPORT_TEST(testFdo37606Copy, "fdo37606.odt") CPPUNIT_ASSERT(pTxtDoc); SwWrtShell* pWrtShell = pTxtDoc->GetDocShell()->GetWrtShell(); // Ctrl-A - pWrtShell->SelAll(); + pWrtShell->SelAll(); // Selects A1. + pWrtShell->SelAll(); // Selects the whole table. + pWrtShell->SelAll(); // Selects the whole document. // Ctrl-C SwTransferable* pTransferable = new SwTransferable(*pWrtShell); @@ -463,7 +471,9 @@ DECLARE_ODFIMPORT_TEST(testFdo69862, "fdo69862.odt") SwWrtShell* pWrtShell = pTxtDoc->GetDocShell()->GetWrtShell(); SwShellCrsr* pShellCrsr = pWrtShell->getShellCrsr(false); - pWrtShell->SelAll(); + pWrtShell->SelAll(); // Selects A1. + pWrtShell->SelAll(); // Selects the whole table. + pWrtShell->SelAll(); // Selects the whole document. SwTxtNode& rStart = dynamic_cast<SwTxtNode&>(pShellCrsr->Start()->nNode.GetNode()); // This was "Footnote.", as Ctrl-A also selected footnotes, but it should not. CPPUNIT_ASSERT_EQUAL(OUString("A1"), rStart.GetTxt()); @@ -480,7 +490,9 @@ DECLARE_ODFIMPORT_TEST(testFdo69979, "fdo69979.odt") SwWrtShell* pWrtShell = pTxtDoc->GetDocShell()->GetWrtShell(); SwShellCrsr* pShellCrsr = pWrtShell->getShellCrsr(false); - pWrtShell->SelAll(); + pWrtShell->SelAll(); // Selects A1. + pWrtShell->SelAll(); // Selects the whole table. + pWrtShell->SelAll(); // Selects the whole document. SwTxtNode& rStart = dynamic_cast<SwTxtNode&>(pShellCrsr->Start()->nNode.GetNode()); // This was "", as Ctrl-A also selected headers, but it should not. CPPUNIT_ASSERT_EQUAL(OUString("A1"), rStart.GetTxt()); diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 23b1e7d84ba0..7500b7def7c0 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -189,7 +189,8 @@ void SwUiWriterTest::testFdo69893() SwDoc* pDoc = createDoc("fdo69893.odt"); SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); - pWrtShell->SelAll(); + pWrtShell->SelAll(); // A1 is empty -> selects the whole table. + pWrtShell->SelAll(); // Selects the whole document. SwShellCrsr* pShellCrsr = pWrtShell->getShellCrsr(false); SwTxtNode& rEnd = dynamic_cast<SwTxtNode&>(pShellCrsr->End()->nNode.GetNode()); diff --git a/sw/source/uibase/wrtsh/select.cxx b/sw/source/uibase/wrtsh/select.cxx index 8e058602f1bd..bab2cd6dcb6d 100644 --- a/sw/source/uibase/wrtsh/select.cxx +++ b/sw/source/uibase/wrtsh/select.cxx @@ -132,7 +132,12 @@ long SwWrtShell::SelAll() boost::scoped_ptr<SwPosition> pStartPos; boost::scoped_ptr<SwPosition> pEndPos; SwShellCrsr* pTmpCrsr = 0; - if( !HasWholeTabSelection() ) + + // Query these early, before we move the cursor. + bool bHasWholeTabSelection = HasWholeTabSelection(); + bool bIsCursorInTable = IsCrsrInTbl(); + + if (!bHasWholeTabSelection) { if ( IsSelection() && IsCrsrPtAtEnd() ) SwapPam(); @@ -157,8 +162,16 @@ long SwWrtShell::SelAll() SttSelect(); GoEnd(true, &bMoveTable); - bool bStartsWithTable = StartsWithTable(); - if (bStartsWithTable) + bool bNeedsExtendedSelectAll = StartsWithTable(); + + // If the cursor was in a table, then we only need the extended select + // all if the whole table is already selected, to still allow selecting + // only a single cell or a single table before selecting the whole + // document. + if (bNeedsExtendedSelectAll && bIsCursorInTable) + bNeedsExtendedSelectAll = bHasWholeTabSelection; + + if (bNeedsExtendedSelectAll) { // Disable table cursor to make sure getShellCrsr() returns m_pCurCrsr, not m_pTblCrsr. if (IsTableMode()) @@ -185,7 +198,7 @@ long SwWrtShell::SelAll() // In this both cases we select to the end of document if( ( *pTmpCrsr->GetPoint() < *pEndPos || ( *pStartPos == *pTmpCrsr->GetMark() && - *pEndPos == *pTmpCrsr->GetPoint() ) ) && !bStartsWithTable) + *pEndPos == *pTmpCrsr->GetPoint() ) ) && !bNeedsExtendedSelectAll) SwCrsrShell::SttEndDoc(false); } } |