X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-controller.cpp;h=f1ee352454eb80cd1095301fa00eba4d126d28aa;hp=886327facb2e7b655c3583ee4e7f747386bf1f55;hb=e0478f13851db6194bbc21d7a62789eb9355e391;hpb=6a1e5b837622d06f6cd69dc660cd11d23f7153ba diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index 886327f..f1ee352 100644 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -1204,14 +1204,20 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ Vector utf32Characters; Length characterCount( 0u ); - if( ! text.empty() ) + // Remove the previous IMF pre-edit (predicitive text) + if( mImpl->mEventData && + mImpl->mEventData->mPreEditFlag && + 0 != mImpl->mEventData->mPreEditLength ) { - // The placeholder text is no longer needed - if( mImpl->IsShowingPlaceholderText() ) - { - ResetText(); - } + CharacterIndex offset = mImpl->mEventData->mPrimaryCursorPosition - mImpl->mEventData->mPreEditStartPosition; + removedPreEdit = RemoveText( -static_cast(offset), mImpl->mEventData->mPreEditLength ); + + mImpl->mEventData->mPrimaryCursorPosition = mImpl->mEventData->mPreEditStartPosition; + mImpl->mEventData->mPreEditLength = 0; + } + if( ! text.empty() ) + { // Convert text into UTF-32 utf32Characters.Resize( text.size() ); @@ -1229,20 +1235,15 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ if( 0u != utf32Characters.Count() ) // Check if Utf8ToUtf32 conversion succeeded { + // The placeholder text is no longer needed + if( mImpl->IsShowingPlaceholderText() ) + { + ResetText(); + } + // Handle the IMF (predicitive text) state changes if( mImpl->mEventData ) { - if( mImpl->mEventData->mPreEditFlag && - 0 != mImpl->mEventData->mPreEditLength ) - { - // Remove previous pre-edit text - CharacterIndex offset = mImpl->mEventData->mPrimaryCursorPosition - mImpl->mEventData->mPreEditStartPosition; - removedPreEdit = RemoveText( -static_cast(offset), mImpl->mEventData->mPreEditLength ); - - mImpl->mEventData->mPrimaryCursorPosition = mImpl->mEventData->mPreEditStartPosition; - mImpl->mEventData->mPreEditLength = 0; - } - if( COMMIT == type ) { // IMF manager is no longer handling key-events @@ -1290,8 +1291,16 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Inserted %d characters, new size %d new cursor %d\n", maxSizeOfNewText, mImpl->mLogicalModel->mText.Count(), mImpl->mEventData->mPrimaryCursorPosition ); } - if( removedPreEdit || - 0 != utf32Characters.Count() ) + if( 0u == mImpl->mLogicalModel->mText.Count() && + mImpl->IsPlaceholderAvailable() ) + { + // Show place-holder if empty after removing the pre-edit text + ShowPlaceholderText(); + mImpl->mEventData->mUpdateCursorPosition = true; + mImpl->ClearPreEditFlag(); + } + else if( removedPreEdit || + 0 != utf32Characters.Count() ) { // Queue an inserted event mImpl->QueueModifyEvent( ModifyEvent::TEXT_INSERTED );