Revision: 201013 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 14 Apr 2010 16:18:34 +0300
branchRCL_3
changeset 8 4eb1ae11334f
parent 7 6defe5d1bd39
child 9 e6a39382bb9c
Revision: 201013 Kit: 201015
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingData.h
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingDialog.h
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingData.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp
fep/aknfep/inc/AknFepManager.h
fep/aknfep/inc/AknFepPluginManager.h
fep/aknfep/inc/AknFepSharedDataInterface.h
fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_EKA2.pkg
fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_stub.pkg
fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_stub.sis
fep/aknfep/rom/PeninputPluginKr.iby
fep/aknfep/src/AknFepManager.cpp
fep/aknfep/src/AknFepPluginManager.cpp
fep/aknfep/src/AknFepSharedDataInterface.cpp
fep/aknfep/src/AknFepUiInputStateInitialKoreanMultitap.cpp
fep/aknfep/src/aknfepuispellcontainer.cpp
inputmethods_plat/aknfep_status_api/inc/AknFepInternalPSKeys.h
textinput/GSLangPlugin/src/GSLangModel.cpp
textinput/GSLangPlugin/src/GSLangPlugin.cpp
textinput/peninputarc/bwins/peninputlayoutcontrolU.DEF
textinput/peninputarc/eabi/peninputlayoutcontrolU.DEF
textinput/peninputarc/gsplugin/gspeninputplugin/src/gspeninputmodel.cpp
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.inl
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmicfcustomdraw.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp
textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp
textinput/peninputfingerhwr/src/peninputfingerhwrengine.cpp
textinput/peninputfingerhwr/src/peninputfingerhwrstatemanager.cpp
textinput/peninputgenericitut/group/iconlist.txt
textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h
textinput/peninputgenericitut/inc/peninputgenericitutwindow.h
textinput/peninputgenericitut/inc/peninputgenericitutwindowmanager.h
textinput/peninputgenericitut/inc/peninputitutwesternuistatenonpredict.h
textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp
textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp
textinput/peninputgenericitut/src/peninputgenericitutwindowmanager.cpp
textinput/peninputgenericitut/src/peninputitutchnuistatepinyincomposition.cpp
textinput/peninputgenericitut/src/peninputitutchnuistatepredict.cpp
textinput/peninputgenericitut/src/peninputitutchnuistatestrokezhuyincomposition.cpp
textinput/peninputgenericitut/src/peninputitutwesternuistatematchselection.cpp
textinput/peninputgenericitut/src/peninputitutwesternuistatenonpredict.cpp
textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp
textinput/peninputgenericitut/srcdata/peninputgeneralitutnew.rss
textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp
textinput/peninputsplititut/group/iconlist.txt
textinput/peninputsplititut/inc/peninputsplititutdatamgr.h
textinput/peninputsplititut/src/peninputsplititutdatamgr.cpp
textinput/peninputsplititut/src/peninputsplititutwindow.cpp
textinput/peninputsplititut/srcdata/peninputsplititutnew.rss
textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h
textinput/peninputsplitqwerty/src/peninputsplitqwertylafdatamgr.cpp
textinput/peninputsplitqwerty/src/peninputsplitqwertylayout.cpp
textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp
textinput/peninputsplitqwerty/srcdata/peninputssqwin.rss
textinput/peninputvkbcn/src/peninputvkbcnlafdatamgr.cpp
textinput/peninputvkbkr/rom/PeninputVkbKr.iby
textinput/peninputvkbkr/sis/PeninputVkbKr_EKA2.pkg
textinput/peninputvkbkr/sis/PeninputVkbKr_stub.pkg
textinput/peninputvkbkr/sis/PeninputVkbKr_stub.sis
textinput/ptienginev2/inc/PtiEngineImpl.h
textinput/ptienginev2/src/PtiEngineImpl.cpp
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingData.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingData.h	Wed Apr 14 16:18:34 2010 +0300
@@ -34,6 +34,7 @@
 #define __AKN_FEP_PREDICTIVESETTING_DATA_H
 
 #include <e32base.h>
+#include <ptidefs.h>
 
 /**
  * Class: 		CAknFepPredictiveSettingData
@@ -153,6 +154,11 @@
     * Returns:      Value of iPhysicalKeyboards member
     */
     inline TInt& AWCBitmask() {return iAWCBitmask; }
+    
+    TPtiKeyboardType ActiveKeyboardType() const;
+    
+    TPtiKeyboardType OwnerKeyboardType() const;      
+    
 private:
 	/**
 	* Function:		CAknFepPredictiveSettingData
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingDialog.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingDialog.h	Wed Apr 14 16:18:34 2010 +0300
@@ -131,7 +131,7 @@
 		void AttemptToExitL();
 
 #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__		
-	    TInt 						iOriginalKeyboardLayout;
+		TPtiKeyboardType 			iOriginalKeyboardLayout;
 #endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
 	    
 	    // iSettingItemInEditingState is introduced to avoid the crash when we are editing 
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingData.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingData.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -30,6 +30,9 @@
  * ============================================================================
  */
 
+#include <e32property.h>
+#include <AvkonInternalCRKeys.h>
+#include <AknFepInternalPSKeys.h>
 #include "AknFepPredictiveSettingData.h"
 
 CAknFepPredictiveSettingData *CAknFepPredictiveSettingData::NewL()
@@ -74,4 +77,71 @@
 void CAknFepPredictiveSettingData::SaveL() const
     {
     }
+
+TPtiKeyboardType CAknFepPredictiveSettingData::ActiveKeyboardType() const
+	{    
+	TInt keyboardType = EPtiKeyboardNone;
+#ifdef RD_SCALABLE_UI_V2
+	// Get physical keyboard type
+	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardType );
+
+	//1. When active keyboard is virtual keyboard, 
+	// need to get the active virtual keyboard type 
+	// and set keyboardType again.	
+	//2. When the default physical keyboard is 0, 
+	// it means that there is no physical keyboard,
+	// also need to get the active virtual keyboard type.
+	TInt isVirtualInputActive = 0;
+	RProperty::Get( KPSUidAknFep, KAknFepTouchInputActive, 
+					isVirtualInputActive );    
+	if ( isVirtualInputActive > 0 || keyboardType == 0 )
+		{
+		// Active keyboard is virtual keyboard          
+		RProperty::Get( KPSUidAknFep, KAknFepVirtualKeyboardType, 
+						keyboardType );      
+		}
+#else if
+	// Get physical keyboard type
+	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardType );	    
+#endif
+
+	if ( keyboardType <= 0 || keyboardType >= EPtiKeyboardMaxLayout )
+		{
+	    keyboardType = EPtiKeyboardNone;
+		}        
+	return (TPtiKeyboardType)keyboardType;
+    }
+
+TPtiKeyboardType CAknFepPredictiveSettingData::OwnerKeyboardType() const
+	{
+	TInt keyboardType = EPtiKeyboardNone;
+#ifdef RD_SCALABLE_UI_V2	
+	// When dialog state is 2, it means that the setting dialog is opened
+	// for virtual qwerty keyboard, therefore, 
+	// returning value of virtual qwerty keyboard type is necessary 
+	TInt dialogState = 0;
+	RProperty::Get( KPSUidAknFep, KAknFepSettingDialogState, dialogState );    	
+	if ( dialogState == 2 )
+		{
+		// The setting dialog is opened by virtual qwerty keyboard,
+	    // then need to get current virtual keyboard type 
+	    keyboardType = EPtiKeyboardQwerty4x12;
+		}
+	else
+		{
+	    // Get physical keyboard type
+	    RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardType );	    
+		}
+#else if
+    // Get physical keyboard type
+    RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardType );		
+#endif // RD_SCALABLE_UI_V2
+
+	if ( keyboardType <= 0 || keyboardType >= EPtiKeyboardMaxLayout )
+		{
+	    keyboardType = EPtiKeyboardNone;
+		}		
+	return (TPtiKeyboardType)keyboardType;	
+	}
+
 //EOF
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -38,6 +38,7 @@
 #include <PtiDefs.h>
 #include <e32property.h>
 #include <AvkonInternalCRKeys.h>
+#include <AknFepInternalPSKeys.h>
 #include <AknFepGlobalEnums.h>
 #include "AknFepPredictiveSettingDialog.h"
 #include <aknnotewrappers.h>
@@ -81,9 +82,6 @@
 	iTitlePaneResId(aTitlePaneResId),
 	iSettingItemInEditingState(EFalse)
 	{
-#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
-	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, iOriginalKeyboardLayout);
-#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
 	}
 	
 CAknFepPredictiveSettingDialog::~CAknFepPredictiveSettingDialog()
@@ -106,6 +104,11 @@
 	
 	// construct the data object the settings list will use
 	iSettingsData = CAknFepPredictiveSettingData::NewL();
+	
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+	iOriginalKeyboardLayout = iSettingsData->OwnerKeyboardType();
+#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+	
 	iAknFepRepository = CRepository::NewL(KCRUidAknFep);	
 	ReadSettingsDataL();
 		
@@ -221,9 +224,7 @@
 		}
 
     // Parse keyboard dependent settings for current keyboard from bitmask
-	TInt keyboardLayout = 0;
-	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
-	TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout;
+	TPtiKeyboardType layout = iSettingsData->OwnerKeyboardType();	
 	TInt autoTmp = autoWordCompl;
 	
 	// This part of code for error fixing:	    
@@ -272,9 +273,7 @@
 	   	iAknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag);
 
 	   	// Parse keyboard dependent settings for current keyboard from bitmask
-	   	TInt keyboardLayout = 0;
-	   	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
-	   	TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout;
+	   	TPtiKeyboardType layout = iSettingsData->OwnerKeyboardType();	   	
 	   	switch(layout)
 	   	    {
 	   	    case EPtiKeyboardNone:
@@ -343,9 +342,7 @@
 	   		iAknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag);
 
 	   		// Parse keyboard dependent settings for current keyboard from bitmask
