fep/aknfep/src/AknFepManager.cpp
branchRCL_3
changeset 56 8152b1f1763a
parent 50 5a1685599b76
--- a/fep/aknfep/src/AknFepManager.cpp	Wed Sep 15 12:34:44 2010 +0300
+++ b/fep/aknfep/src/AknFepManager.cpp	Wed Oct 13 14:55:58 2010 +0300
@@ -239,6 +239,9 @@
 // The passwd timeout is same as defined on CEikSecretEditor.
 const TInt KSyncPasswdTimeout = 1000000;
 
+// The offset to show underline
+const TInt KUnderlineHeight = 4;
+
 #ifdef RD_SCALABLE_UI_V2
 TUid AppUidFromWndGroupId(TInt aWndGrpId);
 extern TUid GetCurAppUid();
@@ -1692,34 +1695,13 @@
                     //This condition is added for Hindi language in case of multitapping of EKey1 to get 
                     //a numeral value "1" because of a clasical case of Halant and ZWS getting added 
                     //before numeral 1 which may affect incase of limited space in editor   
-                    
-
-
-
-
-                    // Is the language Indic?
-                    TBool isIndicLanguage = TAknFepUiIndicInputManager::IsIndicLangauge(
-                                               TLanguage(iLanguageCapabilities.iInputLanguageCode)); 
-
-                    // Is the state in Multitap of the Inline Text   
-                    TBool  isFlagInsideMultitapInlineEditingTransaction = 
-                                                 IsFlagSet(EFlagInsideMultitapInlineEditingTransaction);
-
-                    // Is the state of the text inline when long pressing key event occurs
-                    TBool  isInlineEditorTransactionLongKeyPress = IsFlagSet(EFlagInsideInlineEditingTransaction)
-                                                               && ( aLength == ELongKeyPress );
-
-                    // Is the state of the text inline when current mode is Koeran.
-                    TBool isInlineEditorTranscationKoreanMode = IsFlagSet(EFlagInsideInlineEditingTransaction)
-                                                                && ( iMode == EHangul ); 
-
-                    // Don't check the free space of the editor 
-                    // when current mode is Hangul and current editor state is inline state.
-                    if ( EditorHasFreeSpace()
-                        || (!WesternPredictive() && !EditorHasFreeSpace() && isIndicLanguage )
-                        || isFlagInsideMultitapInlineEditingTransaction
-                        || isInlineEditorTransactionLongKeyPress  
-                        || isInlineEditorTranscationKoreanMode )
+                        
+                    if (( EditorHasFreeSpace()
+                        || (!WesternPredictive() && !EditorHasFreeSpace() && 
+                           (TAknFepUiIndicInputManager::IsIndicLangauge(
+                            TLanguage(iLanguageCapabilities.iInputLanguageCode)))) 
+                        || IsFlagSet(EFlagInsideMultitapInlineEditingTransaction)
+                        || (IsFlagSet(EFlagInsideInlineEditingTransaction) && aLength == ELongKeyPress)))
                         {
                         ClearFlag(EFlagEditorFull);
 
@@ -3150,7 +3132,7 @@
     	{
     	FepUI()->HandleKeyL(EKeyLeftCtrl, EShortKeyPress);    
    	}*/
-
+    
     //The default value of response is EKeyWasConsumed. So in some case, fep don¡¯t 
     //do anything, but it return Consumed.
     //This make app miss the event EEventKeyUp. 
@@ -3561,6 +3543,32 @@
 	HandleChangeInFocus();
 	}
 
