[Libreoffice-commits] core.git: sw/inc sw/source

Michael Stahl mstahl at redhat.com
Thu May 16 15:18:54 PDT 2013


 sw/inc/crsrsh.hxx              |    1 +
 sw/source/core/crsr/crsrsh.cxx |   17 +++++++++++++++++
 sw/source/ui/wrtsh/delete.cxx  |   23 ++++++++++++++++++++++-
 3 files changed, 40 insertions(+), 1 deletion(-)

New commits:
commit 38b06c661559e6eca60e2c4a4a3637b8293307b2
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri May 17 00:09:39 2013 +0200

    fdo#60967: re-enable deletion of paragraph following table
    
    This was actually a documented feature, so removing it just because it
    only happened to work sometimes by accident was a bad idea :)
    
    (regression from f4b6c94c68b5f67b931cde8d0acda6ec8b288bb)
    
    So implement this in a less accidental way, so that Ctrl+Shift+Del
    at the last position inside a table will delete the following paragraph.
    
    Do not implement the weird "only delete first sentence and merge rest of
    paragraph into cell" behavior, because i don't think it makes sense;
    much better to just delete the whole paragraph, that is also the most
    likely use-case for this (with table in frame/header/footer).
    
    Change-Id: Ia88b3c8958798fd9c64ee75b56c61d787079133e

diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx
index 58107de..d38329f 100644
--- a/sw/inc/crsrsh.hxx
+++ b/sw/inc/crsrsh.hxx
@@ -721,6 +721,7 @@ public:
     sal_Bool IsEndSentence() const;
     bool IsSttPara() const;
     bool IsEndPara() const;
+    bool IsEndOfTable() const; ///< at the very last SwPosition inside a table
     sal_Bool IsStartOfDoc() const;
     sal_Bool IsEndOfDoc() const;
     bool IsInFrontOfLabel() const;
diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx
index 24b2d0e..bd1d749 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -975,6 +975,23 @@ bool SwCrsrShell::IsSttPara() const
 bool SwCrsrShell::IsEndPara() const
 {   return m_pCurCrsr->GetPoint()->nContent == m_pCurCrsr->GetCntntNode()->Len(); }
 
+bool SwCrsrShell::IsEndOfTable() const
+{
+    if (IsTableMode() || IsBlockMode() || !IsEndPara())
+    {
+        return false;
+    }
+    SwTableNode const*const pTableNode( IsCrsrInTbl() );
+    if (!pTableNode)
+    {
+        return false;
+    }
+    SwEndNode const*const pEndTableNode(pTableNode->EndOfSectionNode());
+    SwNodeIndex const lastNode(*pEndTableNode, -2);
+    SAL_WARN_IF(!lastNode.GetNode().GetTxtNode(), "sw.core",
+            "text node expected");
+    return (lastNode == m_pCurCrsr->GetPoint()->nNode);
+}
 
 bool SwCrsrShell::IsInFrontOfLabel() const
 {
diff --git a/sw/source/ui/wrtsh/delete.cxx b/sw/source/ui/wrtsh/delete.cxx
index a97d422..f19455e 100644
--- a/sw/source/ui/wrtsh/delete.cxx
+++ b/sw/source/ui/wrtsh/delete.cxx
@@ -456,7 +456,28 @@ long SwWrtShell::DelToEndOfSentence()
     if(IsEndOfDoc())
         return 0;
     OpenMark();
-    long nRet = _FwdSentence() ? Delete() : 0;
+    long nRet(0);
+    // fdo#60967: special case that is documented in help: delete
+    // paragraph following table if cursor is at end of last cell in table
+    if (IsEndOfTable())
+    {
+        Push();
+        ClearMark();
+        if (SwCrsrShell::Right(1,CRSR_SKIP_CHARS))
+        {
+            SetMark();
+            SwCrsrShell::MovePara(fnParaCurr, fnParaEnd);
+            if (!IsEndOfDoc()) // do not delete last paragraph in body text
+            {
+                nRet = DelFullPara() ? 1 : 0;
+            }
+        }
+        Pop(false);
+    }
+    else
+    {
+        nRet = _FwdSentence() ? Delete() : 0;
+    }
     CloseMark( 0 != nRet );
     return nRet;
 }


More information about the Libreoffice-commits mailing list