From 21b574541aac2281c92020c0f62f7754897808b2 Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Mon, 11 Jul 2022 20:28:08 +0900 Subject: [PATCH 1/1] Fix RemoveText issue in text controller RemoveText() fails to remove text in some cases before mPreviousNumberOfCharacters of mTextUpdateInfo is updated. In all text remove situation, it can be removed regardless of the update of this info. It's same as the previous preedit all remove behavior. Change-Id: I7c64a133e6d0df84829dc35c25b71f100da6d702 Signed-off-by: Bowon Ryu --- dali-toolkit/internal/text/text-controller-text-updater.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dali-toolkit/internal/text/text-controller-text-updater.cpp b/dali-toolkit/internal/text/text-controller-text-updater.cpp index 35408da..4d0ba8f 100644 --- a/dali-toolkit/internal/text/text-controller-text-updater.cpp +++ b/dali-toolkit/internal/text/text-controller-text-updater.cpp @@ -473,6 +473,7 @@ bool Controller::TextUpdater::RemoveText( UpdateInputStyleType type) { bool removed = false; + bool removeAll = false; Controller::Impl& impl = *controller.mImpl; EventData*& eventData = impl.mEventData; @@ -526,9 +527,14 @@ bool Controller::TextUpdater::RemoveText( numberOfCharacters = currentText.Count() - cursorIndex; } + if((cursorIndex == 0) && (currentText.Count() - numberOfCharacters == 0)) + { + removeAll = true; + } + TextUpdateInfo& textUpdateInfo = impl.mTextUpdateInfo; - if(eventData->mPreEditFlag || // If the preedit flag is enabled, it means two (or more) of them came together i.e. when two keys have been pressed at the same time. + if(eventData->mPreEditFlag || removeAll || // If the preedit flag is enabled, it means two (or more) of them came together i.e. when two keys have been pressed at the same time. ((cursorIndex + numberOfCharacters) <= textUpdateInfo.mPreviousNumberOfCharacters)) { // Mark the paragraphs to be updated. @@ -574,7 +580,7 @@ bool Controller::TextUpdater::RemoveText( // If the number of current text and the number of characters to be deleted are same, // it means all texts should be removed and all Preedit variables should be initialized. - if((currentText.Count() - numberOfCharacters == 0) && (cursorIndex == 0)) + if(removeAll) { impl.ClearPreEditFlag(); textUpdateInfo.mNumberOfCharactersToAdd = 0; @@ -617,6 +623,7 @@ bool Controller::TextUpdater::RemoveText( } DALI_LOG_INFO(gLogFilter, Debug::General, "Controller::RemoveText %p removed %d\n", &controller, numberOfCharacters); + removeAll = false; removed = true; } } -- 2.7.4