From: Paul Wisbey
Date: Thu, 23 Mar 2017 10:00:28 +0000 (-0700)
Subject: Merge "Fix for Text::Controller." into devel/master
X-Git-Tag: dali_1.2.32~4
X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=1f08075655f2a0904c3bd9ac59db4450ac157b90;hp=-c;ds=sidebyside
Merge "Fix for Text::Controller." into devel/master
---
1f08075655f2a0904c3bd9ac59db4450ac157b90
diff --combined dali-toolkit/internal/text/text-controller.cpp
index 6f2d4b7,c16cd0b..b79430a
--- a/dali-toolkit/internal/text/text-controller.cpp
+++ b/dali-toolkit/internal/text/text-controller.cpp
@@@ -1751,8 -1751,7 +1751,8 @@@ bool Controller::KeyEvent( const Dali::
{
DALI_ASSERT_DEBUG( mImpl->mEventData && "Unexpected KeyEvent" );
- bool textChanged( false );
+ bool textChanged = false;
+ bool relayoutNeeded = false;
if( ( NULL != mImpl->mEventData ) &&
( keyEvent.state == KeyEvent::Down ) )
@@@ -1772,9 -1771,6 +1772,9 @@@
{
// Escape key is a special case which causes focus loss
KeyboardFocusLostEvent();
+
+ // Will request for relayout.
+ relayoutNeeded = true;
}
else if( ( Dali::DALI_KEY_CURSOR_LEFT == keyCode ) ||
( Dali::DALI_KEY_CURSOR_RIGHT == keyCode ) ||
@@@ -1807,16 -1803,10 +1807,16 @@@
Event event( Event::CURSOR_KEY_EVENT );
event.p1.mInt = keyCode;
mImpl->mEventData->mEventQueue.push_back( event );
+
+ // Will request for relayout.
+ relayoutNeeded = true;
}
else if( Dali::DALI_KEY_BACKSPACE == keyCode )
{
textChanged = BackspaceKeyEvent();
+
+ // Will request for relayout.
+ relayoutNeeded = true;
}
else if( IsKey( keyEvent, Dali::DALI_KEY_POWER ) ||
IsKey( keyEvent, Dali::DALI_KEY_MENU ) ||
@@@ -1825,9 -1815,6 +1825,9 @@@
// Power key/Menu/Home key behaviour does not allow edit mode to resume.
mImpl->ChangeState( EventData::INACTIVE );
+ // Will request for relayout.
+ relayoutNeeded = true;
+
// This branch avoids calling the InsertText() method of the 'else' branch which can delete selected text.
}
else if( Dali::DALI_KEY_SHIFT_LEFT == keyCode )
@@@ -1837,11 -1824,6 +1837,11 @@@
// Do nothing.
}
+ else if( ( Dali::DALI_KEY_VOLUME_UP == keyCode ) || ( Dali::DALI_KEY_VOLUME_DOWN == keyCode ) )
+ {
+ // This branch avoids calling the InsertText() method of the 'else' branch which can delete selected text.
+ // Do nothing.
+ }
else
{
DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Controller::KeyEvent %p keyString %s\n", this, keyString.c_str() );
@@@ -1851,31 -1833,20 +1851,31 @@@
InsertText( keyString, COMMIT );
textChanged = true;
+
+ // Will request for relayout.
+ relayoutNeeded = true;
}
if ( ( mImpl->mEventData->mState != EventData::INTERRUPTED ) &&
( mImpl->mEventData->mState != EventData::INACTIVE ) &&
( !isNullKey ) &&
- ( Dali::DALI_KEY_SHIFT_LEFT != keyCode ) )
+ ( Dali::DALI_KEY_SHIFT_LEFT != keyCode ) &&
+ ( Dali::DALI_KEY_VOLUME_UP != keyCode ) &&
+ ( Dali::DALI_KEY_VOLUME_DOWN != keyCode ) )
{
// Should not change the state if the key is the shift send by the imf manager.
// Otherwise, when the state is SELECTING the text controller can't send the right
// surrounding info to the imf.
mImpl->ChangeState( EventData::EDITING );
+
+ // Will request for relayout.
+ relayoutNeeded = true;
}
- mImpl->RequestRelayout();
+ if( relayoutNeeded )
+ {
+ mImpl->RequestRelayout();
+ }
}
if( textChanged &&
@@@ -2305,8 -2276,9 +2305,9 @@@ void Controller::TextPopupButtonTouched
void Controller::InsertText( const std::string& text, Controller::InsertType type )
{
- bool removedPrevious( false );
- bool maxLengthReached( false );
+ bool removedPrevious = false;
+ bool removedSelected = false;
+ bool maxLengthReached = false;
DALI_ASSERT_DEBUG( NULL != mImpl->mEventData && "Unexpected InsertText" )
@@@ -2322,9 -2294,6 +2323,6 @@@
// TODO: At the moment the underline runs are only for pre-edit.
mImpl->mModel->mVisualModel->mUnderlineRuns.Clear();
- // Keep the current number of characters.
- const Length currentNumberOfCharacters = mImpl->IsShowingRealText() ? mImpl->mModel->mLogicalModel->mText.Count() : 0u;
-
// Remove the previous IMF pre-edit.
if( mImpl->mEventData->mPreEditFlag && ( 0u != mImpl->mEventData->mPreEditLength ) )
{
@@@ -2338,7 -2307,8 +2336,8 @@@
else
{
// Remove the previous Selection.
- removedPrevious = RemoveSelectedText();
+ removedSelected = RemoveSelectedText();
+
}
Vector utf32Characters;
@@@ -2508,8 -2478,6 +2507,6 @@@
DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Inserted %d characters, new size %d new cursor %d\n", maxSizeOfNewText, mImpl->mModel->mLogicalModel->mText.Count(), mImpl->mEventData->mPrimaryCursorPosition );
}
- const Length numberOfCharacters = mImpl->IsShowingRealText() ? mImpl->mModel->mLogicalModel->mText.Count() : 0u;
-
if( ( 0u == mImpl->mModel->mLogicalModel->mText.Count() ) &&
mImpl->IsPlaceholderAvailable() )
{
@@@ -2519,13 -2487,14 +2516,14 @@@
mImpl->ClearPreEditFlag();
}
else if( removedPrevious ||
+ removedSelected ||
( 0 != utf32Characters.Count() ) )
{
// Queue an inserted event
mImpl->QueueModifyEvent( ModifyEvent::TEXT_INSERTED );
mImpl->mEventData->mUpdateCursorPosition = true;
- if( numberOfCharacters < currentNumberOfCharacters )
+ if( removedSelected )
{
mImpl->mEventData->mScrollAfterDelete = true;
}