-	   		TInt keyboardLayout = 0;
-		   	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
-		   	TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout;
+	   		TPtiKeyboardType layout = iSettingsData->OwnerKeyboardType();
 	   		switch(layout)
 	   	    	{
 		   	    case EPtiKeyboardNone:
@@ -439,9 +436,7 @@
    			{
    			iAknFepRepository->Get(KAknFepPredTxtFlagExtension,iPredictiveTextFlag);
    			}
-   		TInt keyboardLayout = 0;
-       	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
-       	TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout;   		
+   		TPtiKeyboardType layout = iSettingsData->OwnerKeyboardType();
        	TBool QueryNeeded = EFalse;
 		if(iSettingsList->DeviceHasMultipleKeyboards())
 			{
@@ -644,11 +639,11 @@
         	}
    
    		// Adjust predictive flag after layout switch
-        TInt keyboardLayout = EPtiKeyboardNone;
-        RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+         TPtiKeyboardType keyboardLayout = iSettingsData->ActiveKeyboardType();
 	//settings page not to be retained on change of keyboard layout for Touch Input.
 #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
-        if (iOriginalKeyboardLayout != keyboardLayout)
+         
+        if ( iOriginalKeyboardLayout != keyboardLayout )
             {
             if(iSettingItemInEditingState)
             	{
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -284,8 +284,8 @@
 	// aIdentifier is used to determine what kind of setting item should be 
 	// created
 	CAknSettingItem* settingItem = NULL;
-	TInt keyboardLayout = 0;
-	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+    TPtiKeyboardType keyboardLayout = iSettingsData.OwnerKeyboardType();	
+	
     switch (aIdentifier)
         {
         case EAknFepCmdPredAutoComplSetting:
@@ -363,8 +363,7 @@
     // If layout is changed, close settings with information note
     if(aType==KEikDynamicLayoutVariantSwitch)
         {
-        TInt keyboardLayout = 0;
-        RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+        TPtiKeyboardType keyboardLayout = iSettingsData.OwnerKeyboardType();
         if(keyboardLayout == EPtiKeyboard12Key)
             {
 #ifndef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
--- a/fep/aknfep/inc/AknFepManager.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/inc/AknFepManager.h	Wed Apr 14 16:18:34 2010 +0300
@@ -900,6 +900,8 @@
      */
     TBool EditorHasFreeSpace( TInt aNumberOfCharacter = 0 ) const;
 		TBool IsSpecialNumericEditor();
+		
+	void TryPopExactWordInICFL();
 
 private:
 
@@ -1010,6 +1012,11 @@
      */
     void HandleShiftQwertyChineseL(TEventCode aEventCode);
 #endif //RD_INTELLIGENT_TEXT_INPUT    
+    
+    void GetCandidatesWithIndexL(CDesCArray* aArray, 
+						TInt& aActiveIdx, TInt& aSecondaryIdx);
+    void TryPopExactWordInOtherPlaceL();
+    
     /**
      * Launches the insert word query in western predictive text mode
      */
@@ -1631,6 +1638,8 @@
     void CommitInlineEditL();    
     
     TBool GetIndicatorImgID(TInt& aIndicatorImgID, TInt& aIndicatorTextID);   
+    
+    TInt CurrentInputLangCode();
 
     inline TFepSymbolOfHardwareOne SymbolInfoOfHardKey1();
 public:
--- a/fep/aknfep/inc/AknFepPluginManager.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/inc/AknFepPluginManager.h	Wed Apr 14 16:18:34 2010 +0300
@@ -324,8 +324,7 @@
     
     void SetFingerMatchSelectionState(TBool aMatchStateOn);
     TBool IsVisible();
-    TBool DoNextCandidates();
-    void DoPreviousCandidates();
+
     // send all predictive candidates at once
     void ShowAllCandidates();
     
@@ -446,6 +445,7 @@
      */
     void RemoveLastFocusedWinFromOpenList();
     
+    void SetInSpellModeFlag( TBool aFlag );
 public: // inline    
     
     /**
@@ -943,8 +943,7 @@
     
     RPointerArray<HBufC> iCandidateList;
     TInt iCandidateIndex;
-    
-    TFepInputCandidateList iSendList;
+
     TFepInputAllCandidates iSendAllList;
     
     TBool iMatchState; 
@@ -1056,6 +1055,7 @@
 	TInt iAlignment;
 
     CConnectAo* iConnectAo;
+    TBool iInSpellMode;
     };
 
 class CConnectAo : public CActive
--- a/fep/aknfep/inc/AknFepSharedDataInterface.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/inc/AknFepSharedDataInterface.h	Wed Apr 14 16:18:34 2010 +0300
@@ -30,7 +30,7 @@
 #define _AKNFEP_SHARED_DATA_INT_H__
 
 #include <e32base.h>
-
+#include <ptidefs.h>
 #include <e32property.h>
 #include <cenrepnotifyhandler.h>
 class CRepository;
@@ -592,6 +592,19 @@
      * Call back function to handle a change in keyboard layout.
      */	
     static TInt HandleKeyboardLayoutChangeNotification(TAny* aObj);
+
+#ifdef RD_SCALABLE_UI_V2
+    /**
+    Handles the change to virtual keyboard layout.
+    */
+    void HandleVirtualKeyboardLayoutChange();
+    
+    /**
+     * Call back function to handle a change to virtual keyboard layout.
+     */	
+    static TInt HandleVirtualKeyboardLayoutChangeNotification(TAny* aObj);
+#endif // RD_SCALABLE_UI_V2
+    
 #endif
 #ifdef RD_INTELLIGENT_TEXT_INPUT
 
@@ -679,6 +692,7 @@
     static TInt HandleRepositoryCallBack(TAny* aPtr);
 #ifdef RD_INTELLIGENT_TEXT_INPUT    
     static TInt HandleGenericRepositoryChange(TAny* aPtr);
+    TPtiKeyboardType ActiveKeyboardType() const; 
 #endif    
     static TInt HandleLocaleRepositoryCallBack(TAny* aPtr);
 
@@ -706,6 +720,10 @@
 #ifdef RD_INTELLIGENT_TEXT_INPUT
     CSubscriber*    iKeyboardLayoutStatusSubscriber;
     RProperty       iKeyboardLayoutStatusProperty;
+#ifdef RD_SCALABLE_UI_V2     
+    CSubscriber*    iVirtualKeyboardLayoutStatusSubscriber;
+    RProperty       iVirtualKeyboardLayoutStatusProperty;
+#endif // #ifdef RD_SCALABLE_UI_V2 
 #endif
 
     friend class CSubscriber;
--- a/fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_EKA2.pkg	Wed Mar 31 22:08:20 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-;
-; 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 "Eclipse Public License v1.0""
-; which accompanies this distribution, and is available
-; at the URL "http://www.eclipse.org/legal/epl-v10.html".
-;
-; Initial Contributors:
-; Nokia Corporation - initial contribution.
-;
-; Contributors:
-;
-; Description:
-;
-; Installation file for PeninputPluginKr dll
-;
-; This is an auto-generated PKG file by Carbide.
-; This file uses variables specific to Carbide builds that will not work
-; on command-line builds. If you want to use this generated PKG file from the
-; command-line tools you will need to modify the variables with the appropriate
-; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
-
-;
-; UID is the dll's UID
-;
-#{"PeninputPluginKr DLL"},(0xE95A395D),1,0,0
-
-
-;Localised Vendor name
-%{"Vendor-EN"}
-
-;Unique Vendor name
-:"Vendor"
-
-"\epoc32\release\ARMV5\UDEB\PeninputPluginKr.dll"-"!:\Sys\Bin\PeninputPluginKr.dll" 
-"\epoc32\data\Z\resource\fep\PeninputPluginKrRes.r01"-"!:\resource\fep\PeninputPluginKrRes.r01"
-"\epoc32\data\Z\resource\fep\PeninputPluginKrRes.r65"-"!:\resource\fep\PeninputPluginKrRes.r65"
--- a/fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_stub.pkg	Wed Mar 31 22:08:20 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-;
-; 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 "Eclipse Public License v1.0""
-; which accompanies this distribution, and is available
-; at the URL "http://www.eclipse.org/legal/epl-v10.html".
-;
-; Initial Contributors:
-; Nokia Corporation - initial contribution.
-;
-; Contributors:
-;
-; Description:
-;
-; Installation file for PeninputPluginKr dll
-;
-; This is an auto-generated PKG file by Carbide.
-; This file uses variables specific to Carbide builds that will not work
-; on command-line builds. If you want to use this generated PKG file from the
-; command-line tools you will need to modify the variables with the appropriate
-; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
-
-;
-; UID is the dll's UID
-;
-#{"PeninputPluginKr DLL"},(0xE95A395D),1,0,0, TYPE=SA
-
-
-;Localised Vendor name
-%{"Vendor-EN"}
-
-;Unique Vendor name
-:"Vendor"
-
-"\epoc32\release\ARMV5\UDEB\PeninputPluginKr.dll"-"!:\Sys\Bin\PeninputPluginKr.dll" 
-"\epoc32\data\Z\resource\fep\PeninputPluginKrRes.r01"-"!:\resource\fep\PeninputPluginKrRes.r01"
-"\epoc32\data\Z\resource\fep\PeninputPluginKrRes.r65"-"!:\resource\fep\PeninputPluginKrRes.r65"
Binary file fep/aknfep/peninputplugins/PeninputPluginKr/sis/PeninputPluginKr_stub.sis has changed
--- a/fep/aknfep/rom/PeninputPluginKr.iby	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/rom/PeninputPluginKr.iby	Wed Apr 14 16:18:34 2010 +0300
@@ -22,7 +22,6 @@
 ECOM_PLUGIN(PeninputPluginKr.dll,E95A395D.rsc)
 data=DATAZ_\FEP_RESOURCES_DIR\PeninputPluginKrRes.r01 FEP_RESOURCES_DIR\PeninputPluginKrRes.r01
 data=DATAZ_\FEP_RESOURCES_DIR\PeninputPluginKrRes.r65 FEP_RESOURCES_DIR\PeninputPluginKrRes.r65
-data=ZSYSTEM\install\PeninputPluginKr_stub.sis    System\Install\PeninputPluginKr_stub.sis
 
 #endif // defined(__VIRTUAL_KEYBOARD_INPUT) || defined(FF_VIRTUAL_FULLSCR_QWERTY_INPUT)
 #endif // __PENINPUTPLUGINKR_IBY__
--- a/fep/aknfep/src/AknFepManager.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/src/AknFepManager.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -3379,7 +3379,7 @@
            lang == ELangHongKongChinese ||
            lang == ELangPrcChinese)    
             {        
-            if( iPtiEngine->CurrentLanguage()->LanguageCode()== ELangEnglish 
+            if( CurrentInputLangCode() == ELangEnglish 
                 && IsFlagSet(EFlagQwertyShiftMode)
                 && !IsFlagSet(EFlagLongShiftKeyPress))
                 {
@@ -4091,6 +4091,7 @@
         
         iFepPluginManager->SetITUTSpellingStateL(EFalse); 
         iFepPluginManager->HideSpellEditor();
+        iFepPluginManager->SetInSpellModeFlag( EFalse );
         
         if (spell)
             {
@@ -4150,6 +4151,7 @@
         {
         TRAP_IGNORE(iFepPluginManager->SetITUTSpellingStateL(EFalse)); 
         iFepPluginManager->HideSpellEditor();
+        iFepPluginManager->SetInSpellModeFlag( EFalse );
 
         TRAP_IGNORE(UpdateCbaL(NULL)); 
         if (iFepPluginManager->CaseUpdatesSupressed())
@@ -4654,7 +4656,7 @@
 #endif             
             break;
         case EAknCmdT9PredictiveEditWord:
-            SetStopProcessFocus(ETrue);
+            SetStopProcessFocus( ETrue, EFalse );
             HandleChangeInFocus();
 #ifdef RD_INTELLIGENT_TEXT_INPUT
                 RemoveSuggestedAdvanceCompletionL();
@@ -5355,9 +5357,9 @@
             	// "Edit word" option is not available under edit menu in ITU-T mode.
             	// "Insert word" Should not be available QWERTY mode.
           	if (IsKoreanInputLanguage() || 
-                    iPtiEngine->CurrentLanguage()->LanguageCode() == ELangPrcChinese || 
-                    iPtiEngine->CurrentLanguage()->LanguageCode() == ELangTaiwanChinese || 
-                    iPtiEngine->CurrentLanguage()->LanguageCode() == ELangHongKongChinese  )
+          			CurrentInputLangCode() == ELangPrcChinese || 
+          			CurrentInputLangCode() == ELangTaiwanChinese || 
+          			CurrentInputLangCode() == ELangHongKongChinese  )
           		{
           		// No text prediction for korean.
           		aMenuPane->SetItemDimmed(EAknFepCmdPredActivate, ETrue );
@@ -7577,7 +7579,7 @@
         isModePermitted = EFalse;
         }
     else if (((aMode == EPinyin) || (aMode == EZhuyin) || (aMode == EStroke) || (aMode == ECangJie)
-        ||   (aMode == EHiraganaKanji) || (aMode == EKatakana)
+        ||   (aMode == EHiraganaKanji) || (aMode == EKatakana) || ( aMode == EHangul )
         || (((aMode == ELatin) || (aMode == ENumber) || iMode == ENativeNumber ) && (iCharWidth == EFullWidthChar)))
         && (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly))
         {
@@ -8448,104 +8450,151 @@
                         aTextToUncommit.Length(), EFalse));
 
     }
+void CAknFepManager::GetCandidatesWithIndexL(CDesCArray* aArray,
+        TInt& aActiveIdx, TInt& aSecondaryIdx)
+    {
+#ifndef RD_INTELLIGENT_TEXT_INPUT
+	return;
+#endif
+    aActiveIdx = -1;
+    aSecondaryIdx = -1;
+    iPtiEngine->HandleCommandL(
+            EPtiCommandUserActionGetCurrentIndexOfCandidates, &aActiveIdx);
+
+    if (iKeyBackSpaceHit)
+        aSecondaryIdx = aActiveIdx;
+    else
+        iPtiEngine->HandleCommandL(
+                EPtiCommandUserActionGetIndexOfSecondaryCandidate,
+                &aSecondaryIdx);
+
+    if (aArray == NULL || aActiveIdx == aSecondaryIdx)
+        return;
+
+    iPtiEngine->GetCandidateListL(*aArray);
+    iPtiEngine->HandleCommandL(
+            EPtiCommandUserActionGetCurrentIndexOfCandidates, &aActiveIdx);
+    iPtiEngine->HandleCommandL(
+            EPtiCommandUserActionGetIndexOfSecondaryCandidate, &aSecondaryIdx);
+    }
+
 void CAknFepManager::ShowExactWordPopupIfNecessaryL()
     {
+    // Ok, I have to do it here, same logics are in
+    // TryPopExactWordInICFL and ShowExactWordPopupIfNecessaryL.
+    // the code follows the old code's logic: this is a
+    // equivalent of the OLD ShowExactWordPopupIfNecessaryL; but
+    // now I can call TryPopExactWordInICFL and 
+    // TryPopExactWordInOtherPlaceL directly after extracting them from
+    // the OLD ShowExactWordPopupIfNecessaryL.
     iExactWordPopupContent->HidePopUp();
-    
+    SendEventsToPluginManL(EPluginHideTooltip);
+    if (!iWesternPredictive || !IsFlagSet(EFlagInsideInlineEditingTransaction))
+        return;
+
+    if (EPtiKeyboardHalfQwerty == KeyboardLayout())
+        {
+        if (IsFlagSet(CAknFepManager::EFlagNoMatches))
+            UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY);
+        return;
+        }
+
+    TryPopExactWordInICFL();
+    if (iFepPluginManager && !iFepPluginManager->IsTooltipOpenOnFSQ())
+        TryPopExactWordInOtherPlaceL();
+    }
+
+void CAknFepManager::TryPopExactWordInICFL()
+    {
+#ifndef RD_INTELLIGENT_TEXT_INPUT
+	return;
+#endif
+	
     // Before open tooltip,  
     // also need to check and close tooltip on it.
-    SendEventsToPluginManL( EPluginHideTooltip );
-    
-    if ( iWesternPredictive && iQwertyInputMode 
-    	 && IsFlagSet( EFlagInsideInlineEditingTransaction ) 
-    	 && (EPtiKeyboardHalfQwerty != KeyboardLayout()))
-        {
-        // In the proactive mode this popup is used to show the exact input if it differs from the
-        // default candidate shown inline.
-        // In the reactive mode it is used to show the best guess candidate if it differs from the
-        // exact word shown inline.
-        
-        TInt activeIdx = KErrNotFound;
-        TInt secondaryIdx = KErrNotFound;
-                     
-        iPtiEngine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, &activeIdx );
-        iPtiEngine->HandleCommandL( EPtiCommandUserActionGetIndexOfSecondaryCandidate, 
-        							&secondaryIdx );
-        
-        TBool popupBelowInline = EFalse; // ETrue -> popup is above inline editor                                                                   
-                
-       if(iKeyBackSpaceHit)
-    	    secondaryIdx = activeIdx;
-
-        if ( activeIdx  != secondaryIdx )
-            {
-            popupBelowInline = EFalse;
-            
-            CDesCArray* candidates = new (ELeave) CDesCArrayFlat(16);
-            CleanupStack::PushL(candidates);
-            GetCandidatesL(*candidates, activeIdx);
-            
-            // There is a possibility that the secondary index of the candidate changes
-            iPtiEngine->HandleCommandL( EPtiCommandUserActionGetIndexOfSecondaryCandidate, 
-                                        &secondaryIdx );
-            // In case the active index and the secondary index is same, then we do not need to display the
-            // popup
-            if ( activeIdx  == secondaryIdx )
-                {
-                CleanupStack::PopAndDestroy(candidates);
-                return;
-                }
-            
-            TPtrC secondaryWord = (*candidates)[secondaryIdx];
-            iExactWordPopupContent->SetTextL( secondaryWord );
-            iExactWordPopupContent->SetArrowDirection( MAknFepUiWordPopupContent::EUpwards );
-            CleanupStack::PopAndDestroy(candidates);
-
-            // Open FSQ tooltip if FSQ is opened
-     	    SendEventsToPluginManL( EPluginShowTooltip, secondaryIdx );
-
-          
-            // For addtion of ITI features on FSQ.
-            // Showing tooltip on avkon editor and FSQ ICF editor at same time probably 
-            // cause flicker problem. Add this condition to ensure not to show tooltip on
-            // avkon editor when it is being displayed on FSQ.
-            if ( iFepPluginManager && !( iFepPluginManager->IsTooltipOpenOnFSQ() ) )
-                {
-                TPoint  popupTopRight;
-                TInt    height;
-                TInt    ascent;
-                TInt    documentOffset = iPtiEngine->CurrentWord().Length();
-                
-                GetScreenCoordinatesL(popupTopRight, height, ascent, documentOffset);
-
-                iExactWordPopupContent->UpdateContentSize();
-
-                TBool rightToLeftLang = IsRightToLeftParagraph( DocPos() );
-                if ( !rightToLeftLang )
-                    {
-                    popupTopRight.iX += iExactWordPopupContent->Size().iWidth;       
-                    }
-                    
-                if ( popupBelowInline )
-                    {
-                    popupTopRight.iY += ascent / 2;                                   
-                    }
-                else
-                    {
-                    popupTopRight.iY -= height + iExactWordPopupContent->Size().iHeight;
-                    }
-                    
-                iExactWordPopupContent->SetPosition( popupTopRight );
-                iExactWordPopupContent->ShowPopUp();         
-                }                
-            }  
-        }
-		else if(iWesternPredictive 
-    	 && IsFlagSet( EFlagInsideInlineEditingTransaction ) 
-    	 && IsFlagSet(CAknFepManager::EFlagNoMatches)) 
-    	{
-    	UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY);
-    	}
+    SendEventsToPluginManL(EPluginHideTooltip);
+    if (!iWesternPredictive || !IsFlagSet(EFlagInsideInlineEditingTransaction))
+        return;
+
+    TInt activeIdx, secondaryIdx;
+    GetCandidatesWithIndexL(NULL, activeIdx, secondaryIdx);
+    if (activeIdx == secondaryIdx)
+        return;
+
+    CDesCArray* candidates = new (ELeave) CDesCArrayFlat(16);
+    CleanupStack::PushL(candidates);
+    GetCandidatesWithIndexL(candidates, activeIdx, secondaryIdx);
+    CleanupStack::PopAndDestroy(candidates);
+    if (activeIdx == secondaryIdx)
+        return;
+
+    if (iFepPluginManager)
+        SendEventsToPluginManL(EPluginShowTooltip, secondaryIdx);
+    }
+
+void CAknFepManager::TryPopExactWordInOtherPlaceL()
+    {
+#ifndef RD_INTELLIGENT_TEXT_INPUT
+	return;
+#endif
+	
+    iExactWordPopupContent->HidePopUp();
+    if (!iWesternPredictive || !IsFlagSet(EFlagInsideInlineEditingTransaction))
+        return;
+    // In the proactive mode this popup is used to show the exact input if it differs from the
+    // default candidate shown inline.
+    // In the reactive mode it is used to show the best guess candidate if it differs from the
+    // exact word shown inline.
+
+    TBool popupBelowInline = EFalse; // ETrue -> popup is above inline editor
+    TInt activeIdx, secondaryIdx;
+    GetCandidatesWithIndexL(NULL, activeIdx, secondaryIdx);
+    if (activeIdx == secondaryIdx)
+        return;
+
+    CDesCArray* candidates = new (ELeave) CDesCArrayFlat(16);
+    CleanupStack::PushL(candidates);
+    GetCandidatesWithIndexL(candidates, activeIdx, secondaryIdx);
+
+    // In case the active index and the secondary index is same, 
+    // then we do not need to display the popup
+    if (activeIdx == secondaryIdx)
+        {
+        CleanupStack::PopAndDestroy(candidates);
+        return;
+        }
+
+    TPtrC secondaryWord = (*candidates)[secondaryIdx];
+    iExactWordPopupContent->SetTextL(secondaryWord);
+    iExactWordPopupContent->SetArrowDirection(
+            MAknFepUiWordPopupContent::EUpwards);
+    CleanupStack::PopAndDestroy(candidates);
+
+    TPoint popupTopRight;
+    TInt height;
+    TInt ascent;
+    TInt documentOffset = iPtiEngine->CurrentWord().Length();
+
+    GetScreenCoordinatesL(popupTopRight, height, ascent, documentOffset);
+    iExactWordPopupContent->UpdateContentSize();
+
+    TBool rightToLeftLang = IsRightToLeftParagraph(DocPos());
+    if (!rightToLeftLang)
+        {
+        popupTopRight.iX += iExactWordPopupContent->Size().iWidth;
+        }
+
+    if (popupBelowInline)
+        {
+        popupTopRight.iY += ascent / 2;
+        }
+    else
+        {
+        popupTopRight.iY -= height + iExactWordPopupContent->Size().iHeight;
+        }
+
+    iExactWordPopupContent->SetPosition(popupTopRight);
+    iExactWordPopupContent->ShowPopUp();
     }
 
 void CAknFepManager::LaunchPredictiveSettingDialogL()
@@ -8584,8 +8633,16 @@
 	  }
     TUid fepUid = CCoeEnv::Static()->FepUid();
     ClearExtendedFlag(EExtendedFlagEdwinEditorDestroyed);
-	
-	RProperty::Set(KPSUidAknFep,KAknFepSettingDialogState,1);
+		
+    if ( iFepPluginManager && iFepPluginManager->IsSupportITIOnFSQ() )
+        {
+	    RProperty::Set( KPSUidAknFep, KAknFepSettingDialogState, 2 );
+	    }
+    else
+        {
+	    RProperty::Set( KPSUidAknFep, KAknFepSettingDialogState, 1 );
+		}
+    
 	UiInterface()->LaunchPredictiveSettingDialogL(R_PREDICTIVESETTING_DIALOG,
 												  R_PREDICTIVESETTINGDIALOG_MENUBAR,
 												  R_PREDICTIVETEXTOFF_CONFIRMATION_QUERY,
@@ -13254,6 +13311,17 @@
         aNewState = EIndicatorStateMultitapHindi;
         }
     }
+
+TInt CAknFepManager::CurrentInputLangCode()
+	{
+	ASSERT(iPtiEngine);
+	
+	MPtiLanguage* lang = iPtiEngine->CurrentLanguage();
+	ASSERT(lang);
+	
+	return lang->LanguageCode();
+	}
+
 TBool CAknFepManager::GetIndicatorImgID(TInt& aIndicatorImgID, TInt& aIndicatorTextID)
     {
     if (iPreviousEditingState == EStateNone)
@@ -13538,10 +13606,9 @@
         return EFalse;
         }
     
-    TInt numberModeSctId = NumericModeSCTResourceId(); 
     if (iMode == ENumber || iMode == ENativeNumber)
         {
-        if (iPermittedInputModes == EAknEditorNumericInputMode || !numberModeSctId) 
+        if (iPermittedInputModes == EAknEditorNumericInputMode || !NumericModeSCTResourceId()) 
             {
             // SCT is not launched if the number mode is the only input mode or
             // if there is not keymap resource for the current numeric keymap mode.
@@ -13555,18 +13622,7 @@
             // EAknEditorFlagUseSCTNumericCharmap or if also text input modes are
             // allowed and the keymap is EAknEditorAlphanumericNumberModeKeymap.
             ableToLaunchSCT = ETrue;
-            }
-        
-        if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == numberModeSctId)
-           {
-           TBool isEmpty = ETrue;
-           TRAP_IGNORE(isEmpty = GetSctLengthL(numberModeSctId));
-           if(isEmpty)
-               {
-               ableToLaunchSCT = EFalse;
-               }
-            }
-        
+            }      
         }
     if (!(EditorHasFreeSpace() && EditorState() 
         && EditorState()->SpecialCharacterTableResourceId()))
@@ -13574,8 +13630,6 @@
         ableToLaunchSCT = EFalse;
         }
     
-   
-    
     return ableToLaunchSCT;
     }
 
@@ -13668,6 +13722,11 @@
 
 TBool CAknFepManager::IsAbleToLaunchSmiley() const
     {
+	if(iLanguageCapabilities.iRightToLeftLanguage)
+		{
+	       return EFalse;
+		}
+	
     TBool ableToLaunchSmiley(EFalse);
     
     CAknEdwinState* edwinState = EditorState();
@@ -18153,6 +18212,15 @@
         {
     	currentEditorSCTResId = charMap;
         }
+    if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == charMap && R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_LATIN_ONLY == currentEditorSCTResId)
+        {
+        TBool isEmpty = ETrue;
+        TRAP_IGNORE(isEmpty = GetSctLengthL(charMap));
+        if(isEmpty)
+           {
+           return;
+           }
+        }
 
     if (currentEditorSCTResId)
         {
@@ -18254,7 +18322,7 @@
                  iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
                  iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
                 {
-                SetStopProcessFocus(ETrue, ETrue);
+                SetStopProcessFocus(ETrue, EFalse);
                 iFepPluginManager->SetMenuState();            
                 }            
              else if (!iFepPluginManager->IsGlobleNotes())
@@ -19800,8 +19868,9 @@
 void CAknFepManager::GetCandidatesL( CDesCArray& aArray, TInt& aActiveIdx )
     {
     iPtiEngine->GetCandidateListL(aArray);
-    iPtiEngine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, &aActiveIdx );
-    }  
+    iPtiEngine->HandleCommandL(
+            EPtiCommandUserActionGetCurrentIndexOfCandidates, &aActiveIdx);
+    }
 
 void CAknFepManager::GetUpdateCandidatePositionL(TRect& aRect)
     {
--- a/fep/aknfep/src/AknFepPluginManager.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/src/AknFepPluginManager.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -59,6 +59,7 @@
 #include <eikapp.h>
 #include <AknFepGlobalEnums.h>
 #include <AknFepInternalCRKeys.h>
+#include <AknFepInternalPSKeys.h>
 
 // User includes
 #include "AknFepManagerInterface.h" // MAknFepManagerInterface
@@ -246,7 +247,8 @@
                                           CAknFepCaseManager& aCaseMan )
     : iFepMan( aFepMan ), iLangMan( aLangMan ), iCaseMan( aCaseMan ),
       iSharedData( aSharedData ), iPluginPrimaryRange( ERangeInvalid ), iCandidateIndex(1),
-      iCharStartPostion( KInvalidValue )
+      iCharStartPostion( KInvalidValue ),
+	  iInSpellMode( EFalse )
     {
     iIndicatorImgID = 0;
     iIndicatorTextID = 0;
@@ -277,6 +279,8 @@
     iAvkonRepository = CRepository::NewL( KCRUidAvkon ); 
     
     iConnectAo = new (ELeave)CConnectAo(this);
+    
+    RProperty::Define( KPSUidAknFep, KAknFepSettingDialogState, RProperty::EInt );
     }
 
 // -----------------------------------------------------------------------------
@@ -1034,7 +1038,7 @@
         return EFalse;    
         }
     
-    // add by jiawenjuan to remember the old fep aware editor.
+    // remember the old fep aware editor.
     TBool cleanContent = EFalse;   
     if(iOldFepAwareEditor != iFepMan.FepAwareTextEditor())
         {
@@ -1053,7 +1057,11 @@
     if ( iITISettingDialogOpen )
     	{
     	iITISettingDialogOpen = EFalse;
-    	}  
+    	}
+
+    // Set the KAknFepTouchInputActive PS to 1, 
+    // it means that touch input is active now.
+    RProperty::Set( KPSUidAknFep, KAknFepTouchInputActive, 1 );
     
     // getting a new ui manager object corresponded in aMode.
     TInt uiLanguage = iSharedData.DisplayLanguage();
@@ -1157,6 +1165,16 @@
     iLangMan.SetSplitView(isSplit);
  
     TInt inputLang = iFepMan.InputLanguageCapabilities().iInputLanguageCode;
+    if( ( aSuggestMode == EPluginInputModeFSc || 
+            aSuggestMode == EPluginInputModeHwr ||
+            aSuggestMode == EPluginInputModeFingerHwr )
+            && ( iSharedData.PenInputLanguage() == ELangPrcChinese 
+                || iSharedData.PenInputLanguage() == ELangHongKongChinese
+                || iSharedData.PenInputLanguage() == ELangTaiwanChinese) )
+        {
+        // Solution for HWR can not be in used after switched to latin-only editor.
+        inputLang = iSharedData.PenInputLanguage();
+        }
     MAknFepManagerInterface* fepUI = iLangMan.GetPluginInputFepUiL(
                                                     aSuggestMode, 
                                                     inputLang,
@@ -1363,6 +1381,10 @@
     NotifyAppUiImeTouchWndStateL( EFalse );
     
     iCharStartPostion = KInvalidValue;
+    
+    // Set the KAknFepTouchInputActive PS to 0, 
+    // it means that touch input is inactive now.
+    RProperty::Set( KPSUidAknFep, KAknFepTouchInputActive, 0 );
     }
 
 // ---------------------------------------------------------------------------
@@ -1571,6 +1593,7 @@
                     break;
                 case EEikCmdEditPaste:
                     {//ctrl + v
+                    ResetMenuState();    
                     TKeyEvent ccpuKey = KAknCcpuPasteEvent;
                     CCoeEnv::Static()->SimulateKeyEventL( ccpuKey, EEventKey );
                     }   // Send copy-event to edwin.
@@ -2068,8 +2091,7 @@
 
         if( iInMenu && iCurEditor == iFepMan.FepAwareTextEditor() )
             {
-            ResetMenuState();
-            InformMfneUiStatusL( EFalse );
+            ResetMenuState();            
 			// If need to open setting app automatically, 
 			// do not open Touch window again. 
 			TBool langChange = iCurLanguage != iSharedData.InputTextLanguage();
@@ -2340,19 +2362,13 @@
     TPtr16 currentEditorContent = currentEditorContentBuf->Des();
 	edit->GetEditorContentForFep( currentEditorContent, 0, editContentLen ); 
 	
-	TBool send = ETrue;
-	
-	if ( !SetSyncIcfDataL( icfData, lastEditorContent, currentEditorContent ) )
+	if (SetSyncIcfDataL( icfData, lastEditorContent, currentEditorContent))
     	{
-    	send = EFalse;
+		iCurrentPluginInputFepUI->HandleCommandL
+			(ECmdPenInputSendEditorTextAndCurPos, reinterpret_cast<TInt>(&icfData));
+		iFepMan.TryPopExactWordInICFL();
     	}
 
-    if ( send )
-    	{
-    	iCurrentPluginInputFepUI->HandleCommandL
-            (ECmdPenInputSendEditorTextAndCurPos, reinterpret_cast<TInt>(&icfData));
-    	}
-    	
     if ( secretEditor ) 
         { 
         TBool cursorDisabled = IsEditorCursorDisabled(); 
@@ -2590,6 +2606,10 @@
         aIcfData.iStartPos = iCurSelCur.iCursorPos;
         aIcfData.iMidPos = -1;
         aIcfData.iText.Set(KNullDesC);
+        if( iFepMan.IsFlagSet(CAknFepManager::EFlagSupressAutoUpdate) && iFepMan.InputMode() == EHangul )
+        	{
+			aIcfData.iCursorSelVisible = EFalse;
+        	}
         }
         
     iInlineStateOn = ( aIcfData.iMidPos == 0 );
@@ -3780,7 +3800,12 @@
               }
         else
             {
-            SetITUTSpellingStateL(ETrue);
+            if ( !iInSpellMode )
+            	{
+				SetITUTSpellingStateL(ETrue);
+				iInSpellMode = ETrue;
+            	}
+            
             iIndicatorImgID = 0;
             iIndicatorTextID = 0;
             }    
