diff -r 857bebeecec0 -r b1ea1642412e fep/aknfep/src/AknFepManager.cpp --- a/fep/aknfep/src/AknFepManager.cpp Mon Jun 21 16:02:35 2010 +0300 +++ b/fep/aknfep/src/AknFepManager.cpp Thu Jul 15 19:01:13 2010 +0300 @@ -251,9 +251,6 @@ LOCAL_C TInt RemapVietnameseAccentedCharacter(TUint16 aChr); -static _LIT_SECURITY_POLICY_PASS( KAllowAllPolicy ); -static _LIT_SECURITY_POLICY_C1( KPowerMgmtPolicy, ECapabilityPowerMgmt ); - // // Class TTextDirectionalInfo // @@ -448,12 +445,9 @@ iLastFocusedEditor = NULL; iFepAwareDialogParentEditor = NULL; - RProperty::Define( - KPSUidAknFep, - KAknFepSettingDialogState, - RProperty::EInt, - KAllowAllPolicy, // None - KPowerMgmtPolicy ); + // Fep manager should have both read and write privilege. + // Known case: Auto-completion cannot be changed in setting dialog. + RProperty::Define( KPSUidAknFep, KAknFepSettingDialogState, RProperty::EInt ); } void CAknFepManager::ConstructFullyL() @@ -10103,25 +10097,25 @@ } else { - // Go directly via CTextView because the normal way via the FepAwareEditor can only be called - // during an inline edit. - // Line cursor is made invisible here. There is no line cursor in S60 LAF, even though there is - // an Edwin flag which govern this. See CEikEdwin::SetCursorVisibilityL(TBool) - // Cursor is not set if this CommitInlineEditL call was prompted when losing focus. + // Line cursor is made invisible here. There is no line cursor in S60 LAF, even though there is + // an Edwin flag which govern this. See CEikEdwin::SetCursorVisibilityL(TBool) + // Cursor is not set if this CommitInlineEditL call was prompted when losing focus. MAknFepDocumentNavigation* docNavi = AknFepDocumentNavigation(); - if ( (docNavi || TextView()) && !IsCcpuFlagSet(ECcpuStateLosingFocus) ) - { - if (docNavi) - { - docNavi->SetCursorVisibilityL( TCursor::EFCursorInvisible, - TCursor::EFCursorFlashing ); - } - else - { - TextView()->SetCursorVisibilityL( TCursor::EFCursorInvisible, - TCursor::EFCursorFlashing ); - } - } + + // Use FepAwareTextEditor to judge, not use TextView() + if ( (docNavi || FepAwareTextEditor()) && !IsCcpuFlagSet(ECcpuStateLosingFocus) ) + { + if (docNavi) + { + docNavi->SetCursorVisibilityL( TCursor::EFCursorInvisible, + TCursor::EFCursorFlashing ); + } + else + { + //Use Edwin (FepAwareTextEditor) to set cursor visibility + FepAwareTextEditor()->SetInlineEditingCursorVisibilityL( ETrue ); + } + } } } // iMatchState=EWordMatchFirst; @@ -10302,6 +10296,33 @@ } return EFalse; } + +// ----------------------------------------------------------------------------- +// check whether the current editor is a Java secret editor +// ----------------------------------------------------------------------------- +TBool CAknFepManager::IsJavaSecretEditor() + { + TBool JavaSecretEditor = EFalse; + + TUint ConstraintValue = 0; + MObjectProvider* mop = iInputCapabilities.ObjectProvider(); + + if ( mop ) + { + CAknExtendedInputCapabilities* extendedInputCapabilities = + mop->MopGetObject( extendedInputCapabilities ); + if ( extendedInputCapabilities && iInputCapabilities.FepAwareTextEditor() ) + { + ConstraintValue = extendedInputCapabilities->MIDPConstrainst(); + } + } + if( ConstraintValue & 0x10000 ) + { + JavaSecretEditor = ETrue; + } + + return JavaSecretEditor; + } TBool CAknFepManager::IsEditorHasFreeSpace() const { @@ -16146,12 +16167,20 @@ } else { - CTextView* textView = TextView(); - if (textView) - { - TextView()->GetCursorPos(rawDocPos); - gotPos = ETrue; - } + // Use Edwin (FepAwareTextEditor() ) to get the position of document + if ( FepAwareTextEditor() ) + { + TCursorSelection cursorSel( 0, 0 ); + // Get the postion of document + FepAwareTextEditor()->GetCursorSelectionForFep( cursorSel ); + + // Set the leading edge of the document. + rawDocPos.iPos = cursorSel.iCursorPos; + CAknEdwinState* state( EditorState() ); + rawDocPos.iLeadingEdge = ( state && + state->Flags() & EAknEditorFlagCursorLedingEdge ); + gotPos = ETrue; + } } if (gotPos) { @@ -16397,6 +16426,10 @@ TBool CAknFepManager::GetVisualDocEnd( TTmDocPosSpec& aPos) const { + // Set EAknEditorFlagNeedWholeTextData to Editor State + // EAknEditorFlagNeedWholeTextData means needing to get whole document data to editor + UpdateEditorStateFlags( EAknEditorFlagNeedWholeTextData ); + TInt docLength = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep(); // Set up the initial try as trailing after the last logical character @@ -16422,6 +16455,9 @@ aPos.iPos = docLength; aPos.iType = TTmDocPosSpec::ETrailing; } + + // Remove EAknEditorFlagNeedWholeTextData fromEditor State + UpdateEditorStateFlags( EAknEditorFlagNeedWholeTextData, EFalse ); return success; } @@ -17012,6 +17048,16 @@ else { aLanguage = EditorState()->LocalLanguage(); + + // Change local language to ELangEnglish if application, e.g. Search Widget, + // sets local language to ELangEnglish_Taiwan, ELangEnglish_HongKong + // and ELangEnglish_Prc. + if( aLanguage == ELangEnglish_Taiwan || + aLanguage == ELangEnglish_HongKong || + aLanguage == ELangEnglish_Prc ) + { + aLanguage = ELangEnglish; + } } if ( aLanguage != ELangTest ) @@ -17474,8 +17520,10 @@ { if ( aCode == EKeyRightArrow || aCode == EKeyLeftArrow ) { + // Never use TextView() to get editor data, + // use FepAwareTextEditor() condition instead of TextView() if ( iInputCapabilities.FepAwareTextEditor() && EditorState() - && (AknFepDocumentNavigation() || TextView()) ) + && AknFepDocumentNavigation() ) { TTmDocPosSpec docPos = DocPos(); TTextDirectionalInfo status = LocalTextDirectionalStatus( docPos ); @@ -17583,8 +17631,11 @@ void CAknFepManager::AdjustCursorTypeForCurrentPosition() { + + // Never use TextView() to get editor data, + // use FepAwareTextEditor() condition instead of TextView() if ( iInputCapabilities.FepAwareTextEditor() && EditorState() - && (AknFepDocumentNavigation() || TextView()) ) + && AknFepDocumentNavigation()) AdjustCursorTypeForPosition( DocPos() ); } @@ -20779,7 +20830,7 @@ void CAknFepManager::HideExactWordPopUp() { iExactWordPopupContent->HidePopUp(); - SendEventsToPluginManL( EPluginHideTooltip ); + TRAP_IGNORE( SendEventsToPluginManL( EPluginHideTooltip )); } TBool CAknFepManager::IsExactWordPopUpShown() @@ -21001,6 +21052,30 @@ CleanupStack::PopAndDestroy(); //reader return isEmpty; } + +// ======================================== +// Update Editor State Flag +// Add editor state flags or +// Remove editor state flags +// ======================================== +void CAknFepManager::UpdateEditorStateFlags( TInt aFlag, TBool aAdd ) const + { + CAknEdwinState* state( EditorState() ); + if ( state ) + { + TInt flags( state->Flags() ); + if ( aAdd ) + { + flags |= aFlag; // Add flag + } + else + { + flags &= ~aFlag; // Remove flag + } + state->SetFlags( flags ); + } + } + // --------------------------------------------------------------------------- // LOCAL METHODS