Revision: 201025 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 15 Jul 2010 19:01:13 +0300
branchRCL_3
changeset 18 b1ea1642412e
parent 16 857bebeecec0
child 19 ac7e4d1d9209
Revision: 201025 Kit: 2010127
fep/aknfep/help/group/bld.inf
fep/aknfep/inc/AknFepManager.h
fep/aknfep/inc/AknFepManagerUIInterface.h
fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagerbase.cpp
fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp
fep/aknfep/peninputplugins/peninputimepluginitut/src/pluginfepmanagerbase.cpp
fep/aknfep/src/AknFepManager.cpp
fep/aknfep/src/AknFepPluginManager.cpp
fep/aknfep/src/AknFepUiManagerBase.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp
textinput/peninputarc/src/peninputserverapp/peninputserver.cpp
textinput/peninputcommonctrls/loc/peninputcommonctrls.loc
textinput/peninputcommonctrls/src/peninputbuttons/peninputbutton.cpp
textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h
textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp
textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h
textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp
textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp
textinput/peninputsplititut/src/peninputsplititutwesternuistatespelling.cpp
textinput/peninputsplititut/src/peninputsplititutwindow.cpp
textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h
textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp
--- a/fep/aknfep/help/group/bld.inf	Mon Jun 21 16:02:35 2010 +0300
+++ b/fep/aknfep/help/group/bld.inf	Thu Jul 15 19:01:13 2010 +0300
@@ -2,18 +2,16 @@
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
-* under the terms of the License "Symbian Foundation License v1.0"
+* under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
-* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
-* Nokia Corporation - Initial contribution
-* 
+* Nokia Corporation - initial contribution.
+*
 * Contributors:
 * 
-* 
 * Description:
-* Export help related files.
 *
 */
 
--- a/fep/aknfep/inc/AknFepManager.h	Mon Jun 21 16:02:35 2010 +0300
+++ b/fep/aknfep/inc/AknFepManager.h	Thu Jul 15 19:01:13 2010 +0300
@@ -902,6 +902,13 @@
 		TBool IsSpecialNumericEditor();
 		
 	void TryPopExactWordInICFL();
+    
+    /**
+     * checks whether the current editor is a Java Secret editor.
+     * return value: Etrue when it is a Java Secret editor.
+     * Efalse when it is not.
+     */
+    TBool IsJavaSecretEditor();    
 	
 	void HandleChangeInFocusForSettingFep();
 
@@ -2609,6 +2616,14 @@
 
 private:
     void ConvertCharToKey(TChar aIn, TUint16& aKey) const;
+    
+    /** 
+     * Update editor state' flag 
+     * @since Symbian^3 
+     * @param aFlag  editor state flag
+     * @param aAdd   adding or removing
+     */
+    void UpdateEditorStateFlags( TInt aFlag, TBool aAdd = ETrue ) const;
 
 private:
     // Data owned by this class
--- a/fep/aknfep/inc/AknFepManagerUIInterface.h	Mon Jun 21 16:02:35 2010 +0300
+++ b/fep/aknfep/inc/AknFepManagerUIInterface.h	Thu Jul 15 19:01:13 2010 +0300
@@ -431,6 +431,13 @@
      */
     virtual TBool IsSupportsSecretText() const = 0;
     