+// -----------------------------------------------------------------------------
+// CAknFepManager::InitRectForSplitCandL
+// Returns initial rectangle used for the top-left point of split candidate.
+// -----------------------------------------------------------------------------
+//
+TRect CAknFepManager::InitRectForSplitCandL()
+    {
+    //  Popup Position was not right for RTL
+    TInt documentOffset = iLanguageCapabilities.iRightToLeftLanguage ?
+                            0 : iPtiEngine->CurrentWord().Length();
+    
+    // Determine the place where to spawn the candidate popup.
+    TPoint  inlineEditorTl;
+    TPoint  inlineEditorBr;
+    TInt    height;
+    TInt    ascent;
+    GetScreenCoordinatesL( inlineEditorTl, height, ascent, documentOffset );
+    GetScreenCoordinatesL( inlineEditorBr, height, ascent );
+        
+    // move 4 pixeles down to show underline when pops up candidate.
+    inlineEditorTl.iY += KUnderlineHeight;
+    inlineEditorBr.iY += KUnderlineHeight;
+    
+    return TRect( inlineEditorTl, inlineEditorBr );
+    }
+
 void CAknFepManager::HandleDestructionOfFocusedItem()
     {
     if (iInputCapabilities.FepAwareTextEditor())
@@ -3918,21 +3926,27 @@
             if( IsFlagSet( EFlagInsideInlineEditingTransaction ) )
                 {
                 if (IsFeatureSupportedJapanese())
-			        {
-			        TryCloseUiL();
-			        }
-			    else
-			        {
-#ifdef RD_INTELLIGENT_TEXT_INPUT			        
-			        iPtiEngine->CommitCurrentWord();
-					CommitInlineEditL();
-			        TryCloseUiL();
+                    {
+                    TryCloseUiL();
+                    }
+                else
+                    {
+#ifdef RD_INTELLIGENT_TEXT_INPUT                    
+                    iPtiEngine->CommitCurrentWord();
+                    CommitInlineEditL();
+                    TryCloseUiL();
 
 #else
-					CommitInlineEditL();
-#endif			        
-			        }
-                }
+                    CommitInlineEditL();
+#endif                    
+                    }
+                }
+            
+            // The flag should be removed when touch input is not launched. 
+            if ( IsExtendedFlagSet( EExtendedFlagPointInNoMatchEditor ) )
+            	{
+                ClearExtendedFlag( EExtendedFlagPointInNoMatchEditor );
+            	}
             break;      
         case CAknExtendedInputCapabilities::MAknEventObserver::EControlContentUpdatedInternally:
             SendEventsToPluginManL( EPluginSyncFepAwareText, EPluginSyncAll );
@@ -3942,6 +3956,8 @@
             // to be displayed.        
             LaunchStylusCcpuMenuL(iClickPoint);
             break;
+        default:
+            break;
         }    
     }
     
@@ -4272,9 +4288,7 @@
         // Edit mode menu commands
         //The soft CBA event from touch screen. 
         case EAknSoftkeyCancel:
-      //  case (TUint16)EAknSoftkeyCancel:
         case EAknSoftkeySelect:
-     //   case (TUint16)EAknSoftkeySelect:
         currentFepUI = FepUI();
         if (currentFepUI)
             currentFepUI->HandleCommandL( aCommandId );
@@ -5599,29 +5613,6 @@
         AddInputLanguageItemL(aMenuPane, posToInsertItem);
         }
     }
-
-// -----------------------------------------------------------------------------
-// To check if the menu with the CascadeId exist in menupane
-// -----------------------------------------------------------------------------
-TBool CAknFepManager::MenuItemExistL( CAknFepUiInterfaceMenuPane* aMenuPane, 
-									 TInt aCascadeId, TInt &aPosition )
-    {
-    TInt numOfMenuItems = aMenuPane->NumberOfItemsInPane();
-    CEikMenuPane* menuPane = aMenuPane->GetMenuPane();
-
-    TInt index;
-    for( index = 0; index < numOfMenuItems ; ++index )
-        {
-        CEikMenuPaneItem::SData& itemData = menuPane->ItemDataByIndexL( index );
-        if( itemData.iCascadeId == aCascadeId )
-            {
-            aPosition = index;
-            return ETrue;
-            }
-        }
-    return EFalse;
-    }
-
 #endif // RD_INTELLIGENT_TEXT_INPUT
 
 
