Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/3928
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/28/3928/1
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
(cherry picked from commit 38b06c661559e6eca60e2c4a4a3637b8293307b2)
---
M sw/inc/crsrsh.hxx
M sw/source/core/crsr/crsrsh.cxx
M sw/source/ui/wrtsh/delete.cxx
3 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx
index 5a061db..5b6f741 100644
--- a/sw/inc/crsrsh.hxx
+++ b/sw/inc/crsrsh.hxx
@@ -721,6 +721,7 @@
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 ac00ff7..819fb16 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -987,6 +987,23 @@
bool SwCrsrShell::IsEndPara() const
{ return pCurCrsr->GetPoint()->nContent == 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 == pCurCrsr->GetPoint()->nNode);
+}
bool SwCrsrShell::IsInFrontOfLabel() const
{
diff --git a/sw/source/ui/wrtsh/delete.cxx b/sw/source/ui/wrtsh/delete.cxx
index f714f6a..0c23dab 100644
--- a/sw/source/ui/wrtsh/delete.cxx
+++ b/sw/source/ui/wrtsh/delete.cxx
@@ -469,7 +469,28 @@
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;
}
--
To view, visit https://gerrit.libreoffice.org/3928
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia88b3c8958798fd9c64ee75b56c61d787079133e
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Michael Stahl <mstahl@redhat.com>
Context
- [PATCH libreoffice-4-0] fdo#60967: re-enable deletion of paragraph following table · Michael Stahl (via Code Review)
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.