+    /**
+     * checks whether the current editor is a Java Secret editor.
+     * return value: Etrue when it is a Java Secret editor.
+     * Efalse when it is not.
+     */
+    virtual TBool IsJavaSecretEditor() = 0;
+    
 
 	/**
 	* Returns current input mode.
--- a/fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagerbase.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/fep/aknfep/peninputplugins/peninputimeplugincn/src/pluginfepmanagerbase.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -324,7 +324,10 @@
 //
 void CPluginFepManagerBase::CloseUI()
     {
-    iPenInputServer->ActivateLayout( EFalse ); 
+    if (iPenInputServer->IsVisible())
+	    {
+    	iPenInputServer->ActivateLayout( EFalse ); 
+		}
     }
 
 // -----------------------------------------------------------------------------
--- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -355,7 +355,10 @@
 //
 void CPluginFepManagerBase::CloseUI()
     {
-    iPenInputServer->ActivateLayout( EFalse );  
+    if (iPenInputServer->IsVisible())
+	    {
+    	iPenInputServer->ActivateLayout( EFalse );  
+		}
     }
 
 // -----------------------------------------------------------------------------
--- a/fep/aknfep/peninputplugins/peninputimepluginitut/src/pluginfepmanagerbase.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/fep/aknfep/peninputplugins/peninputimepluginitut/src/pluginfepmanagerbase.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -426,7 +426,10 @@
 //
 void CPluginFepManagerBase::CloseUI()
     {
-    iPenInputServer->ActivateLayout( EFalse ); 
+    if (iPenInputServer->IsVisible())
+	    {
+    	iPenInputServer->ActivateLayout( EFalse ); 
+		}
     }
 
 // -----------------------------------------------------------------------------
--- 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
--- a/fep/aknfep/src/AknFepPluginManager.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/fep/aknfep/src/AknFepPluginManager.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -288,8 +288,6 @@
     iAvkonRepository = CRepository::NewL( KCRUidAvkon ); 
     
     iConnectAo = new (ELeave)CConnectAo(this);
-    
-    RProperty::Define( KPSUidAknFep, KAknFepSettingDialogState, RProperty::EInt );
     }
 
 // -----------------------------------------------------------------------------
@@ -1093,9 +1091,10 @@
                 }
             break;
 		case EPluginEnablePriorityChangeOnOriChange:
-            if(iCurrentPluginInputFepUI)
+            if( iCurrentPluginInputFepUI && PluginInputMode() != EPluginInputModeNone )
                 {
-                if(ConnectServer())
+				// Don't handle this command if pen ui is not opened.
+                if( iPenInputSvrConnected )
                     {
                     iPenInputServer.EnablePriorityChangeOnOriChange(TBool(aEventData));  
                     }
@@ -4219,9 +4218,10 @@
     TInt enalbeInStartup = 0;
     RProperty::Get(KPSUidUikon, KUikGlobalNotesAllowed, enalbeInStartup);
     ebable = enalbeInStartup;
-    
-    if (iInGlobleNoteEditor || 
-        (iPenInputMenu && iPenInputMenu->IsShowing()))
+
+    TInt priority = CCoeEnv::Static()->RootWin().OrdinalPriority();
+    if (iInGlobleNoteEditor || ECoeWinPriorityNormal < priority ||
+            (iPenInputMenu && iPenInputMenu->IsShowing()))
         {
         ebable = EFalse;    
         }
@@ -5417,8 +5417,8 @@
 	iInGlobleNoteEditor = IsGlobalNotesApp(curAppId) ? ETrue:EFalse;
 	if (iCurrentPluginInputFepUI)
 		{
-		iCurrentPluginInputFepUI->HandleCommandL( 
-		    ECmdPenInputEnableSettingBtn, !iInGlobleNoteEditor);
+        iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputEnableSettingBtn, 
+	                                                  IsEnableSettingBtn() );
 		}
 		
     //if it's in global notes, show it.
--- a/fep/aknfep/src/AknFepUiManagerBase.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/fep/aknfep/src/AknFepUiManagerBase.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -969,7 +969,10 @@
             TPtrC curWord = iPtiEngine->CurrentWord();
             iFepMan->UpdateInlineEditL( curWord, curWord.Length() );
             }
-		if ( iFepMan->IsSupportsSecretText() )
+        //a temporary solution to fix the error: long key press will input q1 instead of 1.
+        //if the secret editor is a java secret editor, then do not simulate the key EF20 like avkon secret editor
+        //&& !( iFepMan->IsJavaSecretEditor() ) was added    
+		if ( ( iFepMan->IsSupportsSecretText() ) && !( iFepMan->IsJavaSecretEditor() ) )
         	{
             // Fep communicates with secret text editors using simulated events.
             iFepMan->SimulateKeyEventL(EKeyF20);
@@ -982,7 +985,10 @@
         // The previous key entered character(s) directly to the editor
         for ( TInt i=0 ; i<iEditorTextLenDeltaWithLastKey ; ++i )
             {
-            if ( iFepMan->IsSupportsSecretText() )
+            //a temporary solution to fix the error: long key press will input q1 instead of 1.
+            //if the secret editor is a java secret editor, then do not simulate the key EF20 like avkon secret editor
+            //&& !( iFepMan->IsJavaSecretEditor() ) was added
+            if ( ( iFepMan->IsSupportsSecretText() ) && !( iFepMan->IsJavaSecretEditor() ) )
                 {
                 // Fep communicates with secret text editors using simulated events.
                 iFepMan->SimulateKeyEventL(EKeyF20);
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -629,7 +629,7 @@
 		if( aRect != Rect())
 			{
 			CFepUiBaseCtrl::SetRect( aRect );
-			ResizeDeviceL();
+			TRAP_IGNORE(ResizeDeviceL());
 			}                   
 		}
     }
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -635,7 +635,7 @@
     iRect = aRect;
     if(iBitmap && iBitmap->SizeInPixels() != aRect.Size())
         {            
-        ResizeBackupDeviceL(aRect.Size());
+        TRAP_IGNORE(ResizeBackupDeviceL(aRect.Size()));
         }
     }
 //  End of File  
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -535,7 +535,7 @@
             TRAP_IGNORE(iBubbleCtrl = CBubbleCtrl::NewL(TRect(0,0,0,0),UiLayout(),-0xFFFF));
             if(iBubbleCtrl && UiLayout()->NotDrawToLayoutDevice())
                 {
-                iBubbleCtrl->CreateBmpDevL();
+                TRAP_IGNORE(iBubbleCtrl->CreateBmpDevL());
                 }
             iBubbleSize = TSize(KDefaultBubbleSize,KDefaultBubbleSize);
             }
--- a/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -431,21 +431,41 @@
     TBool notDraw = EFalse;
     
     if(iUiLayout)
+        {
+        iUiLayout->HandleCommand( ECmdPeninputDisableLayoutDrawing, 
+                                 (unsigned char*)&notDraw );  
+        }
+
+    // [[[ temporary solution for Virtual keyboard becomes corrupted after several rotations
+    if(!iUiLayout)
     	{
-		iUiLayout->HandleCommand( ECmdPeninputDisableLayoutDrawing, 
-								 (unsigned char*)&notDraw );  
+        return;
     	}
+    
+    // we should not be able to activate and show pen ui if this mode is disabled currently
+    if(iUiLayout->PenInputType() & DisabledByOrientation())
+        {
+        // we have activate the animation otherwise we will see the penui but not reponse
+        // when clicking on it in the case we rotating the screen quickly and continously
+        if(iAnimObj)
+            {
+            iAnimObj->AddActivationCmd(ECmdActivate,EFalse);                
+            }
+        return;
+        }
+    // ]]] temporary solution for Virtual keyboard becomes corrupted after several rotations
+    
     if(iActive)
         {
-	    if(iUseWindowCtrl)
-	        {
+        if(iUseWindowCtrl)
+            {
 /*            RWsSession &ws = CCoeEnv::Static()->WsSession();
             TInt wgId =ws.GetFocusWindowGroup();
             //TInt wgHandle = ws.GetWindowGroupHandle(wgId);
 
       
-    		TInt priority;
-    		//TInt pos;
+            TInt priority;
+            //TInt pos;
             //wg.Construct(wgHandle);
             //pos = wg.FullOrdinalPosition();
             priority = ws.GetWindowGroupOrdinalPriority(wgId);*/
