diff -r 6c2c2d3ab788 -r 857bebeecec0 textinput/ptienginev2/src/PtiEngineImpl.cpp --- a/textinput/ptienginev2/src/PtiEngineImpl.cpp Wed Jun 09 10:03:19 2010 +0300 +++ b/textinput/ptienginev2/src/PtiEngineImpl.cpp Mon Jun 21 16:02:35 2010 +0300 @@ -712,14 +712,36 @@ return KErrNoSuitableCore; } } - - iInputMode = aMode; + + if (iInputMode != aMode) + { + OnInputModeChanged(iInputMode, aMode); + iInputMode = aMode; + } TFileName temp; temp.Copy(iTextBuffer); return SetCurrentWord( temp ); } +void CPtiEngineImpl::OnInputModeChanged(TPtiEngineInputMode /*aOldMode*/, TPtiEngineInputMode aNewMode) + { + if (aNewMode == EPtiEngineQwertyPredictive) + { + HBufC16* oldTextBuf = iTextBuffer.Alloc(); + ClearCurrentWord(); + if (oldTextBuf) + { + // why assigned here? eh, I don't want to do that either. + // SetCurrentWord will use core(), which will use iInputMode, and + // obviously, the core should return the new core, that is why. + iInputMode = aNewMode; + + SetCurrentWord(oldTextBuf->Des()); + delete oldTextBuf; + } + } + } // --------------------------------------------------------------------------- // CPtiEngineImpl::CountToneMarks @@ -3964,10 +3986,12 @@ // When the default physical keyboard is 0, // it means that there is no physical keyboard, // also need to get the active virtual keyboard type. + TInt isQwertyOn = 0; + RProperty::Get(KCRUidAvkon, KAknQwertyInputModeActive, isQwertyOn); TInt isVirtualInputActive = 0; RProperty::Get( KPSUidAknFep, KAknFepTouchInputActive, isVirtualInputActive ); - if ( isVirtualInputActive > 0 || keyboardType == 0 ) + if (( isVirtualInputActive > 0 || keyboardType == 0) && !isQwertyOn) { // Active keyboard is virtual keyboard RProperty::Get( KPSUidAknFep, KAknFepVirtualKeyboardType,