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=5e447c47072a99017af95706f39674740426ba9e;hp=a20808c90f92189f6fe5113ff20d57c121b78218;hb=8ae521ab64a3922f3419fbbfb83dde57e6135cf5;hpb=2dd55c62173e94588e4bb45e263a32b3d77af65a 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 a20808c..5e447c4 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,7 @@ #include #include #include +#include #include // INTERNAL INCLUDES @@ -119,18 +122,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() @@ -143,8 +170,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; } } @@ -152,7 +180,7 @@ bool KeyboardFocusManager::SetCurrentFocusActor( Actor actor ) { DALI_ASSERT_DEBUG( !mIsWaitingKeyboardFocusChangeCommit && "Calling this function in the PreFocusChangeSignal callback?" ); - if( mIsFocusIndicatorEnabled == -1 ) + if( mIsFocusIndicatorShown == -1 ) { GetConfigurationFromStyleManger(); } @@ -179,7 +207,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 && mEnableFocusIndicator ) + if( mIsFocusIndicatorShown && mEnableFocusIndicator ) { actor.Add( GetFocusIndicatorActor() ); } @@ -296,10 +324,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 = DevelWindow::Get( actor ).GetRootLayer(); parent = actor.GetParent(); } @@ -381,7 +410,7 @@ bool KeyboardFocusManager::MoveFocus(Toolkit::Control::KeyboardFocus::Direction if( !nextFocusableActor ) { - nextFocusableActor = Stage::GetCurrent().GetRootLayer().FindChildById( actorId ); + nextFocusableActor = DevelWindow::Get( currentFocusActor ).GetRootLayer().FindChildById( actorId ); } } } @@ -555,7 +584,7 @@ void KeyboardFocusManager::ClearFocus() } mCurrentFocusActor.Reset(); - mIsFocusIndicatorEnabled = 0; + mIsFocusIndicatorShown = static_cast(mAlwaysShowIndicator); } void KeyboardFocusManager::SetFocusGroupLoop(bool enabled) @@ -655,7 +684,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) std::string keyName = event.keyPressedName; - if( mIsFocusIndicatorEnabled == -1 ) + if( mIsFocusIndicatorShown == -1 ) { GetConfigurationFromStyleManger(); } @@ -668,14 +697,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 @@ -688,14 +720,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 { @@ -707,60 +741,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 { @@ -773,10 +817,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; @@ -784,10 +828,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; @@ -804,10 +848,10 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) { if (keyName == "Return") { - if(!mIsFocusIndicatorEnabled && !isAccessibilityEnabled) + if(!mIsFocusIndicatorShown && !isAccessibilityEnabled) { // Show focus indicator - mIsFocusIndicatorEnabled = 1; + mIsFocusIndicatorShown = 1; } else { @@ -832,7 +876,7 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) } } - if(isFocusStartableKey && mIsFocusIndicatorEnabled && !isAccessibilityEnabled) + if(isFocusStartableKey && mIsFocusIndicatorShown && !isAccessibilityEnabled) { Actor actor = GetCurrentFocusActor(); if( actor ) @@ -854,9 +898,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(); }