@@ -454,57 +474,57 @@
             ActivatePenUiLayout(EFalse);
             iDimmed = EFalse;
             iPenUiCtrl->ShowPenUiL(iDimmed);            
-	        }
-	    return;
+            }
+        return;
         }
 
-        TBool bNeedWait = AnimOpNeedWaiting(ESignalPenUiActivated);
-        //add animation command
+    TBool bNeedWait = AnimOpNeedWaiting(ESignalPenUiActivated);
+    //add animation command
         
-        /*
-        if(iAnimObj->AddActivationCmd(ECmdActivate,bNeedWait))
-        	{
-        	if(bNeedWait)
-        		iForegroundUiHandler->AddDelayedCmd();
-	        //iUiLayout->OnActivate();                  
-            ActivatePenUiLayout();
-	        
-	        DrawSprite();        
-	        
-	        iEventBufferQueue->GetEvent();
-	        
-	        iActive = ETrue;                
-	        
-	        if(iUseWindowCtrl)
-                iPenUiCtrl->ShowPenUi();
-            }
-            */
-        if(ActivatePenUiLayout(bNeedWait))
+    /*
+    if(iAnimObj->AddActivationCmd(ECmdActivate,bNeedWait))
             {
-        	if(bNeedWait)
-        		iForegroundUiHandler->AddDelayedCmd();
-	        
-	        DrawSprite();        	        
-	        
-	        iActive = ETrue;                
-	        
-	        if(iUseWindowCtrl)
-	            {
-                /*RWsSession &ws = CCoeEnv::Static()->WsSession();
-                TInt wgId =ws.GetFocusWindowGroup();
-                //TInt wgHandle = ws.GetWindowGroupHandle(wgId);
+            if(bNeedWait)
+                iForegroundUiHandler->AddDelayedCmd();
+            //iUiLayout->OnActivate();                  
+            ActivatePenUiLayout();
+            
+            DrawSprite();        
+            
+            iEventBufferQueue->GetEvent();
+            
+            iActive = ETrue;                
+            
+            if(iUseWindowCtrl)
+                iPenUiCtrl->ShowPenUi();
+        }
+        */
+    if(ActivatePenUiLayout(bNeedWait))
+        {
+        if(bNeedWait)
+            iForegroundUiHandler->AddDelayedCmd();
+            
+        DrawSprite();                    
+            
+        iActive = ETrue;                
+            
+        if(iUseWindowCtrl)
+            {
+            /*RWsSession &ws = CCoeEnv::Static()->WsSession();
+            TInt wgId =ws.GetFocusWindowGroup();
+            //TInt wgHandle = ws.GetWindowGroupHandle(wgId);
 
-          
-        		TInt priority;
-        		//TInt pos;
-                //wg.Construct(wgHandle);
-                //pos = wg.FullOrdinalPosition();
-                priority = ws.GetWindowGroupOrdinalPriority(wgId);*/
-                //wg.Close();           
-                iPenUiCtrl->ShowPenUiL(iDimmed);            	        
-	            }
+            TInt priority;
+            //TInt pos;
+            //wg.Construct(wgHandle);
+            //pos = wg.FullOrdinalPosition();
+            priority = ws.GetWindowGroupOrdinalPriority(wgId);*/
+            //wg.Close();           
+            iPenUiCtrl->ShowPenUiL(iDimmed);                        
             }
         }