@@ -4245,72 +4270,6 @@
                                                          reinterpret_cast<TInt>(&iSendAllList)));
     }
 
-TBool CAknFepPluginManager::DoNextCandidates()
-    {
-    if((iCandidateIndex) * 3 >= iCandidateList.Count())
-        {
-        iCandidateIndex = 0;
-        }
-        
-    iCandidateIndex++;           
-    
-    int nStartIndex = (iCandidateIndex - 1) * 3;
-
-    
-    for (TInt index = 0; index < 3; index++, nStartIndex ++)
-        {
-        if (nStartIndex < iCandidateList.Count())
-            {
-            TPtr16 canDes = iCandidateList[nStartIndex]->Des();
-            iSendList.iCandidate[index].Set(canDes);
-            }
-        else
-            {
-            iSendList.iCandidate[index].Set(KNullDesC);
-            }
-        }
-        
-    
-    TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerMatchList, 
-                                                         reinterpret_cast<TInt>(&iSendList)));    
-    
-    if (iCandidateIndex * 3 >= iCandidateList.Count())
-        {
-        return ETrue;
-        }
-    
-    return EFalse;
-    }
-    
-void CAknFepPluginManager::DoPreviousCandidates()
-    {
-    iCandidateIndex--;
-      
-    if(iCandidateIndex < 1)
-        {
-        iCandidateIndex = iCandidateList.Count() / 3 + 1;
-        }
-        
-    int nStartIndex = (iCandidateIndex -1) * 3;
-        
-    for (TInt index = 0; index < 3; index++, nStartIndex ++)
-        {
-        if (nStartIndex < iCandidateList.Count())
-            {
-            TPtr16 canDes = iCandidateList[nStartIndex]->Des();
-            iSendList.iCandidate[index].Set(canDes);
-            }
-        else
-            {
-            iSendList.iCandidate[index].Set(KNullDesC);
-            }
-        }
-        
-    
-    TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputFingerMatchList, 
-                                                         reinterpret_cast<TInt>(&iSendList)));    
-    }
-    
 TBool CAknFepPluginManager::GetIndicatorImgID(const TInt IndicatorUID,TInt &aImage, TInt &aMask)
     {
     TBool ret = EFalse;
@@ -4682,6 +4641,11 @@
     return resId;
     }
 
+void CAknFepPluginManager::SetInSpellModeFlag( TBool aFlag )
+	{
+	iInSpellMode = aFlag;
+	}
+
 void CAknFepPluginManager::SetPromptText( TBool aCleanContent )
     {
     if (IsDimed() && !iResourceChange) 
@@ -5258,22 +5222,17 @@
         return;
         }
     
-	CDesCArray* candidates = new ( ELeave ) CDesCArrayFlat( KDefaultCandidateArraySize );
-	CleanupStack::PushL( candidates );
+	CDesCArray* candidates = new (ELeave) CDesCArrayFlat(KDefaultCandidateArraySize);
+	CleanupStack::PushL(candidates);
 	TInt activeIdx = KErrNotFound;
-	iFepMan.GetCandidatesL( *candidates, activeIdx );
-	if ( aSecondaryIdx < candidates->Count() )
+	iFepMan.GetCandidatesL(*candidates, activeIdx);
+	
+	if (aSecondaryIdx < candidates->Count())
 		{
-		TPtrC aText = ( *candidates )[ aSecondaryIdx ];
-
-	    TFepITITooltipText tooltipText;
-	    tooltipText.iDataSize = aText.Size();
-	    tooltipText.iText.Set( aText );    
-	    TPtrC tooltipTextPtr;
-	    tooltipTextPtr.Set( aText );    
-	    iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputPopupTooltip, 
-	                                reinterpret_cast<TInt>( &tooltipTextPtr ) );
+		TPtrC aText = (*candidates)[aSecondaryIdx];
 	    
+   	    iCurrentPluginInputFepUI->HandleCommandL(
+   	    		ECmdPenInputPopupTooltip,  reinterpret_cast<TInt>(&aText));
 	    iTooltipOpenOnFSQ = ETrue;		
 		}
 	else
@@ -5631,13 +5590,21 @@
     	}
     
     // Close FSQ then current keyboard type return to the previously-stored one,
-    // 1. The first step is to restore keyboard type, because the value will
-    // be used in iFepMan.SetQwertyMode( EFalse );
-    ResetItiKeyboardLayoutL();
+    // But, if iSharedData.QwertyInputMode() == EFalse, it means that hardware 
+    // is slided, and capserver will be responsible to set the corrected keyboard type
+    // and qwerty input mode. 
+    // So there is no need to do step 1 and step 2 here, otherwise, 
+    // values set by capserver will be overrided.
+    if ( !iSharedData.QwertyInputMode() )
+    	{    
+		// 1. The first step is to restore keyboard type, because the value will
+		// be used in iFepMan.SetQwertyMode( EFalse );
+		ResetItiKeyboardLayoutL();
+		
+		// 2. Change FEP to non qwerty mode.
+		iFepMan.SetQwertyMode( EFalse );    
+    	}
     
-    // 2. Change FEP to non qwerty mode.
-    iFepMan.SetQwertyMode( EFalse );
-
     // 3. Notify the deactivation of ITI to peninputserver        
     iCurrentPluginInputFepUI->HandleCommandL( ECmdPeninputITIStatus, EFalse );    
  
@@ -5655,22 +5622,21 @@
         {
         return;
         }    
-    // 1. Record the previous keyboard type
-    RProperty keyboardLayoutStatusProperty;
-    keyboardLayoutStatusProperty.Get( KCRUidAvkon, KAknKeyBoardLayout, 
-                                          iLastKeyboardLayout );
-
+    // 1. Record the previous virtual keyboard type    
+    RProperty::Get( KPSUidAknFep, KAknFepVirtualKeyboardType, iLastKeyboardLayout );
+    
     // 2. Utilize right qwerty keyboard type
-    keyboardLayoutStatusProperty.Set( KCRUidAvkon, KAknKeyBoardLayout, 
-                                      EPtiKeyboardQwerty4x12 ); 
+    RProperty::Set( KPSUidAknFep, KAknFepVirtualKeyboardType, EPtiKeyboardQwerty4x12 );
+    
     }
+
 // -----------------------------------------------------------------------------
 // Restore keyboard layout after closing FSQ.
 // -----------------------------------------------------------------------------
 //
 void CAknFepPluginManager::ResetItiKeyboardLayoutL()
     {    
-    if ( !iLastKeyboardLayout || iITISettingDialogOpen )
+    if ( !iLastKeyboardLayout )
     	{
     	return;
     	}
@@ -5678,10 +5644,11 @@
     // Close FSQ then current keyboard type return to the previously-stored one,
     //Restore keyboard layout type and qwerty mode of FEP        
     // 1. Store the previous keyboard type, 
-    // except that opening predictive setting dialog cause fsq closed.        
-    RProperty keyboardLayoutStatusProperty;
-    keyboardLayoutStatusProperty.Set( KCRUidAvkon, KAknKeyBoardLayout, 
+    // except that opening predictive setting dialog cause fsq closed.    
+    RProperty::Set( KPSUidAknFep, KAknFepVirtualKeyboardType, 
                                           iLastKeyboardLayout );
+    
+    
     iLastKeyboardLayout = 0;        
     }
 
--- a/fep/aknfep/src/AknFepSharedDataInterface.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/src/AknFepSharedDataInterface.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -84,7 +84,16 @@
         iKeyboardLayoutStatusSubscriber->StopSubscribe();
         }
     iKeyboardLayoutStatusProperty.Close();
-    delete iKeyboardLayoutStatusSubscriber;    
+    delete iKeyboardLayoutStatusSubscriber;
+    
+#ifdef RD_SCALABLE_UI_V2 
+    if ( iVirtualKeyboardLayoutStatusSubscriber )
+        {
+        iVirtualKeyboardLayoutStatusSubscriber->StopSubscribe();
+        }
+    delete iVirtualKeyboardLayoutStatusSubscriber;
+    iVirtualKeyboardLayoutStatusProperty.Close();
+#endif
 #endif
     iQwertyModeStatusProperty.Close();
     delete iQwertyModeStatusSubscriber;
@@ -418,9 +427,7 @@
 #ifdef RD_INTELLIGENT_TEXT_INPUT
 TInt CAknFepSharedDataInterface::KeyboardLayout() //const
     {
-    TInt value = 0;
-    iKeyboardLayoutStatusProperty.Get(value);
-    return value;
+	return ActiveKeyboardType();
     }
 
 #ifdef FF_DUAL_LANGUAGE_SUPPORT
@@ -492,6 +499,15 @@
                                          TCallBack(HandleKeyboardLayoutChangeNotification, this), 
                                          iKeyboardLayoutStatusProperty);    
     iKeyboardLayoutStatusSubscriber->SubscribeL();
+
+#ifdef RD_SCALABLE_UI_V2 
+    User::LeaveIfError( iVirtualKeyboardLayoutStatusProperty.Attach
+    		                                                ( KPSUidAknFep, KAknFepVirtualKeyboardType ) );    
+    iVirtualKeyboardLayoutStatusSubscriber = new (ELeave) CSubscriber(
+                                         TCallBack( HandleVirtualKeyboardLayoutChangeNotification, this ), 
+                                         iVirtualKeyboardLayoutStatusProperty );    
+    iVirtualKeyboardLayoutStatusSubscriber->SubscribeL();
+#endif // RD_SCALABLE_UI_V2    
 #endif
     iQwertyModeStatusSubscriber = new (ELeave) CSubscriber(
     								TCallBack(QwertyModeChangeNotification, this), 
@@ -728,7 +744,43 @@
 
     return error;
     }
+
+TPtiKeyboardType CAknFepSharedDataInterface::ActiveKeyboardType() const
+    {    
+	TInt keyboardType = EPtiKeyboardNone;		   
+#ifdef RD_SCALABLE_UI_V2
+	// Get physical keyboard type
+	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardType );
+
+	// When active keyboard is virtual keyboard, 
+	// need to get the active virtual keyboard type 
+	// and set keyboardType again.
+	
+	// When the default physical keyboard is 0, 
+	// it means that there is no physical keyboard,
+	// also need to get the active virtual keyboard type.
+	TInt isVirtualInputActive = 0;
+	RProperty::Get( KPSUidAknFep, KAknFepTouchInputActive, 
+					isVirtualInputActive );    
+	if ( isVirtualInputActive > 0 || keyboardType == 0 )
+		{
+		// Active keyboard is virtual keyboard          
+		RProperty::Get( KPSUidAknFep, KAknFepVirtualKeyboardType, 
+						keyboardType );      
+		}
+#else if
+	// Get physical keyboard type
+	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardType );	    
 #endif
+
+	if ( keyboardType <= 0 || keyboardType >= EPtiKeyboardMaxLayout )
+		{
+	    keyboardType = EPtiKeyboardNone;
+		}        
+	return (TPtiKeyboardType)keyboardType;
+    }
+#endif // RD_INTELLIGENT_TEXT_INPUT
+
 TInt CAknFepSharedDataInterface::HandleRepositoryCallBack(TAny* aPtr)
     {
     CAknFepSharedDataInterface *self = STATIC_CAST(CAknFepSharedDataInterface*, aPtr);
@@ -1153,6 +1205,22 @@
         return KErrArgument;
         }
     }
+
+#ifdef RD_SCALABLE_UI_V2
+TInt CAknFepSharedDataInterface::HandleVirtualKeyboardLayoutChangeNotification(TAny* aObj)
+	{
+    if (aObj)
+        {
+        static_cast<CAknFepSharedDataInterface*>(aObj)->HandleVirtualKeyboardLayoutChange();
+        return KErrNone;
+        }
+    else
+        {
+        return KErrArgument;
+        }	
+	}
+#endif // RD_SCALABLE_UI_V2
+
 #endif
     
     
@@ -1278,6 +1346,24 @@
     iFepManager->StopDisplayingMenuBar();
 #endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
     }
+
+#ifdef RD_SCALABLE_UI_V2
+// ---------------------------------------------------------------------------
+// Handles the change to virtual keyboard layout.
+// 
+// ---------------------------------------------------------------------------
+//
+void CAknFepSharedDataInterface::HandleVirtualKeyboardLayoutChange()
+	{
+	TInt value = 0;
+    TPtiKeyboardType keyboardType;
+    iVirtualKeyboardLayoutStatusProperty.Get(value);
+    keyboardType = (TPtiKeyboardType)value;
+    iFepManager->SetKeyboardLayout(keyboardType);
+    iFepManager->SetFnKeyMappingState();
+	}
+#endif // RD_SCALABLE_UI_V2
+
 TInt CAknFepSharedDataInterface::PredictiveTextAutoCompleteOn()
     {
     TInt value = 0;
--- a/fep/aknfep/src/AknFepUiInputStateInitialKoreanMultitap.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateInitialKoreanMultitap.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -133,14 +133,20 @@
           
  	    if (aKey == EPtiKeyStar)
             {
-            /* 
-           	ptiengine->DeleteKeyPress();
+
+           	/*ptiengine->DeleteKeyPress();
             TPtrC text = ptiengine->PreviousCandidate();
             fepMan->UpdateInlineEditL(text, text.Length());
             fepMan->CommitInlineEditL();
-            ptiengine->ClearCurrentWord();*/
+            ptiengine->ClearCurrentWord(); */
 
-            fepMan->LaunchSelectModeMenuL();               
+            //fepMan->LaunchSelectModeMenuL();
+            
+            if (fepMan->IsAbleToLaunchSCT())
+                {
+                fepMan->LaunchSpecialCharacterTableL();
+                }
+                           
             }
 		else
 			{
--- a/fep/aknfep/src/aknfepuispellcontainer.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/fep/aknfep/src/aknfepuispellcontainer.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -90,7 +90,10 @@
 // 
 void CAknFepUiSpellContainer::SetInputWinFocus( TBool aFocus )
 	{
-	iInputPane->SetFocus( aFocus );
+	if( iInputPane->IsFocused() != aFocus )
+		{
+	    iInputPane->SetFocus( aFocus );
+		}
 	// When release focus, remove from stack.
 	if( aFocus )
 		{
--- a/inputmethods_plat/aknfep_status_api/inc/AknFepInternalPSKeys.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/inputmethods_plat/aknfep_status_api/inc/AknFepInternalPSKeys.h	Wed Apr 14 16:18:34 2010 +0300
@@ -54,6 +54,30 @@
  */
 const TUint32 KAknFepSettingDialogState = 0x00000002;
 
+/**
+ * The virtual keyboard type
+ *
+ * Possible values:
+ * 0: None
+ * 1: Conventional 12 phone keypad
+ * 2: 4x12 Qwerty keyboard.
+ * 3: EPtiKeyboardQwerty4x10
+ * 4: EPtiKeyboardQwerty3x11
+ * 5: Half qwerty.
+ * 6: EPtiKeyboardCustomQwerty
+ */   
+const TUint32 KAknFepVirtualKeyboardType = 0x00000003;
+
+/**
+ * Touch Input status. This key is updated by touch input according to the
+ * opening and closing virtual keyboard events. 
+ *
+ * Possible values:
+ * 0: virtual keyboard type is not active.
+ * 1: virtual keyboard type is active.
+ */  
+const TUint32 KAknFepTouchInputActive = 0x00000004;
+
 #endif
 
 // End of file
--- a/textinput/GSLangPlugin/src/GSLangModel.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/GSLangPlugin/src/GSLangModel.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -56,6 +56,8 @@
 //CONSTANTS
 const TInt KGSDiskSpaceLimitForLanguageChange = 300000;
 
+const TInt KFepChineseInputModeLength = 10;
+
 // ================= MEMBER FUNCTIONS =======================
 
 // ----------------------------------------------------------------------------
@@ -841,9 +843,27 @@
         {
         // fetch the setting value from shared data etc.
         // return the value
-        TInt MethodItem;
+        TUint MethodItem;
+        _LIT(Kx, "x");
+        // This conversion is needed because KAknFepChineseInputMode cenrep key original type was 16bit int.
+        // now type is changed to string, so that it can accommodate bigger values like EHangul 0x16000. 
+        TBuf<KFepChineseInputModeLength> conversion;
         User::LeaveIfError( iAknFepRepository->
-            Get( KAknFepChineseInputMode, MethodItem ) );
+                    Get( KAknFepChineseInputMode, conversion ) );
+        TInt len = conversion.Find(Kx);
+        TLex lex;
+        
+        if(len)
+            {
+            TPtrC ptr = conversion.Mid(len +1);
+            lex.Assign(ptr);
+            }
+        else
+            {
+            lex.Assign(conversion);
+            }
+        
+        lex.Val(MethodItem, EHex);
         return MethodItem;
         }
     else
@@ -863,8 +883,11 @@
     {
     if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) )
         {
+        TBuf<KFepChineseInputModeLength> conversion;
+        conversion.Num(aMethod, EHex);
+
         User::LeaveIfError(
-            iAknFepRepository->Set( KAknFepChineseInputMode, aMethod ) );
+                    iAknFepRepository->Set( KAknFepChineseInputMode, conversion ) );
 
         // See if it cannot do predictive text entry
         if( !CheckDictionaryFromPtiL( aMethod ) )
--- a/textinput/GSLangPlugin/src/GSLangPlugin.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/GSLangPlugin/src/GSLangPlugin.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -41,7 +41,7 @@
 #include <StringLoader.h>
 #include <syslangutil.h>        // Display UI language
 #include <ctsydomainpskeys.h>
-#include <SATDomainPSKeys.h>
+#include <satdomainpskeys.h>
 #include <e32property.h>
 #ifdef RD_INTELLIGENT_TEXT_INPUT
 #include "PredictiveSettingDialog.h"
--- a/textinput/peninputarc/bwins/peninputlayoutcontrolU.DEF	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputarc/bwins/peninputlayoutcontrolU.DEF	Wed Apr 14 16:18:34 2010 +0300
@@ -591,4 +591,5 @@
 	?CancelPointerDownL@CTransparentHwrWndExt@@UAEXXZ @ 590 NONAME ; void CTransparentHwrWndExt::CancelPointerDownL(void)
 	?DrawLine@CTransparentHwrWndExt@@EAE?AVTRect@@ABVTPoint@@0H@Z @ 591 NONAME ; class TRect CTransparentHwrWndExt::DrawLine(class TPoint const &, class TPoint const &, int)
 	?EndStrokeL@CHwrWndBase@@UAEXH@Z @ 592 NONAME ; void CHwrWndBase::EndStrokeL(int)
+	?SetStarIcon@CVirtualKeyboard@@QAEXPAVCPenInputColorIcon@@@Z @ 593 NONAME ; void CVirtualKeyboard::SetStarIcon(class CPenInputColorIcon *)
 
--- a/textinput/peninputarc/eabi/peninputlayoutcontrolU.DEF	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputarc/eabi/peninputlayoutcontrolU.DEF	Wed Apr 14 16:18:34 2010 +0300
@@ -725,4 +725,5 @@
 	_ZN21CTransparentHwrWndExt18EndStrokeAndClearLEv @ 724 NONAME
 	_ZN21CTransparentHwrWndExt8DrawLineERK6TPointS2_i @ 725 NONAME
 	_ZN21CTransparentHwrWndExt9DrawPointERK6TPointi @ 726 NONAME
+	_ZN16CVirtualKeyboard11SetStarIconEP18CPenInputColorIcon @ 727 NONAME
 
--- a/textinput/peninputarc/gsplugin/gspeninputplugin/src/gspeninputmodel.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputarc/gsplugin/gspeninputplugin/src/gspeninputmodel.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -48,6 +48,8 @@
 const TUid KUidtruiApp = { 0x2000B104 };
 const TUid KUidPenInputSettingApp = { 0x2001959B };
 
+const TInt KFepChineseInputModeLength = 10;
+
 _LIT(KLeftBracket, "(" );
 _LIT(KRightBracket, ")" );
 
@@ -1185,7 +1187,9 @@
         case ELangHongKongChinese:
         case ELangTaiwanChinese:
             {
-            iAknfepRepository->Set(KAknFepChineseInputMode, aInputMode);
+            TBuf<KFepChineseInputModeLength> conversion;
+            conversion.Num(aInputMode, EHex);
+            iAknfepRepository->Set( KAknFepChineseInputMode, conversion );
             }
             break;
          default:
@@ -1200,14 +1204,33 @@
 //
 TInt CGSPenInputModel::GetFepInputMode()
     {
-    TInt inputMode = 0;
+    TUint inputMode = 0;
     switch(iInputLanguage)
         {
         case ELangPrcChinese:
         case ELangHongKongChinese:
         case ELangTaiwanChinese:
             {
-            iAknfepRepository->Get(KAknFepChineseInputMode, inputMode);
+            _LIT(Kx, "x");
+            // This conversion is needed because KAknFepChineseInputMode cenrep key original type was 16bit int.
+            // now type is changed to string, so that it can accommodate bigger values like EHangul 0x16000. 
+            TBuf<KFepChineseInputModeLength> conversion;
+            iAknfepRepository->Get( KAknFepChineseInputMode, conversion );
+           
+            TInt len = conversion.Find(Kx);
+            TLex lex;
+            
+            if(len)
+                {
+                TPtrC ptr = conversion.Mid(len +1);
+                lex.Assign(ptr);
+                }
+            else
+                {
+                lex.Assign(conversion);
+                }
+            
+            lex.Val(inputMode, EHex);
             }
             break;
          default:
@@ -1404,7 +1427,6 @@
         supportMode = iPenInputServer.SupportInputMode( iInputLanguage );
         }
 
-    TBool supportHWR = EFalse;
     if( supportMode & EPluginInputModeHwr ||
         supportMode & EPluginInputModeFSc ||
         supportMode & EPluginInputModeFingerHwr)
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h	Wed Apr 14 16:18:34 2010 +0300
@@ -559,7 +559,9 @@
      * @param aIcon shift icon
      */ 	
 	IMPORT_C void SetShiftIcon( CPenInputColorIcon* aIcon );
+	IMPORT_C void SetStarIcon( CPenInputColorIcon* aIcon );
 	inline CPenInputColorIcon* ShiftIcon();
+	inline CPenInputColorIcon* StarIcon();
     
 	/**
 	 * Install preview bubble renderer
@@ -864,6 +866,12 @@
      * The shift icon showing on the key
      */      
     CPenInputColorIcon* iShiftIcon;
+    
+	/**
+     * The star icon showing on the key
+     */      
+    CPenInputColorIcon* iStarIcon;
+    
     MPeninputVkbPreviewBubbleRenderer* iPreviewBubbleRenderer;
 friend class CVirtualKeyCtrl;
 friend class CVirtualRawKeyCtrl;
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.inl	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.inl	Wed Apr 14 16:18:34 2010 +0300
@@ -188,6 +188,11 @@
 	return iShiftIcon;	
 	}
 
+inline CPenInputColorIcon* CVirtualKeyboard::StarIcon()
+	{
+	return iStarIcon;	
+	}
+
 //class CVirtualKey
 
 
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmicfcustomdraw.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmicfcustomdraw.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -160,6 +160,12 @@
     switch (aCode)
         {
         case 0x0020: // unicode for space
+        case 0x0023: // unicode for #
+        case 0x005f: // unicode for _
+        case 0x002a: // unicode for *
+        case 0x0040: // unicode for @
+        case 0x0026: // unicode for &
+        case 0x003d: // unicode for =
             return MTmCustom::EBkLineBreakClass;//ELineBreakClasses;
         default:
             break; // carry on
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -582,6 +582,7 @@
         iCursorSel.iAnchorPos = icfdata.iCurSel.iAnchorPos + iPromptTextLen;
         DrawMfneText();
         iSynCursor = EFalse;
+        iOldMfneText.Close();
         iOldMfneText.CreateL(ptr);
         }
         
@@ -1059,8 +1060,11 @@
         iCharFormatMask.ClearAll();
         iCharFormatMask.SetAttrib( EAttFontUnderline );        
         iCharFormat.iFontPresentation.iUnderline = EUnderlineOn ;
-        iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, iPreInlineStartPos, 
-                                    iPreInlineEndPos - iPreInlineStartPos);
+        if( iPreInlineStartPos >= 0 && iPreInlineEndPos <= iRichText->DocumentLength() + 1 )
+            {
+            iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, iPreInlineStartPos, 
+                                        iPreInlineEndPos - iPreInlineStartPos);
+            }
         }
     
     //iRichText->SetInsertCharFormatL(iCharFormat, iCharFormatMask, iRichText->DocumentLength() - iPromptTextLen);
