From 76f9ffa0234acd1b72f3d92c631052a5b4147a83 Mon Sep 17 00:00:00 2001 From: "minho.sun" Date: Fri, 1 Sep 2017 13:58:32 +0900 Subject: [PATCH] Add ClearFocusOnEscape to config section. This value indicates whether text control clear key input focus or not when escape key is pressed. Change-Id: Ifc9680d4de3a9d8eba83463b91ba5f349f4b36ef Signed-off-by: minho.sun --- .../src/dali-toolkit-styling/default-theme.json | 3 +- .../dali-toolkit-styling/utc-Dali-StyleManager.cpp | 47 ++++++++++++++++++++++ .../controls/text-controls/text-editor-impl.cpp | 2 +- .../controls/text-controls/text-field-impl.cpp | 2 +- dali-toolkit/internal/text/text-controller-impl.h | 17 +++++++- dali-toolkit/internal/text/text-controller.cpp | 14 ++++--- dali-toolkit/internal/text/text-controller.h | 7 ++++ .../1920x1080/dali-toolkit-default-theme.json | 3 +- .../styles/480x800/dali-toolkit-default-theme.json | 3 +- .../720x1280/dali-toolkit-default-theme.json | 3 +- 10 files changed, 88 insertions(+), 13 deletions(-) diff --git a/automated-tests/src/dali-toolkit-styling/default-theme.json b/automated-tests/src/dali-toolkit-styling/default-theme.json index 6b3ddd1..30edbfd 100644 --- a/automated-tests/src/dali-toolkit-styling/default-theme.json +++ b/automated-tests/src/dali-toolkit-styling/default-theme.json @@ -1,7 +1,8 @@ { "config": { - "alwaysShowFocus":false + "alwaysShowFocus":false, + "clearFocusOnEscape":true }, "constants": { diff --git a/automated-tests/src/dali-toolkit-styling/utc-Dali-StyleManager.cpp b/automated-tests/src/dali-toolkit-styling/utc-Dali-StyleManager.cpp index 20de8e8..e8348f1 100644 --- a/automated-tests/src/dali-toolkit-styling/utc-Dali-StyleManager.cpp +++ b/automated-tests/src/dali-toolkit-styling/utc-Dali-StyleManager.cpp @@ -33,6 +33,10 @@ #include #include #include +#include +#include +#include +#include using namespace Dali; using namespace Dali::Toolkit; @@ -1298,3 +1302,46 @@ int UtcDaliStyleManagerSetSubState02(void) END_TEST; } + + +int UtcDaliStyleManagerConfigSectionTest(void) +{ + tet_infoline("Test that the properties in config section are works" ); + + const char* defaultTheme = + "{\n" + " \"config\":\n" + " {\n" + " \"alwaysShowFocus\":false,\n" + " \"clearFocusOnEscape\":false\n" + " },\n" + " \"styles\":\n" + " {\n" + " }\n" + "}\n"; + + Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json", defaultTheme ); + + ToolkitTestApplication application; + + Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); + + Property::Map config = Toolkit::DevelStyleManager::GetConfigurations( styleManager ); + bool alwaysShowFocus = config["alwaysShowFocus"].Get(); + DALI_TEST_CHECK( !alwaysShowFocus ); + bool clearFocusOnEscape = config["clearFocusOnEscape"].Get(); + DALI_TEST_CHECK( !clearFocusOnEscape ); + + // For coverage + Toolkit::TextEditor editor = Toolkit::TextEditor::New(); + editor.SetKeyboardFocusable( true ); + Stage::GetCurrent().Add( editor ); + + Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor( editor ); + + application.ProcessEvent( Integration::KeyEvent( "", "", DALI_KEY_ESCAPE, 0, 0, Integration::KeyEvent::Down, "", DevelDevice::Class::NONE, DevelDevice::Subclass::NONE ) ); + application.SendNotification(); + application.Render(); + + END_TEST; +} diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp index d089d97..77005c0 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -1478,7 +1478,7 @@ bool TextEditor::OnKeyEvent( const KeyEvent& event ) { DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextEditor::OnKeyEvent %p keyCode %d\n", mController.Get(), event.keyCode ); - if( Dali::DALI_KEY_ESCAPE == event.keyCode ) // Make a Dali key code for this + if( Dali::DALI_KEY_ESCAPE == event.keyCode && mController->ShouldClearFocusOnEscape() ) { // Make sure ClearKeyInputFocus when only key is up if( event.state == KeyEvent::Up ) diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index 1ed87bd..d5ea993 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -1526,7 +1526,7 @@ bool TextField::OnKeyEvent( const KeyEvent& event ) { DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField::OnKeyEvent %p keyCode %d\n", mController.Get(), event.keyCode ); - if( Dali::DALI_KEY_ESCAPE == event.keyCode ) // Make a Dali key code for this + if( Dali::DALI_KEY_ESCAPE == event.keyCode && mController->ShouldClearFocusOnEscape() ) { // Make sure ClearKeyInputFocus when only key is up if( event.state == KeyEvent::Up ) diff --git a/dali-toolkit/internal/text/text-controller-impl.h b/dali-toolkit/internal/text/text-controller-impl.h index 054f4a7..898e2c6 100644 --- a/dali-toolkit/internal/text/text-controller-impl.h +++ b/dali-toolkit/internal/text/text-controller-impl.h @@ -27,6 +27,8 @@ #include #include #include +#include +#include namespace Dali { @@ -320,7 +322,8 @@ struct Controller::Impl mAutoScrollDirectionRTL( false ), mUnderlineSetByString( false ), mShadowSetByString( false ), - mFontStyleSetByString( false ) + mFontStyleSetByString( false ), + mShouldClearFocusOnEscape( true ) { mModel = Model::New(); @@ -336,6 +339,17 @@ struct Controller::Impl // Set the text properties to default mModel->mVisualModel->SetUnderlineEnabled( false ); mModel->mVisualModel->SetUnderlineHeight( 0.0f ); + + Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); + if( styleManager ) + { + bool temp; + Property::Map config = Toolkit::DevelStyleManager::GetConfigurations( styleManager ); + if( config["clearFocusOnEscape"].Get( temp ) ) + { + mShouldClearFocusOnEscape = temp; + } + } } ~Impl() @@ -730,6 +744,7 @@ public: bool mUnderlineSetByString:1; ///< Set when underline is set by string (legacy) instead of map bool mShadowSetByString:1; ///< Set when shadow is set by string (legacy) instead of map bool mFontStyleSetByString:1; ///< Set when font style is set by string (legacy) instead of map + bool mShouldClearFocusOnEscape:1; ///< Whether text control should clear key input focus }; } // namespace Text diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index 8b0ee5b..36167e6 100644 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -2222,13 +2222,10 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent ) // Do nothing. return false; } - else if( Dali::DALI_KEY_ESCAPE == keyCode ) + else if( Dali::DALI_KEY_ESCAPE == keyCode || Dali::DALI_KEY_BACK == keyCode ) { - // Escape key is a special case which causes focus loss - KeyboardFocusLostEvent(); - - // Will request for relayout. - relayoutNeeded = true; + // Do nothing + return false; } else if( ( Dali::DALI_KEY_CURSOR_LEFT == keyCode ) || ( Dali::DALI_KEY_CURSOR_RIGHT == keyCode ) || @@ -3688,6 +3685,11 @@ void Controller::SetControlInterface( ControlInterface* controlInterface ) mImpl->mControlInterface = controlInterface; } +bool Controller::ShouldClearFocusOnEscape() const +{ + return mImpl->mShouldClearFocusOnEscape; +} + // private : Private contructors & copy operator. Controller::Controller() diff --git a/dali-toolkit/internal/text/text-controller.h b/dali-toolkit/internal/text/text-controller.h index 5cb079c..9e193c7 100644 --- a/dali-toolkit/internal/text/text-controller.h +++ b/dali-toolkit/internal/text/text-controller.h @@ -1180,6 +1180,13 @@ public: // Text-input Event Queuing. */ void PasteClipboardItemEvent(); + /** + * @brief Return true when text control should clear key input focus when escape key is pressed. + * + * @return Whether text control should clear key input focus or not when escape key is pressed. + */ + bool ShouldClearFocusOnEscape() const; + protected: // Inherit from Text::Decorator::ControllerInterface. /** diff --git a/dali-toolkit/styles/1920x1080/dali-toolkit-default-theme.json b/dali-toolkit/styles/1920x1080/dali-toolkit-default-theme.json index dd06d35..7d78ed4 100644 --- a/dali-toolkit/styles/1920x1080/dali-toolkit-default-theme.json +++ b/dali-toolkit/styles/1920x1080/dali-toolkit-default-theme.json @@ -28,7 +28,8 @@ { "config": { - "alwaysShowFocus":false + "alwaysShowFocus":false, + "clearFocusOnEscape":false }, "styles": { diff --git a/dali-toolkit/styles/480x800/dali-toolkit-default-theme.json b/dali-toolkit/styles/480x800/dali-toolkit-default-theme.json index 8612b3c..460d0f8 100644 --- a/dali-toolkit/styles/480x800/dali-toolkit-default-theme.json +++ b/dali-toolkit/styles/480x800/dali-toolkit-default-theme.json @@ -28,7 +28,8 @@ { "config": { - "alwaysShowFocus":false + "alwaysShowFocus":false, + "clearFocusOnEscape":true }, "styles": { diff --git a/dali-toolkit/styles/720x1280/dali-toolkit-default-theme.json b/dali-toolkit/styles/720x1280/dali-toolkit-default-theme.json index 0c48655..9390546 100644 --- a/dali-toolkit/styles/720x1280/dali-toolkit-default-theme.json +++ b/dali-toolkit/styles/720x1280/dali-toolkit-default-theme.json @@ -28,7 +28,8 @@ { "config": { - "alwaysShowFocus":false + "alwaysShowFocus":false, + "clearFocusOnEscape":true }, "styles": { -- 2.7.4