+    }
+
 // ---------------------------------------------------------------------------
 // CPeninputServer::ActivateSprite
 // Activate sprite
@@ -536,6 +556,21 @@
 
     if(!iUiLayout)
         return;
+    
+    // [[[ temporary solution for Virtual keyboard becomes corrupted after several rotations
+    // we should not be able to activate and show pen ui if this mode is disabled currently
+    if(iUiLayout->PenInputType() & DisabledByOrientation())
+        {
+        // we have activate the animation otherwise we will see the penui but not reponse 
+        // when clicking on it in the case we rotating the screen quickly and continously
+        if(iAnimObj)
+            {
+            iAnimObj->AddActivationCmd(ECmdActivate,EFalse);
+            }
+        
+        return;
+        }
+    // ]]] temporary solution for Virtual keyboard becomes corrupted after several rotations
 
     TBool notDraw = EFalse;
     iUiLayout->HandleCommand(ECmdPeninputDisableLayoutDrawing,(unsigned char*)&notDraw);
@@ -561,43 +596,43 @@
         
         /*
         if(iAnimObj->AddActivationCmd(ECmdActivate,bNeedWait))
-        	{
-        	if(bNeedWait)
-        		iForegroundUiHandler->AddDelayedCmd();
-	        //iUiLayout->OnActivate();                  
+            {
+            if(bNeedWait)
+                iForegroundUiHandler->AddDelayedCmd();
+            //iUiLayout->OnActivate();                  
             ActivatePenUiLayout();
-	        
-	        DrawSprite();        
-	        
-	        iEventBufferQueue->GetEvent();
-	        
-	        iActive = ETrue;                
-	        
-	        if(iUseWindowCtrl)
+            
+            DrawSprite();        
+            
+            iEventBufferQueue->GetEvent();
+            
+            iActive = ETrue;                
+            
+            if(iUseWindowCtrl)
                 iPenUiCtrl->ShowPenUi();
             }
             */
             
         if(ActivatePenUiLayout(bNeedWait, ETrue))
             {
-        	if(bNeedWait)
-        		iForegroundUiHandler->AddDelayedCmd();
-	        
-	        DrawSprite();        	        
-	        
-	        iActive = ETrue;                
-	        
-	        if(iUseWindowCtrl)
-	            {
-                TRAP_IGNORE( iPenUiCtrl->ShowPenUiL(iDimmed) );            	        
-                           	        
-		        if (iPreNonGloebalNotesWndGrpId != focusApp.iUid &&
-		            IsGlobalNotesApp(focusApp) && !iInGlobalEditorState )
-		            {
-	                iDimmed = ETrue;
-	                DimPenUi();                
-		            }
-	            }
+            if(bNeedWait)
+                iForegroundUiHandler->AddDelayedCmd();
+            
+            DrawSprite();                    
+            
+            iActive = ETrue;                
+            
+            if(iUseWindowCtrl)
+                {
+                TRAP_IGNORE( iPenUiCtrl->ShowPenUiL(iDimmed) );                        
+                                       
+                if (iPreNonGloebalNotesWndGrpId != focusApp.iUid &&
+                    IsGlobalNotesApp(focusApp) && !iInGlobalEditorState )
+                    {
+                    iDimmed = ETrue;
+                    DimPenUi();                
+                    }
+                }
             }
         iIsLayoutReDrawAllowWhenActive = EFalse;    
         }
@@ -625,9 +660,9 @@
                     }
                 }
             else
-			    {
-				ActivatePenUiLayout(EFalse,ETrue);
-				}
+                {
+                ActivatePenUiLayout(EFalse,ETrue);
+                }
 
             if (iDimmed && (iInGlobalNotesApp || iInGlobalEditorState))
                 {
@@ -638,7 +673,7 @@
             TRAP_IGNORE( iPenUiCtrl->ShowPenUiL(iDimmed) );
             iDimmed = EFalse;
             }
-        }				  
+        }                  
     }
 
 // ---------------------------------------------------------------------------
--- a/textinput/peninputcommonctrls/loc/peninputcommonctrls.loc	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputcommonctrls/loc/peninputcommonctrls.loc	Thu Jul 15 19:01:13 2010 +0300
@@ -31,6 +31,18 @@
 #define qtn_input_switcher_fs_qwerty "Full Screen Qwerty"
 
 //d:Text in touch input mode swither list
+//d:portrait touch input method (full sreen qwerty or ITU-T)
+//l:list_single_pane_t1_cp2
+//r: 5.0
+#define qtn_tin_option_menu_portrait_editor "Edit portrait"
+
+//d:Text in touch input mode swither list
+//d:landscape full sreen qwerty touch input method
+//l:list_single_pane_t1_cp2
+//r: 5.0
+#define qtn_tin_option_menu_landscape_editor "Edit landscape"
+
+//d:Text in touch input mode swither list
 //d:small virtual key board touch input method
 //l:list_single_pane_t1_cp2
 //r: 5.0   
