From 8622dc09954a1a26661e3524c99e7ed0f456cf6e Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Tue, 26 Mar 2019 15:57:46 +0000 Subject: Related: tdf#123291 treat overwrite like a selection of 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit for input into ImplTruncateToMaxLen like we do for the following erase Change-Id: I8cd02ff1ba76f61ddc614922068cbe2bc9bc4cb8 Reviewed-on: https://gerrit.libreoffice.org/69763 Tested-by: Jenkins Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- vcl/source/control/edit.cxx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'vcl/source/control') diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx index 72325742cac3..a4302902a3c8 100644 --- a/vcl/source/control/edit.cxx +++ b/vcl/source/control/edit.cxx @@ -793,13 +793,19 @@ void Edit::ImplInsertText( const OUString& rStr, const Selection* pNewSel, bool aSelection.Justify(); OUString aNewText( ImplGetValidString( rStr ) ); - ImplTruncateToMaxLen( aNewText, aSelection.Len() ); + + // as below, if there's no selection, but we're in overwrite mode and not beyond + // the end of the existing text then that's like a selection of 1 + auto nSelectionLen = aSelection.Len(); + if (!nSelectionLen && !mbInsertMode && aSelection.Max() < maText.getLength()) + nSelectionLen = 1; + ImplTruncateToMaxLen( aNewText, nSelectionLen ); ImplClearLayoutData(); if ( aSelection.Len() ) maText.remove( static_cast(aSelection.Min()), static_cast(aSelection.Len()) ); - else if ( !mbInsertMode && (aSelection.Max() < maText.getLength()) ) + else if (!mbInsertMode && aSelection.Max() < maText.getLength()) maText.remove( static_cast(aSelection.Max()), 1 ); // take care of input-sequence-checking now -- cgit v1.2.3