diff -r c3690ec91ef8 -r 923ff622b8b9 src/hbplugins/inputmethods/touchinput/hbinputbasic12keyhandler.cpp --- a/src/hbplugins/inputmethods/touchinput/hbinputbasic12keyhandler.cpp Wed Jun 23 18:33:25 2010 +0300 +++ b/src/hbplugins/inputmethods/touchinput/hbinputbasic12keyhandler.cpp Tue Jul 06 14:36:53 2010 +0300 @@ -61,23 +61,25 @@ int index = mNumChr; do { + int currCharIndex = 0; + mCurrentChar = 0; //This condition is to avoid get the characters mapped to Asterisk //Especially for Thai language we have mapped character to Asterisk if (buttonId != HbInputButton::ButtonKeyCodeAsterisk || mInputMethod->currentKeyboardType() == HbKeyboardSctPortrait) { + currCharIndex = mNumChr ; mCurrentChar = q->getNthCharacterInKey(mNumChr, buttonId, type); } if (mCurrentChar != 0) { if (focusObject->characterAllowedInEditor(mCurrentChar)) { - QString str; - str += mCurrentChar; - - //If the keypad is SCT, we can commit the character immidiately - if (mInputMethod->currentKeyboardType() == HbKeyboardSctPortrait) { - focusObject->filterAndCommitCharacter(mCurrentChar); - mCurrentChar = 0; + //If the keypad is SCT or button has only one character that is allowed to editor, + //we can commit the character immidiately + if (mInputMethod->currentKeyboardType() == HbKeyboardSctPortrait || currCharIndex == mNumChr) { + _q_timeout(); } else { + QString str; + str += mCurrentChar; QList list; QInputMethodEvent event(str, list); focusObject->sendEvent(event); @@ -106,11 +108,16 @@ if (mDownKey == HbInputButton::ButtonKeyCodeShift) { mLongPressHappened = true; mInputMethod->switchMode(HbInputButton::ButtonKeyCodeShift); - } else if (mDownKey == HbInputButton::ButtonKeyCodeSymbol || - (mDownKey == HbInputButton::ButtonKeyCodeAsterisk && - mInputMethod->currentKeyboardType() != HbKeyboardSctPortrait)) { + } else if (mDownKey == HbInputButton::ButtonKeyCodeSymbol) { + // launch the smiley popup when long press of Sym key is received mLongPressHappened = true; mInputMethod->selectSpecialCharacterTableMode(); + } else if (mDownKey == HbInputButton::ButtonKeyCodeAsterisk && + // launch the SCT keypad when long press of Asterisk key is + // received in non-SCT mode + !mInputMethod->isSctModeActive()) { + mLongPressHappened = true; + mInputMethod->switchMode(mDownKey); } else if (mDownKey != HbInputButton::ButtonKeyCodeDelete && mInputMethod->currentKeyboardType() != HbKeyboardSctPortrait) { mLongPressHappened = true; @@ -169,12 +176,12 @@ return false; } mDownKey = 0; - if ( mLongPressHappened ){ + if ( mLongPressHappened ){ mLongPressHappened = false; return false; } - if(mTimer->isActive() && mLastKey != buttonId) { + if(mTimer->isActive() && mLastKey != buttonId) { mNumChr = 0; // For QLineEdit it works fine. For HbLineEdit, need to set the state @@ -191,11 +198,7 @@ refreshAutoCompleter(); } - if (buttonId == HbInputButton::ButtonKeyCodeEnter) { - mInputMethod->closeKeypad(); - mLastKey = buttonId; - return true; - } else if (buttonId == HbInputButton::ButtonKeyCodeShift) { + if (buttonId == HbInputButton::ButtonKeyCodeShift) { // single tap of shift key toggles prediction status in case insensitive languages // The Editor should not be Web or URL which allows only Latin Alphabet if (!HbInputSettingProxy::instance()->globalInputLanguage().isCaseSensitiveLanguage() && @@ -254,10 +257,11 @@ if (!mTimer->isActive() && buttonId == HbInputButton::ButtonKeyCodeSymbol) { return true; } - if (buttonId == HbInputButton::ButtonKeyCodeAsterisk || buttonId == HbInputButton::ButtonKeyCodeSymbol || + // switch the keypad mode when the short key press of Asterisk key in non-SCT mode + // or SYM button or Alphabet button is received + if ((buttonId == HbInputButton::ButtonKeyCodeAsterisk && + !mInputMethod->isSctModeActive()) || buttonId == HbInputButton::ButtonKeyCodeSymbol || buttonId == HbInputButton::ButtonKeyCodeAlphabet) { - //Same asterisk key is used for launching candidate list (long key press) - //and also for SCT. So, do not launch SCT if candidate list is already launched. mInputMethod->switchMode(buttonId); return true; }