--- a/textinput/peninputcommonctrls/src/peninputbuttons/peninputbutton.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputcommonctrls/src/peninputbuttons/peninputbutton.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -4225,6 +4225,7 @@
         }
     
     iLongPressTimer->SetTimer(iLongPressInterval);
+    iIsLongPress = EFalse;
 
     return CAknFepCtrlCommonButton::HandlePointerDownEventL(aPt);
     }
@@ -4277,6 +4278,7 @@
 EXPORT_C void CAknFepCtrlLongPressButton::CancelPointerDownL()
     {
     // No implementation needed
+	CAknFepCtrlCommonButton::CancelPointerDownL();
     }
 
 // ---------------------------------------------------------
--- a/textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h	Thu Jul 15 19:01:13 2010 +0300
@@ -301,7 +301,7 @@
 
     // resource id for generic itut resource file
     TInt iCommonResId;
-    TInt iConfigResId;
+    RArray<TInt> iConfigResIds;
 
     TInt iAvkonResId;
     
--- a/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -100,11 +100,13 @@
     CCoeEnv::Static()->DeleteResourceFile(iAvkonResId);
         
     CCoeEnv::Static()->DeleteResourceFile(iCommonResId);
-    
-    if (iConfigResId)
+
+    // Remove all resource files from control environment
+    for (TInt i=0; i< iConfigResIds.Count(); i++)
         {
-        CCoeEnv::Static()->DeleteResourceFile(iConfigResId);
+        CCoeEnv::Static()->DeleteResourceFile(iConfigResIds[i]);
         }
+    iConfigResIds.Close();
 
     ClearChnCandidates(EItutCandidates);
     ClearChnCandidates(EItutPuncCandidates);
