notifier.ContentSelectedSignal().Connect( this, &TextField::OnClipboardTextSelected );
}
- mController->KeyboardFocusGainEvent();
+ mController->KeyboardFocusGainEvent(); // Called in the case of no virtual keyboard to trigger this event
EmitKeyInputFocusSignal( true ); // Calls back into the Control hence done last.
}
}
else
{
- mController->KeyboardFocusGainEvent();
+ mController->KeyboardFocusGainEvent(); // Initially called by OnKeyInputFocusGained
}
}
mEventData->mDecoratorUpdated = true;
HideClipboard();
}
+ else if ( EventData::INTERRUPTED == mEventData->mState)
+ {
+ mEventData->mDecorator->SetHandleActive( GRAB_HANDLE, false );
+ mEventData->mDecorator->SetHandleActive( LEFT_SELECTION_HANDLE, false );
+ mEventData->mDecorator->SetHandleActive( RIGHT_SELECTION_HANDLE, false );
+ mEventData->mDecorator->SetPopupActive( false );
+ mEventData->mDecoratorUpdated = true;
+ HideClipboard();
+ }
else if ( EventData::SELECTING == mEventData->mState )
{
mEventData->mDecorator->SetActiveCursor( ACTIVE_CURSOR_NONE );
if( mImpl->mEventData )
{
- mImpl->ChangeState( EventData::INACTIVE );
-
- if( mImpl->IsShowingPlaceholderText() )
+ if ( EventData::INTERRUPTED != mImpl->mEventData->mState )
{
- // Revert to regular placeholder-text when not editing
- ShowPlaceholderText();
- }
+ mImpl->ChangeState( EventData::INACTIVE );
- mImpl->RequestRelayout();
+ if( mImpl->IsShowingPlaceholderText() )
+ {
+ // Revert to regular placeholder-text when not editing
+ ShowPlaceholderText();
+ }
+ }
}
+ mImpl->RequestRelayout();
}
bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent )
{
textChanged = BackspaceKeyEvent();
}
- else if ( IsKey( keyEvent, Dali::DALI_KEY_POWER ) || IsKey( keyEvent, Dali::DALI_KEY_MENU ) )
+ else if ( IsKey( keyEvent, Dali::DALI_KEY_POWER ) )
+ {
+ mImpl->ChangeState( EventData::INTERRUPTED ); // State is not INACTIVE as expect to return to edit mode.
+ // Avoids calling the InsertText() method which can delete selected text
+ }
+ else if ( IsKey( keyEvent, Dali::DALI_KEY_MENU ) )
{
- // Do nothing when the Power or Menu Key is pressed.
- // It avoids call the InsertText() method and delete the selected text.
+ mImpl->ChangeState( EventData::INACTIVE );
+ // Menu key behaviour does not allow edit to resume like Power key
+ // Avoids calling the InsertText() method which can delete selected text
}
else
{
textChanged = true;
}
- mImpl->ChangeState( EventData::EDITING ); // todo Confirm this is the best place to change the state of
+ if ( mImpl->mEventData->mState != EventData::INTERRUPTED && mImpl->mEventData->mState != EventData::INACTIVE )
+ {
+ mImpl->ChangeState( EventData::EDITING );
+ }
mImpl->RequestRelayout();
}