diff -r 6ceef9a83b1a -r 6defe5d1bd39 fep/aknfep/src/AknFepPluginManager.cpp --- a/fep/aknfep/src/AknFepPluginManager.cpp Mon Mar 15 12:42:02 2010 +0200 +++ b/fep/aknfep/src/AknFepPluginManager.cpp Wed Mar 31 22:08:20 2010 +0300 @@ -105,6 +105,8 @@ const TInt KDefaultCandidateArraySize = 16; const TInt KNumberOfCases = 6; +const TInt KChineseSpellMode = 100; +const TInt KWesternSpellMode = 101; _LIT_SECURE_ID(KPhoneSecureId, 0x100058b3); #define iAvkonAppUi ((CAknAppUi*)CEikonEnv::Static()->EikAppUi()) @@ -253,9 +255,7 @@ iIsInEditWordQueryDlg = EFalse; iClosePluginInputMode = EFalse; iDimGainForeground = ETrue; - // Modify for bug ELZG-7WZC35 begin iAlignment = 0; - // Modify for bug ELZG-7WZC35 end } // --------------------------------------------------------------------------- @@ -417,7 +417,6 @@ { curSor.iAnchorPos = iCharStartPostion; iLastSubmitCount = curSor.iCursorPos - iCharStartPostion; - //Fixed bug ID SAHN-7JDDC8 } } @@ -961,7 +960,7 @@ { if(landscape) { - defaultMode = EPluginInputModeVkb; + defaultMode = EPluginInputModeFSQ; } else { @@ -970,13 +969,29 @@ } else { - defaultMode = EPluginInputModeItut; + if(landscape) + { + defaultMode = EPluginInputModeFSQ; + } + else + { + defaultMode = EPluginInputModeItut; + } } TryChangePluginInputModeByModeL(defaultMode, EPenInputOpenManually, ERangeInvalid); } break; + case EPluginUpdatePenInputITIStatus: + { + if ( iCurrentPluginInputFepUI ) + { + iCurrentPluginInputFepUI->HandleCommandL( ECmdPeninputITIStatus, + iFepMan.WesternPredictive() ); + } + } + break; default: break; } @@ -1090,13 +1105,15 @@ iOrientationChanged = ETrue; } - CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); - landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight; - if( !landscape ) - { - iPluginInputMode = tempInputMode; - aSuggestMode = EPluginInputModeItut; - } + /*CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); + landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight; + if( !landscape ) + { + iPluginInputMode = tempInputMode; + aSuggestMode = EPluginInputModeItut; + }*/ + // + } } else if(aSuggestMode == EPluginInputModeFingerHwr @@ -1149,7 +1166,6 @@ if ( iCurrentPluginInputFepUI ) { - // fix EVWG-7U73HS iPenInputServer.DimUiLayout(EFalse); AddCurrentWinToOpenListL(); @@ -1265,7 +1281,7 @@ { RestorePredictStateL(); - // Fix bug EAHN-82C9M7, comment out the following code + // comment out the following code //if ( iFepMan.EditorType() == CAknExtendedInputCapabilities::EPhoneNumberEditor ) // { // if( AknTextUtils::NumericEditorDigitType() == EDigitTypeEasternArabicIndic || @@ -1280,7 +1296,7 @@ // } // } } - //iFepMan.UpdateCbaL( NULL ); //pls refer to bug ESZG-7G7CGF + //iFepMan.UpdateCbaL( NULL ); iFepMan.UiInterface()->TouchPaneSetInputMethodIconActivated(EFalse); @@ -1324,7 +1340,7 @@ iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputWindowClose); } - //iFepMan.UpdateCbaL(NULL); //pls refer to bug ESZG-7G7CGF + //iFepMan.UpdateCbaL(NULL); if (iPluginInputMode == EPluginInputModeItut) { @@ -1338,7 +1354,7 @@ && iSharedData.InputTextLanguage() == ELangArabic)) && iOrientationChanged && !iITISettingDialogOpen ) { - // This TRAP_IGNORE is essential to fix bug ECJA-7JDCKR, never delete it + // This TRAP_IGNORE is essential , never delete it TRAP_IGNORE( iAvkonAppUi->SetOrientationL( (CAknAppUiBase::TAppUiOrientation)iDefaultOrientation ) ); iOrientationChanged = EFalse; } @@ -1726,7 +1742,7 @@ { ClosePluginInputUiL( ETrue ); iFepMan.SetNotifyPlugin( EFalse ); - DestroySpellEditor(); + HideSpellEditor(); } break; } @@ -2055,7 +2071,7 @@ ResetMenuState(); InformMfneUiStatusL( EFalse ); // If need to open setting app automatically, - // do not open Touch window again. Fix for ESCN-7NVAWF + // do not open Touch window again. TBool langChange = iCurLanguage != iSharedData.InputTextLanguage(); TryChangePluginInputModeByModeL( @@ -2494,6 +2510,39 @@ return ETrue; } +void CAknFepPluginManager::SetICFTextForSpellL() + { + MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); + + if ( edit ) + { + TInt length = edit->DocumentLengthForFep(); + HBufC* icfTextBuf = HBufC::NewLC( length ); + TPtr icfText = icfTextBuf->Des(); + + edit->GetEditorContentForFep( icfText, 0, length ); + + TCursorSelection curSel; + edit->GetCursorSelectionForFep( curSel ); + TInt curPos = curSel.iCursorPos; + + HBufC* titleStr = StringLoader::LoadL(R_AKNFEP_PROMPT_TEXT); + CleanupStack::PushL( titleStr ); + TPtr16 promptText = titleStr->Des(); + + TFepSpellICFDisplayContent displayContent; + displayContent.iCurPos = curPos; + displayContent.iICFText.Set( icfText ); + displayContent.iPromptText.Set( promptText ); + + iCurrentPluginInputFepUI->HandleCommandL( + ECmdPeninputSpellICFDisplayContent, + reinterpret_cast(&displayContent)); + + CleanupStack::PopAndDestroy( titleStr ); + CleanupStack::PopAndDestroy( icfTextBuf ); + } + } TBool CAknFepPluginManager::SetSyncCurSelIcfDataL( TFepInputContextFieldData& aIcfData ) { MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor(); @@ -3164,7 +3213,9 @@ TRawEvent eventUp; eventUp.Set( TRawEvent::EKeyUp, EStdKeyBackspace); eventUp.SetTip( ETrue ); - CCoeEnv::Static()->WsSession().SimulateRawEvent( eventUp ); + CCoeEnv::Static()->WsSession().SimulateRawEvent( eventUp ); + + break; } else if ( keyEvent.iScanCode == EStdKeyEnter && iHasSWEventCap ) { @@ -3181,7 +3232,9 @@ { // For addition of ITI features on FSQ. // If FSQ is opened with ITI enabled, ensure keycatcher to handle key events - // else, remain the old logic. + // else, remain the old logic. + // But, simulating raw key events is needed, as raw key down + raw key up is a complete key process, + // then EEventDown, EEventKey, EEventUp will be generated, each event may be used differently. if ( IsITISupportedKey( keyEvent ) ) { // check if need to change current text case @@ -3191,14 +3244,14 @@ { iFepMan.PtiEngine()->SetCase( textCase ); } - env->SimulateKeyEventL(keyEvent, EEventKey); - } - else if ( keyEvent.iScanCode == EStdKeyBackspace - || keyEvent.iScanCode == EStdKeyEnter - || keyEvent.iScanCode == EStdKeySpace ) - { - // For these keys, clear the flag to make sure ptiengine handle this key. - env->SimulateKeyEventL(keyEvent, EEventKey); + TRawEvent eventDown; + eventDown.Set( TRawEvent::EKeyDown, keyEvent.iScanCode ); + iAvkonAppUi->DisableNextKeySound( keyEvent.iScanCode ); + CCoeEnv::Static()->WsSession().SimulateRawEvent( eventDown ); + + TRawEvent eventUp; + eventUp.Set( TRawEvent::EKeyUp, keyEvent.iScanCode ); + CCoeEnv::Static()->WsSession().SimulateRawEvent( eventUp ); } else { @@ -3519,6 +3572,22 @@ break; case EPluginInputModeVkb: { + // When in Capacitive hardware, there should be no MiniVKB. + // So we use FSQ for Landscape mode and ITUT for Portrait instead. + if( FeatureManager::FeatureSupported( KFeatureIdFfCapacitiveDisplay )) + { + TPixelsTwipsAndRotation size; + CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size); + TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight; + if ( landscape ) // LandScape + { + aSuggestMode = EPluginInputModeFSQ; + } + else // Portrait + { + aSuggestMode = EPluginInputModeItut; + } + } } break; case EPluginInputModeFSQ: @@ -3719,7 +3788,7 @@ } else { - DestroySpellEditor(); + HideSpellEditor(); if (PluginInputMode() == EPluginInputModeFSQ || PluginInputMode() == EPluginInputModeVkb || PluginInputMode() == EPluginInputModeFingerHwr) @@ -3930,14 +3999,11 @@ keymapRes->Des().Append(decimalSep); keymapRes->Des().Append(minusSign); - if( keymapRes ) - { - CleanupStack::PushL(keymapRes); - iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputEditorCustomNumericKeyMap, + CleanupStack::PushL(keymapRes); + iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputEditorCustomNumericKeyMap, reinterpret_cast(keymapRes) ); - CleanupStack::PopAndDestroy(keymapRes); - return; - } + CleanupStack::PopAndDestroy(keymapRes); + return; } iCurrentPluginInputFepUI->SetNumberModeKeyMappingL(EAknEditorPlainNumberModeKeymap); @@ -4427,6 +4493,7 @@ { if (aState) { + SetICFTextForSpellL(); iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerSpelling, 1); HBufC* titleStr = StringLoader::LoadL(R_AKNFEP_PROMPT_TEXT); @@ -4469,6 +4536,18 @@ const TDesC& aInitText, TCursorSelection aCurSel) { + TInt inputLang = iFepMan.InputLanguageCapabilities().iInputLanguageCode; + if ( inputLang == ELangPrcChinese || inputLang == ELangHongKongChinese || + inputLang == ELangTaiwanChinese ) + { + iCurrentPluginInputFepUI->HandleCommandL( + ECmdPeninputSpellLanguageMode, KChineseSpellMode ); + } + else + { + iCurrentPluginInputFepUI->HandleCommandL( + ECmdPeninputSpellLanguageMode, KWesternSpellMode ); + } TInt editorFlag = 0; TInt editorCase = 0; TInt editorSCTResId = 0; @@ -4504,11 +4583,17 @@ editorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG; } - delete iSpell; - iSpell = NULL; iSpellCba = ESpellCBACancelEmpty; iSpellOn = ETrue; - iSpell = CAknFepUiSpellContainer::NewL(editorFlag, editorCase, editorSCTResId, IsEditorSupportSplitIme()); + if( !iSpell ) + { + iSpell = CAknFepUiSpellContainer::NewL(editorFlag, editorCase, editorSCTResId, IsEditorSupportSplitIme()); + } + else + { + iSpell->MakeVisible( ETrue ); + iSpell->SetInputWinFocus( ETrue ); + } iSpell->SetInputWinObserver(this); @@ -4517,12 +4602,17 @@ AddWinToOpenListL( iSpell->DrawableWindow() ); } -void CAknFepPluginManager:: DestroySpellEditor() +void CAknFepPluginManager::HideSpellEditor() { iSpellOn = EFalse; iSpellCba = ESpellCBANone; - delete iSpell; - iSpell = NULL; + // Hide spell container instead to delete spell container to avoid flicker + if( iSpell ) + { + iSpell->SetInputWinObserver( NULL ); + iSpell->SetInputWinFocus( EFalse ); + iSpell->MakeVisible( EFalse ); + } } HBufC* CAknFepPluginManager::SpellTextInput() @@ -4637,13 +4727,11 @@ void CAknFepPluginManager::SetIcfAlignment() { - // Modify for bug ELZG-7WZC35 begin - // fix TINA-7HNEKA, spell editor is not really background editor. + // spell editor is not really background editor. //if ( iSpellOn ) // { // return; // } - // Modify for bug ELZG-7WZC35 end TUint cap = iFepMan.ExtendedInputCapabilities(); @@ -4665,19 +4753,15 @@ { alignment = EAknEditorAlignLeft; } - // Modify for bug ELZG-7WZC35 begin else { alignment = iAlignment; } - // Modify for bug ELZG-7WZC35 end TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputSetTextAlignment, alignment)); - // Modify for bug ELZG-7WZC35 begin iAlignment = alignment; - // Modify for bug ELZG-7WZC35 end } void CAknFepPluginManager::HasNoFreeSpace() @@ -4818,7 +4902,7 @@ } for( TInt i = 0; iKeyForCharacter( aKeyCode ); // Restore the old input mode iFepMan.PtiEngine()->SetInputMode( oldInputMode ); + +#if defined(__WINS__) + // In Emulator, Window server will not handle EPtiKeyQwertyPlus key raw event + // as normal, it will not produce EKeyEvent event for EPtiKeyQwertyPlus key. + // And winodw server will handle EStdKeyNkpPlus key raw event as normal. + if (retKey == EPtiKeyQwertyPlus) + { + retKey = EStdKeyNkpPlus; + } +#endif return retKey; } return EPtiKeyNone; @@ -5399,15 +5493,17 @@ TBool CAknFepPluginManager::IsITISupportedKey( const TKeyEvent& aKeyEvent ) { // ITI supported conditions -// 1. scan code != EPtiKeyNone -// 2. Basic alpha characters -// 3. +// 1. Not in keymapping: some function keys, space, enter, backspace +// 2. In keymappings: keys on AB/Native range. #ifdef RD_INTELLIGENT_TEXT_INPUT - if ( aKeyEvent.iScanCode != EPtiKeyNone - && ( iPluginPrimaryRange == ERangeNative - || iPluginPrimaryRange == ERangeEnglish - || ( iPluginPrimaryRange == 0 && iFepMan.InputMode() != ENumber - && iFepMan.InputMode() != ENativeNumber) ) ) + if ( aKeyEvent.iScanCode == EStdKeySpace + || aKeyEvent.iScanCode == EStdKeyEnter + || aKeyEvent.iScanCode == EStdKeyBackspace + || ( aKeyEvent.iScanCode != EPtiKeyNone + && ( iPluginPrimaryRange == ERangeNative + || iPluginPrimaryRange == ERangeEnglish + || ( iPluginPrimaryRange == 0 && iFepMan.InputMode() != ENumber + && iFepMan.InputMode() != ENativeNumber ) ) ) ) { return ETrue; }