diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2024-01-18 14:56:54 +0600 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2024-04-11 08:38:51 +0200 |
commit | eda9d88054423025c97d07136e7ff77789b17857 (patch) | |
tree | 3316090db37e006668e182d67d5408bf7611a193 | |
parent | 8df77099766c2fb56b0c9be9eef34c54f5011b6a (diff) |
tdf#109272: make sure that Delete / Backspace move cursor correctly
... in change tracking mode. Cursor's end position now doesn't depend
on the selection direction; it is at the deletion's beginning in case
of Backspace, and at deletion's end in case of Delete.
(cherry picked from commit c80606bb23fd42e41710d70a96b7ffaf948384a6)
Change-Id: I9cb7af235a066bea2c7b21b8ff515dcdd52218c6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165335
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
(cherry picked from commit ccb26c80cb9f8da9ad6a4d1874a8e68215284eef)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165848
-rw-r--r-- | sw/inc/editsh.hxx | 4 | ||||
-rw-r--r-- | sw/source/core/edit/eddel.cxx | 8 | ||||
-rw-r--r-- | sw/source/uibase/wrtsh/delete.cxx | 4 |
3 files changed, 9 insertions, 7 deletions
diff --git a/sw/inc/editsh.hxx b/sw/inc/editsh.hxx index 663a0ffc35f7..604e9ac91aab 100644 --- a/sw/inc/editsh.hxx +++ b/sw/inc/editsh.hxx @@ -151,7 +151,7 @@ class SW_DLLPUBLIC SwEditShell : public SwCursorShell that will be used by GetGraphic() and GetGraphicSize(). */ SAL_DLLPRIVATE SwGrfNode *GetGrfNode_() const ; - SAL_DLLPRIVATE void DeleteSel(SwPaM& rPam, bool isArtificialSelection, bool* pUndo = nullptr); + SAL_DLLPRIVATE void DeleteSel(SwPaM& rPam, bool isArtificialSelection, bool goLeft = false, bool* pUndo = nullptr); SAL_DLLPRIVATE void SetSectionAttr_( SwSectionFormat& rSectFormat, const SfxItemSet& rSet ); @@ -173,7 +173,7 @@ public: /** Delete content of all ranges. If whole nodes are selected, these nodes get deleted. */ - bool Delete(bool isArtificialSelection = false); + bool Delete(bool isArtificialSelection = false, bool goLeft = false); /// Remove a complete paragraph. bool DelFullPara(); diff --git a/sw/source/core/edit/eddel.cxx b/sw/source/core/edit/eddel.cxx index 6cbce339615c..0ccc93f6154e 100644 --- a/sw/source/core/edit/eddel.cxx +++ b/sw/source/core/edit/eddel.cxx @@ -31,7 +31,8 @@ #include <strings.hrc> #include <vector> -void SwEditShell::DeleteSel(SwPaM& rPam, bool const isArtificialSelection, bool *const pUndo) +void SwEditShell::DeleteSel(SwPaM& rPam, bool const isArtificialSelection, bool goLeft, + bool* const pUndo) { auto const oSelectAll(StartsWith_() != SwCursorShell::StartsWith::None ? ExtendedSelectedAll() @@ -125,11 +126,12 @@ void SwEditShell::DeleteSel(SwPaM& rPam, bool const isArtificialSelection, bool } } + rPam.Normalize(goLeft); // change tracking case: will make sure to end up in the correct point // Selection is not needed anymore rPam.DeleteMark(); } -bool SwEditShell::Delete(bool const isArtificialSelection) +bool SwEditShell::Delete(bool const isArtificialSelection, bool goLeft) { CurrShell aCurr( this ); bool bRet = false; @@ -148,7 +150,7 @@ bool SwEditShell::Delete(bool const isArtificialSelection) for(SwPaM& rPaM : GetCursor()->GetRingContainer()) { - DeleteSel(rPaM, isArtificialSelection, &bUndo); + DeleteSel(rPaM, isArtificialSelection, goLeft, &bUndo); } // If undo container then close here diff --git a/sw/source/uibase/wrtsh/delete.cxx b/sw/source/uibase/wrtsh/delete.cxx index ad49d66e58bf..44b9afe5ae92 100644 --- a/sw/source/uibase/wrtsh/delete.cxx +++ b/sw/source/uibase/wrtsh/delete.cxx @@ -169,7 +169,7 @@ bool SwWrtShell::DelLeft() { SwActContext aActContext(this); ResetCursorStack(); - Delete(false); + Delete(false, true); UpdateAttr(); } if( IsBlockMode() ) @@ -277,7 +277,7 @@ bool SwWrtShell::DelLeft() } } } - bool bRet = Delete(true); + bool bRet = Delete(true, true); if( !bRet && bSwap ) SwCursorShell::SwapPam(); CloseMark( bRet ); |