@@ -1705,10 +1709,10 @@
 
     iLayout->SetAmountToFormat(CTextLayout::EFFormatAllText);    
     
-    if ( iFormatChange )
-        {
-        iTextView->HandleGlobalChangeNoRedrawL();
-        }
+//    if ( iFormatChange )
+//        {
+//        iTextView->HandleGlobalChangeNoRedrawL();
+//        }
     
     TBool ready = Ready();
     if( ready )
@@ -1722,13 +1726,18 @@
 	    SetReady( ETrue );    
 	    }
 
-    if ( iFormatChange )	    
-        {
-        iTextView->SetSelectionL( iTextView->Selection() );
-        RecalcualteTextPositionL();
-        SetMsgBubbleRect();
-        Draw();
-        }
+//    if ( iFormatChange )	    
+//        {
+//        iTextView->SetSelectionL( iTextView->Selection() );
+//        RecalcualteTextPositionL();
+//        SetMsgBubbleRect();
+//        Draw();
+//        }
+		iTextView->HandleGlobalChangeNoRedrawL();
+		iTextView->SetSelectionL( iTextView->Selection() );
+		RecalcualteTextPositionL();
+		SetMsgBubbleRect();
+		Draw();
     }
 
 TBool CFepLayoutMultiLineIcfEditor::BelongToPromptText(TInt aPos)
@@ -2474,7 +2483,10 @@
     iCharFormat.iFontPresentation.iTextColor = iTextColor;
 
     // set prompt text as bold
-    iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 0, aPromptTextLen );//- 1
+    if( aPromptTextLen <= iRichText->DocumentLength() + 1)
+        {
+        iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 0, aPromptTextLen );//- 1
+        }
     iTextView->HandleRangeFormatChangeL(TCursorSelection(0, aPromptTextLen ), ETrue);//- 1
 
     // set remain text as non-bold
@@ -2538,17 +2550,23 @@
             }
         iCharFormatMask.SetAttrib(aAttribute);
 
+        TInt aPos = Min( aStartPos, aEndPos );
+        TInt aLength = Abs( aEndPos - aStartPos );
         if (aNoMatchState)
             {
-            iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 
-                                        Min(aStartPos,aEndPos), Abs( aEndPos - aStartPos ) + 1);
-            iTextView->HandleRangeFormatChangeL(TCursorSelection(aStartPos, aEndPos + 1), ETrue);
+            if ( aPos >= 0 && aPos + aLength <= iRichText->DocumentLength())
+                {
+                iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, aPos, aLength + 1);
+                iTextView->HandleRangeFormatChangeL(TCursorSelection(aStartPos, aEndPos + 1), ETrue);
+                }
             }
         else
             {
-            iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 
-                                        Min(aStartPos,aEndPos), Abs( aEndPos - aStartPos ) );
-            iTextView->HandleRangeFormatChangeL(TCursorSelection(aStartPos, aEndPos), ETrue);
+            if ( aPos >= 0 && aPos + aLength <= iRichText->DocumentLength() + 1 )
+                {
+                iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, aStartPos, aLength );
+                iTextView->HandleRangeFormatChangeL(TCursorSelection(aStartPos, aEndPos), ETrue);
+                }
             }
 
         aPreStartPos = aStartPos;
@@ -2693,7 +2711,7 @@
     {
     if( !iFormatChange )
         {
-        return;
+        return ;
         }
     //apply line space
     CParaFormat* paraFormat=CParaFormat::NewL();
@@ -2814,13 +2832,13 @@
    
     if ( BelongToPromptText(aCurSel.iCursorPos) )
         {
-        //pls refer to bug: ELWG-7MZ5EZ, why to use iPromptText->Length() instead of iPromptTextLen 
+        //why to use iPromptText->Length() instead of iPromptTextLen 
         //iCursorSel.iCursorPos = iPromptTextLen;
         iCursorSel.iCursorPos = iPromptText->Length();
         }
     if ( BelongToPromptText(aCurSel.iAnchorPos) )
         {
-        //pls refer to bug: ELWG-7MZ5EZ, why to use iPromptText->Length() instead of iPromptTextLen
+        //why to use iPromptText->Length() instead of iPromptTextLen
         //iCursorSel.iAnchorPos = iPromptTextLen;
         iCursorSel.iAnchorPos = iPromptText->Length();
         }
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -157,6 +157,7 @@
     DestroyIrregularBmps();
     
     delete iShiftIcon;
+    delete iStarIcon;
     }
 
 // ---------------------------------------------------------------------------
@@ -1135,6 +1136,13 @@
 	delete iShiftIcon;
 	iShiftIcon = aIcon;	
 	}
+
+EXPORT_C void CVirtualKeyboard::SetStarIcon( CPenInputColorIcon* aIcon )
+	{
+	delete iStarIcon;
+	iStarIcon = aIcon;	
+	}
+
 /*
 EXPORT_C CFepUiBaseCtrl* CVirtualKeyboard::HandlePointerDownEventL(const TPoint& aPoint)
     {
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -29,6 +29,7 @@
 #include "peninputpluginutils.h"
 
 _LIT( KKeyShiftCharacter, "\x2191");
+_LIT( KKeyStarCharacter, "\x002a");
 
 const TInt KDefaultKeyMargin = 10;
 
@@ -143,6 +144,14 @@
 														 *gc,
 														 textLayout.TextRect() );	
 					}
+				else if(iKeyboard->StarIcon() &&
+						iKeyInfo->KeyUnicodes(TVirtualKeyTextPos(i)) == KKeyStarCharacter )
+					{
+					CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
+					AknPenInputDrawUtils::DrawColorIcon( iKeyboard->StarIcon(),
+														 *gc,
+														 textLayout.TextRect() );		
+					}
 				else				    
 				    {
 				    textLayout.DrawText(*BitGc(), iKeyInfo->KeyUnicodes(TVirtualKeyTextPos(i)), 
--- a/textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -268,6 +268,9 @@
         case EPeninputLayoutEventShift: 
             {
             HandleShiftAndCapslockBtnClicked();
+       		TInt shiftStatus = CPeninputDataConverter::AnyToInt
+		        ( iLayoutContext->RequestData( EPeninputDataTypeShiftDown ) );
+		    ChangeMergedButtonStatus( shiftStatus, 0 );
             }
             break;
         case EPeninputLayoutEventCapslock:
--- a/textinput/peninputfingerhwr/src/peninputfingerhwrengine.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputfingerhwr/src/peninputfingerhwrengine.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -20,7 +20,8 @@
 #include <aknfeppeninputenums.h>
 #include <PtiHwrRecognizer.h>
 #include <e32property.h>
-#include "PtiDefs.h"
+#include <AknFepInternalPSKeys.h>
+#include <PtiDefs.h>
 
 //USER INCLUDES
 #include "peninputfingerhwrengine.h"
@@ -671,7 +672,7 @@
 void CAknFepHwrEngine::ResetKeyboardType()
     {
 #ifdef RD_INTELLIGENT_TEXT_INPUT    
-    RProperty::Set(KCRUidAvkon, KAknKeyBoardLayout, iKeyboardType);
+    RProperty::Set( KPSUidAknFep, KAknFepVirtualKeyboardType, iKeyboardType );
 #endif
     }        
      
@@ -682,7 +683,7 @@
 void CAknFepHwrEngine::SetKeyboardToQwerty()
     {
 #ifdef RD_INTELLIGENT_TEXT_INPUT   
-    RProperty::Set(KCRUidAvkon, KAknKeyBoardLayout, EPtiKeyboardQwerty4x12);
+    RProperty::Set( KPSUidAknFep, KAknFepVirtualKeyboardType, EPtiKeyboardQwerty4x12 );
 #endif
     }        
 
@@ -693,7 +694,7 @@
 void CAknFepHwrEngine::GetKeyboardType()
     {
 #ifdef RD_INTELLIGENT_TEXT_INPUT
-    RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, iKeyboardType);
+    RProperty::Get( KPSUidAknFep, KAknFepVirtualKeyboardType, iKeyboardType );
 #endif    
     }        
 
--- a/textinput/peninputfingerhwr/src/peninputfingerhwrstatemanager.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputfingerhwr/src/peninputfingerhwrstatemanager.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -1154,23 +1154,8 @@
 // 
 void CPeninputFingerHwrChineseStatePredictSelecting::OnClickBackSpaceL()
     {
-    iDataStore.TriggerStr()->DeleteLast();
-    if (iDataStore.TriggerStr()->IsEmpty())
-        {
-        iDataStore.SetChineseSymbolL();
-        iDataStore.SetFixChinesePredictiveL();
-        iStateManager.SetState( CPeninputFingerHwrStateManagerCn::
-                EPeninputFingerHwrStatePredictSelectingCn );
-        }
-    else
-        {
-        iDataStore.DoPredictiveL();
-        if( iDataStore.PredictiveCount() <= 0 )
-                {
-                iDataStore.TriggerStr()->DeleteAll();
-                iDataStore.SetFixChinesePredictiveL();     
-                }
-        }
+    iDataStore.TriggerStr()->DeleteAll();
+    iStateManager.SetState(CPeninputFingerHwrStateManagerCn::EPeninputFingerHwrStateStandbyCn);
     }
 
    
--- a/textinput/peninputgenericitut/group/iconlist.txt	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/group/iconlist.txt	Wed Apr 14 16:18:34 2010 +0300
@@ -47,3 +47,4 @@
 -c8,8 qgn_indi_input_backspace.svg
 -c8,8 qgn_indi_input_shift.svg
 -c8,8 qgn_indi_itut_backspace1.svg
+-c8,8 qgn_indi_feb_asterisk.svg
--- a/textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h	Wed Apr 14 16:18:34 2010 +0300
@@ -177,7 +177,14 @@
     TInt iIcfTextLineSpaceMarginForPrtWest;
     TInt iIcfTextHeightForPrtWest;
     TRect iShiftIconRectForPrtWest;
+    TRect iStarIconRectForPrtWest;
     TInt iSpellIcfTextHeightForPrtWest;
+    
+	TInt iSpellIcfTextLeftMarginForPrtWest;
+    TInt iSpellIcfTextRightMarginForPrtWest;
+    TInt iSpellIcfTextTopMarginForPrtWest;
+    TInt iSpellIcfTextBottomMarginForPrtWest;
+    TInt iSpellIcfTextLineSpaceMarginForPrtWest;
 private:
     CGenericItutDataMgr(MItutLayoutContext* aLayoutContext, CPtiEngine* aPtiEngine );
 
@@ -461,7 +468,7 @@
 
 inline TBool CGenericItutDataMgr::IsPortraitWest()
     {
-    return !iLandScape && !IsChinese();
+    return !iLandScape && !IsChinese() && !IsKorean();
     }
 inline TBool CGenericItutDataMgr::IsValidLanguage(TInt aLanguage)
 	{
--- a/textinput/peninputgenericitut/inc/peninputgenericitutwindow.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/inc/peninputgenericitutwindow.h	Wed Apr 14 16:18:34 2010 +0300
@@ -125,7 +125,6 @@
     
     void HandleButtonResOnLangDirChange( TInt aControlId );
     void HandleButtonResOnLangDirChangeL( TInt aControlId );
-    TBool IsPortraitWest();
     void IndiBubbleWithText();
     void IndiBubbleWithoutText();
     void UpdateIndiBubbleL( TUint8* aData );
@@ -136,6 +135,7 @@
     void SetIndiWithTextFlag( TBool aFlag );
     void MsgBubbleForChinese();
     void SetSpellDisplayContentL( TUint8* aData );
+    void CreateKoreanSpecificCtrlsIfNeededL();
 private:
     CGenericItutWindow(CGenericItutWindowManager* aWindowMgr, 
                        CGenericItutUiLayout* aLayoutOwner,
--- a/textinput/peninputgenericitut/inc/peninputgenericitutwindowmanager.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/inc/peninputgenericitutwindowmanager.h	Wed Apr 14 16:18:34 2010 +0300
@@ -99,7 +99,15 @@
     void HideByteWarningBubble();
     void DisplayWarningNote(const TDesC& aInfo);
 	/* Teleca change end, 18.05.2009 ssal */
-    TBool IsPortraitWest();
+    
+    TBool IsAllowHandleRawKeyEvent();
+    
+    void SetAllowHandleRawKeyEventFlag( TBool aFlag );
+    
+    void StartPreventSCTTimer();
+    
+    void StopPreventSCTTimer();
+    void CreateKoreanSpecificCtrlsIfNeededL();
 private:
 
     CGenericItutWindowManager(CGenericItutUiLayout* aLayoutOwner,
@@ -130,6 +138,9 @@
     /* Teleca change begin, 18.05.2009 ssal */
     CPeriodic* iInfoTimer;
     /* Teleca change end, 18.05.2009 ssal */
+    
+    TBool iAllowHandleRawKeyEvent;
+    CPeriodic* iPreventCSTTimer;
     };
 
 inline CGenericItutWindow* CGenericItutWindowManager::Window()
--- a/textinput/peninputgenericitut/inc/peninputitutwesternuistatenonpredict.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/inc/peninputitutwesternuistatenonpredict.h	Wed Apr 14 16:18:34 2010 +0300
@@ -43,6 +43,10 @@
     CWesternItutUiStateNonPredict(CGenericItutUiMgrBase* aOwner);
 
 private:
+    void AdjustKoreanLayout();
+    void AdjustWesternLayout();
+    void AdjustChineseLayout();
+private:
     CFepLayoutMultiLineIcf* iIcf;
     TBool iConsumeLastKeyDown;
     };
--- a/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -182,7 +182,7 @@
 	// Screen
 	TRect rect;
 
-	AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EApplicationWindow, rect);
+	rect = AknLayoutScalable_Avkon::application_window(0).LayoutLine().Rect();
 
 	TAknWindowLineLayout mainWnd, bottomWnd, bottomPane;
 	TAknLayoutRect mainWndRect, bottomwndtrect, bottompanerect;
@@ -299,12 +299,23 @@
 				shiftIconRect.LayoutRect( keyrect, shiftIcon );                
 				iShiftIconRectForPrtWest = shiftIconRect.Rect();          
 				}    
+
+			// read star icon rect
+			if( i == 3 &&  j == 0 )
+				{
+				TAknWindowLineLayout starIcon =  AknLayoutScalable_Avkon::
+								cell_ituss_key_pane_g2( 0 ).LayoutLine();
+				TAknLayoutRect starIconRect;
+				starIconRect.LayoutRect( keyrect, starIcon );                
+				iStarIconRectForPrtWest = starIconRect.Rect();          
+				}			
+			
 			}
 		} 
 	 
 
 	// Num text row
-	iVkBigNumTextForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t1(0).LayoutLine(); 
+	iVkBigNumTextForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t1(4).LayoutLine(); 
 	iVkNumTextForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t1(1).LayoutLine();
 	
 	// Key text row 1                               
@@ -383,23 +394,47 @@
 	iBubbleFontForPrtWest = const_cast<CFont*>(previewWndText.Font());	
 	
 	// LAF for spell mode
-	TAknWindowLineLayout btnPaneWnd, okBtnWnd, cancelBtnWnd, spellwnd;
-	TAknLayoutRect btnPaneRect, okBtnRect, cancelBtnRect, spellwndtrect;
+	TAknWindowLineLayout spellwnd;
+	TAknLayoutRect okBtnRect, cancelBtnRect, spellwndtrect;
 	
 	iSpellQueryPaneRectForPrtWest = mainWndRect.Rect();
 	
     spellwnd = AknLayoutScalable_Avkon::popup_fep_ituss_window(1).LayoutLine();
     spellwndtrect.LayoutRect( mainWndRect.Rect(), spellwnd ); 
-    
-	btnPaneWnd = AknLayoutScalable_Avkon::ituss_sks_pane(0).LayoutLine();
-	btnPaneRect.LayoutRect( spellwndtrect.Rect(), btnPaneWnd );
+	
+	TAknWindowLineLayout queryTopPane, queryICFPane, icfSpellIndiPane, 
+		middleInnerBtn, middleBtn, bottomInnerBtn;
+	TAknLayoutRect queryTopPaneRect, queryICFPaneRect, icfSpellIndiPaneRect, 
+		bottomButton, bottomInnerRect, middleBtnRect;
+	
+	queryTopPane = AknLayoutScalable_Avkon::popup_fep_vtchi_icf_pane(1).LayoutLine();
+	queryTopPaneRect.LayoutRect( mainWndRect.Rect(), queryTopPane );
+	
+	queryICFPane = AknLayoutScalable_Avkon::vtchi_query_pane(0).LayoutLine();
+	queryICFPaneRect.LayoutRect( queryTopPaneRect.Rect(), queryICFPane );
+	iSpellICFRectForPrtWest = queryICFPaneRect.Rect();
 	
-	okBtnWnd = AknLayoutScalable_Avkon::ituss_sks_pane_g1(0).LayoutLine();
-	okBtnRect.LayoutRect( btnPaneRect.Rect(), okBtnWnd );
+	// Middle pane
+	TRect middleButtonPaneRect = spellwndtrect.Rect();
+	middleButtonPaneRect.Move( 5, 2 );
+	
+	middleBtn = AknLayoutScalable_Avkon::cell_ituss_key_pane(3).LayoutLine();
+	middleBtnRect.LayoutRect( bottompanerect.Rect(), middleBtn );
+	middleInnerBtn = AknLayoutScalable_Avkon::bg_cell_ituss_key_g1(5).LayoutLine();
+	
+	TRect cellMiddleRect;
+	cellMiddleRect.iTl = middleButtonPaneRect.iTl;
+	cellMiddleRect.SetHeight( middleBtnRect.Rect().Height());
+	cellMiddleRect.SetWidth( middleBtnRect.Rect().Width());
+	
+	// OK button
+	okBtnRect.LayoutRect( cellMiddleRect, middleInnerBtn );
 	iOKRectForPrtWest = okBtnRect.Rect();
 	
