Fix key event propagation in text controller 11/275411/3
authorBowon Ryu <bowon.ryu@samsung.com>
Tue, 24 May 2022 12:05:06 +0000 (21:05 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Wed, 25 May 2022 00:35:47 +0000 (09:35 +0900)
The KeyEvent::UP of DALI_KEY_BACK is not propagated from text controller,
this interferes with the behavior of the parent view in some cases.

Change-Id: Ib20c6f91203af2c27d1030cc2025964f87834195
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp
dali-toolkit/internal/text/text-controller-event-handler.cpp

index 82b0f80..5ec1035 100644 (file)
@@ -3286,6 +3286,14 @@ int utcDaliTextFieldSomeSpecialKeys(void)
   application.SendNotification();
   application.Render();
 
   application.SendNotification();
   application.Render();
 
+  // Generate a Back key event. Nothing happens to the text field.
+  application.ProcessEvent(GenerateKey("XF86Back", "", "XF86Back", DALI_KEY_BACK, 0, 0, Integration::KeyEvent::DOWN, "XF86Back", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE));
+  application.ProcessEvent(GenerateKey("XF86Back", "", "XF86Back", DALI_KEY_BACK, 0, 0, Integration::KeyEvent::UP, "XF86Back", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE));
+
+  // Render and notify
+  application.SendNotification();
+  application.Render();
+
   // The text shouldn't be deleted.
   DALI_TEST_EQUALS(field.GetProperty<std::string>(TextField::Property::TEXT), longText, TEST_LOCATION);
 
   // The text shouldn't be deleted.
   DALI_TEST_EQUALS(field.GetProperty<std::string>(TextField::Property::TEXT), longText, TEST_LOCATION);
 
index 1d4be23..59f0b8d 100644 (file)
@@ -336,6 +336,15 @@ bool Controller::EventHandler::KeyEvent(Controller& controller, const Dali::KeyE
       controller.mImpl->RequestRelayout();
     }
   }
       controller.mImpl->RequestRelayout();
     }
   }
+  else if((NULL != controller.mImpl->mEventData) && (keyEvent.GetState() == KeyEvent::UP))
+  {
+    // Handles specific keys that require event propagation.
+    if(Dali::DALI_KEY_BACK == keyEvent.GetKeyCode())
+    {
+      // Do nothing
+      return false;
+    }
+  }
 
   if(textChanged &&
      (NULL != controller.mImpl->mEditableControlInterface))
 
   if(textChanged &&
      (NULL != controller.mImpl->mEditableControlInterface))