X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ffocus-manager%2Fkeyboard-focus-manager-impl.cpp;h=09f71b34869da76612e96db52040c4a5b9dcefe6;hp=9e3498462ea2115a5c6f3b374e7e8f3e158ff976;hb=781bcb1f3697b58f1da3f662b033345814dd903a;hpb=f7e78caead4596a66b750444e77343856432d36d diff --git a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp index 9e34984..09f71b3 100644 --- a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp +++ b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2019 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include #include #include @@ -31,6 +33,8 @@ #include #include #include +#include +#include #include // INTERNAL INCLUDES @@ -119,17 +123,42 @@ KeyboardFocusManager::KeyboardFocusManager() mFocusedActorEnterKeySignal(), mCurrentFocusActor(), mFocusIndicatorActor(), - mIsFocusIndicatorEnabled( -1 ), + mIsFocusIndicatorShown( -1 ), mFocusGroupLoopEnabled( false ), mIsWaitingKeyboardFocusChangeCommit( false ), mClearFocusOnTouch( true ), + mEnableFocusIndicator( true ), + mAlwaysShowIndicator( true ), mFocusHistory(), mSlotDelegate( this ), mCustomAlgorithmInterface(NULL) { - // TODO: Get FocusIndicatorEnable constant from stylesheet to set mIsFocusIndicatorEnabled. - Stage::GetCurrent().KeyEventSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnKeyEvent); - Stage::GetCurrent().TouchSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnTouch ); + // TODO: Get FocusIndicatorEnable constant from stylesheet to set mIsFocusIndicatorShown. + + LifecycleController::Get().InitSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnAdaptorInit ); +} + +void KeyboardFocusManager::OnAdaptorInit() +{ + if( Adaptor::IsAvailable() ) + { + // Retrieve all the existing widnows + Dali::WindowContainer windows = Adaptor::Get().GetWindows(); + for ( auto iter = windows.begin(); iter != windows.end(); ++iter ) + { + DevelWindow::KeyEventSignal( *iter ).Connect( mSlotDelegate, &KeyboardFocusManager::OnKeyEvent); + DevelWindow::TouchSignal( *iter ).Connect( mSlotDelegate, &KeyboardFocusManager::OnTouch); + } + + // Get notified when any new window is created afterwards + Adaptor::Get().WindowCreatedSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnWindowCreated); + } +} + +void KeyboardFocusManager::OnWindowCreated( Dali::Window& window ) +{ + DevelWindow::KeyEventSignal( window ).Connect( mSlotDelegate, &KeyboardFocusManager::OnKeyEvent); + DevelWindow::TouchSignal( window ).Connect( mSlotDelegate, &KeyboardFocusManager::OnTouch); } KeyboardFocusManager::~KeyboardFocusManager() @@ -142,8 +171,9 @@ void KeyboardFocusManager::GetConfigurationFromStyleManger() if( styleManager ) { Property::Map config = Toolkit::DevelStyleManager::GetConfigurations( styleManager ); - mIsFocusIndicatorEnabled = static_cast(config["alwaysShowFocus"].Get()); - mClearFocusOnTouch = mIsFocusIndicatorEnabled ? false : true; + mAlwaysShowIndicator = config["alwaysShowFocus"].Get(); + mIsFocusIndicatorShown = static_cast(mAlwaysShowIndicator); + mClearFocusOnTouch = mIsFocusIndicatorShown ? false : true; } } @@ -151,7 +181,7 @@ bool KeyboardFocusManager::SetCurrentFocusActor( Actor actor ) { DALI_ASSERT_DEBUG( !mIsWaitingKeyboardFocusChangeCommit && "Calling this function in the PreFocusChangeSignal callback?" ); - if( mIsFocusIndicatorEnabled == -1 ) + if( mIsFocusIndicatorShown == -1 ) { GetConfigurationFromStyleManger(); } @@ -178,7 +208,7 @@ bool KeyboardFocusManager::DoSetCurrentFocusActor( Actor actor ) // Check whether the actor is in the stage and is keyboard focusable. if( actor && actor.IsKeyboardFocusable() && actor.OnStage() ) { - if( mIsFocusIndicatorEnabled ) + if( mIsFocusIndicatorShown && mEnableFocusIndicator ) { actor.Add( GetFocusIndicatorActor() ); } @@ -295,10 +325,11 @@ bool KeyboardFocusManager::IsLayoutControl(Actor actor) const Toolkit::Control KeyboardFocusManager::GetParentLayoutControl(Actor actor) const { // Get the actor's parent layout control that supports two dimensional keyboard navigation - Actor rootActor = Stage::GetCurrent().GetRootLayer(); + Actor rootActor; Actor parent; if(actor) { + rootActor = Integration::SceneHolder::Get( actor ).GetRootLayer(); parent = actor.GetParent(); } @@ -380,7 +411,7 @@ bool KeyboardFocusManager::MoveFocus(Toolkit::Control::KeyboardFocus::Direction if( !nextFocusableActor ) { - nextFocusableActor = Stage::GetCurrent().GetRootLayer().FindChildById( actorId ); + nextFocusableActor = Integration::SceneHolder::Get( currentFocusActor ).GetRootLayer().FindChildById( actorId ); } } } @@ -554,7 +585,7 @@ void KeyboardFocusManager::ClearFocus() } mCurrentFocusActor.Reset(); - mIsFocusIndicatorEnabled = 0; + mIsFocusIndicatorShown = static_cast(mAlwaysShowIndicator); } void KeyboardFocusManager::SetFocusGroupLoop(bool enabled) @@ -654,7 +685,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) std::string keyName = event.keyPressedName; - if( mIsFocusIndicatorEnabled == -1 ) + if( mIsFocusIndicatorShown == -1 ) { GetConfigurationFromStyleManger(); } @@ -667,14 +698,17 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) { if(!isAccessibilityEnabled) { - if(!mIsFocusIndicatorEnabled) + if(!mIsFocusIndicatorShown) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; + } + else + { + // Move the focus towards left + MoveFocus(Toolkit::Control::KeyboardFocus::LEFT); } - // Move the focus towards left - MoveFocus(Toolkit::Control::KeyboardFocus::LEFT); isFocusStartableKey = true; } else @@ -687,14 +721,16 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) { if(!isAccessibilityEnabled) { - if(!mIsFocusIndicatorEnabled) + if(!mIsFocusIndicatorShown) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; + } + else + { + // Move the focus towards right + MoveFocus(Toolkit::Control::KeyboardFocus::RIGHT); } - - // Move the focus towards right - MoveFocus(Toolkit::Control::KeyboardFocus::RIGHT); } else { @@ -706,60 +742,70 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) } else if (keyName == "Up" && !isAccessibilityEnabled) { - if(!mIsFocusIndicatorEnabled) + if(!mIsFocusIndicatorShown) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; + } + else + { + // Move the focus towards up + MoveFocus(Toolkit::Control::KeyboardFocus::UP); } - // Move the focus towards up - MoveFocus(Toolkit::Control::KeyboardFocus::UP); isFocusStartableKey = true; } else if (keyName == "Down" && !isAccessibilityEnabled) { - if(!mIsFocusIndicatorEnabled) + if(!mIsFocusIndicatorShown) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; + } + else + { + // Move the focus towards down + MoveFocus(Toolkit::Control::KeyboardFocus::DOWN); } - // Move the focus towards down - MoveFocus(Toolkit::Control::KeyboardFocus::DOWN); isFocusStartableKey = true; } else if (keyName == "Prior" && !isAccessibilityEnabled) { - if(!mIsFocusIndicatorEnabled) + if(!mIsFocusIndicatorShown) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; + } + else + { + // Move the focus towards the previous page + MoveFocus(Toolkit::Control::KeyboardFocus::PAGE_UP); } - - // Move the focus towards the previous page - MoveFocus(Toolkit::Control::KeyboardFocus::PAGE_UP); isFocusStartableKey = true; } else if (keyName == "Next" && !isAccessibilityEnabled) { - if(!mIsFocusIndicatorEnabled) + if(!mIsFocusIndicatorShown) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; + } + else + { + // Move the focus towards the next page + MoveFocus(Toolkit::Control::KeyboardFocus::PAGE_DOWN); } - - // Move the focus towards the next page - MoveFocus(Toolkit::Control::KeyboardFocus::PAGE_DOWN); isFocusStartableKey = true; } else if (keyName == "Tab" && !isAccessibilityEnabled) { - if(!mIsFocusIndicatorEnabled) + if(!mIsFocusIndicatorShown) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; } else { @@ -772,10 +818,10 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) } else if (keyName == "space" && !isAccessibilityEnabled) { - if(!mIsFocusIndicatorEnabled) + if(!mIsFocusIndicatorShown) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; } isFocusStartableKey = true; @@ -783,10 +829,10 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) else if (keyName == "" && !isAccessibilityEnabled) { // Check the fake key event for evas-plugin case - if(!mIsFocusIndicatorEnabled) + if(!mIsFocusIndicatorShown) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; } isFocusStartableKey = true; @@ -803,10 +849,10 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) { if (keyName == "Return") { - if(!mIsFocusIndicatorEnabled && !isAccessibilityEnabled) + if(!mIsFocusIndicatorShown && !isAccessibilityEnabled) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; } else { @@ -831,13 +877,16 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) } } - if(isFocusStartableKey && mIsFocusIndicatorEnabled && !isAccessibilityEnabled) + if(isFocusStartableKey && mIsFocusIndicatorShown && !isAccessibilityEnabled) { Actor actor = GetCurrentFocusActor(); if( actor ) { - // Make sure the focused actor is highlighted - actor.Add( GetFocusIndicatorActor() ); + if( mEnableFocusIndicator ) + { + // Make sure the focused actor is highlighted + actor.Add( GetFocusIndicatorActor() ); + } } else { @@ -850,9 +899,9 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) void KeyboardFocusManager::OnTouch(const TouchData& touch) { - // if mIsFocusIndicatorEnabled is -1, it means Configuration is not loaded. + // if mIsFocusIndicatorShown is -1, it means Configuration is not loaded. // Try to load configuration. - if( mIsFocusIndicatorEnabled == -1 ) + if( mIsFocusIndicatorShown == -1 ) { GetConfigurationFromStyleManger(); } @@ -923,6 +972,21 @@ void KeyboardFocusManager::SetCustomAlgorithm(CustomAlgorithmInterface& interfac mCustomAlgorithmInterface = &interface; } +void KeyboardFocusManager::EnableFocusIndicator(bool enable) +{ + if( !enable && mFocusIndicatorActor ) + { + mFocusIndicatorActor.Unparent(); + } + + mEnableFocusIndicator = enable; +} + +bool KeyboardFocusManager::IsFocusIndicatorEnabled() const +{ + return mEnableFocusIndicator; +} + } // namespace Internal } // namespace Toolkit