From 2a7fa48bf8e3808822c354420b2cf273e9a493bd Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Mon, 12 Jul 2021 19:56:15 +0900 Subject: [PATCH] fix wrong behaviour of SelectWholeText() When there are multiple text controls, there is a problem that the selection is keeped even if the text control loses focus due to another text control's SelectWholeText(). This patch prevents wrong selection updates via flags. // example DevelTextField::SelectWholeText(field1); DevelTextField::SelectWholeText(field2); DevelTextField::SelectWholeText(field3); DevelTextField::SelectWholeText(field4); In the case of above example, all TextFields display a selection. Change-Id: I96f87d0b12e4a91493831ca55e0f8b662391456e Signed-off-by: Bowon Ryu --- .../src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp | 3 +++ dali-toolkit/internal/text/text-controller-event-handler.cpp | 7 +++++++ dali-toolkit/internal/text/text-controller-impl-event-handler.cpp | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp index bb3ed33..c89a025 100755 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp @@ -475,6 +475,9 @@ int UtcDaliTextControllerTextPopupButtonTouched(void) // Sets some text. controller->SetText( "Hello world" ); + // When the TextSelectionPopup is active, the controller has focus. + controller->KeyboardFocusGainEvent(); + // Select the whole text. button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) ); DALI_TEST_CHECK( button ); diff --git a/dali-toolkit/internal/text/text-controller-event-handler.cpp b/dali-toolkit/internal/text/text-controller-event-handler.cpp index 15805c8..a84747b 100644 --- a/dali-toolkit/internal/text/text-controller-event-handler.cpp +++ b/dali-toolkit/internal/text/text-controller-event-handler.cpp @@ -81,6 +81,13 @@ void Controller::EventHandler::KeyboardFocusLostEvent(Controller& controller) { if(EventData::INTERRUPTED != controller.mImpl->mEventData->mState) { + // Init selection position + if(controller.mImpl->mEventData->mState == EventData::SELECTING) + { + controller.mImpl->mEventData->mLeftSelectionPosition = controller.mImpl->mEventData->mPrimaryCursorPosition; + controller.mImpl->mEventData->mRightSelectionPosition = controller.mImpl->mEventData->mPrimaryCursorPosition; + } + controller.mImpl->ChangeState(EventData::INACTIVE); if(!controller.mImpl->IsShowingRealText()) diff --git a/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp b/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp index 995a800..c9a197f 100644 --- a/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp +++ b/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp @@ -658,7 +658,7 @@ void ControllerImplEventHandler::OnSelectAllEvent(Controller::Impl& impl) if(impl.mEventData) { EventData& eventData = *impl.mEventData; - if(eventData.mSelectionEnabled) + if(eventData.mSelectionEnabled && eventData.mState != EventData::INACTIVE) { ModelPtr& model = impl.mModel; const Vector2& scrollPosition = model->mScrollPosition; -- 2.7.4