@@ -1143,14 +1145,14 @@
 void CGenericItutDataMgr::SetLanguageL(TInt aLanguage)
     {    
     ASSERT( IsValidLanguage( aLanguage ) );
-    	
+        
     if (iLanguage != aLanguage)
-        {	        
+        {            
         if( IsValidLanguage( iLanguage ) )
-        	iIsLangDirectionSwitch =  IsRtoLLanguage( aLanguage ) ^ IsRtoLLanguage( iLanguage );
+            iIsLangDirectionSwitch =  IsRtoLLanguage( aLanguage ) ^ IsRtoLLanguage( iLanguage );
         else        
-        	//Check mirroring is needed when first setting language
-        	iIsLangDirectionSwitch = IsRtoLLanguage( aLanguage );        	
+            //Check mirroring is needed when first setting language
+            iIsLangDirectionSwitch = IsRtoLLanguage( aLanguage );            
         
         iLanguage = aLanguage;
         iInputMode = KInvalidImMode;
@@ -1165,14 +1167,21 @@
 
             CCoeEnv* coeEnv = CCoeEnv::Static();
             
-            if (iConfigResId)
-                {
-                coeEnv->DeleteResourceFile(iConfigResId);
-                }
-
             TFileName resourceConfigName(iResourceFilename);
             BaflUtils::NearestLanguageFile(coeEnv->FsSession(), resourceConfigName);
-            iConfigResId = coeEnv->AddResourceFileL(resourceConfigName);
+            // Do not delete resource file from control environment if changing language.
+            // Otherwise crash happens if switching theme. For example:If writing language
+            // is Chinese, enters spell mode, then switches theme, crash happens. 
+            TInt configResId = coeEnv->AddResourceFileL(resourceConfigName);
+            if ( iConfigResIds.Find(configResId) ==  KErrNotFound)
+                {
+                iConfigResIds.Append( configResId );
+                }
+            else
+                {
+                // Remove resource file to ensure the resource file is added only one time.
+                coeEnv->DeleteResourceFile( configResId );
+                }
             
             if (IsChinese())
                 {
@@ -1180,9 +1189,9 @@
                 }
             
             if( IsKorean())
-            	{
+                {
                 iLayoutContext->UiManager()->CreateKoreanSpecificCtrlsIfNeededL();
-            	}
+                }
 
             NotifyChangeControlLayout(MItutPropertySubscriber::EItutPropertyKeypadResourceId, 
                                       KeypadResourceId());  
@@ -1927,7 +1936,6 @@
                                          iInputMode(KInvalidImMode),
                                          iCase(EAknEditorUpperCase),
                                          iIsChineseSpell( EFalse ),
-                                         iConfigResId(0),
                                          iLayoutContext(aLayoutContext),
                                          iCurrentScriptIdx(KInvalidIndex),
                                          iLandScape(EFalse),
--- a/textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h	Thu Jul 15 19:01:13 2010 +0300
@@ -576,6 +576,14 @@
     * Retrieve text color from skin for autocompletion part
     */
     TRgb AutoCompletionPartColor();
+    
+    /**
+     * Called when short press occurs on range button.
+     *
+     * @since S60 v3.2
+     * @return None
+     */
+    void HandleRangeButtonShortPress();
         
 private: // Data
 
@@ -718,6 +726,11 @@
      * Range labels for range list
      */
     TAllRangeLabels iRangeLabels;
+    
+    /**
+     * Indicates whether range button short press is handled.
+     */
+    TBool iHandleRangeShortPress;
 
 private:	
 	CFepLayoutScrollableList* iCandidateList;
--- a/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -394,7 +394,7 @@
     }
 TInt CPeninputGenericVkbLayout::SizeChanged( const TAny* aData )
     {
-    (( CPeninputGenericVkbWindow*)iLayoutWindow)->UpdateLafData();
+    //(( CPeninputGenericVkbWindow*)iLayoutWindow)->UpdateLafData();
     return CPeninputCommonLayoutExt::SizeChanged( aData );
     }
 void CPeninputGenericVkbLayout::HandleAppInfoChange(const TDesC& aInfo, 
--- a/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -134,6 +134,7 @@
     }
 void CPeninputGenericVkbWindow::ConstructL()
     {
+    iHandleRangeShortPress = ETrue;
     iBmpRotator = CPeninputSyncBitmapRotator::NewL();
     iLafMgr = CPeninputGenericVkbLafMgr::NewL();
     iLafMgr->SetInputModeL(TPluginInputMode (iLayoutContext->LayoutType()));
@@ -164,82 +165,22 @@
             {
             if ( aCtrl->ControlId() == EPeninutWindowCtrlIdMultiRangeBtn )
                 {
-                PopupChoiceList();
+                if ( iHandleRangeShortPress )
+                    {
+                    HandleRangeButtonShortPress();
+                    }
                 }
+                iHandleRangeShortPress = ETrue;
             }
             break;
         case EPeninputLayoutEventMultiRangeLongPress:
             {
-            const TInt range = CPeninputDataConverter::AnyToInt(
-                iLayoutContext->RequestData(EPeninputDataTypeCurrentRange));
-            
-            const TInt langId = IntContext( EPeninputDataTypeInputLanguage );
-
             if ( aCtrl->ControlId() == EPeninutWindowCtrlIdMultiRangeBtn )
                 {
-            
-                if ( range == ERangeAccent )
-                    {
-                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
-                        {
-                        ChangeRange(ERangeNative);
-                        }
-                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
-                        {
-                        ChangeRange(ERangeEnglish);
-                        }
-                    }
-                else if ( range == ERangeNative )
-                    {            
-                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNativeNumber ) )
-                        {
-                        
-                        if ( langId != ELangArabic && langId != ELangFarsi 
-                                && langId != ELangUrdu && langId != ELangThai )
-                            {
-                                ChangeRange(ERangeNativeNumber);
-                            }
-                        }
-                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNumber ) )
-                        {
-                        if ( langId != ELangArabic && langId != ELangFarsi 
-                                && langId != ELangUrdu && langId != ELangThai )
-                            {
-                                ChangeRange(ERangeNumber);
-                            }                       
-                        }
-                    }
-                else if ( range == ERangeEnglish )
-                    {
-                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNumber ) )
-                        {
-                        ChangeRange(ERangeNumber);
-                        }
-                    }
-                else if ( range == ERangeNativeNumber )
-                    {
-                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
-                        {
-                        ChangeRange(ERangeNative);
-                        }                   
-                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
-                        {
-                        ChangeRange(ERangeEnglish);
-                        }
-                    }
-                else if ( range == ERangeNumber )
-                    {
-                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
-                        {
-                        ChangeRange(ERangeNative);
-                        }                   
-                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
-                        {
-                        ChangeRange(ERangeEnglish);
-                        }                   
-                    }
-
-                TRAP_IGNORE( UpdateRangeCtrlsL() );
+                // Before pop up list, cancel down event, and set range button un-highlight.
+                TRAP_IGNORE( aCtrl->CancelPointerDownL());
+                static_cast<CAknFepCtrlCommonButton*>(aCtrl)->SetHighlight( EFalse );
+                PopupChoiceList();                
                 }
             }
             break;
@@ -263,6 +204,14 @@
             break;
         case EEventChoiceSelected:
             {
+            CFepUiBaseCtrl* btn = Control( EPeninutWindowCtrlIdMultiRangeBtn );
+            
+            if ( btn )
+                {
+                iHandleRangeShortPress = EFalse;
+                TRAP_IGNORE( btn->HandlePointerUpEventL( btn->Rect().iBr ) );
+                iHandleRangeShortPress = ETrue;
+                }
             CFepLayoutChoiceList::SEvent* event = 
                 ( CFepLayoutChoiceList::SEvent* ) aEventData.Ptr();
 
@@ -1710,7 +1659,8 @@
     		iVkbLayout->ConstructFromIrregularResourceL();
     	else
     		iVkbLayout->ConstructFromNonIrregularResourceL();
-    	SetVkbLayoutSize();
+    	
+    	//SetVkbLayoutSize();
     	
     	if( IsRtoLLanguage( iLanguage ) )
     		{
@@ -2965,4 +2915,72 @@
             }
         }
     }
