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=a9822e7dc2ddcc3e8b4da590b1b71bf4a4ce7afd;hp=54d8afabc4c1b5614e5966a02a0b6d4965be10bf;hb=0427f0733297887a3402377de6a083de0e32ce71;hpb=42696af18caff446ca3dd94b78293a61099e9611 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 54d8afa..a9822e7 100644 --- a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp +++ b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp @@ -86,6 +86,8 @@ DALI_SIGNAL_REGISTRATION( Toolkit, KeyboardFocusManager, "keyboardFocusedActorEn DALI_TYPE_REGISTRATION_END() +const unsigned int MAX_HISTORY_AMOUNT = 30; ///< Max length of focus history stack + } // unnamed namespace Toolkit::KeyboardFocusManager KeyboardFocusManager::Get() @@ -108,13 +110,18 @@ Toolkit::KeyboardFocusManager KeyboardFocusManager::Get() } KeyboardFocusManager::KeyboardFocusManager() -: mCurrentFocusActor(0), +: mPreFocusChangeSignal(), + mFocusChangedSignal(), + mFocusGroupChangedSignal(), + mFocusedActorEnterKeySignal(), + mCurrentFocusActor( 0 ), mFocusIndicatorActor(), - mFocusGroupLoopEnabled(false), - mIsKeyboardFocusEnabled(false), - mIsFocusIndicatorEnabled(false), - mIsWaitingKeyboardFocusChangeCommit(false), - mSlotDelegate(this) + mFocusGroupLoopEnabled( false ), + mIsKeyboardFocusEnabled( false ), + mIsFocusIndicatorEnabled( false ), + mIsWaitingKeyboardFocusChangeCommit( false ), + mFocusHistory(), + mSlotDelegate( this ) { OnPhysicalKeyboardStatusChanged(PhysicalKeyboard::Get()); @@ -149,9 +156,11 @@ bool KeyboardFocusManager::DoSetCurrentFocusActor( const unsigned int actorID ) if( actor && actor.IsKeyboardFocusable() ) { mIsFocusIndicatorEnabled = true; - // Draw the focus indicator upon the focused actor - actor.Add( GetFocusIndicatorActor() ); - + // Draw the focus indicator upon the focused actor when PhysicalKeyboard is attached + if( mIsKeyboardFocusEnabled ) + { + actor.Add( GetFocusIndicatorActor() ); + } // Send notification for the change of focus actor if( !mFocusChangedSignal.Empty() ) { @@ -163,6 +172,16 @@ bool KeyboardFocusManager::DoSetCurrentFocusActor( const unsigned int actorID ) // Save the current focused actor mCurrentFocusActor = actorID; + // Push Current Focused Actor to FocusHistory + mFocusHistory.PushBack( &actor.GetBaseObject() ); + + // Delete first element before add new element when Stack is full. + if( mFocusHistory.Count() > MAX_HISTORY_AMOUNT ) + { + FocusStackIterator beginPos = mFocusHistory.Begin(); + mFocusHistory.Erase( beginPos ); + } + DALI_LOG_INFO( gLogFilter, Debug::General, "[%s:%d] SUCCEED\n", __FUNCTION__, __LINE__); success = true; } @@ -185,6 +204,33 @@ Actor KeyboardFocusManager::GetCurrentFocusGroup() return GetFocusGroup(GetCurrentFocusActor()); } +void KeyboardFocusManager::MoveFocusBackward() +{ + // Find Pre Focused Actor when the list size is more than 1 + if( mFocusHistory.Count() > 1 ) + { + // Delete current focused actor in history + FocusStackIterator endPos = mFocusHistory.End(); + endPos = mFocusHistory.Erase( --endPos ); + + // If pre-focused actors are not on stage, remove them in stack + while( !Dali::Actor::DownCast(BaseHandle(mFocusHistory[ mFocusHistory.Count() - 1 ])).OnStage() ) + { + endPos = mFocusHistory.Erase( --endPos ); + } + + // Get pre focused actor + BaseObject* object = mFocusHistory[ mFocusHistory.Count() - 1 ]; + BaseHandle handle( object ); + Actor preFocusedActor = Dali::Actor::DownCast( handle ); + + // Delete pre focused actor in history because it will pushed again by SetCurrentFocusActor() + mFocusHistory.Erase( --endPos ); + + SetCurrentFocusActor( preFocusedActor ); + } +} + bool KeyboardFocusManager::IsLayoutControl(Actor actor) const { Toolkit::Control control = Toolkit::Control::DownCast(actor); @@ -622,6 +668,9 @@ void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event) { // Emit signal to go back to the previous view??? } + else if (keyName == "Escape" && !isAccessibilityEnabled) + { + } } else if(event.state == KeyEvent::Up) {