fep/aknfep/src/AknFepManager.cpp
branchRCL_3
changeset 19 ac7e4d1d9209
parent 18 b1ea1642412e
equal deleted inserted replaced
18:b1ea1642412e 19:ac7e4d1d9209
   520         {
   520         {
   521         iFnKeyManager = CAknFepFnKeyManager::NewL( *this,iSharedDataInterface );
   521         iFnKeyManager = CAknFepFnKeyManager::NewL( *this,iSharedDataInterface );
   522         }    
   522         }    
   523 #endif
   523 #endif
   524     iCaseMan = CAknFepCaseManager::NewL(*this);
   524     iCaseMan = CAknFepCaseManager::NewL(*this);
   525     iLangMan = CAknFepLanguageManager::NewL(this, iCaseMan);
   525     iLangMan = CAknFepLanguageManager::NewL( this, iCaseMan, iSharedDataInterface );
   526     iPtiEngine->ActivateLanguageL(inputLanguage);
   526     iPtiEngine->ActivateLanguageL(inputLanguage);
   527 #ifdef RD_INTELLIGENT_TEXT_INPUT
   527 #ifdef RD_INTELLIGENT_TEXT_INPUT
   528 #ifdef FF_DUAL_LANGUAGE_SUPPORT
   528 #ifdef FF_DUAL_LANGUAGE_SUPPORT
   529     iPtiEngine->SetSecondaryInputL(inputLanguageSecondary);
   529     iPtiEngine->SetSecondaryInputL(inputLanguageSecondary);
   530 #endif //FF_DUAL_LANGUAGE_SUPPORT
   530 #endif //FF_DUAL_LANGUAGE_SUPPORT
   573     iFepFullyConstructed = ETrue;
   573     iFepFullyConstructed = ETrue;
   574 #ifdef RD_INTELLIGENT_TEXT_INPUT
   574 #ifdef RD_INTELLIGENT_TEXT_INPUT
   575     iIsFnKeyMapped = IsFnKeyMappedL();
   575     iIsFnKeyMapped = IsFnKeyMappedL();
   576     iKeyboardType = (TPtiKeyboardType)iSharedDataInterface->KeyboardLayout();
   576     iKeyboardType = (TPtiKeyboardType)iSharedDataInterface->KeyboardLayout();
   577 #endif
   577 #endif
       
   578     
       
   579     iFnKeypressMonitor = CPeriodic::NewL(CActive::EPriorityStandard);
   578     }
   580     }
   579 
   581 
   580 CAknFepManager::~CAknFepManager()
   582 CAknFepManager::~CAknFepManager()
   581     {
   583     {
   582 #ifdef RD_PF_SEC_APPARC
   584 #ifdef RD_PF_SEC_APPARC
   701         {
   703         {
   702         delete iNumericResourceTimer;
   704         delete iNumericResourceTimer;
   703         iNumericResourceTimer = NULL;    
   705         iNumericResourceTimer = NULL;    
   704         }
   706         }
   705 #endif
   707 #endif
       
   708     delete iFnKeypressMonitor;
       
   709     iFnKeypressMonitor = NULL;
   706     }
   710     }
   707 
   711 
   708 #ifdef RD_INTELLIGENT_TEXT_INPUT
   712 #ifdef RD_INTELLIGENT_TEXT_INPUT
   709 void CAknFepManager::SetKeyboardLayout(TPtiKeyboardType aType)
   713 void CAknFepManager::SetKeyboardLayout(TPtiKeyboardType aType)
   710     {
   714     {
  3124 /*    if (EPtiKeyboardQwerty4x10 == KeyboardLayout())
  3128 /*    if (EPtiKeyboardQwerty4x10 == KeyboardLayout())
  3125     	{
  3129     	{
  3126     	FepUI()->HandleKeyL(EKeyLeftCtrl, EShortKeyPress);    
  3130     	FepUI()->HandleKeyL(EKeyLeftCtrl, EShortKeyPress);    
  3127    	}*/
  3131    	}*/
  3128 
  3132 
       
  3133     //The default value of response is EKeyWasConsumed. So in some case, fep don¡¯t 
       
  3134     //do anything, but it return Consumed.
       
  3135     //This make app miss the event EEventKeyUp. 
       
  3136     //As per the logic of the function, the combine about ctrl key including:
       
  3137     //       Ctrl key + C; Ctrl key + V; Ctrl + X
       
  3138     //       Ctrl key + Shift key
       
  3139     //       Ctrl key + space
       
  3140     //       Ctrl key + Function key
       
  3141     //In above cases, it return EKeyWasConsumed, it is correct.
       
  3142     //The function for Ctrl Key as pressing the only one key ctrl at one time is to 
       
  3143     //do something if the flag EFlagQwertyShiftMode is set
       
  3144     //In this case, it return EKeyWasConsumed, it is correct.
       
  3145     //In other case, it should return EKeyWasNotConsumed
       
  3146     if( ( aKeyEvent.iScanCode == EStdKeyRightCtrl || aKeyEvent.iScanCode==EStdKeyLeftCtrl )
       
  3147         && !IsFlagSet(EFlagQwertyShiftMode) )
       
  3148         {
       
  3149         response = EKeyWasNotConsumed;
       
  3150         }
  3129 
  3151 
  3130     return response;
  3152     return response;
  3131     }
  3153     }
  3132 
  3154 
  3133 TBool CAknFepManager::HandleQwertyKeyEventL(const TKeyEvent& aKeyEvent, TKeyResponse& aResponse)
  3155 TBool CAknFepManager::HandleQwertyKeyEventL(const TKeyEvent& aKeyEvent, TKeyResponse& aResponse)
  3599                 delete iCandidatePopup;
  3621                 delete iCandidatePopup;
  3600                 iCandidatePopup = NULL;
  3622                 iCandidatePopup = NULL;
  3601                 }        
  3623                 }        
  3602             // Delete anu UI components launched by Fep.
  3624             // Delete anu UI components launched by Fep.
  3603             iUiInterface->DeleteDialogs();
  3625             iUiInterface->DeleteDialogs();
       
  3626         	}
       
  3627         
       
  3628         if ( iFepPluginManager )
       
  3629         	{
       
  3630 			// Check whether the destroyed editor is the editor that stored in fep
       
  3631 			// according to the editor state
       
  3632 			if ( aAknEdwinState == iFepPluginManager->EdwinState())
       
  3633 				{
       
  3634 				// Set the editor pointer to NULL to avoid wild pointer exist
       
  3635 				iFepPluginManager->ClearDestroyedEditorPointer();
       
  3636 				}
  3604         	}
  3637         	}
  3605     	}
  3638     	}
  3606     if ( IsFepAwareTextEditor() )
  3639     if ( IsFepAwareTextEditor() )
  3607         {
  3640         {
  3608         CAknEdwinState* editorState = EditorState();
  3641         CAknEdwinState* editorState = EditorState();
  4620             SetCcpuFlag(ECcpuStateSupressCursorMoveToEnd);
  4653             SetCcpuFlag(ECcpuStateSupressCursorMoveToEnd);
  4621 #ifdef RD_SCALABLE_UI_V2            
  4654 #ifdef RD_SCALABLE_UI_V2            
  4622      if (iFepPluginManager && 
  4655      if (iFepPluginManager && 
  4623         (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
  4656         (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
  4624          iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
  4657          iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
  4625          iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)) 
  4658          iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr || 
       
  4659          iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) )
  4626         {
  4660         {
  4627         iFepPluginManager->SetMenuState();     
  4661         iFepPluginManager->SetMenuState();     
  4628         }
  4662         }
  4629 
  4663 
  4630 #endif //RD_SCALABLE_UI_V2             
  4664 #endif //RD_SCALABLE_UI_V2             
  4804             {
  4838             {
  4805 #ifdef RD_SCALABLE_UI_V2            
  4839 #ifdef RD_SCALABLE_UI_V2            
  4806      if (iFepPluginManager && 
  4840      if (iFepPluginManager && 
  4807         (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
  4841         (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
  4808          iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
  4842          iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
  4809          iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)) 
  4843          iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr || 
       
  4844          iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) )
  4810         {
  4845         {
  4811         iFepPluginManager->SetMenuState(EFalse);     
  4846         iFepPluginManager->SetMenuState(EFalse);     
  4812         }
  4847         }
  4813 
  4848 
  4814 #endif //RD_SCALABLE_UI_V2             
  4849 #endif //RD_SCALABLE_UI_V2             
  5516             {
  5551             {
  5517             posToInsertItem = numOfMenuItems;
  5552             posToInsertItem = numOfMenuItems;
  5518             }
  5553             }
  5519         }
  5554         }
  5520     TInt inputOptionsPos = 0;
  5555     TInt inputOptionsPos = 0;
  5521     if ( aMenuPane->MenuItemExists( EEikCmdEditPaste, inputOptionsPos ) )
  5556     TInt pastePos = 0;
  5522         {
  5557     
  5523         inputOptionsPos++; 
  5558     if ( aMenuPane->MenuItemExists( EEikCmdEditPaste, pastePos ) )
  5524         }
  5559         {
       
  5560         CEikMenuPaneItem::SData& itemData = aMenuPane->GetMenuPane()->ItemDataByIndexL( pastePos );
       
  5561         if ( !( itemData.iFlags & EEikMenuItemDimmed ) )
       
  5562         	{
       
  5563             inputOptionsPos = pastePos + 1; 
       
  5564         	}
       
  5565         }
       
  5566    
  5525     //Now we have the position at which we need to insert the menu item. 
  5567     //Now we have the position at which we need to insert the menu item. 
  5526     if (
  5568     if (
  5527 #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
  5569 #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
  5528     iQwertyInputMode &&
  5570     iQwertyInputMode &&
  5529 #endif   		
  5571 #endif   		
  6381         {
  6423         {
  6382         aMenuPane->SetItemDimmed(EAknCmdEditModeAlpha, EFalse); 
  6424         aMenuPane->SetItemDimmed(EAknCmdEditModeAlpha, EFalse); 
  6383         aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue);
  6425         aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue);
  6384         aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue);
  6426         aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue);
  6385         aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue);
  6427         aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue);
  6386         if( iMode == EHangul || inputLanguage == ELangKorean)
       
  6387             {
       
  6388             TInt index;
       
  6389             if ( aMenuPane->MenuItemExists( EAknCmdEditModeKorean, index ) )
       
  6390                 {
       
  6391                 aMenuPane->SetItemDimmed(EAknCmdEditModeKorean, EFalse);
       
  6392                 }
       
  6393             }
       
  6394         }
  6428         }
  6395 
  6429 
  6396     if ( IsModePermitted(ENumber) )
  6430     if ( IsModePermitted(ENumber) )
  6397         {
  6431         {
  6398         if (( iMode != ENumber ||
  6432         if (( iMode != ENumber ||
  7543     if( iNumericResourceTimer )
  7577     if( iNumericResourceTimer )
  7544         {
  7578         {
  7545         TRAP_IGNORE( NumericResourceMultiTapTimerTimeoutL());
  7579         TRAP_IGNORE( NumericResourceMultiTapTimerTimeoutL());
  7546         }
  7580         }
  7547 #endif
  7581 #endif
       
  7582     DeactivateFnkeyPressMonitor();
  7548     }
  7583     }
  7549 
  7584 
  7550 TBool CAknFepManager::IsModePermitted(TInt aMode, TWidthChar aWidth) const
  7585 TBool CAknFepManager::IsModePermitted(TInt aMode, TWidthChar aWidth) const
  7551     {
  7586     {
  7552     if (aWidth == ENoneWidthChar)
  7587     if (aWidth == ENoneWidthChar)
  8765 // Predictive QWERTY (XT9) changes <----
  8800 // Predictive QWERTY (XT9) changes <----
  8766 #endif //RD_INTELLIGENT_TEXT_INPUT
  8801 #endif //RD_INTELLIGENT_TEXT_INPUT
  8767 void CAknFepManager::LaunchInsertWordQueryL(const TDesC& aInitialText, 
  8802 void CAknFepManager::LaunchInsertWordQueryL(const TDesC& aInitialText, 
  8768                                             TCursorSelection aTextSpanToReplace)
  8803                                             TCursorSelection aTextSpanToReplace)
  8769     {
  8804     {
  8770     TInt recourceId;
  8805     TInt recourceId = R_AVKON_INSERT_WORD_QUERY;
  8771     if(EditorState()->Flags() & EAknEditorFlagEnablePartialScreen)
       
  8772         {
       
  8773         recourceId = R_AVKON_INSERT_WORD_FS_QUERY;
       
  8774         }
       
  8775     else
       
  8776         {
       
  8777         recourceId = R_AVKON_INSERT_WORD_QUERY;
       
  8778         }
       
  8779     LaunchFepQueryDialogL(recourceId, aInitialText, aTextSpanToReplace);
  8806     LaunchFepQueryDialogL(recourceId, aInitialText, aTextSpanToReplace);
  8780     }
  8807     }
  8781 
  8808 
  8782 void CAknFepManager::LaunchEditWordQueryL()
  8809 void CAknFepManager::LaunchEditWordQueryL()
  8783     {
  8810     {
  8791 #endif //RD_INTELLIGENT_TEXT_INPUT
  8818 #endif //RD_INTELLIGENT_TEXT_INPUT
  8792     iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(newText, 
  8819     iInputCapabilities.FepAwareTextEditor()->GetEditorContentForFep(newText, 
  8793                                                                     iUncommittedText.iAnchorPos, 
  8820                                                                     iUncommittedText.iAnchorPos, 
  8794                                                                     iUncommittedText.Length());
  8821                                                                     iUncommittedText.Length());
  8795 
  8822 
  8796     TInt recourceId;
  8823     TInt recourceId = R_AVKON_INSERT_WORD_QUERY;
  8797     if(EditorState()->Flags() & EAknEditorFlagEnablePartialScreen)
       
  8798         {
       
  8799         recourceId = R_AVKON_INSERT_WORD_FS_QUERY;
       
  8800         }
       
  8801     else
       
  8802         {
       
  8803         recourceId = R_AVKON_INSERT_WORD_QUERY;
       
  8804         }
       
  8805     LaunchFepQueryDialogL(recourceId, newText, iUncommittedText);
  8824     LaunchFepQueryDialogL(recourceId, newText, iUncommittedText);
  8806     }
  8825     }
  8807 
  8826 
  8808 void CAknFepManager::LaunchFepQueryDialogL(TInt aResourceId, const TDesC& aInitialText, 
  8827 void CAknFepManager::LaunchFepQueryDialogL(TInt aResourceId, const TDesC& aInitialText, 
  8809                                            TCursorSelection aTextSpanToReplace)
  8828                                            TCursorSelection aTextSpanToReplace)
  9983 	                {
 10002 	                {
  9984 	                showCursor = EFalse;
 10003 	                showCursor = EFalse;
  9985 	                }
 10004 	                }
  9986                 else
 10005                 else
  9987                     {
 10006                     {
  9988                     if(IsKoreanInputLanguage( ) && IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))
 10007                     if(IsKoreanInputLanguage( ) && !IsQwerty() &&
       
 10008                     		IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))
  9989                         {
 10009                         {
  9990                         showCursor = EFalse;
 10010                         showCursor = EFalse;
  9991                         }
 10011                         }
  9992                     }
 10012                     }
  9993 
 10013 
 10358         return 0;
 10378         return 0;
 10359         }
 10379         }
 10360 
 10380 
 10361     //maxLength of 0 means the editor has no limit
 10381     //maxLength of 0 means the editor has no limit
 10362     TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep();
 10382     TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep();
 10363     TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep();
       
 10364     TCursorSelection currentSelection;
 10383     TCursorSelection currentSelection;
 10365     iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(currentSelection);
 10384     iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(currentSelection);
 10366 
 10385 
 10367     aUnlimit = (maxEdSize == 0 || ((iAknEditorFlags & EAknEditorFlagMTAutoOverwrite) &&
 10386     aUnlimit = (maxEdSize == 0 || ((iAknEditorFlags & EAknEditorFlagMTAutoOverwrite) &&
 10368                                    (currentSelection.iCursorPos >= 0 && 
 10387                                    (currentSelection.iCursorPos >= 0 && 
 10369                                     currentSelection.iCursorPos < maxEdSize) ));
 10388                                     currentSelection.iCursorPos < maxEdSize) ));
 10370     if(aUnlimit)
 10389     if(aUnlimit)
 10371         {
 10390         {
 10372         return 0;
 10391         return 0;
 10373         }
 10392         }
 10374     else
 10393 
 10375         {
 10394     TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep();
 10376         if( isToCountUncommittedTextLength )
 10395 
 10377             {
 10396     if( isToCountUncommittedTextLength )
 10378             return ( maxEdSize - edSize + 
 10397         {
 10379                 currentSelection.Length() + UncommittedText().Length() );
 10398         return ( maxEdSize - edSize + 
 10380             }
 10399             currentSelection.Length() + UncommittedText().Length() );
 10381         return (maxEdSize - edSize + currentSelection.Length());
 10400         }
 10382         }
 10401     
 10383     }
 10402     return (maxEdSize - edSize + currentSelection.Length());
       
 10403 
       
 10404     }
       
 10405 
 10384 #ifdef RD_INTELLIGENT_TEXT_INPUT
 10406 #ifdef RD_INTELLIGENT_TEXT_INPUT
 10385 TInt CAknFepManager::EditorFreeSpaceForAutoWordCompletion(TBool& aUnlimit, 
 10407 TInt CAknFepManager::EditorFreeSpaceForAutoWordCompletion(TBool& aUnlimit, 
 10386     TBool /* isToCountUncommittedTextLength = EFalse*/ ) const
 10408     TBool /* isToCountUncommittedTextLength = EFalse*/ ) const
 10387     {
 10409     {
 10388     aUnlimit = EFalse;
 10410     aUnlimit = EFalse;
 10655             | EAknEditorSecretAlphaInputMode)))
 10677             | EAknEditorSecretAlphaInputMode)))
 10656             {
 10678             {
 10657             // Any latin input mode is not permitted by the editor.
 10679             // Any latin input mode is not permitted by the editor.
 10658             // For compatibility permitted japanese input modes are checked and
 10680             // For compatibility permitted japanese input modes are checked and
 10659             // corresponding latin input modes are allowed.
 10681             // corresponding latin input modes are allowed.
 10660             if ( iPermittedInputModes & (EAknEditorKatakanaInputMode |
 10682             if ( iPermittedInputModes & ( EAknEditorKatakanaInputMode |
 10661                                     EAknEditorHalfWidthTextInputMode |
 10683                                     EAknEditorHalfWidthTextInputMode |
 10662                                     EAknEditorFullWidthTextInputMode |
 10684                                     EAknEditorFullWidthTextInputMode |
 10663                                     EAknEditorFullWidthKatakanaInputMode |
 10685                                     EAknEditorFullWidthKatakanaInputMode |
 10664                                     EAknEditorHiraganaKanjiInputMode |
 10686                                     EAknEditorHiraganaKanjiInputMode |
 10665                                     EAknEditorHiraganaInputMode))
 10687                                     EAknEditorHiraganaInputMode
       
 10688                                     | EAknEditorHangulInputMode ) )
 10666                 {
 10689                 {
 10667                 iPermittedInputModes |= EAknEditorTextInputMode;
 10690                 iPermittedInputModes |= EAknEditorTextInputMode;
 10668                 }
 10691                 }
 10669             if ( iPermittedInputModes & EAknEditorFullWidthNumericInputMode )
 10692             if ( iPermittedInputModes & EAknEditorFullWidthNumericInputMode )
 10670                 {
 10693                 {
 10671                 iPermittedInputModes |= EAknEditorNumericInputMode;
 10694                 iPermittedInputModes |= EAknEditorNumericInputMode;
 10672                 }
 10695                 }
 10673 
 10696 
 10674             if ( !(defaultInputMode & (EAknEditorTextInputMode | EAknEditorNumericInputMode)))
 10697             if ( !(defaultInputMode & (EAknEditorTextInputMode | EAknEditorNumericInputMode)))
 10675                 {
 10698                 {
 10676                 if (defaultInputMode & (EAknEditorKatakanaInputMode |
 10699                 if ( defaultInputMode & ( EAknEditorKatakanaInputMode |
 10677                                     EAknEditorHalfWidthTextInputMode|
 10700                                     EAknEditorHalfWidthTextInputMode|
 10678                                     EAknEditorFullWidthTextInputMode |
 10701                                     EAknEditorFullWidthTextInputMode |
 10679                                     EAknEditorFullWidthKatakanaInputMode |
 10702                                     EAknEditorFullWidthKatakanaInputMode |
 10680                                     EAknEditorHiraganaKanjiInputMode |
 10703                                     EAknEditorHiraganaKanjiInputMode |
 10681                                     EAknEditorHiraganaInputMode))
 10704                                     EAknEditorHiraganaInputMode
       
 10705                                     | EAknEditorHangulInputMode ) )
 10682                     {
 10706                     {
 10683                     defaultInputMode = EAknEditorTextInputMode;
 10707                     defaultInputMode = EAknEditorTextInputMode;
 10684                     }
 10708                     }
 10685                 else if (defaultInputMode & EAknEditorFullWidthNumericInputMode)
 10709                 else if (defaultInputMode & EAknEditorFullWidthNumericInputMode)
 10686                     {
 10710                     {
 10764             }
 10788             }
 10765         else if (editorMode == EAknEditorTextInputMode)
 10789         else if (editorMode == EAknEditorTextInputMode)
 10766             {        
 10790             {        
 10767             if (IsKoreanInputLanguage())
 10791             if (IsKoreanInputLanguage())
 10768             	{
 10792             	{
 10769                 if(iMode == EHangul || iMode == ENumber || iMode == EAknEditorNullInputMode )
 10793                 if( iMode == EAknEditorNullInputMode )
 10770             		{
 10794             		{
 10771             		SetWesternPredictive(EFalse);
 10795             		SetWesternPredictive(EFalse);
 10772          			TryChangeModeL(EHangul);
 10796          			TryChangeModeL(EHangul);
 10773             		}
 10797             		}
 10774             	else
 10798             	else
 10780             	{
 10804             	{
 10781             	//this is safe default as it is currently allowed in all FEPs
 10805             	//this is safe default as it is currently allowed in all FEPs
 10782             	TryChangeModeL(ELatin); 
 10806             	TryChangeModeL(ELatin); 
 10783             	}
 10807             	}
 10784             }
 10808             }
       
 10809         else if ( editorMode == EAknEditorHangulInputMode )
       
 10810         	{
       
 10811             // Choose EHangul as the current fep mode 
       
 10812             // if the editor mode stored in editor state is EAknEditorHangulInputMode. 
       
 10813             TryChangeModeL(EHangul);        
       
 10814         	}        
 10785         else if (!iStrokeUsedInQWERTY)
 10815         else if (!iStrokeUsedInQWERTY)
 10786         	{
 10816         	{
 10787         	if (editorMode == EStroke && sharedDataMode == ECangJie)
 10817         	if (editorMode == EStroke && sharedDataMode == ECangJie)
 10788         		{
 10818         		{
 10789         		TryChangeModeL(sharedDataMode);
 10819         		TryChangeModeL(sharedDataMode);
 11390                 {
 11420                 {
 11391                 editorMode = EAknEditorFullWidthNumericInputMode;
 11421                 editorMode = EAknEditorFullWidthNumericInputMode;
 11392                 }
 11422                 }
 11393             break;
 11423             break;
 11394     	case EHangul: 
 11424     	case EHangul: 
 11395        		editorMode = EAknEditorTextInputMode;       	
 11425        		editorMode = EAknEditorHangulInputMode;       	
 11396        		break;
 11426        		break;
 11397         default:
 11427         default:
 11398             if (IsFeatureSupportedJapanese())
 11428             if (IsFeatureSupportedJapanese())
 11399                 {
 11429                 {
 11400                 editorMode = EditorMode(aFepMode, iCharWidth);
 11430                 editorMode = EditorMode(aFepMode, iCharWidth);
 12800         editingStateIndicator != (MAknEditingStateIndicator*)iIndicator );
 12830         editingStateIndicator != (MAknEditingStateIndicator*)iIndicator );
 12801 
 12831 
 12802 #ifdef RD_SCALABLE_UI_V2
 12832 #ifdef RD_SCALABLE_UI_V2
 12803     TBool fingerItutIndicator = ( iFepPluginManager && 
 12833     TBool fingerItutIndicator = ( iFepPluginManager && 
 12804                                   iFepPluginManager->PluginInputMode() == EPluginInputModeItut );
 12834                                   iFepPluginManager->PluginInputMode() == EPluginInputModeItut );
       
 12835     // Portrait FSQ is added.
 12805     TBool fingerFSQIndicator = ( iFepPluginManager && 
 12836     TBool fingerFSQIndicator = ( iFepPluginManager && 
 12806             iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ );
 12837             ( iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
       
 12838               iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) );
 12807 #else
 12839 #else
 12808     TBool fingerItutIndicator = EFalse;
 12840     TBool fingerItutIndicator = EFalse;
 12809     TBool fingerFSQIndicator = EFalse;
 12841     TBool fingerFSQIndicator = EFalse;
 12810     
 12842     
 12811 #endif
 12843 #endif
 13041                         }
 13073                         }
 13042                     }
 13074                     }
 13043                 }
 13075                 }
 13044            // Add This condition for  Phonebook, ReTe, PF52.50_2008_wk32: 
 13076            // Add This condition for  Phonebook, ReTe, PF52.50_2008_wk32: 
 13045            // Navigation bar disappears after tapping find pane and then returning back to Names list view.
 13077            // Navigation bar disappears after tapping find pane and then returning back to Names list view.
       
 13078            // Portrait FSQ is added.
 13046            if (!(editingStateIndicator == (MAknEditingStateIndicator*)iIndicator &&
 13079            if (!(editingStateIndicator == (MAknEditingStateIndicator*)iIndicator &&
 13047                ( iFepPluginManager && ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut 
 13080                ( iFepPluginManager && 
 13048             		                    || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ) ) &&
 13081                     ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut 
       
 13082                     || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ 
       
 13083                     || iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) ) &&
 13049                IsFindPaneEditor()))
 13084                IsFindPaneEditor()))
 13050                {
 13085                {
 13051                editingStateIndicator->SetState(newState);
 13086                editingStateIndicator->SetState(newState);
 13052                }
 13087                }
 13053 
 13088 
 13827             	{
 13862             	{
 13828             	currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
 13863             	currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
 13829         	    }        
 13864         	    }        
 13830             }
 13865             }
 13831         }
 13866         }
       
 13867 
       
 13868     if ( FeatureManager::FeatureSupported(KFeatureIdKorean) )
       
 13869         {
       
 13870         // Use the special sct resource file for Korean variant.
       
 13871         if (currentEditorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG)
       
 13872             {
       
 13873             currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
       
 13874             }
       
 13875         }
       
 13876     
 13832     if (currentEditorSCTResId == EDefaultSCTResourceId) // -1 forces the default in SCT resource definition
 13877     if (currentEditorSCTResId == EDefaultSCTResourceId) // -1 forces the default in SCT resource definition
 13833         {
 13878         {
 13834         if (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly)
 13879         if (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly)
 13835             {
 13880             {
 13836             currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_LATIN_ONLY;
 13881             currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_LATIN_ONLY;
 13861             else
 13906             else
 13862                 {
 13907                 {
 13863                 if ( FeatureManager::FeatureSupported(KFeatureIdChinese) )
 13908                 if ( FeatureManager::FeatureSupported(KFeatureIdChinese) )
 13864                     {    
 13909                     {    
 13865                     currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
 13910                     currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
 13866                     }
 13911                     }                
       
 13912                 else if( FeatureManager::FeatureSupported(KFeatureIdKorean) )
       
 13913                     {    
       
 13914                     // Use the special sct resource file for Korean variant.
       
 13915                     currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
       
 13916                     }               
 13867                 else
 13917                 else
 13868                     {                    
 13918                     {                    
 13869                     currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG;
 13919                     currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG;
 13870                     }
 13920                     }
 13871                 }
 13921                 }
 15176     
 15226     
 15177     if (TryHandleCommonArrowAndBackspaceFunctionalityL(aCode, response))
 15227     if (TryHandleCommonArrowAndBackspaceFunctionalityL(aCode, response))
 15178         {
 15228         {
 15179         return response;
 15229         return response;
 15180         }
 15230         }
       
 15231     
       
 15232     // You will not understand the flowing lines, 
       
 15233     // for it is just a "hole stem" than normal logic.
       
 15234     //
       
 15235     // Let me explain: 
       
 15236     // In HWR, 4x12 keyboard is used, and predictive should be disabled for it.
       
 15237     // unfortunately, the existed codes enable predictive in some special case.
       
 15238     // when you switch from FSQ to HWR, with ITI on, you will get that.
       
 15239     // then if you press arrow key, 
       
 15240     // the code blow of "HandlePredictiveNaviEventOutsideInlineEditL" will be called.
       
 15241     // which is writen for FSQ, not HWR, that finally cause navi-event being consumed.
       
 15242     // No navigation action being performed.
       
 15243     //
       
 15244     // It is not a complete fix, just for simplicity. 
       
 15245     if (iFepPluginManager && 
       
 15246         iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
       
 15247         {
       
 15248         return EKeyWasNotConsumed;
       
 15249         }
       
 15250 
 15181     if (WesternPredictive())
 15251     if (WesternPredictive())
 15182         {
 15252         {
 15183         response = HandlePredictiveNaviEventOutsideInlineEditL(aCode, aLength);
 15253         response = HandlePredictiveNaviEventOutsideInlineEditL(aCode, aLength);
 15184         }
 15254         }
 15185 
 15255 
 15529         if (currentEditorSelection.Length())
 15599         if (currentEditorSelection.Length())
 15530             {
 15600             {
 15531             // we have text selected - set cursor to start/end of current selection
 15601             // we have text selected - set cursor to start/end of current selection
 15532             TTmDocPosSpec newPos;
 15602             TTmDocPosSpec newPos;
 15533             aResponse = NavigateFromSelectionL( currentEditorSelection, naviEvent, newPos );
 15603             aResponse = NavigateFromSelectionL( currentEditorSelection, naviEvent, newPos );
 15534             if ( aCode != EKeyBackspace && WesternPredictive() )
 15604             
       
 15605             // You will not understand the following lines, 
       
 15606             // for it is just a "hole stem" than normal logic.
       
 15607             //
       
 15608             // Let me explain: 
       
 15609             // In HWR, 4x12 keyboard is used, and predictive should be disabled for it.
       
 15610             // unfortunately, the existing codes enable predictive in some special case.
       
 15611             // when you switch from FSQ to HWR, with ITI on, you will get that.
       
 15612             // then if you select some words and press arrow key, 
       
 15613             // the if bratch of the code blow will be excuted.
       
 15614             // which is writen for FSQ, not HWR, 
       
 15615             // MoveCursorToEndOfWordL or MoveCursorToStartOfWordL is called unexpected
       
 15616             //
       
 15617             // It is not a complete fix, just for simplicity.
       
 15618             TBool isFingerHwr = ( iFepPluginManager != NULL ) && 
       
 15619 								( iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr );
       
 15620 
       
 15621             if ( aCode != EKeyBackspace && !isFingerHwr && WesternPredictive() )
 15535                 {
 15622                 {
 15536                 if (CursorInsideWord())
 15623                 if (CursorInsideWord())
 15537                     {
 15624                     {
 15538                     TBool rightToleftParagraph = IsRightToLeftParagraph(newPos);
 15625                     TBool rightToleftParagraph = IsRightToLeftParagraph(newPos);
 15539                     if ( (rightToleftParagraph && naviEvent == ELeftNaviEvent) ||
 15626                     if ( (rightToleftParagraph && naviEvent == ELeftNaviEvent) ||
 15763     {
 15850     {
 15764 #ifdef RD_SCALABLE_UI_V2
 15851 #ifdef RD_SCALABLE_UI_V2
 15765     if( iFepPluginManager->PluginInputMode() != EPluginInputModeNone &&
 15852     if( iFepPluginManager->PluginInputMode() != EPluginInputModeNone &&
 15766         iFepPluginManager->PluginInputMode() != EPluginInputModeItut
 15853         iFepPluginManager->PluginInputMode() != EPluginInputModeItut
 15767         // Add this condition for correction of dim features on FSQ
 15854         // Add this condition for correction of dim features on FSQ
 15768         && iFepPluginManager->PluginInputMode() != EPluginInputModeFSQ )
 15855         && iFepPluginManager->PluginInputMode() != EPluginInputModeFSQ
       
 15856         && iFepPluginManager->PluginInputMode() != EPluginInputModePortraitFSQ )
 15769         {
 15857         {
 15770         iFepPluginManager->LaunchPenInputLanguageSelectionL(aLaunchedByTouchWin);
 15858         iFepPluginManager->LaunchPenInputLanguageSelectionL(aLaunchedByTouchWin);
 15771         return;
 15859         return;
 15772         }
 15860         }
 15773 #endif //RD_SCALABLE_UI_V2
 15861 #endif //RD_SCALABLE_UI_V2
 17412     return result;
 17500     return result;
 17413     }
 17501     }
 17414 
 17502 
 17415 void CAknFepManager::CalculateEditorDigitType(TDigitType& aDestination)
 17503 void CAknFepManager::CalculateEditorDigitType(TDigitType& aDestination)
 17416     {
 17504     {
       
 17505     // When current range is latin number mode
       
 17506     if ( iMode == ENumber )
       
 17507         {
       
 17508         // Set the Local Digit Type flag to EDigitTypeWestern
       
 17509         aDestination = EDigitTypeWestern;
       
 17510         return;
       
 17511         }
       
 17512 
 17417     TBool ASCIIDigits = EFalse;
 17513     TBool ASCIIDigits = EFalse;
 17418     MObjectProvider* mop = iInputCapabilities.ObjectProvider();
 17514     MObjectProvider* mop = iInputCapabilities.ObjectProvider();
 17419 
 17515 
 17420     if ( mop )
 17516     if ( mop )
 17421         {
 17517         {
 18292         if (charMap == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG)
 18388         if (charMap == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG)
 18293             {
 18389             {
 18294             charMap = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
 18390             charMap = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
 18295             }
 18391             }
 18296         }
 18392         }
       
 18393     else if ( FeatureManager::FeatureSupported(KFeatureIdKorean) )
       
 18394         {     
       
 18395         // Use the special sct resource file for Korean variant.
       
 18396         if (charMap == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG)
       
 18397             {
       
 18398             charMap = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
       
 18399             }
       
 18400         }
 18297     if (!charMap)
 18401     if (!charMap)
 18298         {
 18402         {
 18299         // override numeric keymap if necessary. flag is for non standard charmaps
 18403         // override numeric keymap if necessary. flag is for non standard charmaps
 18300         TInt standardNumericCharMap = EDefaultNumericCharMapResId;
 18404         TInt standardNumericCharMap = EDefaultNumericCharMapResId;
 18301         if ((iMode == ENumber || iMode == ENativeNumber) &&
 18405         if ((iMode == ENumber || iMode == ENativeNumber) &&
 18311         
 18415         
 18312     if ( charMap == ENoCharacters && !IsAbleToLaunchSCT())
 18416     if ( charMap == ENoCharacters && !IsAbleToLaunchSCT())
 18313         {
 18417         {
 18314     	currentEditorSCTResId = charMap;
 18418     	currentEditorSCTResId = charMap;
 18315         }
 18419         }
 18316     if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == charMap && 
 18420     if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == charMap)
 18317        ( R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_LATIN_ONLY == currentEditorSCTResId || 
       
 18318          R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId || 
       
 18319          R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId) )
       
 18320         {
 18421         {
 18321         TBool isEmpty = ETrue;
 18422         TBool isEmpty = ETrue;
 18322         TRAP_IGNORE(isEmpty = GetSctLengthL(charMap));
 18423         TRAP_IGNORE(isEmpty = GetSctLengthL(charMap));
 18323         if(isEmpty)
 18424         if(isEmpty)
 18324            {
 18425            {
 18422 #ifdef RD_SCALABLE_UI_V2     
 18523 #ifdef RD_SCALABLE_UI_V2     
 18423         if( iFepFullyConstructed && !iFepPluginManager->IsGlobleNotes())
 18524         if( iFepFullyConstructed && !iFepPluginManager->IsGlobleNotes())
 18424             {
 18525             {
 18425              if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
 18526              if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
 18426                  iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
 18527                  iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
 18427                  iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
 18528                  iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr ||
       
 18529                  iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ )
       
 18530 
 18428                 {
 18531                 {
 18429                 SetStopProcessFocus(ETrue, EFalse);
 18532                 SetStopProcessFocus(ETrue, EFalse);
 18430                 iFepPluginManager->SetMenuState();            
 18533                 iFepPluginManager->SetMenuState();            
 18431                 }            
 18534                 }                      
 18432              else if (!iFepPluginManager->IsGlobleNotes())
 18535              else if (!iFepPluginManager->IsGlobleNotes())
 18433                 {
 18536                 {
 18434                 iFepPluginManager->ClosePluginInputUiL( ETrue );
 18537                 iFepPluginManager->ClosePluginInputUiL( ETrue );
 18435                 }
 18538                 }
 18436             }
 18539             }
 18482             iNotifyPlugin = EFalse;
 18585             iNotifyPlugin = EFalse;
 18483             if( iFepFullyConstructed && iFepPluginManager)
 18586             if( iFepFullyConstructed && iFepPluginManager)
 18484                 {
 18587                 {
 18485                  if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
 18588                  if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
 18486                      iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
 18589                      iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
 18487                      iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
 18590                      iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr ||
       
 18591                      iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ )
 18488                     {
 18592                     {
 18489                     SetStopProcessFocus(EFalse);
 18593                     SetStopProcessFocus(EFalse);
 18490                     }            
 18594                     }                      
 18491                  else
 18595                  else
 18492                     {
 18596                     {
 18493                     HandleChangeInFocus();
 18597                     HandleChangeInFocus();
 18494                     }
 18598                     }
 18495                 }
 18599                 }
 18892 //
 18996 //
 18893 TBool CAknFepManager::HandleSelModeArrowKeyEventL(const TKeyEvent& aKeyEvent, 
 18997 TBool CAknFepManager::HandleSelModeArrowKeyEventL(const TKeyEvent& aKeyEvent, 
 18894                                                   TEventCode aEventCode,
 18998                                                   TEventCode aEventCode,
 18895                                                   TKeyResponse& aRetCode)
 18999                                                   TKeyResponse& aRetCode)
 18896     {
 19000     {
 18897     TCursorSelection currentEditorSelection(0,0);
 19001     aRetCode = EKeyWasNotConsumed;
 18898 	if(iInputCapabilities.FepAwareTextEditor())
 19002     TBool used = EFalse;
 18899     	{
 19003 
 18900     	iInputCapabilities.FepAwareTextEditor()->
 19004     // only arrow keys are potentially handled
 18901     		GetCursorSelectionForFep(currentEditorSelection);
 19005     if ( ( aKeyEvent.iScanCode == EStdKeyLeftArrow 
 18902     	}    
 19006             || aKeyEvent.iScanCode == EStdKeyRightArrow )
 18903     
 19007             && iInputCapabilities.FepAwareTextEditor() )
 18904     TInt inputMode = PluginInputMode();
 19008         {
 18905     TBool isArabicFingerHwr = (inputMode == EPluginInputModeFingerHwr &&
 19009         TInt inputMode = PluginInputMode();
 18906 	                           GetInputLanguageFromSharedDataInterface() == ELangArabic);	
 19010         TBool isArabicFingerHwr = ( inputMode == EPluginInputModeFingerHwr &&
 18907 	if(!IsMfneEditor() && (inputMode == EPluginInputModeItut || 
 19011                 GetInputLanguageFromSharedDataInterface() == ELangArabic );
 18908 		                   inputMode == EPluginInputModeFSQ  || isArabicFingerHwr)  
 19012         TCursorSelection currentEditorSelection( 0, 0 );
 18909 		               && currentEditorSelection.Length() != 0)
 19013 
 18910     	{
 19014         iInputCapabilities.FepAwareTextEditor()->
 18911     	
 19015                 GetCursorSelectionForFep( currentEditorSelection );
 18912         if ((aKeyEvent.iScanCode == EStdKeyLeftArrow) || (aKeyEvent.iScanCode == EStdKeyRightArrow)) 
 19016         
 18913             {   
 19017         if ( !IsMfneEditor() && ( inputMode == EPluginInputModeItut ||
 18914             if (!(aKeyEvent.iModifiers & EModifierShift))
 19018                 inputMode == EPluginInputModeFSQ  || 
       
 19019                 inputMode == EPluginInputModePortraitFSQ  || 
       
 19020                 isArabicFingerHwr )
       
 19021                 && currentEditorSelection.Length() != 0 )
       
 19022             {
       
 19023             used = ETrue;
       
 19024 
       
 19025             if ( !( aKeyEvent.iModifiers & EModifierShift ) )
 18915                 {
 19026                 {
 18916                 TKeyEvent ccpuStart = aKeyEvent;
 19027                 TKeyEvent ccpuStart = aKeyEvent;
 18917                 ccpuStart.iModifiers |= EModifierShift;
 19028                 ccpuStart.iModifiers |= EModifierShift;
 18918                 ccpuStart.iModifiers |= EModifierRightShift;
 19029                 ccpuStart.iModifiers |= EModifierRightShift;
 18919                 CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, aEventCode);        
 19030                 CCoeEnv::Static()->SimulateKeyEventL( ccpuStart, aEventCode );        
 18920                 
       
 18921                 aRetCode = EKeyWasConsumed;
 19031                 aRetCode = EKeyWasConsumed;
 18922                 return ETrue;
       
 18923                 }  
       
 18924             else
       
 18925                 {
       
 18926                 aRetCode = EKeyWasNotConsumed;
       
 18927                 return ETrue;              
       
 18928                 }               
 19032                 }               
 18929             }	
 19033             }
 18930     	}
 19034         }
 18931     aRetCode = EKeyWasNotConsumed;
 19035     
 18932     return EFalse;    
 19036     return used;
 18933     }
 19037     }
 18934 
 19038 
 18935 #else // !RD_SCALABLE_UI_V2
 19039 #else // !RD_SCALABLE_UI_V2
 18936 // -----------------------------------------------------------------------------
 19040 // -----------------------------------------------------------------------------
 18937 // CAknFepManager::HandleResourceChange
 19041 // CAknFepManager::HandleResourceChange
 19895                                             	    iInputCapabilities ) ;     	        	
 19999                                             	    iInputCapabilities ) ;     	        	
 19896         	}	 
 20000         	}	 
 19897      	}
 20001      	}
 19898      else
 20002      else
 19899      	{
 20003      	{
 19900      	
 20004 		//Handle Fn key and consider long press case
       
 20005 		if( EStdKeyRightFunc == aKeyEvent.iScanCode )
       
 20006 			{
       
 20007 			switch(aEventCode)
       
 20008 				{
       
 20009 				case EEventKeyDown:
       
 20010 					ActivateFnkeyPressMonitor();
       
 20011 					break;
       
 20012 				case EEventKeyUp:
       
 20013 					{
       
 20014 					if(!iFnKeypressMonitor->IsActive())
       
 20015 					   {
       
 20016 					    //when long pressing event occurrs,
       
 20017                         //event has been already handled in HandleFnKeyPressMonitorCallback()
       
 20018 						return EKeyWasConsumed;
       
 20019 					   }
       
 20020 					//when short pressing event occurs, 
       
 20021                     //only deactive fn Key press monitor and normal event handle flow will work
       
 20022 					DeactivateFnkeyPressMonitor();
       
 20023 					}
       
 20024 					break;
       
 20025 				default:
       
 20026 					break;	
       
 20027 				}			  
       
 20028 			}
 19901      	ret = iFnKeyManager->HandleFnKeyEventL( aKeyEvent, aEventCode, 
 20029      	ret = iFnKeyManager->HandleFnKeyEventL( aKeyEvent, aEventCode, 
 19902                                             	iInputCapabilities ) ;     	
 20030                                             	iInputCapabilities ) ;     	
 19903      	}
 20031      	}
 19904      if(IsHybridAplhaEditor() && !iHybridAplphaChangedToAlphanumeric)
 20032      if(IsHybridAplhaEditor() && !iHybridAplphaChangedToAlphanumeric)
 19905          {
 20033          {
 20677 	        return ETrue;
 20805 	        return ETrue;
 20678 	        } 
 20806 	        } 
 20679     	}       
 20807     	}       
 20680     return EFalse;    
 20808     return EFalse;    
 20681     }    
 20809     }    
 20682     
 20810 void CAknFepManager::ChangeMfneAmPm()
       
 20811     {
       
 20812 	//trigger when touch at "AM" or "PM" in ICF
       
 20813     if (iInputCapabilities.FepAwareTextEditor() && IsMfneEditor() )
       
 20814         {
       
 20815         MObjectProvider* mop = iInputCapabilities.ObjectProvider();
       
 20816         if ( mop && iInputCapabilities.FepAwareTextEditor() )
       
 20817             {
       
 20818             CAknExtendedInputCapabilities* extendedInputCapabilities = 
       
 20819                 mop->MopGetObject( extendedInputCapabilities );
       
 20820             if ( extendedInputCapabilities->Capabilities() && CAknExtendedInputCapabilities::EInputEditorAmPm )// if support AM/PM toggle
       
 20821                  {
       
 20822                 extendedInputCapabilities->ReportEventL(
       
 20823                     CAknExtendedInputCapabilities::MAknEventObserver::EChangeAmPm, NULL);
       
 20824                  }
       
 20825             }
       
 20826         }
       
 20827     }
       
 20828 
 20683 //-------------------------------------------------------------------
 20829 //-------------------------------------------------------------------
 20684 
 20830 
 20685 //
 20831 //
 20686 // CChrMultiTapTimer
 20832 // CChrMultiTapTimer
 20687 //
 20833 //
 20851         }
 20997         }
 20852 #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__    
 20998 #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__    
 20853     // temporary solution for Entering key on virtual QWERTY not working 
 20999     // temporary solution for Entering key on virtual QWERTY not working 
 20854     // like enter on virtual ITU-T or on external keyboard
 21000     // like enter on virtual ITU-T or on external keyboard
 20855     if ( iOptionsMenuBar && !( iFepPluginManager && 
 21001     if ( iOptionsMenuBar && !( iFepPluginManager && 
 20856     		iFepPluginManager->CurrentPluginInputMode() == EPluginInputModeFSQ ) )
 21002         ( iFepPluginManager->CurrentPluginInputMode() == EPluginInputModeFSQ || 
       
 21003           iFepPluginManager->CurrentPluginInputMode() == EPluginInputModePortraitFSQ ) ) )
 20857         {
 21004         {
 20858         iOptionsMenuBar->StopDisplayingMenuBar();
 21005         iOptionsMenuBar->StopDisplayingMenuBar();
 20859         iOptionsMenuBar = NULL;
 21006         iOptionsMenuBar = NULL;
 20860         }
 21007         }
 20861 #endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__   
 21008 #endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__   
 21076         }
 21223         }
 21077     }
 21224     }
 21078 
 21225 
 21079 
 21226 
 21080 // ---------------------------------------------------------------------------
 21227 // ---------------------------------------------------------------------------
       
 21228 // CAknFepManager::HandleFnKeyPressMonitorCallback
       
 21229 // Handle fnkey press monitor callback
       
 21230 // static function
       
 21231 // ---------------------------------------------------------------------------
       
 21232 //
       
 21233 TInt CAknFepManager::HandleFnKeyPressMonitorCallback(TAny* aObj)
       
 21234 	{
       
 21235     TRAPD(err, static_cast<CAknFepManager*>(aObj)->HandleFnKeyPressMonitor());
       
 21236     if (err)
       
 21237         {
       
 21238         static_cast<CAknFepManager*>(aObj)->CleanUpFep();
       
 21239         return KErrDied;
       
 21240         }
       
 21241     return KErrNone;
       
 21242 	}
       
 21243 
       
 21244 // ---------------------------------------------------------------------------
       
 21245 // CAknFepManager::HandleFnKeyPressMonitor
       
 21246 // Handle fnkey press monitor callback
       
 21247 // ---------------------------------------------------------------------------
       
 21248 //
       
 21249 void CAknFepManager::HandleFnKeyPressMonitor()
       
 21250 	{
       
 21251 	DeactivateFnkeyPressMonitor();
       
 21252 	
       
 21253 	//if previous state of fn key is EFnKeyNone or EFnKeyNext, EFnKeyLock will be set;
       
 21254 	//otherwise, if previous state is EFnKeyLock, EFnKeyNone will be set.
       
 21255 	switch(iFnKeyManager->FnKeyState())
       
 21256 		{
       
 21257 		case CAknFepFnKeyManager::EFnKeyPressed:
       
 21258 		case CAknFepFnKeyManager::EFnKeyPressedAgain:
       
 21259 			 iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyLock);
       
 21260 			break;
       
 21261 		case CAknFepFnKeyManager::EFnKeyDown:
       
 21262 			 iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone);
       
 21263 			 break;
       
 21264 		default:
       
 21265 			break;
       
 21266 		}
       
 21267 	}
       
 21268 
       
 21269 // ---------------------------------------------------------------------------
       
 21270 // CAknFepManager::ActivateFnkeyPressMonitor
       
 21271 // Activate Fnkey press Monitor
       
 21272 // ---------------------------------------------------------------------------
       
 21273 //
       
 21274 void CAknFepManager::ActivateFnkeyPressMonitor()
       
 21275 	{
       
 21276 	 if( iFnKeypressMonitor )
       
 21277 		 {
       
 21278 		  iFnKeypressMonitor->Start(KFnKeyLongPressTimeout, KFnKeyLongPressTimeout, 
       
 21279 							   TCallBack(HandleFnKeyPressMonitorCallback, this));
       
 21280 		 }
       
 21281 	}
       
 21282 
       
 21283 // ---------------------------------------------------------------------------
       
 21284 // CAknFepManager::DeactivateFnkeyPressMonitor
       
 21285 // Deactivate Fnkey press Monitor
       
 21286 // ---------------------------------------------------------------------------
       
 21287 //
       
 21288 void CAknFepManager::DeactivateFnkeyPressMonitor()
       
 21289 	{
       
 21290 	 if( iFnKeypressMonitor && iFnKeypressMonitor->IsActive())
       
 21291 		 {
       
 21292 		   iFnKeypressMonitor->Cancel();
       
 21293 		 }
       
 21294 	}
       
 21295 
       
 21296 // ---------------------------------------------------------------------------
 21081 // LOCAL METHODS
 21297 // LOCAL METHODS
 21082 // 
 21298 // 
 21083 // ---------------------------------------------------------------------------
 21299 // ---------------------------------------------------------------------------
 21084 //     
 21300 //     
 21085 const TInt KVietKeyMarker = 0xffff;
 21301 const TInt KVietKeyMarker = 0xffff;