mCurrentFocusActor( 0 ),
mFocusIndicatorActor(),
mFocusGroupLoopEnabled( false ),
+ mIsKeyboardFocusEnabled( false ),
mIsFocusIndicatorEnabled( false ),
mIsWaitingKeyboardFocusChangeCommit( false ),
mFocusHistory(),
mSlotDelegate( this )
{
- // TODO: Get FocusIndicatorEnable constant from stylesheet to set mIsFocusIndicatorEnabled.
+ OnPhysicalKeyboardStatusChanged(PhysicalKeyboard::Get());
+
Toolkit::KeyInputFocusManager::Get().UnhandledKeyEventSignal().Connect(mSlotDelegate, &KeyboardFocusManager::OnKeyEvent);
Stage::GetCurrent().TouchSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnTouch );
+ PhysicalKeyboard::Get().StatusChangedSignal().Connect(mSlotDelegate, &KeyboardFocusManager::OnPhysicalKeyboardStatusChanged);
}
KeyboardFocusManager::~KeyboardFocusManager()
// Check whether the actor is in the stage and is keyboard focusable.
if( actor && actor.IsKeyboardFocusable() )
{
- // Draw the focus indicator upon the focused actor when Focus Indicator is enabled
- if( mIsFocusIndicatorEnabled )
+ mIsFocusIndicatorEnabled = true;
+ // Draw the focus indicator upon the focused actor when PhysicalKeyboard is attached
+ if( mIsKeyboardFocusEnabled )
{
actor.Add( GetFocusIndicatorActor() );
}
return mFocusIndicatorActor;
}
+void KeyboardFocusManager::OnPhysicalKeyboardStatusChanged(PhysicalKeyboard keyboard)
+{
+ mIsKeyboardFocusEnabled = keyboard.IsAttached();
+
+ if(mIsKeyboardFocusEnabled)
+ {
+ // Show indicator when keyboard focus turned on if there is focused actor.
+ Actor actor = GetCurrentFocusActor();
+ if(actor)
+ {
+ actor.Add( GetFocusIndicatorActor() );
+ }
+ mIsFocusIndicatorEnabled = true;
+ }
+ else
+ {
+ // Hide indicator when keyboard focus turned off
+ Actor actor = GetCurrentFocusActor();
+ if( actor && mFocusIndicatorActor )
+ {
+ actor.Remove( mFocusIndicatorActor );
+ }
+ mIsFocusIndicatorEnabled = false;
+ }
+}
+
void KeyboardFocusManager::OnKeyEvent(const KeyEvent& event)
{
+ if(!mIsKeyboardFocusEnabled)
+ {
+ return;
+ }
+
AccessibilityAdaptor accessibilityAdaptor = AccessibilityAdaptor::Get();
bool isAccessibilityEnabled = accessibilityAdaptor.IsEnabled();
*/
// EXTERNAL INCLUDES
+#include <string>
+#include <dali/devel-api/adaptor-framework/physical-keyboard.h>
#include <dali/public-api/object/base-object.h>
// INTERNAL INCLUDES
*/
void OnTouch( const TouchData& touch );
+ /**
+ * Change the keyboard focus status when keyboard focus feature turned on or off.
+ * @return Whether the status is changed or not.
+ */
+ void OnPhysicalKeyboardStatusChanged(PhysicalKeyboard keyboard);
+
private:
// Undefined
bool mFocusGroupLoopEnabled:1; ///< Whether the focus movement is looped within the same focus group
+ bool mIsKeyboardFocusEnabled:1; ///< Whether keyboard focus feature turned on/off
+
bool mIsFocusIndicatorEnabled:1; ///< Whether indicator should be shown / hidden. It could be enabled when keyboard focus feature enabled and navigation keys or 'Tab' key pressed.
bool mIsWaitingKeyboardFocusChangeCommit:1; /// A flag to indicate PreFocusChangeSignal emitted but the proposed focus actor is not commited by the application yet.