[Libreoffice-commits] core.git: Branch 'libreoffice-3-6' - sw/inc sw/source

Michael Stahl mstahl at redhat.com
Fri May 17 00:26:00 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 b4aeed3b8dc402d72ae9a8b928babc228e2ead7a
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).
    
    (cherry picked from commit 38b06c661559e6eca60e2c4a4a3637b8293307b2)
    
    Conflicts:
    	sw/inc/crsrsh.hxx
    
    Change-Id: Ia88b3c8958798fd9c64ee75b56c61d787079133e
    Reviewed-on: https://gerrit.libreoffice.org/3927
    Reviewed-by: Fridrich Strba <fridrich at documentfoundation.org>
    Tested-by: Fridrich Strba <fridrich at documentfoundation.org>

diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx
index fa2b287..650493f 100644
--- a/sw/inc/crsrsh.hxx
+++ b/sw/inc/crsrsh.hxx
@@ -732,6 +732,7 @@ public:
     sal_Bool IsEndSentence() const;
     sal_Bool IsSttPara() const;
     sal_Bool IsEndPara() const;
+    bool IsEndOfTable() const; ///< at the very last SwPosition inside a table
     sal_Bool IsStartOfDoc() const;
     sal_Bool IsEndOfDoc() const;
     sal_Bool IsInFrontOfLabel() const;
diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx
index 1493d14..01ee5c9 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -1024,6 +1024,23 @@ sal_Bool SwCrsrShell::IsSttPara() const
 sal_Bool SwCrsrShell::IsEndPara() const
 {   return( pCurCrsr->GetPoint()->nContent == pCurCrsr->GetCntntNode()->Len() ? sal_True : sal_False ); }
 
+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 == pCurCrsr->GetPoint()->nNode);
+}
 
 sal_Bool SwCrsrShell::IsInFrontOfLabel() const
 {
diff --git a/sw/source/ui/wrtsh/delete.cxx b/sw/source/ui/wrtsh/delete.cxx
index c323229..a3a03d4 100644
--- a/sw/source/ui/wrtsh/delete.cxx
+++ b/sw/source/ui/wrtsh/delete.cxx
@@ -480,7 +480,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