-	cancelBtnWnd = AknLayoutScalable_Avkon::ituss_sks_pane_g2(0).LayoutLine();
-	cancelBtnRect.LayoutRect( btnPaneRect.Rect(), cancelBtnWnd );
+	// Cancel button
+	cellMiddleRect.Move( middleBtnRect.Rect().Width(), 0 );
+	
+	cancelBtnRect.LayoutRect( cellMiddleRect, middleInnerBtn );
 	iCancelRectForPrtWest = cancelBtnRect.Rect();
 	
 	iBtnOKTextForPrtWest = AknLayoutScalable_Avkon::ituss_sks_pane_t1(0).LayoutLine();
@@ -410,66 +445,76 @@
 	
 	iBtnCancelTextForPrtWest = iBtnOKTextForPrtWest;
 	
-	TAknWindowLineLayout queryTopPane, queryICFPane, icfSpellIndiPane, middleInnerBtn;
-	TAknLayoutRect queryTopPaneRect, queryICFPaneRect, icfSpellIndiPaneRect, 
-		middleButton, middleInnerRect;
-	
-	queryTopPane = AknLayoutScalable_Avkon::popup_fep_vtchi_icf_pane(1).LayoutLine();
-	queryTopPaneRect.LayoutRect( mainWndRect.Rect(), queryTopPane );
-	
-	queryICFPane = AknLayoutScalable_Avkon::vtchi_query_pane(0).LayoutLine();
-	queryICFPaneRect.LayoutRect( queryTopPaneRect.Rect(), queryICFPane );
-	iSpellICFRectForPrtWest = queryICFPaneRect.Rect();
-	
-	TRect middleButtonPaneRect = spellwndtrect.Rect();
-	middleButtonPaneRect.Move( 5, 3 );
-	
+	// Bottom pane
 	TRect cellSpellRect;
-	cellSpellRect.iTl = middleButtonPaneRect.iTl;
+	cellSpellRect.iTl.iX = middleButtonPaneRect.iTl.iX;
+	cellSpellRect.iTl.iY = middleButtonPaneRect.iTl.iY + 
+			itucellrect.Rect().Height() * 5 + 10;
 	cellSpellRect.SetHeight( itucellrect.Rect().Height());
 	cellSpellRect.SetWidth( itucellrect.Rect().Width());
-
+		
 	// Left
-	middleButton.LayoutRect( cellSpellRect, ituinnercell );
-	iSpellArrowLeftRectForPrtWest = middleButton.Rect();
+	bottomButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellArrowLeftRectForPrtWest = bottomButton.Rect();
 	
-	middleInnerBtn = AknLayoutScalable_Avkon::cell_ituss_key_pane_g1(2).LayoutLine();
-	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
-	iSpellArrowLeftInnerRectForPrtWest = middleInnerRect.Rect();
+	bottomInnerBtn = AknLayoutScalable_Avkon::cell_ituss_key_pane_g1(2).LayoutLine();
+	bottomInnerRect.LayoutRect( bottomButton.Rect(), bottomInnerBtn );
+	iSpellArrowLeftInnerRectForPrtWest = bottomInnerRect.Rect();
 	
 	// Right
 	cellSpellRect.Move( itucellrect.Rect().Width(), 0 );
-	middleButton.LayoutRect( cellSpellRect, ituinnercell );
-	iSpellArrowRightRectForPrtWest = middleButton.Rect();
+	bottomButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellArrowRightRectForPrtWest = bottomButton.Rect();
 	
-	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
-	iSpellArrowRightInnerRectForPrtWest = middleInnerRect.Rect();
+	bottomInnerRect.LayoutRect( bottomButton.Rect(), bottomInnerBtn );
+	iSpellArrowRightInnerRectForPrtWest = bottomInnerRect.Rect();
 	
 	// BackSpace
 	cellSpellRect.Move( itucellrect.Rect().Width(), 0 );
-	middleButton.LayoutRect( cellSpellRect, ituinnercell );
-	iSpellICFBtnRectForPrtWest = middleButton.Rect();
+	bottomButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellICFBtnRectForPrtWest = bottomButton.Rect();
+	
+	bottomInnerRect.LayoutRect( bottomButton.Rect(), bottomInnerBtn );
+	iSpellICFBtnInnerRectForPrtWest = bottomInnerRect.Rect();
 	
-	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
-	iSpellICFBtnInnerRectForPrtWest = middleInnerRect.Rect();
+	//iSpellText1ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t1(0).LayoutLine();
+	iSpellText1ForPrtWest = AknLayoutScalable_Avkon::vtchi_icf_list_pane_t1(0, 0, 0).LayoutLine();
+	//iSpellText2ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t2(0).LayoutLine();
+	iSpellText2ForPrtWest = AknLayoutScalable_Avkon::vtchi_icf_list_pane_t1(0, 0, 1).LayoutLine();
+	iSpellText3ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t3(0).LayoutLine();
 	
-	iSpellText1ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t1(0).LayoutLine();
-	iSpellText2ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t2(0).LayoutLine();
-	iSpellText3ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t3(0).LayoutLine();
+	iSpellIcfTextLeftMarginForPrtWest = iSpellText1ForPrtWest.il;
+	iSpellIcfTextRightMarginForPrtWest = iSpellIcfTextLeftMarginForPrtWest;
 	
 	iSpellIcfFontForPrtWest = const_cast<CFont*>(
 	        AknLayoutUtils::FontFromId(iSpellText1ForPrtWest.iFont, NULL));
 	
-	TAknLayoutText cSpelltxt1;
+	TAknLayoutText cSpelltxt1, cSpelltxt2;
 	cSpelltxt1.LayoutText( queryICFPaneRect.Rect(), iSpellText1ForPrtWest );
+	cSpelltxt2.LayoutText( queryICFPaneRect.Rect(), iSpellText2ForPrtWest );
+	
+	iSpellIcfTextTopMarginForPrtWest = 
+			cSpelltxt1.TextRect().iTl.iY - queryICFPaneRect.Rect().iTl.iY;
+	
+	iSpellIcfTextLineSpaceMarginForPrtWest = 
+			cSpelltxt2.TextRect().iTl.iY - cSpelltxt1.TextRect().iBr.iY;
+	
 	iSpellIcfTextHeightForPrtWest = cSpelltxt1.TextRect().Height();
 	
+	TInt maxSpellRow = ( iSpellICFRectForPrtWest.Height() - iSpellIcfTextTopMarginForPrtWest ) 
+	        / ( iSpellIcfTextHeightForPrtWest + iSpellIcfTextLineSpaceMarginForPrtWest );
+	
+	iSpellIcfTextBottomMarginForPrtWest = 
+			iSpellICFRectForPrtWest.Height() - 
+			( iSpellIcfTextHeightForPrtWest + iSpellIcfTextLineSpaceMarginForPrtWest ) 
+	        * maxSpellRow - iSpellIcfTextTopMarginForPrtWest;
 	
 	icfSpellIndiPane = AknLayoutScalable_Avkon::icf_edit_indi_pane(0).LayoutLine();
 	icfSpellIndiPaneRect.LayoutRect(queryICFPaneRect.Rect(), icfSpellIndiPane);
 	iSpellIndiPaneWithoutTextForPrtWest = icfSpellIndiPaneRect.Rect();
 	iSpellIndiIconWithoutTextForPrtWest = TRect( 0, 0, 50, 17 );
 	}
+
 void CGenericItutDataMgr::ReadLafInfo()
     {
     // Screen
@@ -1127,6 +1172,11 @@
                 {
                 iLayoutContext->UiManager()->CreateChineseSpecificCtrlsIfNeededL();
                 }
+            
+            if( IsKorean())
+            	{
+                iLayoutContext->UiManager()->CreateKoreanSpecificCtrlsIfNeededL();
+            	}
 
             NotifyChangeControlLayout(MItutPropertySubscriber::EItutPropertyKeypadResourceId, 
                                       KeypadResourceId());  
--- a/textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -160,9 +160,12 @@
     
     // read key shift icon res
     CPenInputColorIcon* shiftIcon = CPenInputColorIcon::NewL( R_ITUT_KEYPAD_SHIFT_ICON );
-    if ( IsPortraitWest())
+    if ( iDataMgr->IsPortraitWest())
         {
+    	CPenInputColorIcon* starIcon = CPenInputColorIcon::NewL( R_ITUT_KEYPAD_STAR_ICON );
         shiftIcon->ResizeL( iDataMgr->iShiftIconRectForPrtWest.Size());
+        starIcon->ResizeL( iDataMgr->iStarIconRectForPrtWest.Size());
+        iStandardItutKp->SetStarIcon( starIcon );
         }
     else
         {
@@ -371,19 +374,6 @@
 	iBackgroundCtrl->SetRect(TItutDataConverter::AnyToRect(
 					iLayoutOwner->DataMgr()->RequestData(ELayoutRect)));
 					    
-	TCommonBgCtrlSubItem bgSubItem;								
-	TRect spellPaneRect;
-	
-	spellPaneRect = TItutDataConverter::AnyToRect(
-						iDataMgr->RequestData(ESpellQueryPaneRect) );								
-
-	bgSubItem.iRect = spellPaneRect;
-	bgSubItem.iFrameID = KAknsIIDQsnFrPopupSub;
-	bgSubItem.iCenterID = KAknsIIDDefault;
-	bgSubItem.iIsShow = EFalse;
-	
-	iBackgroundCtrl->AddSubBgItemL( bgSubItem );
-								
 	AddControlL(iBackgroundCtrl);
 	}
 
@@ -847,31 +837,41 @@
         {
         return;
         }
-    // create switch
-    CreateButtonL(ECommonButton, ECtrlIdSwitch, ESwitchRect, 
-                  ESwitchInnerRect, R_FINGER_LAYOUT_SWITCH);
+
+    if( !Control( ECtrlIdSwitch ))
+        {
+        // create switch
+        CreateButtonL(ECommonButton, ECtrlIdSwitch, ESwitchRect, 
+                      ESwitchInnerRect, R_FINGER_LAYOUT_SWITCH);
+        }
+
+    if( !Control( ECtrlIdIndicator ) ) 
+        {
+        // create indicator button
+        CFepUiBaseCtrl* indicatorBtn = CreateButtonL(ECommonButton, 
+                ECtrlIdIndicator, KUnavailableID, 
+                KUnavailableID,KUnavailableID);
+
+        // create input case type menu
+        AddEditorMenuL();
+        }
     
-    // create indicator button
-    CFepUiBaseCtrl* indicatorBtn = CreateButtonL(ECommonButton, 
-            ECtrlIdIndicator, KUnavailableID, 
-            KUnavailableID,KUnavailableID);
-    
+    if( ! iInputModeSwitch )
+    	{
+		// create switch input mode menu
+		iInputModeSwitch = CPeninputLayoutInputmodelChoice::NewL(
+										 iLayoutOwner,
+										 ECtrlIdInputSwitch,
+										 EPluginInputModeItut );
+		iInputModeSwitch->SetListSkinID( KAknsIIDQsnFrList, KAknsIIDQsnFrPopupSub );
+		AddControlL( iInputModeSwitch );
+    	}
     // create spell indicator
     CAknFepCtrlLabel* spellIndicator = CAknFepCtrlLabel::NewL(iLayoutOwner, ECtrlIdSpellIndicator);
     AddControlL(spellIndicator);
     spellIndicator->Hide(ETrue);
     
-    // create input case type menu
-    AddEditorMenuL();
     
-    // create switch input mode menu
-    iInputModeSwitch = CPeninputLayoutInputmodelChoice::NewL(
-                                     iLayoutOwner,
-                                     ECtrlIdInputSwitch,
-                                     EPluginInputModeItut );
-    iInputModeSwitch->SetListSkinID( KAknsIIDQsnFrList, KAknsIIDQsnFrPopupSub );
-    AddControlL( iInputModeSwitch );
-
     CreateDropdownListL();
     // create spell control for stroke/zhuyin
     TRect rect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(ESpellRect));
@@ -1336,33 +1336,32 @@
         else
             {
             temp = Control(ECtrlIdIndicator); 
-            if ( !temp )
-                {
-                return;
-                }
             
             CFepUiBaseCtrl* indi = Control(ECtrlIdSpellIndicator);
-            if ( !indi )
-                {
-                return;
-                }
-            indi->Hide(ETrue);
-	    SetIndicatorImageL(temp, 
-	                           indicatorData.iIndicatorImgID,
-	                           indicatorData.iIndicatorMaskID,
-	                           indicatorData.iIndicatorTextImgID,
-	                           indicatorData.iIndicatorTextMaskID);
-	    if( temp->Hiden() )               
-	        {
-	        temp->Hide( EFalse );    
-	        }
-	    else
-	        {
-                temp->ClearRect( temp->Rect() );
-	        temp->Draw();
-	        temp->UpdateArea( temp->Rect() );
-            iLayoutOwner->RootControl()->ReDrawRect( temp->Rect() );
-	        }                   
+            if( indi )
+            	{
+				indi->Hide(ETrue);
+            	}
+            
+            if( temp )
+            	{
+				SetIndicatorImageL(temp, 
+								   indicatorData.iIndicatorImgID,
+								   indicatorData.iIndicatorMaskID,
+								   indicatorData.iIndicatorTextImgID,
+								   indicatorData.iIndicatorTextMaskID);
+				if( temp->Hiden() )               
+					{
+					temp->Hide( EFalse );    
+					}
+				else
+					{
+						temp->ClearRect( temp->Rect() );
+					temp->Draw();
+					temp->UpdateArea( temp->Rect() );
+					iLayoutOwner->RootControl()->ReDrawRect( temp->Rect() );
+					} 
+            	}
             }
         }
     }
@@ -1622,8 +1621,6 @@
 
 	iBackgroundCtrl->SizeChanged( 
                          TItutDataConverter::AnyToRect(iDataMgr->RequestData( ELayoutRect ) ) );
-	iBackgroundCtrl->GetSubBgItem(0).iRect = TItutDataConverter::AnyToRect(
-											   iDataMgr->RequestData(ESpellQueryPaneRect) );								
 	
     TRAP_IGNORE(ApplyVariantLafDataL(ETrue); 
                 iLayoutOwner->HandleCommand(EItutExtCmdSizeChanged, NULL));
@@ -1735,7 +1732,7 @@
 
     iICF->Hide(EFalse);    
     
-    if ( IsPortraitWest() && (!iDataMgr->IsChineseSpellMode()))
+    if ( iDataMgr->IsPortraitWest() && (!iDataMgr->IsChineseSpellMode()))
         {
         iICF->MsgBubbleCtrl()->SetTextL( KEmptyString );
         iIndiWithText = EFalse;
@@ -1750,7 +1747,7 @@
     TBool bSizeChanged = EFalse;       
     ControlSizeChanged(ECtrlIdArrowLeft, EArrowLeftRect, ELeftInnerRect, ETrue);
     ControlSizeChanged(ECtrlIdArrowRight, EArrowRightRect, ERightInnerRect, ETrue);
-    if( iDataMgr->IsChinese())
+    if( iDataMgr->IsChinese() || iDataMgr->IsKorean() )
         {
         ControlSizeChanged(ECtrlIdSwitch, ESwitchRect, ESwitchInnerRect, ETrue);
         }
@@ -1859,9 +1856,11 @@
     
     // reconstruct shift icon when skin changed
     TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ReConstructL());
-    if ( IsPortraitWest())
+    TRAP_IGNORE(iStandardItutKp->StarIcon()->ReConstructL());
+    if ( iDataMgr->IsPortraitWest())
         {
         TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ResizeL(iDataMgr->iShiftIconRectForPrtWest.Size()));
+        TRAP_IGNORE(iStandardItutKp->StarIcon()->ResizeL(iDataMgr->iStarIconRectForPrtWest.Size()));
         }
     else
         {
@@ -2141,10 +2140,6 @@
     unicodesInt.Close();
 
     }
-TBool CGenericItutWindow::IsPortraitWest()
-    {
-    return !iDataMgr->IsChinese() && !iDataMgr->IsLandScape();
-    }
 
 void CGenericItutWindow::IndiBubbleWithText()
     {
@@ -2203,4 +2198,33 @@
     {
     iIndiWithText = aFlag;
     }
+void CGenericItutWindow::CreateKoreanSpecificCtrlsIfNeededL()
+    {
+	if( !Control(ECtrlIdIndicator) )
+		{
+	    CreateButtonL(ECommonButton, ECtrlIdIndicator, KUnavailableID, 
+					  KUnavailableID,KUnavailableID);
+        // create input case type menu
+	    AddEditorMenuL();
+		}
+	
+	if( !Control(ECtrlIdSwitch))
+		{
+		CreateButtonL(ECommonButton, ECtrlIdSwitch, ESwitchRect, 
+                    ESwitchInnerRect, R_FINGER_LAYOUT_SWITCH);
+	
+		}
+	
+	
+	if( !iInputModeSwitch )
+		{
+		// create switch input mode menu
+		iInputModeSwitch = CPeninputLayoutInputmodelChoice::NewL(
+										 iLayoutOwner,
+										 ECtrlIdInputSwitch,
+										 EPluginInputModeItut );
+		iInputModeSwitch->SetListSkinID( KAknsIIDQsnFrList, KAknsIIDQsnFrPopupSub );
+		AddControlL( iInputModeSwitch );
+		}
+    }
 // End Of File
--- a/textinput/peninputgenericitut/src/peninputgenericitutwindowmanager.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputgenericitutwindowmanager.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -48,6 +48,18 @@
 _LIT(KEmptyString, "");
 const TInt KPeriodicTimerIntervalSec(2500000);
 /* Teleca change end, 18.05.2009 ssal */
+
+const TInt KSCTPreventTime = 1000 * 1000;
+
+TInt PreventSCTTimerCallback( TAny* aData )
+	{
+	CGenericItutWindowManager* windowMgr = 
+			static_cast<CGenericItutWindowManager*>( aData );
+	windowMgr->SetAllowHandleRawKeyEventFlag( ETrue );
+	windowMgr->StopPreventSCTTimer();
+	return 0;
+	}
+
 CGenericItutWindowManager* CGenericItutWindowManager::NewL(CGenericItutUiLayout* aLayoutOwner,
                                                            CGenericItutDataMgr* aDataMgr)
     {
@@ -63,7 +75,9 @@
                                                      CGenericItutDataMgr* aDataMgr)
                                           :iLayoutOwner(aLayoutOwner),
                                            iDataMgr(aDataMgr),
-                                           iLastRawKeyDown(EStdKeyNull)
+                                           iLastRawKeyDown(EStdKeyNull),
+                                           iAllowHandleRawKeyEvent( ETrue ),
+                                           iPreventCSTTimer( NULL )
                                            
     {
     iInEditWordQueryDlg = EFalse;
@@ -79,6 +93,9 @@
     	}
    	delete iInfoTimer;
     /* Teleca change end, 18.05.2009 ssal */
+   	
+	iPreventCSTTimer->Cancel();
+	delete iPreventCSTTimer;
     }
 
 void CGenericItutWindowManager::SetPropertyL(MItutPropertySubscriber::TItutProperty aPropertyName, 
@@ -94,6 +111,8 @@
     /* Teleca change begin, 18.05.2009 ssal */
     iInfoTimer = CPeriodic::NewL(CActive::EPriorityStandard);
     /* Teleca change end, 18.05.2009 ssal */
+    
+    iPreventCSTTimer = CPeriodic::NewL( CActive::EPriorityStandard );
     }
 
 void CGenericItutWindowManager::SimulateRawEvent(TInt aScanCode, TRawEvent::TType aType)