@@ -5658,10 +5649,7 @@
     if (iRememberLength > 0 || (iEditorCcpuStatus & ECcpuStatusFlagCanPaste))
         {
 		if (aMenuPane->MenuItemExists(EAknCmdEditItemPlaceHolder, index) ||
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-            MenuItemExistL( aMenuPane, R_AKNFEP_PRED_INPUT_OPTIONS_SUBMENU, index ) ||
-#endif //RD_INTELLIGENT_TEXT_INPUT 
-            aMenuPane->MenuItemExists(EAknCmdInputLanguage, index) ||
+				aMenuPane->MenuItemExists(EAknCmdInputLanguage, index) ||
 		    aMenuPane->MenuItemExists(EAknCmdHelp, index) || 
             aMenuPane->MenuItemExists(EAknCmdExit, index))  
             {
@@ -6473,6 +6461,14 @@
         aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue);
         aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue);
         aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue);
+        if( iMode == EHangul || inputLanguage == ELangKorean)
+            {
+            TInt index;
+            if ( aMenuPane->MenuItemExists( EAknCmdEditModeKorean, index ) )
+                {
+                aMenuPane->SetItemDimmed(EAknCmdEditModeKorean, EFalse);
+                }
+            }
         }
 
     if ( IsModePermitted(ENumber) )
@@ -7081,6 +7077,38 @@
 
 void CAknFepManager::HandlePointerEventInInlineTextL(TPointerEvent::TType /*aType*/, TUint /*aModifiers*/, TInt /*aPositionInInlineText*/)
     {
+    if( iFepPluginManager && iLangMan && iLangMan->IsSplitView() )
+        {
+        switch ( iFepPluginManager->PluginInputMode() )
+            {
+            case EPluginInputModeFSQ:
+            //case EPluginInputModePortraitFSQ:
+                {
+                if ( iExactWordPopupContent )
+                	{
+                    iExactWordPopupContent->HidePopUp();
+                	}
+                
+                iFepPluginManager->HandleServerEventL( ESignalShowCandidate );
+                }
+                break;
+            case EPluginInputModeItut:
+                {
+                if( IsExtendedFlagSet( EExtendedFlagPointInNoMatchEditor ) )
+                    {
+                    ClearExtendedFlag( EExtendedFlagPointInNoMatchEditor );
+                    iFepPluginManager->HandleServerEventL( ESignalEnterSpellMode );
+                    }
+                else
+                    {
+                    iFepPluginManager->EnterMatchSelectionState();
+                    }
+                }
+                break;
+            default:
+                break;
+            }
+        }
     }
 
 void CAknFepManager::GetFormatOfFepInlineText(TCharFormat& aFormat, 
@@ -10052,8 +10080,7 @@
 	                }
                 else
                     {
-                    if(IsKoreanInputLanguage( ) && !IsQwerty() &&
-                    		IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))
+                    if(IsKoreanInputLanguage( ) && IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))
                         {
                         showCursor = EFalse;
                         }
@@ -10727,13 +10754,12 @@
             // Any latin input mode is not permitted by the editor.
             // For compatibility permitted japanese input modes are checked and
             // corresponding latin input modes are allowed.
-            if ( iPermittedInputModes & ( EAknEditorKatakanaInputMode |
+            if ( iPermittedInputModes & (EAknEditorKatakanaInputMode |
                                     EAknEditorHalfWidthTextInputMode |
                                     EAknEditorFullWidthTextInputMode |
                                     EAknEditorFullWidthKatakanaInputMode |
                                     EAknEditorHiraganaKanjiInputMode |
-                                    EAknEditorHiraganaInputMode
-                                    | EAknEditorHangulInputMode ) )
+                                    EAknEditorHiraganaInputMode))
                 {
                 iPermittedInputModes |= EAknEditorTextInputMode;
                 }
