From 3e844ed708b1cbe03cd5bfe9ad202aad27bbe360 Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Tue, 24 May 2022 21:05:06 +0900 Subject: [PATCH 1/1] Fix key event propagation in text controller 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 --- automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp | 8 ++++++++ dali-toolkit/internal/text/text-controller-event-handler.cpp | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp b/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp index 82b0f80..5ec1035 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp @@ -3286,6 +3286,14 @@ int utcDaliTextFieldSomeSpecialKeys(void) 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(TextField::Property::TEXT), longText, TEST_LOCATION); diff --git a/dali-toolkit/internal/text/text-controller-event-handler.cpp b/dali-toolkit/internal/text/text-controller-event-handler.cpp index 1d4be23..59f0b8d 100644 --- a/dali-toolkit/internal/text/text-controller-event-handler.cpp +++ b/dali-toolkit/internal/text/text-controller-event-handler.cpp @@ -336,6 +336,15 @@ bool Controller::EventHandler::KeyEvent(Controller& controller, const Dali::KeyE 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)) -- 2.7.4