@@ -125,20 +144,27 @@
         {
         case EEventRawKeyDownEvent:
             {
-            const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
-            SimulateRawEvent(key->iScanCode,TRawEvent::EKeyDown);
-            SetLastRawKeyDown(key->iScanCode, ETrue, aCtrl);
+            if ( iAllowHandleRawKeyEvent )
+            	{
+				const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+				SimulateRawEvent(key->iScanCode,TRawEvent::EKeyDown);
+				SetLastRawKeyDown(key->iScanCode, ETrue, aCtrl);
+            	}
             }
             break;
         case EEventRawKeyUpEvent:
             {
-            const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
-            SimulateRawEvent(key->iScanCode,TRawEvent::EKeyUp);
-            SetLastRawKeyDown(key->iScanCode, EFalse, aCtrl);
+            if ( iAllowHandleRawKeyEvent )
+            	{
+				const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+				SimulateRawEvent(key->iScanCode,TRawEvent::EKeyUp);
+				SetLastRawKeyDown(key->iScanCode, EFalse, aCtrl);
+            	}
             }
             break;
         case EItutCmdEnterSpellMode:
             {
+            StartPreventSCTTimer();
             iLayoutOwner->SignalOwner(ESignalEnterSpellMode);
             }
             break;        
@@ -224,7 +250,10 @@
                 if (event->iCommand == EItutCmdPredictItemSelected)
                     ReportItemSelected(ESignalSelectMatchSelectionText, event->iIndex, ETrue);
                 else if (event->iCommand == EItutCmdEnterSpellMode)
+                	{
+					StartPreventSCTTimer();
                     iLayoutOwner->SignalOwner(ESignalEnterSpellMode);
+                	}
                 }
             else if (aCtrl->ControlId() == ECtrlIdEditorMenu)
                 {
@@ -305,7 +334,7 @@
             break;
         case ECmdPenInputFingerMatchIndicator:
             {
-            if ( IsPortraitWest() && ( !iDataMgr->IsChineseSpellMode()))
+            if ( iDataMgr->IsPortraitWest() && ( !iDataMgr->IsChineseSpellMode()))
                 {
                 iWindow->UpdateIndiBubbleL( aData );
                 }
@@ -438,10 +467,6 @@
     return iLayoutOwner;
     }
     
-TBool CGenericItutWindowManager::IsPortraitWest()
-    {
-    return !iDataMgr->IsChinese() && !iDataMgr->IsLandScape();
-    }
 void CGenericItutWindowManager::HandleAppInfoChangeL(const TDesC& aInfo)
     {
     CGenericItutUiLayout * itutLayoutOwner;
@@ -452,7 +477,7 @@
             CGenericItutUiMgrBase::EStateSpelling && 
          !iInEditWordQueryDlg)
         {
-        if ( IsPortraitWest() && (!iDataMgr->IsChineseSpellMode()))
+        if ( iDataMgr->IsPortraitWest() && (!iDataMgr->IsChineseSpellMode()))
             {
 			iWindow->Icf()->HideBubble();
             iWindow->SetIndiWithTextFlag( ETrue );
@@ -479,7 +504,7 @@
         }
     else
         {
-        if ((!IsPortraitWest()) || iDataMgr->IsChineseSpellMode())
+        if ((!iDataMgr->IsPortraitWest()) || iDataMgr->IsChineseSpellMode())
             {
             iWindow->Icf()->HideBubble();
             }
@@ -701,7 +726,31 @@
     manager->HideByteWarningBubble();
     return KErrNone;
     }
-          
+       
+TBool CGenericItutWindowManager::IsAllowHandleRawKeyEvent()
+	{
+	return iAllowHandleRawKeyEvent;
+	}
+
+void CGenericItutWindowManager::SetAllowHandleRawKeyEventFlag( TBool aFlag )
+	{
+	iAllowHandleRawKeyEvent = aFlag;
+	}
+
+void CGenericItutWindowManager::StartPreventSCTTimer()
+	{
+	iAllowHandleRawKeyEvent =  EFalse;
+	
+	TTimeIntervalMicroSeconds32 t = KSCTPreventTime;
+	iPreventCSTTimer->Start( t, t, 
+			TCallBack(PreventSCTTimerCallback, this));
+	}
+
+void CGenericItutWindowManager::StopPreventSCTTimer()
+	{
+	iPreventCSTTimer->Cancel();
+	}
+
 void CGenericItutWindowManager::HideByteWarningBubble()
     {
     if (!iInfoTimer)
@@ -715,4 +764,9 @@
         iWindow->Icf()->HideInfoBubble();
         }
     }    
+
+void CGenericItutWindowManager::CreateKoreanSpecificCtrlsIfNeededL()
+    {
+    iWindow->CreateKoreanSpecificCtrlsIfNeededL();
+    }
 // End Of File
--- a/textinput/peninputgenericitut/src/peninputitutchnuistatepinyincomposition.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputitutchnuistatepinyincomposition.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -26,6 +26,7 @@
 #include "peninputgenericitutdatamgr.h"
 #include "peninputgenericitutlayoutcontext.h"
 #include "peninputgenericitutconverter.h"
+#include "peninputgenericitutwindowmanager.h"
 
 CChnItutUiStatePinyinComposition* CChnItutUiStatePinyinComposition::NewL(
     CGenericItutUiMgrBase* aOwner)
@@ -40,6 +41,8 @@
 
 CChnItutUiStatePinyinComposition::~CChnItutUiStatePinyinComposition()
     {
+    iSpellCands.ResetAndDestroy();
+    iSpellCands.Close();
     }
 
 CChnItutUiStatePinyinComposition::CChnItutUiStatePinyinComposition(
@@ -82,25 +85,17 @@
     // hide dropdownlist & reset its status
     CFepCtrlDropdownList* spelllist = static_cast<CFepCtrlDropdownList*>(
         iOwner->LayoutContext()->Control(ECtrlIdSpellCandsList));
-    spelllist->ResetAndClear(CFepCtrlDropdownList::EListExpandableRollWithIcon);
-    iSpellCands.ResetAndDestroy();
-    iSpellCands.Close();
     spelllist->Hide(ETrue);
 
     CFepCtrlDropdownList* candlist = static_cast<CFepCtrlDropdownList*>(
         iOwner->LayoutContext()->Control(ECtrlIdStdCandsList));
-    candlist->ResetAndClear(CFepCtrlDropdownList::EListExpandable);
     iOwner->DataMgr()->ClearChnCandidates(EItutCandidates);
     candlist->Hide(ETrue);
 
     iOwner->DataMgr()->PtiEngine()->ClearCurrentWord();
     // Hide ICF, Backspace, Arrow contrls when exit to avoid flick
-    iOwner->LayoutContext()->Control(ECtrlIdICF)->Hide( ETrue );
-    iOwner->LayoutContext()->Control(ECtrlIdBackspace)->Hide(ETrue);
-    iOwner->LayoutContext()->ShowArrowBtn( 0 );
     
     //show indicator 
-    iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(EFalse);
 
     iOwner->DataMgr()->PtiEngine()->ClearCurrentWord();
     
@@ -289,23 +284,29 @@
         // consume star key at pinyin composition state
         case EEventRawKeyDownEvent:
             {
-            const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
-            
-            if (key->iScanCode == EStdKeyNkpAsterisk)
-                {
-                HandleKeyL(ECmdPenInputFingerKeyPress, EPtiKeyStar);
-                return ETrue;
-                }
+            if ( iOwner->UiManager()->IsAllowHandleRawKeyEvent())
+            	{
+				const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+				
+				if (key->iScanCode == EStdKeyNkpAsterisk)
+					{
+					HandleKeyL(ECmdPenInputFingerKeyPress, EPtiKeyStar);
+					return ETrue;
+					}
+            	}
             }
             break;
         case EEventRawKeyUpEvent:
             {
-            const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
-            
-            if (key->iScanCode == EStdKeyNkpAsterisk)
-                {
-                return ETrue;
-                }
+            if ( iOwner->UiManager()->IsAllowHandleRawKeyEvent())
+            	{
+				const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+				
+				if (key->iScanCode == EStdKeyNkpAsterisk)
+					{
+					return ETrue;
+					}
+            	}
             }
             break;
         default:
--- a/textinput/peninputgenericitut/src/peninputitutchnuistatepredict.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputitutchnuistatepredict.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -120,15 +120,6 @@
         MItutPropertySubscriber::EItutPropertyCandidateListResourceId,
         R_AKN_FEP_NORMAL_CAND_DROP_DOWN_LIST);
         
-        
-    //hide navi button
-    iOwner->LayoutContext()->ShowArrowBtn(0);
-    
-    //hide indicator 
-    iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(ETrue);     
-    // Show ICF, Backspace after position changed to avoid flick
-    iOwner->LayoutContext()->Control(ECtrlIdICF)->Hide( EFalse );
-    iOwner->LayoutContext()->Control(ECtrlIdBackspace)->Hide( EFalse );
     }
 
 void CChnItutUiStatePredict::OnExit()
@@ -317,42 +308,49 @@
         	break;
         case EEventRawKeyDownEvent:
         	{
-        	TInt immode = iOwner->DataMgr()->InputMode();
- 			const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
-            if ( ( immode == EPinyin && 
-                 ( key->iScanCode == EPtiKey0 || key->iScanCode == EPtiKey1 || key->iScanCode == EPtiKeyStar ) ) ||
-                 ( immode == EStroke && 
-                 ( key->iScanCode == EPtiKeyStar || key->iScanCode == EPtiKey0 || (key->iScanCode >= EPtiKey7 && key->iScanCode <= EPtiKey9 ))) ||
-                 ( immode == EZhuyin && key->iScanCode == EPtiKeyStar) ||
-                 ( key->iScanCode == EStdKeyBackspace))
-                {                
-				// For those special keys, simulate down key immedidately.
-                // to ensure to simulate down key event before up key event
-                iOwner->UiManager()->SimulateImmeRawEvent( key->iScanCode, TRawEvent::EKeyDown );
-                iOwner->UiManager()->SetLastRawKeyDown( key->iScanCode, ETrue, aCtrl );               			
-				return ETrue;                               
-                }        	
+
+        	if ( iOwner->UiManager()->IsAllowHandleRawKeyEvent())
+        		{
+				TInt immode = iOwner->DataMgr()->InputMode();
+				const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+				if ( ( immode == EPinyin && 
+					 ( key->iScanCode == EPtiKey0 || key->iScanCode == EPtiKey1 || key->iScanCode == EPtiKeyStar ) ) ||
+					 ( immode == EStroke && 
+					 ( key->iScanCode == EPtiKeyStar || key->iScanCode == EPtiKey0 || (key->iScanCode >= EPtiKey7 && key->iScanCode <= EPtiKey9 ))) ||
+					 ( immode == EZhuyin && key->iScanCode == EPtiKeyStar) ||
+					 ( key->iScanCode == EStdKeyBackspace))
+					{                
+					// For those special keys, simulate down key immedidately.
+					// to ensure to simulate down key event before up key event
+					iOwner->UiManager()->SimulateImmeRawEvent( key->iScanCode, TRawEvent::EKeyDown );
+					iOwner->UiManager()->SetLastRawKeyDown( key->iScanCode, ETrue, aCtrl );               			
+					return ETrue;                               
+					}   
+        		}
         	}
         	break;
         case EEventRawKeyUpEvent:
         	{
-        	TInt immode = iOwner->DataMgr()->InputMode();
- 			const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
-            if ( ( immode == EPinyin && 
-                 ( key->iScanCode == EPtiKey0 || key->iScanCode == EPtiKey1 || key->iScanCode == EPtiKeyStar ) ) ||
-                 ( immode == EStroke && 
-                 ( key->iScanCode == EPtiKeyStar || key->iScanCode == EPtiKey0 || (key->iScanCode >= EPtiKey7 && key->iScanCode <= EPtiKey9 ))) ||
-                 ( immode == EZhuyin && key->iScanCode == EPtiKeyStar) ||
-                 ( key->iScanCode == EStdKeyBackspace))
-                {
-				// For those special keys, simulate up key events immediately before changing state.
-                // The action can avoid up key event being delayed by running changing state,
-				// otherwise, short press will be thought as long press by window server.
-				iOwner->UiManager()->SimulateImmeRawEvent( key->iScanCode, TRawEvent::EKeyUp );
-				iOwner->UiManager()->SetLastRawKeyDown( key->iScanCode, EFalse, aCtrl );                
-				iOwner->SetCurrentStateL( CGenericItutUiMgrBase::EStateStandby );
-				return ETrue;                          
-                }
+        	if ( iOwner->UiManager()->IsAllowHandleRawKeyEvent())
+        		{
+				TInt immode = iOwner->DataMgr()->InputMode();
+				const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+				if ( ( immode == EPinyin && 
+					 ( key->iScanCode == EPtiKey0 || key->iScanCode == EPtiKey1 || key->iScanCode == EPtiKeyStar ) ) ||
+					 ( immode == EStroke && 
+					 ( key->iScanCode == EPtiKeyStar || key->iScanCode == EPtiKey0 || (key->iScanCode >= EPtiKey7 && key->iScanCode <= EPtiKey9 ))) ||
+					 ( immode == EZhuyin && key->iScanCode == EPtiKeyStar) ||
+					 ( key->iScanCode == EStdKeyBackspace))
+					{
+					// For those special keys, simulate up key events immediately before changing state.
+					// The action can avoid up key event being delayed by running changing state,
+					// otherwise, short press will be thought as long press by window server.
+					iOwner->UiManager()->SimulateImmeRawEvent( key->iScanCode, TRawEvent::EKeyUp );
+					iOwner->UiManager()->SetLastRawKeyDown( key->iScanCode, EFalse, aCtrl );                
+					iOwner->SetCurrentStateL( CGenericItutUiMgrBase::EStateStandby );
+					return ETrue;                          
+					}
+        		}
         	}
         	break;
         default:
--- a/textinput/peninputgenericitut/src/peninputitutchnuistatestrokezhuyincomposition.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputitutchnuistatestrokezhuyincomposition.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -29,6 +29,7 @@
 #include "peninputgenericitutdatamgr.h"
 #include "peninputgenericitutlayoutcontext.h"
 #include "peninputgenericitutconverter.h"
+#include "peninputgenericitutwindowmanager.h"
 
 CChnItutUiStateStrokeZhuyinComposition* CChnItutUiStateStrokeZhuyinComposition::NewL(
     CGenericItutUiMgrBase* aOwner)
@@ -116,21 +117,12 @@
     // hide dropdownlist & reset its status
     CFepCtrlDropdownList* candlist = 
         static_cast<CFepCtrlDropdownList*>(iOwner->LayoutContext()->Control(ECtrlIdStdCandsList));
-    candlist->ResetAndClear(CFepCtrlDropdownList::EListExpandable);
     iOwner->DataMgr()->ClearChnCandidates(EItutCandidates);
     candlist->Hide(ETrue);
 
     CFepInputContextField* spellctrl = 
         static_cast<CFepInputContextField*>(iOwner->LayoutContext()->Control(ECtrlIdSpellICF));
-
     spellctrl->Hide(ETrue);
-
-    //show indicator 
-    iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(EFalse);
-    // Hide ICF, Backspace, Arrow contrls when exit to avoid flick
-    iOwner->LayoutContext()->Control(ECtrlIdICF)->Hide( ETrue );
-    iOwner->LayoutContext()->Control(ECtrlIdBackspace)->Hide(ETrue);
-    iOwner->LayoutContext()->ShowArrowBtn(0);
     iOwner->DataMgr()->PtiEngine()->ClearCurrentWord();
     }
 
@@ -285,23 +277,29 @@
         // consume star key at zhuyin composition state
         case EEventRawKeyDownEvent:
             {
-            const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
-            
-            if (key->iScanCode == EStdKeyNkpAsterisk && iOwner->DataMgr()->InputMode() == EZhuyin)
-                {
-                HandleKeyL(ECmdPenInputFingerKeyPress, EPtiKeyStar);
-                return ETrue;
-                }
+            if ( iOwner->UiManager()->IsAllowHandleRawKeyEvent())
+            	{
+				const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+				
+				if (key->iScanCode == EStdKeyNkpAsterisk && iOwner->DataMgr()->InputMode() == EZhuyin)
+					{
+					HandleKeyL(ECmdPenInputFingerKeyPress, EPtiKeyStar);
+					return ETrue;
+					}
+            	}
             }
             break;
         case EEventRawKeyUpEvent:
             {
-            const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
-            
-            if (key->iScanCode == EStdKeyNkpAsterisk && iOwner->DataMgr()->InputMode() == EZhuyin)
-                {
-                return ETrue;
-                }
+            if ( iOwner->UiManager()->IsAllowHandleRawKeyEvent())
+            	{
+				const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+				
+				if (key->iScanCode == EStdKeyNkpAsterisk && iOwner->DataMgr()->InputMode() == EZhuyin)
+					{
+					return ETrue;
+					}
+            	}
             }
             break;
         default:
--- a/textinput/peninputgenericitut/src/peninputitutwesternuistatematchselection.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputitutwesternuistatematchselection.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -30,6 +30,7 @@
 #include "peninputgenericitutdatamgr.h"
 #include "peninputgenericitutlayoutcontext.h"
 #include "peninputgenericitutconverter.h"
+#include "peninputgenericitutwindowmanager.h"
 
 CWesternItutUiStateMatchSelection* CWesternItutUiStateMatchSelection::NewL(
     CGenericItutUiMgrBase* aOwner)
@@ -142,11 +143,21 @@
 
             // if press spell, then enter spell mode, otherwise select an item
             // note that spell do not belong to iCandlist
-            itemidx == iCandlist.Count() ? 
-            iOwner->LayoutContext()->UiLayout()->SignalOwner(ESignalEnterSpellMode) : 
-            // according to updated ui spec, if select an item, do not commit it
-            //ReportItemSelected(ESignalSelectMatchSelectionText, itemidx, ETrue);
-            ReportItemSelected(ESignalSelectMatchSelectionText, itemidx, ETrue); 
+            if ( itemidx == iCandlist.Count())
+            	{
+
+				iOwner->UiManager()->StartPreventSCTTimer();
+
+       
+				iOwner->LayoutContext()->UiLayout()->SignalOwner(ESignalEnterSpellMode); 
+            	}
+            else
+            	{
+				// according to updated ui spec, if select an item, do not commit it
+				//ReportItemSelected(ESignalSelectMatchSelectionText, itemidx, ETrue);
+				ReportItemSelected(ESignalSelectMatchSelectionText, itemidx, ETrue);
+            	}
+            
             return ETrue;
             }
         case EEventChoiceSelected:
--- a/textinput/peninputgenericitut/src/peninputitutwesternuistatenonpredict.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputitutwesternuistatenonpredict.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -85,60 +85,15 @@
         {
         if (iOwner->DataMgr()->IsChinese())
             {
-            iOwner->LayoutContext()->Control(ECtrlIdSwitch)->Hide(EFalse);
-            iOwner->LayoutContext()->Control(ECtrlIdOptions)->Hide(EFalse);
-            iOwner->LayoutContext()->Control(ECtrlIdClose)->Hide(EFalse);
-            iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(EFalse);
-
-            iOwner->LayoutContext()->ShowArrowBtn(EBtnArrowLeft | EBtnArrowRight
-                 | EBtnArrowUp| EBtnArrowDown);   
-            if(iOwner->LayoutContext()->IsSecretEdtior())
-                {
-                CAknFepCtrlRawKeyButton * leftbtn;
-                CAknFepCtrlRawKeyButton * rightbtn;
-                CAknFepCtrlRawKeyButton * upbtn;
-                CAknFepCtrlRawKeyButton * downbtn;
-                leftbtn = static_cast<CAknFepCtrlRawKeyButton *>
-                                            (iOwner->LayoutContext()->Control(ECtrlIdArrowLeft));
-                rightbtn = static_cast<CAknFepCtrlRawKeyButton *>
-                                            (iOwner->LayoutContext()->Control(ECtrlIdArrowRight));
-                upbtn = static_cast<CAknFepCtrlRawKeyButton *>
-                                            (iOwner->LayoutContext()->Control(ECtrlIdArrowUp));
-                downbtn = static_cast<CAknFepCtrlRawKeyButton *>
-                                            (iOwner->LayoutContext()->Control(ECtrlIdArrowDown)); 
-                leftbtn->SetDimmed(ETrue);   
-                rightbtn->SetDimmed(ETrue);   
-                upbtn->SetDimmed(ETrue);   
-                downbtn->SetDimmed(ETrue);   
-                }
+            AdjustChineseLayout();
+            }
+        else if( iOwner->DataMgr()->IsKorean() )
+            {
+            AdjustKoreanLayout();	
             }
         else
             {
-            iOwner->LayoutContext()->Control(ECtrlIdOptions)->Hide(EFalse);
-            iOwner->LayoutContext()->Control(ECtrlIdClose)->Hide(EFalse);
-            if ( iOwner->LayoutContext()->Control(ECtrlIdSwitch) != NULL )
-				{
-				iOwner->LayoutContext()->Control(ECtrlIdSwitch)->Hide(ETrue);
-				}
-            if ( iOwner->LayoutContext()->Control(ECtrlIdIndicator) != NULL )
-				{
-				iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(ETrue);
-				}
-            
-            iIcf->MsgBubbleCtrl()->Hide( EFalse );
-            
-            iOwner->LayoutContext()->ShowArrowBtn(EBtnArrowLeft | EBtnArrowRight);    
-            if(iOwner->LayoutContext()->IsSecretEdtior())
-                {
-                CAknFepCtrlRawKeyButton * leftbtn;
-                CAknFepCtrlRawKeyButton * rightbtn;
-                leftbtn = static_cast<CAknFepCtrlRawKeyButton *>
-                                            (iOwner->LayoutContext()->Control(ECtrlIdArrowLeft));
-                rightbtn = static_cast<CAknFepCtrlRawKeyButton *>
-                                            (iOwner->LayoutContext()->Control(ECtrlIdArrowRight));
-                leftbtn->SetDimmed(ETrue);   
-                rightbtn->SetDimmed(ETrue);   
-                }
+            AdjustWesternLayout();
             }
         }
     }