@@ -10744,13 +10770,12 @@
 
             if ( !(defaultInputMode & (EAknEditorTextInputMode | EAknEditorNumericInputMode)))
                 {
-                if ( defaultInputMode & ( EAknEditorKatakanaInputMode |
+                if (defaultInputMode & (EAknEditorKatakanaInputMode |
                                     EAknEditorHalfWidthTextInputMode|
                                     EAknEditorFullWidthTextInputMode |
                                     EAknEditorFullWidthKatakanaInputMode |
                                     EAknEditorHiraganaKanjiInputMode |
-                                    EAknEditorHiraganaInputMode
-                                    | EAknEditorHangulInputMode ) )
+                                    EAknEditorHiraganaInputMode))
                     {
                     defaultInputMode = EAknEditorTextInputMode;
                     }
@@ -10838,7 +10863,7 @@
             {        
             if (IsKoreanInputLanguage())
             	{
-                if( iMode == EAknEditorNullInputMode )
+                if(iMode == EHangul || iMode == ENumber || iMode == EAknEditorNullInputMode )
             		{
             		SetWesternPredictive(EFalse);
          			TryChangeModeL(EHangul);
@@ -10854,12 +10879,6 @@
             	TryChangeModeL(ELatin); 
             	}
             }
-        else if ( editorMode == EAknEditorHangulInputMode )
-        	{
-            // Choose EHangul as the current fep mode 
-            // if the editor mode stored in editor state is EAknEditorHangulInputMode. 
-            TryChangeModeL(EHangul);        
-        	}        
         else if (!iStrokeUsedInQWERTY)
         	{
         	if (editorMode == EStroke && sharedDataMode == ECangJie)
@@ -11470,7 +11489,7 @@
                 }
             break;
     	case EHangul: 
-       		editorMode = EAknEditorHangulInputMode;       	
+       		editorMode = EAknEditorTextInputMode;       	
        		break;
         default:
             if (IsFeatureSupportedJapanese())
@@ -12343,30 +12362,31 @@
 	        }
   
         if (!iLanguageCapabilities.iLocalInputLanguageInUse)
-            {
-            switch (iSharedDataInterface->InputTextLanguage())
-                {
-                case ELangPrcChinese:
-                    {
-                    iSharedDataInterface->SetInputMode(EPinyin);
-                    SetFlag(EFlagNewSharedDataInputMode);
-                    break;
-                    }
+        	{
+        	switch (iSharedDataInterface->InputTextLanguage())
+            	{
+            	case ELangPrcChinese:
+            		{
+            		iSharedDataInterface->SetInputMode(EPinyin);
+            		SetFlag(EFlagNewSharedDataInputMode);
+            		break;            		
+            		}
             	case ELangTaiwanChinese:
-                    {
-                    iSharedDataInterface->SetInputMode(EZhuyin);
-                    SetFlag(EFlagNewSharedDataInputMode);
-                    break;
-                    }
-                case ELangHongKongChinese:
-                    {
-                    iSharedDataInterface->SetInputMode(EStroke);
-                    SetFlag(EFlagNewSharedDataInputMode);
-                    break;
-                    }
-                default:
-                    break;
-                }
+            		{
+            	    iSharedDataInterface->SetInputMode(EZhuyin);
+            	    SetFlag(EFlagNewSharedDataInputMode);
+            	    break;
+            		}
+            	case ELangHongKongChinese:
+            		{
+            	    iSharedDataInterface->SetInputMode(EStroke);
+            	    iSharedDataInterface->SetCangJieMode(ECangJieNormal);
+            	    SetFlag(EFlagNewSharedDataInputMode);
+            	    break;
+            		}
+            	default:
+            		break;
+            	}
             }
 
     	SetHashKeyStyle();
@@ -13911,16 +13931,6 @@
         	    }        
             }
         }