+
+void CPeninputGenericVkbWindow::HandleRangeButtonShortPress()
+    {
+    const TInt range = CPeninputDataConverter::AnyToInt(
+        iLayoutContext->RequestData(EPeninputDataTypeCurrentRange));
+    
+    const TInt langId = IntContext( EPeninputDataTypeInputLanguage );
+
+    switch ( langId )
+        {
+        case ELangRussian:
+        case ELangBulgarian:
+        case ELangUkrainian:
+            {
+            range == ERangeNative ? ChangeRange( ERangeNumber ) : ChangeRange( ERangeNative );
+            }
+            break;
+
+        case ELangArabic:
+        case ELangFarsi:
+        case ELangUrdu:
+            {
+            range == ERangeNative ? ChangeRange( ERangeNativeNumber ) : ChangeRange( ERangeNative );
+            }
+            break;
+            
+        case ELangThai:
+            {
+            range == ERangeNative ? ChangeRange( ERangeNumber ) : ChangeRange( ERangeNative ); 
+            }
+            break;
+
+        case ELangGreek:
+        case ELangHebrew:
+            {
+            range == ERangeNative ? ChangeRange( ERangeNumber ) : ChangeRange( ERangeNative ); 
+            }
+            break;
+        default: // Latin, vietnamese, and other possible languages
+            {
+            if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
+                {
+                if ( range == ERangeNative )
+                    {
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNativeNumber ) )
+                        {
+                        ChangeRange( ERangeNativeNumber );
+                        }
+                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNumber ) )
+                        {
+                        ChangeRange( ERangeNumber );
+                        }
+                    }
+                else
+                    {
+                    ChangeRange( ERangeNative );
+                    }
+                }
+            else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
+                {
+                range == ERangeEnglish ? ChangeRange( ERangeNumber ) : ChangeRange( ERangeEnglish );
+                }
+            }
+            break;
+        }
+    
+    TRAP_IGNORE( UpdateRangeCtrlsL() );
+    }
 // End Of File
--- a/textinput/peninputsplititut/src/peninputsplititutwesternuistatespelling.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputsplititut/src/peninputsplititutwesternuistatespelling.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -133,6 +133,7 @@
 
 void CWesternSplitItutUiStateSpelling::OnExit()
     {    
+	iICF->HideBubble(); //Hide bubble when full screen ITUT closed
     iOk->Hide(ETrue);
     iCancel->Hide(ETrue);
     iOwner->DataMgr()->SetSpellMode(EFalse);
--- a/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -54,6 +54,7 @@
 
 const TUint KDefaultIcfTextColor = 0x000000;
 const TUint KDefaultIcfFrameColor = 0x000000;
+const TInt KTextLength = 100;
 
 
 
@@ -1457,6 +1458,11 @@
 
 void CSplitItutWindow::UpdateIndiBubbleL( TUint8* aData )
     {  
+	// if icf is hidden, not call updateindibubblel
+    if( iICF->Hiden() )     
+    	{
+        return;
+    	}
     RDesReadStream readStream;
     TFepIndicatorInfo indicatorData;
 
@@ -1484,7 +1490,7 @@
                              indicatorData.iIndicatorTextImgID,
                              indicatorData.iIndicatorTextMaskID );
             
-		TBuf<100> text;	
+		TBuf<KTextLength> text;	
         iICF->MsgBubbleCtrl()->GetText( text );
         iICF->ShowBubble( text, iICF->MsgBubbleCtrl()->Rect());
         }
--- a/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h	Thu Jul 15 19:01:13 2010 +0300
@@ -582,6 +582,14 @@
      */
     void PrepareRangeListItems( RArray<CFepLayoutChoiceList::SItem>& aRangeItems );
     
+    /**
+     * Called when short press occurs on range button.
+     *
+     * @since S60 v3.2
+     * @return None
+     */
+    void HandleRangeButtonShortPress();
+    
 private: // Data
 
     /**
@@ -727,6 +735,10 @@
      */
     TAllRangeLabels iRangeLabels;
 
+    /**
+     * Indicates whether range button short press is handled.
+     */
+    TBool iHandleRangeShortPress;
     };
 
 inline TBool CPeninputSplitQwertyWindow::IsRtoLLanguage( TInt aLanguage )