@@ -227,37 +182,47 @@
         {
         case EEventRawKeyDownEvent:
             {
-            const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
-
-            iConsumeLastKeyDown = EFalse;
-            if (key->iScanCode == EStdKeyNkpAsterisk && 
-                iIcf->InlineStateOn() && iIcf->NomatchState())
-                {
-                iConsumeLastKeyDown = ETrue;
-                iOwner->UiManager()->SetLastRawKeyDown(key->iScanCode, ETrue, aCtrl);
-                return ETrue;
-                }
+            if ( iOwner->UiManager()->IsAllowHandleRawKeyEvent())
+            	{
+				const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+	
+				iConsumeLastKeyDown = EFalse;
+				if (key->iScanCode == EStdKeyNkpAsterisk && 
+					iIcf->InlineStateOn() && iIcf->NomatchState())
+					{
+					iConsumeLastKeyDown = ETrue;
+					iOwner->UiManager()->SetLastRawKeyDown(key->iScanCode, ETrue, aCtrl);
+					return ETrue;
+					}
+            	}
 
             return EFalse;    
             }
         case EEventRawKeyUpEvent:
             {
-            const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+            if ( iOwner->UiManager()->IsAllowHandleRawKeyEvent())
+            	{
+				const TKeyEvent *key = reinterpret_cast<const TKeyEvent*>(aEventData.Ptr());
+	
+				if (key->iScanCode == EStdKeyNkpAsterisk)
+					{
+					if (iConsumeLastKeyDown)
+						{
 
-            if (key->iScanCode == EStdKeyNkpAsterisk)
-                {
-                if (iConsumeLastKeyDown)
-                    {
-                    iOwner->LayoutContext()->UiLayout()->SignalOwner(ESignalEnterSpellMode);
-                    iOwner->UiManager()->SetLastRawKeyDown(key->iScanCode, EFalse, aCtrl);
-                    return ETrue;
-                    }
-                }
+						iOwner->UiManager()->StartPreventSCTTimer();
+
+						iOwner->LayoutContext()->UiLayout()->SignalOwner(ESignalEnterSpellMode);
+						iOwner->UiManager()->SetLastRawKeyDown(key->iScanCode, EFalse, aCtrl);
+						return ETrue;
+						}
+					}
+            	}
 
             return EFalse;    
             }
         case EEventPointerDownOnNomatch:
             {
+			iOwner->UiManager()->StartPreventSCTTimer();
             iOwner->LayoutContext()->UiLayout()->SignalOwner(ESignalEnterSpellMode);
             return ETrue;
             }
@@ -273,4 +238,77 @@
     return EFalse;
     }
 
+void CWesternItutUiStateNonPredict::AdjustKoreanLayout()
+    {
+	if(iOwner->LayoutContext()->Control(ECtrlIdIndicator))
+		{
+		iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(EFalse);
+		}
+	
+	if( iOwner->LayoutContext()->Control(ECtrlIdSwitch) )
+		{
+		iOwner->LayoutContext()->Control(ECtrlIdSwitch)->Hide(EFalse);
+		}
+    }
+
+void CWesternItutUiStateNonPredict::AdjustWesternLayout()
+    {
+
+    iOwner->LayoutContext()->Control(ECtrlIdOptions)->Hide(EFalse);
+    iOwner->LayoutContext()->Control(ECtrlIdClose)->Hide(EFalse);
+    if ( iOwner->LayoutContext()->Control(ECtrlIdSwitch) != NULL )
+        {
+        iOwner->LayoutContext()->Control(ECtrlIdSwitch)->Hide(ETrue);
+        }
+    if ( iOwner->LayoutContext()->Control(ECtrlIdIndicator) != NULL )
+        {
+        iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(ETrue);
+        }
+    
+    iIcf->MsgBubbleCtrl()->Hide( EFalse );
+    
+    iOwner->LayoutContext()->ShowArrowBtn(EBtnArrowLeft | EBtnArrowRight);    
+    if(iOwner->LayoutContext()->IsSecretEdtior())
+        {
+        CAknFepCtrlRawKeyButton * leftbtn;
+        CAknFepCtrlRawKeyButton * rightbtn;
+        leftbtn = static_cast<CAknFepCtrlRawKeyButton *>
+                                    (iOwner->LayoutContext()->Control(ECtrlIdArrowLeft));
+        rightbtn = static_cast<CAknFepCtrlRawKeyButton *>
+                                    (iOwner->LayoutContext()->Control(ECtrlIdArrowRight));
+        leftbtn->SetDimmed(ETrue);   
+        rightbtn->SetDimmed(ETrue);   
+        }
+    }
+
+void CWesternItutUiStateNonPredict::AdjustChineseLayout()
+    {
+
+    iOwner->LayoutContext()->Control(ECtrlIdSwitch)->Hide(EFalse);
+    iOwner->LayoutContext()->Control(ECtrlIdOptions)->Hide(EFalse);
+    iOwner->LayoutContext()->Control(ECtrlIdClose)->Hide(EFalse);
+    iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(EFalse);
+
+    iOwner->LayoutContext()->ShowArrowBtn(EBtnArrowLeft | EBtnArrowRight
+         | EBtnArrowUp| EBtnArrowDown);   
+    if(iOwner->LayoutContext()->IsSecretEdtior())
+        {
+        CAknFepCtrlRawKeyButton * leftbtn;
+        CAknFepCtrlRawKeyButton * rightbtn;
+        CAknFepCtrlRawKeyButton * upbtn;
+        CAknFepCtrlRawKeyButton * downbtn;
+        leftbtn = static_cast<CAknFepCtrlRawKeyButton *>
+                                    (iOwner->LayoutContext()->Control(ECtrlIdArrowLeft));
+        rightbtn = static_cast<CAknFepCtrlRawKeyButton *>
+                                    (iOwner->LayoutContext()->Control(ECtrlIdArrowRight));
+        upbtn = static_cast<CAknFepCtrlRawKeyButton *>
+                                    (iOwner->LayoutContext()->Control(ECtrlIdArrowUp));
+        downbtn = static_cast<CAknFepCtrlRawKeyButton *>
+                                    (iOwner->LayoutContext()->Control(ECtrlIdArrowDown)); 
+        leftbtn->SetDimmed(ETrue);   
+        rightbtn->SetDimmed(ETrue);   
+        upbtn->SetDimmed(ETrue);   
+        downbtn->SetDimmed(ETrue);   
+        }
+    }
 // End Of File
--- a/textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -105,13 +105,6 @@
         }
     //hide bubble in the first place.
     iICF->HideBubble();
-    // Show background of the spell popup window
-    CAknFepCtrlCommonBgCtrl* bgCtrl = static_cast<CAknFepCtrlCommonBgCtrl*>
-                                      (iOwner->LayoutContext()->Control(ECtrlIdBackground) );
-    if(bgCtrl)
-		{
-		bgCtrl->ShowSubBgItem( 0, ETrue );	
-		}
 
     // update resource id of keypad
     iOwner->DataMgr()->NotifyChangeControlLayout(
@@ -197,13 +190,7 @@
     iCancel->Hide(ETrue);
     iOwner->DataMgr()->SetSpellMode(EFalse);
     iICF->SetLineSeparatorAfterPrompt(EFalse);
-    // Hide background of the spell popup window
-    CAknFepCtrlCommonBgCtrl* bgCtrl = static_cast<CAknFepCtrlCommonBgCtrl*>
-                                      (iOwner->LayoutContext()->Control(ECtrlIdBackground) );
-    if(bgCtrl)
-		{
-		bgCtrl->ShowSubBgItem( 0, EFalse );	
-		}    
+
     iOwner->DataMgr()->SetChineseSpellFlag( EFalse );
     }
 
@@ -288,13 +275,16 @@
         }
     TRect rect = TItutDataConverter::AnyToRect(iOwner->DataMgr()->RequestData(ESpellICFRect) );
     
-    //rect.iTl.iY -= 50;
-    iICF->SetTextMargin ( 2,
-    					  2,
-    					  2,
-    					  2);
+
+    iICF->SetTextMargin ( 
+    		iOwner->DataMgr()->iSpellIcfTextLeftMarginForPrtWest,
+    		iOwner->DataMgr()->iSpellIcfTextRightMarginForPrtWest,
+    		iOwner->DataMgr()->iSpellIcfTextTopMarginForPrtWest,
+    		iOwner->DataMgr()->iSpellIcfTextBottomMarginForPrtWest );
  
-    iICF->SetLineSpace( 1 );
+    iICF->SetLineSpace( iOwner->DataMgr()->iSpellIcfTextLineSpaceMarginForPrtWest );
+
+    
     if ( iOwner->DataMgr()->IsPortraitWest() && 
             (!iOwner->DataMgr()->IsChineseSpellMode()))
         {
--- a/textinput/peninputgenericitut/srcdata/peninputgeneralitutnew.rss	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericitut/srcdata/peninputgeneralitutnew.rss	Wed Apr 14 16:18:34 2010 +0300
@@ -527,5 +527,15 @@
 		iconimage = EMbmPeninputgenericitutQgn_indi_input_shift;
 		iconimagemsk = EMbmPeninputgenericitutQgn_indi_input_shift_mask;
 		iconimageskinid = EAknsMinorGenericQgnIndiInputShift;
-		}			    
+		}		
+
+RESOURCE AKN_FEP_COLOR_ICON_IMAGE r_itut_keypad_star_icon
+		{
+		bmpfile = AKN_FEP_ITUT_BMP;
+		imgmajorskinid = EAknsMajorGeneric;
+		
+		iconimage = EMbmPeninputgenericitutQgn_indi_feb_asterisk;
+		iconimagemsk = EMbmPeninputgenericitutQgn_indi_feb_asterisk_mask;
+		iconimageskinid = EAknsMinorGenericQgnIndiInputShift;
+		}
 // End Of File
--- a/textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -1517,7 +1517,7 @@
   		TInt indent = ( i % 2 == 1 ) ? rowIndentWidth : 0;
   		for( TInt j = 0; j < KKeypadLayout[0][0]; j++)
             {
-            TRect bound = rectXBorder;
+			TRect bound = rectXPane;
             bound.Move( j * rectXPane.Width(), i * rectXPane.Height() );
             bound.Move( indent, 0 );
             
@@ -1637,7 +1637,7 @@
         TInt indent = ( i % 2 == 1 ) ? rowIndentWidth : 0;
         for( TInt j = 0; j < KKeypadLayout[1][0]; j++)
             {
-            TRect bound = rectXBorder;
+		    TRect bound = rectXPane;
             bound.Move( j * rectXPane.Width(), i * rectXPane.Height() );
             bound.Move( indent, 0 );
             
@@ -1741,7 +1741,7 @@
         TInt indent = ( i % 2 == 1 ) ? rowIndentWidth : 0;
         for( TInt j = 0; j < KKeypadLayout[2][0]; j++)
             {
-            TRect bound = rectXBorder;
+		    TRect bound = rectXPane;
             bound.Move( j * rectXPane.Width(), i * rectXPane.Height() );
             bound.Move( indent, 0 );
             
--- a/textinput/peninputsplititut/group/iconlist.txt	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputsplititut/group/iconlist.txt	Wed Apr 14 16:18:34 2010 +0300
@@ -47,3 +47,4 @@
 -c8,8 qgn_indi_input_backspace.svg
 -c8,8 qgn_indi_input_shift.svg
 -c8,8 qgn_indi_input_backspace1.svg
+-c8,8 qgn_indi_feb_asterisk.svg
--- a/textinput/peninputsplititut/inc/peninputsplititutdatamgr.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputsplititut/inc/peninputsplititutdatamgr.h	Wed Apr 14 16:18:34 2010 +0300
@@ -354,6 +354,7 @@
     inline TBool IsNumericOnly() const;
 	
 	TRect iShiftIconRect;
+	TRect iStarIconRect;
 	
 private:
     /**
@@ -489,6 +490,7 @@
     TRgb iCandsTextColor;    
     */
 
+    TAknTextLineLayout iVkBigNumTextForPrtWest;
     TAknTextLineLayout iVkAlphaText1;
     TAknTextLineLayout iVkAlphaText2;
     TAknTextLineLayout iVkAlphaText3;
--- a/textinput/peninputsplititut/src/peninputsplititutdatamgr.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputsplititut/src/peninputsplititutdatamgr.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -149,12 +149,10 @@
 void CSplitItutDataMgr::ReadLafInfo()
     {
     // Screen
-    TRect rect, rectcn;
-    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, rect);
+    TRect rect;
+	rect = AknLayoutScalable_Avkon::application_window(0).LayoutLine().Rect();
     iScreenSize = rect.Size();
 
-    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EApplicationWindow, rect);
-
     // finger Layout
     TAknWindowLineLayout splitwnd, splitpane;
     TAknLayoutRect spliwndtrect, splitpanerect;
@@ -212,17 +210,30 @@
                 TAknLayoutRect shiftIconRect;
                 shiftIconRect.LayoutRect( keyrect, shiftIcon );                
                 iShiftIconRect = shiftIconRect.Rect();          
-                }    
+                }
+            
+            // read star icon rect
+            if( i == 3 &&  j == 2 )
+                {
+                TAknWindowLineLayout starIcon =  AknLayoutScalable_Avkon::
+                                cell_ituss_key_pane_g2( 0 ).LayoutLine();
+                TAknLayoutRect starIconRect;
+                starIconRect.LayoutRect( keyrect, starIcon );                
+                iStarIconRect = starIconRect.Rect();          
+                }            
+            
             }
         } 
      
 
-    iVkNumText = AknLayoutScalable_Avkon::cell_ituss_key_t1(0).LayoutLine(); 
+    iVkBigNumTextForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t1(4).LayoutLine(); 
+    
+    iVkNumText = AknLayoutScalable_Avkon::cell_ituss_key_t1(1).LayoutLine(); 
     // Key text row 1                               
-    iVkAlphaText1 = AknLayoutScalable_Avkon::cell_ituss_key_t2(0).LayoutLine();
-    iVkAlphaText3 = AknLayoutScalable_Avkon::cell_ituss_key_t4(0).LayoutLine();                                                              
+    iVkAlphaText1 = AknLayoutScalable_Avkon::cell_ituss_key_t2(1).LayoutLine();
+    iVkAlphaText3 = AknLayoutScalable_Avkon::cell_ituss_key_t4(1).LayoutLine();                                                              
     // Key text row 2                               
-    iVkAlphaText2 = AknLayoutScalable_Avkon::cell_ituss_key_t3(0).LayoutLine();
+    iVkAlphaText2 = AknLayoutScalable_Avkon::cell_ituss_key_t3(1).LayoutLine();
     
     // close button
     TAknWindowLineLayout funcbtn, funcbtnbg, funcbtninner;
@@ -294,32 +305,17 @@
     iBubbleFont = const_cast<CFont*>(previewWndText.Font());
     
     // for spell window
-    // OK and Cancel button
-    TAknWindowLineLayout spellwnd, softkeypane, okkeypane, cancelkeypane  ;
-    TAknLayoutRect spellwndtrect, softkeypanerect, okkeyRect, cancelkeyRect  ;
+    TAknWindowLineLayout spellwnd;
+    TAknLayoutRect spellwndtrect;
 
     spellwnd = AknLayoutScalable_Avkon::popup_fep_ituss_window(1).LayoutLine();
     spellwndtrect.LayoutRect(rect, spellwnd);    
     
-    softkeypane = AknLayoutScalable_Avkon::ituss_sks_pane().LayoutLine();
-    softkeypanerect.LayoutRect(spellwndtrect.Rect(), softkeypane);
-    
-    okkeypane = AknLayoutScalable_Avkon::ituss_sks_pane_g1().LayoutLine();
-    okkeyRect.LayoutRect(softkeypanerect.Rect(), okkeypane);
-    iOkRect = okkeyRect.Rect();
-    
-    iSpellBtnTextFormat = AknLayoutScalable_Avkon::ituss_sks_pane_t1().LayoutLine();
-    iSpellBtnTextFormat.ir = 7;
-    
-    cancelkeypane = AknLayoutScalable_Avkon::ituss_sks_pane_g2().LayoutLine();
-    cancelkeyRect.LayoutRect(softkeypanerect.Rect(), cancelkeypane);
-    iCancelRect = cancelkeyRect.Rect();
-    
     // icf in spell mode
-    TAknWindowLineLayout icfpane, querypane, focuspane, backkeyInnerpane, backkeypane,
-                         middleInnerBtn;
-    TAknLayoutRect icfpaneRect, querypaneRect, focuspaneRect, backInnerRect, backkeyRect,
-                   middleButton, middleInnerRect;
+    TAknWindowLineLayout icfpane, querypane, focuspane, 
+		bottomInnerBtn, middleInnerBtn, middleBtn;
+    TAknLayoutRect icfpaneRect, querypaneRect, focuspaneRect, 
+		bottomButton, bottomInnerRect, middleBtnRect, okBtnRect, cancelBtnRect;
     
     icfpane = AknLayoutScalable_Avkon::popup_fep_vtchi_icf_pane(1).LayoutLine();
     icfpaneRect.LayoutRect(rect, icfpane);
@@ -331,54 +327,73 @@
     focuspaneRect.LayoutRect(querypaneRect.Rect(), focuspane);
     iSpellICFRect = focuspaneRect.Rect();
     
+    // Middle pane
 	TRect middleButtonPaneRect = spellwndtrect.Rect();
-	middleButtonPaneRect.Move( 5, 3 );
+	middleButtonPaneRect.Move( 5, 2 );
+	
+	middleBtn = AknLayoutScalable_Avkon::cell_ituss_key_pane(3).LayoutLine();
+	middleBtnRect.LayoutRect( splitpanerect.Rect(), middleBtn );
+	middleInnerBtn = AknLayoutScalable_Avkon::bg_cell_ituss_key_g1(5).LayoutLine();
+	
+	TRect cellMiddleRect;
+	cellMiddleRect.iTl = middleButtonPaneRect.iTl;
+	cellMiddleRect.SetHeight( middleBtnRect.Rect().Height());
+	cellMiddleRect.SetWidth( middleBtnRect.Rect().Width());
 	
+	// OK button
+	okBtnRect.LayoutRect( cellMiddleRect, middleInnerBtn );
+    iOkRect = okBtnRect.Rect();
+    
+    // Cancel button
+	cellMiddleRect.Move( middleBtnRect.Rect().Width(), 0 );
+	
+	cancelBtnRect.LayoutRect( cellMiddleRect, middleInnerBtn );
+	iCancelRect = cancelBtnRect.Rect();
+	
+    iSpellBtnTextFormat = AknLayoutScalable_Avkon::ituss_sks_pane_t1().LayoutLine();
+    iSpellBtnTextFormat.ir = 7;
+    
+    // Bottom pane
 	TRect cellSpellRect;
-	cellSpellRect.iTl = middleButtonPaneRect.iTl;
+	cellSpellRect.iTl.iX = middleButtonPaneRect.iTl.iX;
+	cellSpellRect.iTl.iY = middleButtonPaneRect.iTl.iY + 
+			itucellrect.Rect().Height() * 5 + 10;
 	cellSpellRect.SetHeight( itucellrect.Rect().Height());
 	cellSpellRect.SetWidth( itucellrect.Rect().Width());
 
 	// Left
-	middleButton.LayoutRect( cellSpellRect, ituinnercell );
-	iSpellArrowLeftRect = middleButton.Rect();
+	bottomButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellArrowLeftRect = bottomButton.Rect();
 	
-	middleInnerBtn = AknLayoutScalable_Avkon::cell_ituss_key_pane_g1(2).LayoutLine();
-	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
-	iSpellArrowLeftRectInner = middleInnerRect.Rect();
+	bottomInnerBtn = AknLayoutScalable_Avkon::cell_ituss_key_pane_g1(2).LayoutLine();
+	bottomInnerRect.LayoutRect( bottomButton.Rect(), bottomInnerBtn );
+	iSpellArrowLeftRectInner = bottomInnerRect.Rect();
 	
 	// Right
 	cellSpellRect.Move( itucellrect.Rect().Width(), 0 );
-	middleButton.LayoutRect( cellSpellRect, ituinnercell );
-	iSpellArrowRightRect = middleButton.Rect();
-	
-	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
-	iSpellArrowRightRectInner = middleInnerRect.Rect();
-
-    
-    // backspace in spell mode
+	bottomButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellArrowRightRect = bottomButton.Rect();
 	
+	bottomInnerRect.LayoutRect( bottomButton.Rect(), bottomInnerBtn );
+	iSpellArrowRightRectInner = bottomInnerRect.Rect();
+
+    // backspace in spell mode	
 	cellSpellRect.Move( itucellrect.Rect().Width(), 0 );
-	middleButton.LayoutRect( cellSpellRect, ituinnercell );
-	iSpellBackSpcace = middleButton.Rect();
+	bottomButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellBackSpcace = bottomButton.Rect();
 	
-	middleInnerRect.LayoutRect( middleButton.Rect(), middleInnerBtn );
-	iSpellBackSpcaceInner = middleInnerRect.Rect();
-
-
+	bottomInnerRect.LayoutRect( bottomButton.Rect(), bottomInnerBtn );
+	iSpellBackSpcaceInner = bottomInnerRect.Rect();
     
 	// icf indicator
 	TAknWindowLineLayout icfIndiPaneWithoutText, indiIcon, indiText;
 	TAknLayoutRect icfIndiPaneRectWithoutText, indiIconRect, indiTextRect;
 	TAknTextLineLayout indiTextLayout;
 	
-
-	
 	icfIndiPaneWithoutText = AknLayoutScalable_Avkon::icf_edit_indi_pane(0).LayoutLine();
 	icfIndiPaneRectWithoutText.LayoutRect(icfpaneRect.Rect(), icfIndiPaneWithoutText);
 	iIndiPaneRectWithoutTextForPrtWest = icfIndiPaneRectWithoutText.Rect();
 	
-
 	iIndiIconRectWithoutTextForPrtWest = TRect( 0, 0, 60, 20 );
 	
 	indiTextLayout = AknLayoutScalable_Avkon::icf_edit_indi_pane_t1(0).LayoutLine();