-
-    if ( FeatureManager::FeatureSupported(KFeatureIdKorean) )
-        {
-        // Use the special sct resource file for Korean variant.
-        if (currentEditorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG)
-            {
-            currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
-            }
-        }
-    
     if (currentEditorSCTResId == EDefaultSCTResourceId) // -1 forces the default in SCT resource definition
         {
         if (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly)
@@ -13955,12 +13965,7 @@
                 if ( FeatureManager::FeatureSupported(KFeatureIdChinese) )
                     {    
                     currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
-                    }                
-                else if( FeatureManager::FeatureSupported(KFeatureIdKorean) )
-                    {    
-                    // Use the special sct resource file for Korean variant.
-                    currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
-                    }               
+                    }
                 else
                     {                    
                     currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG;
@@ -15275,26 +15280,6 @@
         {
         return response;
         }
-    
-    // You will not understand the flowing lines, 
-    // for it is just a "hole stem" than normal logic.
-    //
-    // Let me explain: 
-    // In HWR, 4x12 keyboard is used, and predictive should be disabled for it.
-    // unfortunately, the existed codes enable predictive in some special case.
-    // when you switch from FSQ to HWR, with ITI on, you will get that.
-    // then if you press arrow key, 
-    // the code blow of "HandlePredictiveNaviEventOutsideInlineEditL" will be called.
-    // which is writen for FSQ, not HWR, that finally cause navi-event being consumed.
-    // No navigation action being performed.
-    //
-    // It is not a complete fix, just for simplicity. 
-    if (iFepPluginManager && 
-        iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
-        {
-        return EKeyWasNotConsumed;
-        }
-
     if (WesternPredictive())
         {
         response = HandlePredictiveNaviEventOutsideInlineEditL(aCode, aLength);
@@ -15648,24 +15633,7 @@
             // we have text selected - set cursor to start/end of current selection
             TTmDocPosSpec newPos;
             aResponse = NavigateFromSelectionL( currentEditorSelection, naviEvent, newPos );
-            
-            // You will not understand the following lines, 
-            // for it is just a "hole stem" than normal logic.
-            //
-            // Let me explain: 
-            // In HWR, 4x12 keyboard is used, and predictive should be disabled for it.
-            // unfortunately, the existing codes enable predictive in some special case.
-            // when you switch from FSQ to HWR, with ITI on, you will get that.
-            // then if you select some words and press arrow key, 
-            // the if bratch of the code blow will be excuted.
-            // which is writen for FSQ, not HWR, 
-            // MoveCursorToEndOfWordL or MoveCursorToStartOfWordL is called unexpected
-            //
-            // It is not a complete fix, just for simplicity.
-            TBool isFingerHwr = ( iFepPluginManager != NULL ) && 
-								( iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr );
-
-            if ( aCode != EKeyBackspace && !isFingerHwr && WesternPredictive() )
+            if ( aCode != EKeyBackspace && WesternPredictive() )
                 {
                 if (CursorInsideWord())
                     {
@@ -18437,14 +18405,6 @@
             charMap = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
             }
         }
-    else if ( FeatureManager::FeatureSupported(KFeatureIdKorean) )
-        {     
-        // Use the special sct resource file for Korean variant.
-        if (charMap == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG)
-            {
-            charMap = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
-            }
-        }
     if (!charMap)
         {
         // override numeric keymap if necessary. flag is for non standard charmaps
@@ -18464,7 +18424,10 @@
         {
     	currentEditorSCTResId = charMap;
         }
-    if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == charMap)
+    if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == charMap && 
+       ( R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_LATIN_ONLY == currentEditorSCTResId || 
+         R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId || 
+         R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId) )
         {
         TBool isEmpty = ETrue;
         TRAP_IGNORE(isEmpty = GetSctLengthL(charMap));
@@ -18578,7 +18541,7 @@
                 {
                 SetStopProcessFocus(ETrue, EFalse);
                 iFepPluginManager->SetMenuState();            
-                }                      
+                }            
              else if (!iFepPluginManager->IsGlobleNotes())
                 {
                 iFepPluginManager->ClosePluginInputUiL( ETrue );
@@ -18636,9 +18599,10 @@
                      iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
                      iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr ||
                      iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ )
+
                     {
                     SetStopProcessFocus(EFalse);
-                    }                      
+                    }            
                  else
                     {
                     HandleChangeInFocus();
@@ -19016,9 +18980,11 @@
     }   
 void CAknFepManager::HandlePointerEventL(const TPointerEvent& aPointerEvent)
     {
-    if (IsFlagSet(CAknFepManager::EFlagNoMatches))
-        {
-        ClearFlag(CAknFepManager::EFlagNoMatches); 
+    if ( IsFlagSet( CAknFepManager::EFlagNoMatches ) )
+        {
+	    // Set this flag to launch spell mode on split itut 
+        SetExtendedFlag( EExtendedFlagPointInNoMatchEditor );
+		ClearFlag(CAknFepManager::EFlagNoMatches); 
         }
    
     if(aPointerEvent.iType == TPointerEvent::EDrag)
@@ -20870,7 +20836,7 @@
     	}       
     return EFalse;    
     }    
-void CAknFepManager::ChangeMfneAmPmL()
+void CAknFepManager::ChangeMfneAmPm()
     {
 	//trigger when touch at "AM" or "PM" in ICF
     if (iInputCapabilities.FepAwareTextEditor() && IsMfneEditor() )
@@ -21042,47 +21008,6 @@
 	TRAP_IGNORE( SendEventsToPluginManL( EPluginHideTooltip ));
 	}
 
-//========================================================================
-//
-// This function judge whether the texts inputted exceed 
-// the max length of the editor. 
-// 
-//========================================================================
-TBool CAknFepManager::IsTextExceedLeghthEditor( TInt aNewInlineTextLenght )
-	{
-    
-    // Get the length of the newest text that contains uncommitted texts 
-	TInt curPos = iUncommittedText.iAnchorPos + aNewInlineTextLenght;
-    
-    // Get the length of the text that is newly increased in uncommitted texts.
-	TInt deltaCur = curPos - iUncommittedText.iCursorPos;
-	
-    // Get the max length of the editor
-	TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep();
-
-    // Get the length of current the texts in the editor. The texts contain committed and uncomitted.    
-	TInt docLength = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep();
-	
-      // DeltaCur is greater than zero.
-      if((maxEdSize > 0) && ( deltaCur > 0 ) 
-							&& (( docLength + deltaCur) > maxEdSize ) )
-         {
-         return ETrue;
-         }
-      // DeltaCur is negative. For example uncommitted texts contain candidate words.
-      else if ( (maxEdSize > 0) && (curPos > maxEdSize) )
-          {
-          return ETrue;
-          }
-        else
-          {
-
-          // Not exceeding the max length of editor
-          return EFalse;
-          }
-	}
-
-
 TBool CAknFepManager::IsExactWordPopUpShown()
 	{
 #ifdef RD_SCALABLE_UI_V2 
@@ -21351,12 +21276,12 @@
 // ---------------------------------------------------------------------------
 //
 void CAknFepManager::HandleFnKeyPressMonitor()
-	{	
+	{
 	 DeactivateFnkeyPressMonitor();
 	 if (IsExtendedFlagSet ( EExtendedFlagFnKeyNeedLockMode ) )
 		 {
 	      iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyLock);
-		 }
+		}
 	}
 
 // ---------------------------------------------------------------------------
@@ -21371,8 +21296,7 @@
 	      if ( iFnKeypressMonitor->IsActive() )
 	    	  {
 	           iFnKeypressMonitor->Cancel();
-	    	  }
-	      
+	    	  }	      
 		  iFnKeypressMonitor->Start(KFnKeyLongPressTimeout, KFnKeyLongPressTimeout, 
 							   TCallBack(HandleFnKeyPressMonitorCallback, this));
 		 }