fix wrong behaviour of SelectWholeText() 53/261153/6
authorBowon Ryu <bowon.ryu@samsung.com>
Mon, 12 Jul 2021 10:56:15 +0000 (19:56 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Thu, 5 Aug 2021 04:44:00 +0000 (13:44 +0900)
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 <bowon.ryu@samsung.com>
automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp
dali-toolkit/internal/text/text-controller-event-handler.cpp
dali-toolkit/internal/text/text-controller-impl-event-handler.cpp

index bb3ed33..c89a025 100755 (executable)
@@ -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 );
index 15805c8..a84747b 100644 (file)
@@ -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())
index 995a800..c9a197f 100644 (file)
@@ -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;