@@ -581,7 +596,14 @@
             return &iKeypadCellRects;
        // 	return IsChinese() ? &iKeypadCellRectsCn : &iKeypadCellRects;	
         case EKeypadLeftTextLine:
-            return &iVkNumText;
+        	if ( iInputMode == ENumber || iInputMode == ENativeNumber )
+				{
+				return &iVkBigNumTextForPrtWest;
+				}
+        	else
+        		{
+				return &iVkNumText;
+        		}
         case EKeypadRightTextLine1:
             return &iVkAlphaText1;
         case EKeypadRightTextLine2:
--- a/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -187,6 +187,11 @@
     shiftIcon->ResizeL( iDataMgr->iShiftIconRect.Size() );
     iStandardItutKp->SetShiftIcon( shiftIcon );
     
+    // read key star icon res
+    CPenInputColorIcon* starIcon = CPenInputColorIcon::NewL( R_ITUT_KEYPAD_STAR_ICON );
+    starIcon->ResizeL( iDataMgr->iStarIconRect.Size() );
+    iStandardItutKp->SetStarIcon( starIcon );    
+    
     //set key to be 9 piece graphics
     iStandardItutKp->SetKeySkinId( EKeyBmpNormal, KAknsIIDQsnFrKeypadButtonFrNormal );
     iStandardItutKp->SetKeySkinId( EKeyBmpHighlight, KAknsIIDQsnFrKeypadButtonFrPressed );
@@ -1156,6 +1161,10 @@
     TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ReConstructL());
     TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ResizeL(iDataMgr->iShiftIconRect.Size()));
     
+    // reconstruct star icon when skin changed
+    TRAP_IGNORE(iStandardItutKp->StarIcon()->ReConstructL());
+    TRAP_IGNORE(iStandardItutKp->StarIcon()->ResizeL(iDataMgr->iStarIconRect.Size()));
+    
     //Skin change will case the reconstuction of the button graphic.
     //When language is RToL, it should be mirrored again.
     if( iDataMgr->IsRtoLLanguage() )
--- a/textinput/peninputsplititut/srcdata/peninputsplititutnew.rss	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputsplititut/srcdata/peninputsplititutnew.rss	Wed Apr 14 16:18:34 2010 +0300
@@ -465,5 +465,15 @@
 		iconimage = EMbmPeninputgenericitutQgn_indi_input_shift;
 		iconimagemsk = EMbmPeninputgenericitutQgn_indi_input_shift_mask;
 		iconimageskinid = EAknsMinorGenericQgnIndiInputShift;
-		}			    
+		}
+
+RESOURCE AKN_FEP_COLOR_ICON_IMAGE r_itut_keypad_star_icon
+		{
+		bmpfile = AKN_FEP_ITUT_BMP;
+		imgmajorskinid = EAknsMajorGeneric;
+		
+		iconimage = EMbmPeninputgenericitutQgn_indi_feb_asterisk;
+		iconimagemsk = EMbmPeninputgenericitutQgn_indi_feb_asterisk_mask;
+		iconimageskinid = EAknsMinorGenericQgnIndiInputShift;
+		}
 // End Of File
--- a/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h	Wed Apr 14 16:18:34 2010 +0300
@@ -560,7 +560,7 @@
      */
     void HandleRangeListSelectedL( CFepUiBaseCtrl* aCtrl, const TDesC& aData );
 
-    //todo new rangelist
+  
     /**
      * Get resource ids of range button icon
      * 
@@ -572,7 +572,7 @@
      */
     void GetRangeIconResource( TInt aLangId, TInt& aAlphaRange, TInt& aOtherRange  );
     
-    //todo new rangelist
+   
     /**
      * Prepare range list items
      * 
--- a/textinput/peninputsplitqwerty/src/peninputsplitqwertylafdatamgr.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertylafdatamgr.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -329,7 +329,7 @@
     keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
 
     keyText = AknLayoutScalable_Avkon::cell_vkbss_key_t1(v2).LayoutLine();
-    keyText.iB += 3; //todo split-view, temp solution
+    keyText.iB += 3; 
     
     linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(v2).LayoutLine();
     keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
@@ -378,7 +378,7 @@
         TInt indent = ( i % 2 == 1 ) ? rowIndentWidth : 0;
         for ( TInt j = 0; j < aCols; j++ )
             {
-            TRect bound = rectXBorder;
+			TRect bound = rectXPane;
             bound.Move( j * rectXPane.Width(), i * rectXPane.Height() );
             bound.Move( indent, 0 );
             
--- a/textinput/peninputsplitqwerty/src/peninputsplitqwertylayout.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertylayout.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -266,10 +266,8 @@
         
     if ( win )
         {      
-        //todo split-view FSQ, UpdateLafData() can be removed for optimization?
         win->UpdateLafData();
         
-        //todo split-view FSQ, temp codes, when to set layout pos? 
         win->UpdateLayoutPosAndSize();        
         }
     
@@ -299,7 +297,6 @@
         
     if( win )
         {
-        //todo split-view FSQ, temp codes, when to set layout pos? 
         win->UpdateLayoutPosAndSize();
         }
     }
--- a/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -1794,7 +1794,6 @@
     UpdateRangeCtrlsL();
     }
 
-//todo new rangelist
 // ---------------------------------------------------------------------------
 // Get resource ids of range button icon
 // ---------------------------------------------------------------------------
@@ -1848,7 +1847,6 @@
         }
     }
 
-//todo new rangelist
 // ---------------------------------------------------------------------------
 // Prepare range list items
 // ---------------------------------------------------------------------------
--- a/textinput/peninputsplitqwerty/srcdata/peninputssqwin.rss	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwin.rss	Wed Apr 14 16:18:34 2010 +0300
@@ -914,7 +914,7 @@
     disableskinid=EAknsMinorGenericQgnIndiFepButtonCaseCapital;       
     }
 
-//todo new rangelist
+
 RESOURCE PENINPUT_SPLITQWERTY_RANGELABELS r_peninput_layout_vkb_ranges
     {
     nativeChar   = qtn_tin_vkb_native_characters_range;
@@ -923,7 +923,7 @@
     latinNumber  = qtn_tin_vkb_numbers_symbols;      
     }
 
-//todo new rangelist
+
 
 //for Cyrillic
 RESOURCE AKN_FEP_BUTTON_IMAGE r_peninput_layout_vkb_rangectrl_cyrillic_alpha
--- a/textinput/peninputvkbcn/src/peninputvkbcnlafdatamgr.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputvkbcn/src/peninputvkbcnlafdatamgr.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -1341,9 +1341,9 @@
     TAknWindowLineLayout keypad, cellpane;
     
     // Modify begin
-    TAknWindowLineLayout cellPaneBK;
-    TAknLayoutRect cellPaneBKRect;
-    TRect keyBKRect;
+    //TAknWindowLineLayout cellPaneBK;
+    //TAknLayoutRect cellPaneBKRect;
+    //TRect keyBKRect;
     // Modify end
     
     TAknLayoutRect keypadRect, cellpaneRect;
@@ -1362,6 +1362,9 @@
 	dataInfo->iQwtRect = wndRect.Rect();
 	// keypad
 	keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(0).LayoutLine();
+	
+	keyText.iB -= 3;
+	
 	dataInfo->iKeypad.iTextLayout = keyText;
   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
   	//dataInfo->iKeypad.iTxtRect = keyText.TextRect();
@@ -1371,7 +1374,7 @@
   	dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
   	
   	// Modify begin
-  	cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(0, 0, 0).LayoutLine();
+  	//cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(0, 0, 0).LayoutLine();
   	// Modify end
   	
   	//iKeypadRect10x3 = keypadRect.Rect();
@@ -1385,10 +1388,11 @@
   			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY );
   			
   			// Modify begin
-            cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
-            keyBKRect = cellPaneBKRect.Rect();
-            dataInfo->iKeypad.iRects.AppendL( keyBKRect );
+            //cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
+            //keyBKRect = cellPaneBKRect.Rect();
+            //dataInfo->iKeypad.iRects.AppendL( keyBKRect );
             // Modify end
+            dataInfo->iKeypad.iRects.AppendL( keyRect );
   			
   			keyTextLayout.LayoutText(keyRect, keyText);
   			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
@@ -1434,7 +1438,7 @@
   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
   	
   	// Modify begin
-  	cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(1, 0, 0).LayoutLine();
+  	//cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(1, 0, 0).LayoutLine();
   	// Modify end
   	
   	for( TInt i = 0; i < KKeypadLayoutCn[1][1]; i++)
@@ -1447,10 +1451,12 @@
   			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY );
   			
   			// Modify begin
-  			cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
-  			keyBKRect = cellPaneBKRect.Rect();
-  			dataInfo->iKeypad.iRects.AppendL( keyBKRect );
+  			//cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
+  			//keyBKRect = cellPaneBKRect.Rect();
+  			//dataInfo->iKeypad.iRects.AppendL( keyBKRect );
   			// Modify end
+  			dataInfo->iKeypad.iRects.AppendL( keyRect );
+  			
   			keyTextLayout.LayoutText(keyRect, keyText);
   			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
 			}
@@ -1479,14 +1485,14 @@
 	dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
 
  	keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(2).LayoutLine();
- 	// why, you asked? well, the reason is it's turned out this is the better one.
- 	keyText.iB += 3;
+
+ 	//keyText.iB += 3;
  	
   	dataInfo->iKeypad.iTextLayout = keyText; 	
   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);  	
   	
   	// Modify begin
-  	cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(2, 0, 0).LayoutLine();
+  	//cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(2, 0, 0).LayoutLine();
   	// Modify end
   	
   	for( TInt i = 0; i < KKeypadLayoutCn[2][1]; i++)
@@ -1499,10 +1505,11 @@
   			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY );
   			
   			// Modify begin
-  			cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
-  			keyBKRect = cellPaneBKRect.Rect();
-  			dataInfo->iKeypad.iRects.AppendL( keyBKRect );
-  			// Modify end            
+  			//cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
+  			//keyBKRect = cellPaneBKRect.Rect();
+  			//dataInfo->iKeypad.iRects.AppendL( keyBKRect );
+  			// Modify end
+  			dataInfo->iKeypad.iRects.AppendL( keyRect );
   			
   			keyTextLayout.LayoutText(keyRect, keyText);
   			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
@@ -1527,6 +1534,9 @@
 	dataInfo->iQwtRect = wndRect.Rect();
 	
 	keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(0).LayoutLine();
+	
+	keyText.iB -= 3;
+	
 	dataInfo->iKeypad.iTextLayout = keyText;
   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
 
@@ -1535,7 +1545,7 @@
 	dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
   	
     // Modify begin
-    cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(0, 0, 0).LayoutLine();
+    //cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(0, 0, 0).LayoutLine();
     // Modify end
    
   	TInt keyHeight = keypadRect.Rect().Height()/3;  	
@@ -1550,10 +1560,11 @@
   			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY + keyHeight*i);  			
   			
             // Modify begin
-            cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
-            keyBKRect = cellPaneBKRect.Rect();
-            dataInfo->iKeypad.iRects.AppendL( keyBKRect );
+            //cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
+            //keyBKRect = cellPaneBKRect.Rect();
+            //dataInfo->iKeypad.iRects.AppendL( keyBKRect );
             // Modify end
+            dataInfo->iKeypad.iRects.AppendL( keyRect );
   			
   			keyTextLayout.LayoutText(keyRect, keyText);
   			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
@@ -1584,6 +1595,9 @@
 	
 	// keypad
 	keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(0).LayoutLine();
+	
+	keyText.iB -= 3;
+	
 	dataInfo->iKeypad.iTextLayout = keyText;
   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
 
@@ -1592,7 +1606,7 @@
   	dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
 
     // Modify begin
-    cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(0, 0, 0).LayoutLine();
+    //cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(0, 0, 0).LayoutLine();
     // Modify end  	
   	
   	keyHeight = keypadRect.Rect().Height()/3;
@@ -1607,10 +1621,12 @@
   			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY + keyHeight*i);  			
   			
             // Modify begin
-            cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
-            keyBKRect = cellPaneBKRect.Rect();
-            dataInfo->iKeypad.iRects.AppendL( keyBKRect );
+            //cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
+            //keyBKRect = cellPaneBKRect.Rect();
+            //dataInfo->iKeypad.iRects.AppendL( keyBKRect );
             // Modify end
+            dataInfo->iKeypad.iRects.AppendL( keyRect );
+            
   			keyTextLayout.LayoutText(keyRect, keyText);
   			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
   			}
--- a/textinput/peninputvkbkr/rom/PeninputVkbKr.iby	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/peninputvkbkr/rom/PeninputVkbKr.iby	Wed Apr 14 16:18:34 2010 +0300
@@ -22,6 +22,5 @@
 data = DATAZ_\RESOURCE_FILES_DIR\apps\PeninputVkbKr.mif                       RESOURCE_FILES_DIR\apps\PeninputVkbKr.mif
 data = DATAZ_\RESOURCE_FILES_DIR\plugins\PeninputVkbKrWindowKr.rsc            RESOURCE_FILES_DIR\plugins\PeninputVkbKrWindowKr.rsc
 data = DATAZ_\RESOURCE_FILES_DIR\plugins\PeninputVkbKrWindowConfigInfo_65.rsc RESOURCE_FILES_DIR\plugins\PeninputVkbKrWindowConfigInfo_65.rsc
-data=ZSYSTEM\install\PeninputVkbKr_stub.sis    System\Install\PeninputVkbKr_stub.sis
 
 #endif // __PENINPUTVKBKR_IBY__
--- a/textinput/peninputvkbkr/sis/PeninputVkbKr_EKA2.pkg	Wed Mar 31 22:08:20 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-;
-; 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 "Eclipse Public License v1.0""
-; which accompanies this distribution, and is available
-; at the URL "http://www.eclipse.org/legal/epl-v10.html".
-;
-; Initial Contributors:
-; Nokia Corporation - initial contribution.
-;
-; Contributors:
-;
-; Description:
-;
-; Installation file for PeninputVkbKr dll
-;
-; This is an auto-generated PKG file by Carbide.
-; This file uses variables specific to Carbide builds that will not work
-; on command-line builds. If you want to use this generated PKG file from the
-; command-line tools you will need to modify the variables with the appropriate
-; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
-
-;
-; UID is the dll's UID
-;
-#{"PeninputVkbKr DLL"},(0xEB339F5E),1,0,0
-
-
-;Localised Vendor name
-%{"Vendor-EN"}
-
-;Unique Vendor name
-:"Vendor"
-
-"\epoc32\release\ARMV5\urel\PeninputVkbKr.dll"-"!:\Sys\Bin\PeninputVkbKr.dll" 
-"\epoc32\data\Z\resource\apps\PeninputVkbKr.mif"-"!:\resource\apps\PeninputVkbKr.mif"
-"\epoc32\data\Z\resource\plugins\PeninputVkbKrWindowKr.rsc"-"!:\resource\plugins\PeninputVkbKrWindowKr.rsc"
-"\epoc32\data\Z\resource\plugins\PeninputVkbKrWindowConfigInfo_65.rsc"-"!:\resource\plugins\PeninputVkbKrWindowConfigInfo_65.rsc"
--- a/textinput/peninputvkbkr/sis/PeninputVkbKr_stub.pkg	Wed Mar 31 22:08:20 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-;
-; 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 "Eclipse Public License v1.0""
-; which accompanies this distribution, and is available
-; at the URL "http://www.eclipse.org/legal/epl-v10.html".
-;
-; Initial Contributors:
-; Nokia Corporation - initial contribution.
-;
-; Contributors:
-;
-; Description:
-;
-; Installation file for PeninputVkbKr dll
-;
-; This is an auto-generated PKG file by Carbide.
-; This file uses variables specific to Carbide builds that will not work
-; on command-line builds. If you want to use this generated PKG file from the
-; command-line tools you will need to modify the variables with the appropriate
-; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
-
-;
-; UID is the dll's UID
-;
-#{"PeninputVkbKr DLL"},(0xEB339F5E),1,0,0, TYPE=SA
-
-
-;Localised Vendor name
-%{"Vendor-EN"}
-
-;Unique Vendor name
-:"Vendor"
-
-""-"z:\Sys\Bin\PeninputVkbKr.dll" 
-""-"z:\resource\apps\PeninputVkbKr.mif"
-""-"z:\resource\plugins\PeninputVkbKrWindowKr.rsc"
-""-"z:\resource\plugins\PeninputVkbKrWindowConfigInfo_65.rsc"
Binary file textinput/peninputvkbkr/sis/PeninputVkbKr_stub.sis has changed
--- a/textinput/ptienginev2/inc/PtiEngineImpl.h	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/ptienginev2/inc/PtiEngineImpl.h	Wed Apr 14 16:18:34 2010 +0300
@@ -223,7 +223,7 @@
                                        RArray<TPtiNumericKeyBinding>& aResult,
                                        TBool aUseExtendedSet,
                                        TPtiKeyboardType aKeyboardtype = EPtiKeyboardNone);	
-        TPtiKeyboardType ActiveKeyboardTypeL();
+        TPtiKeyboardType ActiveKeyboardType() const;        
         TPtiKeyboardType FindFirstAvailableQwertyKeyboardType(TInt aLang) const;                                              	
         TPtiTextCase CaseForMappedCharacter(TChar aCharacter);
         void RemoveTrailingPunctuations();
--- a/textinput/ptienginev2/src/PtiEngineImpl.cpp	Wed Mar 31 22:08:20 2010 +0300
+++ b/textinput/ptienginev2/src/PtiEngineImpl.cpp	Wed Apr 14 16:18:34 2010 +0300
@@ -38,6 +38,7 @@
 #include <AknUtils.h>
 #include <e32property.h>
 #include <AknFepInternalCRKeys.h>
+#include <AknFepInternalPSKeys.h>
 #include <AvkonInternalCRKeys.h>
 
 const TInt KDefaultLanguageGran = 5;
@@ -1036,9 +1037,8 @@
 		case EPtiEngineStrokePhraseHalfQwerty:
 		case EPtiEngineStrokePhraseQwerty:
 			{
-			TPtiKeyboardType keyboardType = EPtiKeyboardNone;
-			TBool IsStokeKey = EFalse;
-            TRAP_IGNORE(keyboardType = ActiveKeyboardTypeL());
+			TPtiKeyboardType keyboardType = ActiveKeyboardType();
+			TBool IsStokeKey = EFalse;            
              if(EPtiKeyboardQwerty4x10 == keyboardType ||
                      EPtiKeyboardQwerty3x11 == keyboardType )
                  {
@@ -3259,7 +3259,7 @@
 	TPtiKeyboardType keyboardType = aKeyboardType;
 	if (keyboardType == EPtiKeyboardNone)
 	    {
-	    keyboardType = ActiveKeyboardTypeL();
+	    keyboardType = ActiveKeyboardType();
 	    
 	    if (keyboardType == EPtiKeyboard12Key ||
 	        keyboardType == EPtiKeyboardNone)
@@ -3724,9 +3724,7 @@
         }
 		    		    
     return EPtiKeyboardNone;*/
-	TInt keyboardLayout = 0;
-    
-    RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
+	TInt keyboardLayout = ActiveKeyboardType();          
 
     if (keyboardLayout <= 0 ||
         keyboardLayout > EPtiKeyboardMaxLayout - 1)
@@ -3882,26 +3880,44 @@
 
 
 // ---------------------------------------------------------------------------
-// CPtiEngineImpl::ActiveKeyboardTypeL
+// CPtiEngineImpl::ActiveKeyboardType
 // 
 // ---------------------------------------------------------------------------
 //
-TPtiKeyboardType CPtiEngineImpl::ActiveKeyboardTypeL()
+TPtiKeyboardType CPtiEngineImpl::ActiveKeyboardType() const
     {    
-    // Qwerty Keyboard layout
-    TInt keyboardLayout = 0;
-    
-    RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout);
-
-    if (keyboardLayout <= 0 ||
-        keyboardLayout > EPtiKeyboardMaxLayout - 1)
-        {
-        return EPtiKeyboardNone;
-        }
-        
-    return (TPtiKeyboardType)keyboardLayout;
+	TInt keyboardType = EPtiKeyboardNone;
+#ifdef RD_SCALABLE_UI_V2
+	// Get physical keyboard type
+	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardType );
+
+	// When active keyboard is virtual keyboard, 
+	// need to get the active virtual keyboard type 
+	// and set keyboardType again.
+	
+	// When the default physical keyboard is 0, 
+	// it means that there is no physical keyboard,
+	// also need to get the active virtual keyboard type.
+	TInt isVirtualInputActive = 0;
+	RProperty::Get( KPSUidAknFep, KAknFepTouchInputActive, 
+					isVirtualInputActive );    
+	if ( isVirtualInputActive > 0 || keyboardType == 0 )
+		{
+		// Active keyboard is virtual keyboard          
+		RProperty::Get( KPSUidAknFep, KAknFepVirtualKeyboardType, 
+						keyboardType );      
+		}
+#else if
+	// Get physical keyboard type
+	RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardType );	    
+#endif
+
+	if ( keyboardType <= 0 || keyboardType >= EPtiKeyboardMaxLayout )
+		{
+	    keyboardType = EPtiKeyboardNone;
+		}        
+	return (TPtiKeyboardType)keyboardType;
     }
-
         
 // ---------------------------------------------------------------------------
 // CPtiEngineImpl::GetNumericModeKeysForQwertyL