--- a/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp	Mon Jun 21 16:02:35 2010 +0300
+++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp	Thu Jul 15 19:01:13 2010 +0300
@@ -484,76 +484,12 @@
         {
         case EPeninputLayoutEventMultiRangeLongPress:
             {
-            const TInt range = CPeninputDataConverter::AnyToInt(
-                iLayoutContext->RequestData(EPeninputDataTypeCurrentRange));
-            
-            const TInt langId = CPeninputDataConverter::AnyToInt(
-                iLayoutContext->RequestData(EPeninputDataTypeInputLanguage));
-
-            if ( aCtrl->ControlId() == EPeninutWindowCtrlIdRangeBtn )
+            if ( ctrlId == EPeninutWindowCtrlIdRangeBtn )
                 {
-                if ( range == ERangeAccent )
-                    {
-                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
-                        {
-                        ChangeRange(ERangeNative);
-                        }
-                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
-                        {
-                        ChangeRange(ERangeEnglish);
-                        }
-                    }
-                else if ( range == ERangeNative )
-                    {            
-                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNativeNumber ) )
-                        {
-                        
-                        if ( langId != ELangArabic && langId != ELangFarsi 
-                                && langId != ELangUrdu && langId != ELangThai )
-                            {
-                                ChangeRange(ERangeNativeNumber);
-                            }
-                        }
-                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNumber ) )
-                        {
-                        if ( langId != ELangArabic && langId != ELangFarsi 
-                                && langId != ELangUrdu && langId != ELangThai )
-                            {
-                                ChangeRange(ERangeNumber);
-                            }                       
-                        }
-                    }
-                else if ( range == ERangeEnglish )
-                    {
-                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNumber ) )
-                        {
-                        ChangeRange(ERangeNumber);
-                        }
-                    }
-                else if ( range == ERangeNativeNumber )
-                    {
-                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
-                        {
-                        ChangeRange(ERangeNative);
-                        }                   
-                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
-                        {
-                        ChangeRange(ERangeEnglish);
-                        }
-                    }
-                else if ( range == ERangeNumber )
-                    {
-                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
-                        {
-                        ChangeRange(ERangeNative);
-                        }                   
-                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
-                        {
-                        ChangeRange(ERangeEnglish);
-                        }                   
-                    }
-
-                TRAP_IGNORE( UpdateRangeCtrlsL() );
+                // Before pop up list, cancel down event, and set range button un-highlight.
+                TRAP_IGNORE( aCtrl->CancelPointerDownL());
+                static_cast<CAknFepCtrlCommonButton*>(aCtrl)->SetHighlight( EFalse );
+                PopupChoiceList();                
                 }
             }
             break;
@@ -561,8 +497,13 @@
             {
             if ( ctrlId == EPeninutWindowCtrlIdRangeBtn )
                 {
-                PopupChoiceList();
+                if ( iHandleRangeShortPress )
+                    {
+                    HandleRangeButtonShortPress();
+                    }
                 }
+            
+            iHandleRangeShortPress = ETrue;
             }
             break;
         case EPeninputLayoutVkbEventResetShift: 
@@ -581,6 +522,14 @@
             break;
         case EEventChoiceSelected:
             {
+            CFepUiBaseCtrl* btn = Control( EPeninutWindowCtrlIdRangeBtn );
+            
+            if ( btn )
+                {
+                iHandleRangeShortPress = EFalse;
+                TRAP_IGNORE( btn->HandlePointerUpEventL( btn->Rect().iBr ) );
+                iHandleRangeShortPress = ETrue;
+                }
             CFepLayoutChoiceList::SEvent* event = NULL;
             event = (CFepLayoutChoiceList::SEvent*) aEventData.Ptr();
 
@@ -686,6 +635,7 @@
         }
         
     iFirstConstruct = EFalse;
+    iHandleRangeShortPress = ETrue;
     }
 
 // ---------------------------------------------------------------------------
@@ -2020,4 +1970,74 @@
             }
         }
     }
+
+void CPeninputSplitQwertyWindow::HandleRangeButtonShortPress()
+    {
+    const TInt range = CPeninputDataConverter::AnyToInt(
+         iLayoutContext->RequestData(EPeninputDataTypeCurrentRange));
+     
+    const TInt langId = CPeninputDataConverter::AnyToInt(
+         iLayoutContext->RequestData(EPeninputDataTypeInputLanguage));    
+
+    switch ( langId )
+        {
+        case ELangRussian:
+        case ELangBulgarian:
+        case ELangUkrainian:
+            {
+            range == ERangeNative ? ChangeRange( ERangeNumber ) : ChangeRange( ERangeNative );
+            }
+            break;
+
+        case ELangArabic:
+        case ELangFarsi:
+        case ELangUrdu:
+            {
+            range == ERangeNative ? ChangeRange( ERangeNativeNumber ) : ChangeRange( ERangeNative );
+            }
+            break;
+            
+        case ELangThai:
+            {
+            range == ERangeNative ? ChangeRange( ERangeNumber ) : ChangeRange( ERangeNative ); 
+            }
+            break;
+
+        case ELangGreek:
+        case ELangHebrew:
+            {
+            range == ERangeNative ? ChangeRange( ERangeNumber ) : ChangeRange( ERangeNative ); 
+            }
+            break;
+        default: // Latin, vietnamese, and other possible languages
+            {
+            if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
+                {
+                if ( range == ERangeNative )
+                    {
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNativeNumber ) )
+                        {
+                        ChangeRange( ERangeNativeNumber );
+                        }
+                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNumber ) )
+                        {
+                        ChangeRange( ERangeNumber );
+                        }
+                    }
+                else
+                    {
+                    ChangeRange( ERangeNative );
+                    }
+                }
+            else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
+                {
+                range == ERangeEnglish ? ChangeRange( ERangeNumber ) : ChangeRange( ERangeEnglish );
+                }
+            }
+            break;
+        }
+    
+    TRAP_IGNORE( UpdateRangeCtrlsL() );
+    }
+
 // End Of File