Revision: 201009 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 15 Mar 2010 12:42:02 +0200
branchRCL_3
changeset 6 6ceef9a83b1a
parent 5 a47de9135b21
child 7 6defe5d1bd39
Revision: 201009 Kit: 201010
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonImpl.h
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp
fep/aknfep/conf/aknfep.confml
fep/aknfep/conf/aknfep_101F876D.crml
fep/aknfep/inc/AknFepManager.h
fep/aknfep/inc/AknFepPluginManager.h
fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKr.cpp
fep/aknfep/src/AknFepManager.cpp
fep/aknfep/src/AknFepPluginManager.cpp
fep/frontendprocessor/test/group/BLD.INF
fep/frontendprocessor/test/group/fepbasetest.iby
fep/frontendprocessor/test/inc/TFEP1TESTTARGET.hrh
fep/frontendprocessor/test/src/TFEP1TESTTARGET.CPP
fep/frontendprocessor/test/src/TFEP1TESTTARGET.rss
inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h
inputmethods_plat/pen_input_server_api/inc/peninputcmd.h
textinput/group/bld.inf
textinput/peninputarc/inc/pensrvcliinc/peninputanim.h
textinput/peninputarc/inc/pensrvcliinc/peninputanimclientobj.h
textinput/peninputarc/inc/pensrvcliinc/peninputanimcommand.h
textinput/peninputarc/inc/pensrvcliinc/peninputserver.h
textinput/peninputarc/inc/pensrvcliinc/rpeninputanim.h
textinput/peninputarc/src/peninputanim/peninputanim.cpp
textinput/peninputarc/src/peninputanim/peninputanim.mmp
textinput/peninputarc/src/peninputclient/penclientimpl.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp
textinput/peninputarc/src/peninputserverapp/peninputanimclientobj.cpp
textinput/peninputarc/src/peninputserverapp/peninputanimcommand.cpp
textinput/peninputarc/src/peninputserverapp/peninputserver.cpp
textinput/peninputarc/src/peninputserverapp/rpeninputanim.cpp
textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistmultirowwithouticonwithbubble.cpp
textinput/peninputfingerhwr/data/peninputfingerhwrcn.rss
textinput/peninputfingerhwr/src/peninputfingerhwrrangeselector.cpp
textinput/peninputfingerhwr/src/peninputfingerhwrwnd.cpp
textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss
textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h
textinput/peninputfingerhwrar/src/peninputfingerhwrarindicator.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp
textinput/peninputgenericitut/inc/peninputgenericitutwindow.h
textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp
textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp
textinput/peninputgenericitut/src/peninputgenericitutwindowmanager.cpp
textinput/peninputgenericitut/src/peninputitutchnuistatestandby.cpp
textinput/peninputgenericitut/src/peninputitutwesternuistatenonpredict.cpp
textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp
textinput/peninputgenericitut/srcdata/peninputgeneralitutnew.rss
textinput/peninputsplititut/src/peninputsplititutwindow.cpp
textinput/peninputsplititut/srcdata/peninputsplititutnew.rss
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonImpl.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUiAvkonImpl.h	Mon Mar 15 12:42:02 2010 +0200
@@ -141,6 +141,9 @@
 	                       MEikCommandObserver* aCommandObserver,
 	                       TInt aResourceId );
 	
+	// Embeded or not
+	TBool CbaEmbeddedInDialog( const TInt& aFlags );
+
     /**
      *  Show cba of aResourceId using owns cba object(iCba)
      *
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -927,7 +927,7 @@
 		    if ( dlg )
 		        {
 		        CEikButtonGroupContainer* currentCba = dlg->MopGetObject( currentCba );
-	        	CEikCba* dlgcba = static_cast<CEikCba*>( currentCba->ButtonGroup());
+	        	//CEikCba* dlgcba = static_cast<CEikCba*>( currentCba->ButtonGroup());
 	        	if ( currentCba && iDialogCba == currentCba )
 		            {
 		            currentCba->RemoveCommandFromStack( ELeftSoftkeyIndex, -1 );
@@ -953,10 +953,10 @@
 	if ( eikAppUi!= NULL && eikAppUi->IsDisplayingDialog() && eikAppUi->TopFocusedControl())
 		{
 		CEikDialog* dlg = eikAppUi->TopFocusedControl()->MopGetObject( dlg );
-		if ( dlg )
+		if ( dlg && CbaEmbeddedInDialog( dlg->DialogFlags()))
 		    {
 			CEikButtonGroupContainer* currentCba = dlg->MopGetObject( currentCba );
-			CEikCba* dlgcba = static_cast<CEikCba*>( currentCba->ButtonGroup());
+			//CEikCba* dlgcba = static_cast<CEikCba*>( currentCba->ButtonGroup());
 			if ( currentCba )
 				{
 				TUint flags( 0 );
@@ -972,7 +972,7 @@
 				
 				CEikCba* cba = static_cast<CEikCba*>( iCba->ButtonGroup());
 				
-				CEikCba* dlgcba = static_cast<CEikCba*>( currentCba->ButtonGroup());
+				//CEikCba* dlgcba = static_cast<CEikCba*>( currentCba->ButtonGroup());
 				if( !isCbaEmded )
 					{
 					currentCba->AddCommandToStackL( ELeftSoftkeyIndex, -1, _L(""), NULL, NULL );
@@ -995,4 +995,11 @@
 		}
 	}
 
+TBool CAknFepUIAvkonImpl::CbaEmbeddedInDialog( const TInt& aFlags )
+    {
+    return AknLayoutUtils::PenEnabled() && 
+        !( aFlags & EEikDialogFlagFillAppClientRect ) &&
+        !( aFlags & EEikDialogFlagFillScreen ) &&
+        !( aFlags & EEikDialogFlagVirtualInput );
+    }
 //End of File
Binary file fep/aknfep/conf/aknfep.confml has changed
Binary file fep/aknfep/conf/aknfep_101F876D.crml has changed
--- a/fep/aknfep/inc/AknFepManager.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/aknfep/inc/AknFepManager.h	Mon Mar 15 12:42:02 2010 +0200
@@ -64,7 +64,7 @@
 #ifdef RD_INTELLIGENT_TEXT_INPUT
 // Predictive QWERTY (XT9) changes ---->
 class MAknFepUiWordPopupContent;
-#include "aknfepcandidatepopup.h"
+#include "AknFepCandidatePopup.h"
 #include "AknFepCandidatePopupCallback.h"
 // Predictive QWERTY (XT9) changes <----
 #endif //RD_INTELLIGENT_TEXT_INPUT
@@ -1418,6 +1418,11 @@
     TBool IsAbleToLaunchSCT() const;
     
     /**
+     * Get SCT Chars' Length to judge it's null
+     */
+    TBool GetSctLengthL(TInt resourceId)const;
+    
+    /**
      * Get current editor's SCT resource id
      */
     TInt GetCurrentEditorSCTResId() const;
--- a/fep/aknfep/inc/AknFepPluginManager.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/aknfep/inc/AknFepPluginManager.h	Mon Mar 15 12:42:02 2010 +0200
@@ -528,6 +528,15 @@
      */     
     inline TBool IsInMenuOpen();
     
+    /**
+     * Get current plugin input mode even if current window is close.
+     * The function is defferent from PluginInputMode(), PluginInputMode() 
+     * return EPluginInputModeNone if current input window is closed
+     * 
+     * @since 5.0
+     * @return current plugin input mode
+     */      
+    inline TPluginInputMode CurrentPluginInputMode();
 private: 
 
     /**
@@ -1212,6 +1221,11 @@
     return iInMenu;
     }
 
+inline TPluginInputMode CAknFepPluginManager::CurrentPluginInputMode()
+	{
+	return iPluginInputMode;
+	}
+
 #endif //RD_SCALABLE_UI_V2    
 
 #endif // __AKN_FEP_PLUGIN_MANAGER__
--- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKr.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKr.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -29,8 +29,9 @@
 #include <peninputcmd.h>
 #include <PeninputPluginKrRes.rsg>
 #include <peninputclient.h>
+#include <AknFepInternalCRKeys.h>
 
-#include <PtiKoreanQwertyCoreCRDefs.h>
+
 
 #include "PeninputPluginKrDbg.h"
 #include "PeninputPluginKr.hrh"   // CPeninputPluginKr
@@ -56,6 +57,19 @@
 //const TInt KFSQUiEngIndex = 3;
 const TInt KInvalidImplId = 0;
 
+enum TPeninputKoreanWordCombineFlags
+    {
+    EKoreanWordCombineVersion = 0x00000001,
+    EKoreanWordCombineConsonantSsangKiyeok = 0x00000002,
+    EKoreanWordCombineConsonantSsangTikeut = 0x00000004,
+    EKoreanWordCombineConsonantSsangPieup =  0x00000008,
+    EKoreanWordCombineConsonantSsangSios =   0x00000010,
+    EKoreanWordCombineConsonantCieuc =       0x00000020,
+    EKoreanWordCombineConsonantYaPlusI =     0x00000040,
+    EKoreanWordCombineConsonantYuPlusI =     0x00000080,
+    EKoreanWordCombineConsonantOnSetting =   0x00000100
+    };
+
 LOCAL_C void Cleanup( TAny* aAny )
     {
     RImplInfoPtrArray* implArray = 
@@ -113,7 +127,7 @@
     BaflUtils::NearestLanguageFile(coeEnv->FsSession(), resourceName);
     iResId = coeEnv->AddResourceFileL(resourceName);
     
-    iRepository=CRepository::NewL(KCRUidPtiKoreanQwertyCore);
+    iRepository=CRepository::NewL(KCRUidAknFep);
     
     }
 
@@ -308,9 +322,14 @@
     TInt ret(EFalse);
     if (aCommandId==EPeninputPluginKrDoubleConsonentCmd)
         {
-        iRepository->Set(EDblConsonentOnSetting,1);
+        TInt settingValue;
+        iRepository->Get(KAknFepKoreanCombineWordFlag,settingValue);
+        settingValue |= EKoreanWordCombineConsonantOnSetting;
+        iRepository->Set(EKoreanWordCombineConsonantOnSetting,settingValue);
         TRAP_IGNORE(ShowListQueryL(R_AKNEXQUERY_MULTI_SELECTION_LIST_QUERY));
-        iRepository->Set(EDblConsonentOnSetting,0);
+        iRepository->Get(KAknFepKoreanCombineWordFlag,settingValue);
+        settingValue &= 0xFFFFFEFF;
+        iRepository->Set(EKoreanWordCombineConsonantOnSetting,settingValue);
         ret=ETrue;
         }
     return ret;
@@ -563,77 +582,91 @@
         new (ELeave) CAknListQueryDialog(arraySelected);
     dlg->PrepareLC(aResourceId);
     
-    TInt set;
-    if (iRepository->Get(EDblConsonentSsangKiyeok,set)==KErrNone)
-        {
-        if (set) arraySelected->AppendL(0);
-        }
-    if (iRepository->Get(EDblConsonentSsangTikeut,set)==KErrNone)
-        {
-        if (set) arraySelected->AppendL(1);
-        }
-    if (iRepository->Get(EDblConsonentSsangPieup,set)==KErrNone)
+
+    TInt settingValue;
+
+    if( iRepository->Get( KAknFepKoreanCombineWordFlag, settingValue ) == KErrNone )
         {
-        if (set) arraySelected->AppendL(2);
-        }
-    if (iRepository->Get(EDblConsonentSsangSios,set)==KErrNone)
-        {
-        if (set) arraySelected->AppendL(3);
-        }
-    if (iRepository->Get(EDblConsonentSsangCieuc,set)==KErrNone)
-        {
-        if (set) arraySelected->AppendL(4);
-        }
-    if (iRepository->Get(EDblConsonentYaPlusI,set)==KErrNone)
-        {
-        if (set) arraySelected->AppendL(5);
-        }
-    if (iRepository->Get(EDblConsonentYuPlusI,set)==KErrNone)
-        {
-        if (set) arraySelected->AppendL(6);
+        if( settingValue & EKoreanWordCombineConsonantSsangKiyeok )
+            {
+            arraySelected->AppendL(0);
+            }
+
+
+        if( settingValue & EKoreanWordCombineConsonantSsangTikeut )
+            {
+            arraySelected->AppendL(1);
+            }
+
+
+        if( settingValue & EKoreanWordCombineConsonantSsangPieup )
+            {
+            arraySelected->AppendL(2);
+            }
+
+
+        if( settingValue & EKoreanWordCombineConsonantSsangSios )
+            {
+            arraySelected->AppendL(3);
+            }
+
+
+        if( settingValue & EKoreanWordCombineConsonantCieuc )
+            {
+            arraySelected->AppendL(4);
+            }
+
+
+        if( settingValue & EKoreanWordCombineConsonantYaPlusI )
+            {
+            arraySelected->AppendL(5);
+            }
+
+
+        if( settingValue & EKoreanWordCombineConsonantYuPlusI )
+            {
+            arraySelected->AppendL(6);
+            }
         }
     dlg->ListBox()->SetSelectionIndexesL(arraySelected);
     
     if (dlg->RunLD())
         {
-        iRepository->Set(EDblConsonentSsangKiyeok,0);
-        iRepository->Set(EDblConsonentSsangTikeut,0);
-        iRepository->Set(EDblConsonentSsangPieup,0);
-        iRepository->Set(EDblConsonentSsangSios,0);
-        iRepository->Set(EDblConsonentSsangCieuc,0);
-        iRepository->Set(EDblConsonentYaPlusI,0);
-        iRepository->Set(EDblConsonentYuPlusI,0);
 
+        settingValue &= 0xFFFFFF01; 
+        iRepository->Set( KAknFepKoreanCombineWordFlag, settingValue );
         for (TInt i=0;i<arraySelected->Count();i++)
             {
             switch (arraySelected->At(i))
                 {
                 case 0:
-                    iRepository->Set(EDblConsonentSsangKiyeok,1);
+                    settingValue |= EKoreanWordCombineConsonantSsangKiyeok; 
                     break;
                 case 1:
-                    iRepository->Set(EDblConsonentSsangTikeut,1);
+                    settingValue |= EKoreanWordCombineConsonantSsangTikeut; 
                     break;
                 case 2:
-                    iRepository->Set(EDblConsonentSsangPieup,1);
+                    settingValue |= EKoreanWordCombineConsonantSsangPieup;
                     break;
                 case 3:
-                    iRepository->Set(EDblConsonentSsangSios,1);
+                    settingValue |= EKoreanWordCombineConsonantSsangSios;
                     break;
                 case 4:
-                    iRepository->Set(EDblConsonentSsangCieuc,1);
+                    settingValue |= EKoreanWordCombineConsonantCieuc;
                     break;
                 case 5:
-                    iRepository->Set(EDblConsonentYaPlusI,1);
+                    settingValue |= EKoreanWordCombineConsonantYaPlusI;
                     break;
                 case 6:
-                    iRepository->Set(EDblConsonentYuPlusI,1);
+                    settingValue |= EKoreanWordCombineConsonantYuPlusI;
                     break;
                 default:
                     break;
                 }
             }
         }
+
+    iRepository->Set( KAknFepKoreanCombineWordFlag, settingValue );
     CleanupStack::PopAndDestroy(arraySelected);
     }
 
--- a/fep/aknfep/src/AknFepManager.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/aknfep/src/AknFepManager.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -13524,10 +13524,11 @@
         // The editor doesn't allow SCT.
         return EFalse;
         }
-
+    
+    TInt numberModeSctId = NumericModeSCTResourceId(); 
     if (iMode == ENumber || iMode == ENativeNumber)
         {
-        if (iPermittedInputModes == EAknEditorNumericInputMode || !NumericModeSCTResourceId()) 
+        if (iPermittedInputModes == EAknEditorNumericInputMode || !numberModeSctId) 
             {
             // 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.
@@ -13542,13 +13543,26 @@
             // 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()))
         {
         ableToLaunchSCT = EFalse;
         }
-
+    
+   
+    
     return ableToLaunchSCT;
     }
 
@@ -20628,7 +20642,10 @@
         iEditMenuBar = NULL;
         }
 #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__    
-    if (iOptionsMenuBar)
+    // temporary solution for Entering key on virtual QWERTY not working 
+    // like enter on virtual ITU-T or on external keyboard
+    if ( iOptionsMenuBar && !( iFepPluginManager && 
+    		iFepPluginManager->CurrentPluginInputMode() == EPluginInputModeFSQ ) )
         {
         iOptionsMenuBar->StopDisplayingMenuBar();
         iOptionsMenuBar = NULL;
@@ -20762,6 +20779,72 @@
     aKey = ch;
     }
 
+TBool CAknFepManager::GetSctLengthL(TInt resourceId)const
+	{
+	CCoeEnv* coeEnv = CCoeEnv::Static();
+	TResourceReader reader;
+	CEikonEnv::Static()->CreateResourceReaderLC(reader,resourceId);
+	TInt component_count=reader.ReadInt16();
+	TInt length = 0;
+	TBool isEmpty = ETrue;
+	HBufC* sctChar = NULL;
+	
+	for (TInt ii=0;ii<component_count;ii++)
+		{
+		TInt component_id=reader.ReadInt16();
+		switch(component_id)
+			{
+			case EAknSCTLowerCase:
+				{
+		        sctChar = reader.ReadHBufCL();
+		        length += (sctChar != NULL)? sctChar->Length(): 0;
+		        break;
+				}
+			case EAknSCTUpperCase:
+				{
+		        sctChar = reader.ReadHBufCL();
+		        length += (sctChar != NULL)? sctChar->Length(): 0;
+		        break;
+				}
+			case EAknSCTNumeric:
+				{
+		        sctChar = reader.ReadHBufCL();
+		        length += (sctChar != NULL)? sctChar->Length(): 0;
+		    	break;
+				}
+		    case EAknSCTFullCase:
+		        {
+		        sctChar = reader.ReadHBufCL();
+		        length += (sctChar != NULL)? sctChar->Length(): 0;
+		        break;
+		        }
+		    case EAknSCTHalfCase:
+		       	{
+		        sctChar = reader.ReadHBufCL();
+		        length += (sctChar != NULL)? sctChar->Length(): 0;
+		        break;
+		       	}
+		    case EAknSCTQwerty:
+		        {
+		        sctChar = reader.ReadHBufCL();
+		        length += (sctChar != NULL)? sctChar->Length(): 0;
+		        break;
+		        }
+		   	default:
+		        break;
+			}
+	    delete sctChar;
+	    sctChar = NULL;
+	    if(length > 0)
+	    	{
+            isEmpty = EFalse;
+	    	break;
+	    	}
+		}
+	CleanupStack::PopAndDestroy();  //reader 
+	return isEmpty;
+	}
+
 // ---------------------------------------------------------------------------
 // LOCAL METHODS
 // 
--- a/fep/aknfep/src/AknFepPluginManager.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/aknfep/src/AknFepPluginManager.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -290,7 +290,8 @@
     if( !iPenInputSvrConnected || !iPenInputServer.IsVisible() || iPenInputServer.IsDimmed() )
         {
         if( iFepMan.FepAwareTextEditor() )
-            {
+            {            
+  			iPreferredUiMode = ETrue;	
             TryChangePluginInputModeByModeL((TPluginInputMode)(iSharedData.PluginInputMode()),
                                             EPenInputOpenManually,
                                             ERangeInvalid);
@@ -1196,6 +1197,12 @@
 		    iFepMan.UpdateCbaL( NULL );
 		    }
         
+        if ( iFepMan.EditorState() )
+            {
+            iFepMan.EditorState()->SetFlags( 
+                iFepMan.EditorState()->Flags() | EAknEditorFlagTouchInputModeOpened );
+            }		
+		
         // Notify application touch window state
         NotifyAppUiImeTouchWndStateL( ETrue );
 
@@ -1277,6 +1284,12 @@
                 
     iFepMan.UiInterface()->TouchPaneSetInputMethodIconActivated(EFalse);
     
+	if ( iFepMan.EditorState() )
+	{
+	iFepMan.EditorState()->SetFlags( 
+		iFepMan.EditorState()->Flags() & ~EAknEditorFlagTouchInputModeOpened );
+	}
+	
     if ( prePluginInputMode == EPluginInputModeVkb )
         {
         iFepMan.UpdateIndicators();
@@ -1503,6 +1516,15 @@
                                                     ERangeInvalid);
                     }
                     break;
+                case EPeninputCmdHwr:
+                	{
+                	ClosePluginInputModeL(ETrue);               
+                	iFepMan.TryCloseUiL();  
+                	TryChangePluginInputModeByModeL( EPluginInputModeFingerHwr, 
+                	                                 EPenInputOpenManually,
+                	                                 ERangeInvalid );
+                	}
+                	break;
                 case EFepInputCmdHelp:
                     {
                     if (iInMenu)
@@ -1852,17 +1874,23 @@
     	TInt curInputMode = iLangMan.CurrentImePlugin()->CurrentMode();
     	TBool isChinese = iFepMan.IsChineseInputLanguage();
     	
-    	if ( !isChinese && ( curInputMode == EPluginInputModeItut ) && 
-    	        !( disabledInputMode & EPluginInputModeFSQ ))
+    	if ( !isChinese && ( curInputMode != EPluginInputModeFSQ ) 
+    			&& !( disabledInputMode & EPluginInputModeFSQ ))
     	    {
     	    aMenuPane->SetItemDimmed( EPeninputCmdFSQ, EFalse );
     	    }
     	
-    	if ( !isChinese && ( curInputMode == EPluginInputModeFSQ ) &&
-    	        !( disabledInputMode & EPluginInputModeItut ))
+    	if ( !isChinese && ( curInputMode != EPluginInputModeItut ) 
+    			&& !( disabledInputMode & EPluginInputModeItut ))
     	    {
     	    aMenuPane->SetItemDimmed(EPenInputCmdVITUT, EFalse);
     	    }
+    	
+    	if ( iFepMan.IsArabicInputLanguage() && ( curInputMode != EPluginInputModeFingerHwr )
+    			&& !( disabledInputMode & EPluginInputModeFingerHwr ))
+    	    {
+    	    aMenuPane->SetItemDimmed( EPeninputCmdHwr, EFalse );
+    	    }
         //For arabic finger hwr input orientation.
         TInt index = 0;        
         if(iPluginInputMode == EPluginInputModeFingerHwr
--- a/fep/frontendprocessor/test/group/BLD.INF	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/frontendprocessor/test/group/BLD.INF	Mon Mar 15 12:42:02 2010 +0200
@@ -29,7 +29,6 @@
 ../feps/tfep2be.mmp
 ../feps/TFEP2PlugIn.MMP
 ../feps/TFEP3PlugIn.MMP
-../feps/TFEP4PlugIn.MMP
 
 
 
--- a/fep/frontendprocessor/test/group/fepbasetest.iby	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/frontendprocessor/test/group/fepbasetest.iby	Mon Mar 15 12:42:02 2010 +0200
@@ -38,11 +38,8 @@
 data=DATAZ_\resource\data\tfep1_ui.r01 				resource\data\tfep1_ui.r01
 data=DATAZ_\resource\data\tfep1_ui.r10 				resource\data\tfep1_ui.r10
 ECOM_PLUGIN(tfep3plugin.dll,tfep3plugin.rsc)
-ECOM_PLUGIN(tfep4plugin.dll,tfep4plugin.rsc)
 data=DATAZ_\resource\data\tfep3_ui.r01                          resource\data\tfep3_ui.r01
 data=DATAZ_\resource\data\tfep3_ui.r10                          resource\data\tfep3_ui.r10
-data=DATAZ_\resource\data\tfep4_ui.r01                          resource\data\tfep4_ui.r01
-data=DATAZ_\resource\data\tfep4_ui.r10                          resource\data\tfep4_ui.r10
 
 data=DATAZ_\system\test\fepbasetest\tfep1testtarget.r01		System\test\fepbasetest\tfep1testtarget.r01
 data=DATAZ_\system\test\fepbasetest\tfep1testtarget.r10		System\test\fepbasetest\tfep1testtarget.r10
--- a/fep/frontendprocessor/test/inc/TFEP1TESTTARGET.hrh	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/frontendprocessor/test/inc/TFEP1TESTTARGET.hrh	Mon Mar 15 12:42:02 2010 +0200
@@ -28,8 +28,7 @@
 	EControlIdNormalEdwin=1,
 	EControlIdNormalNumEdwin,
 	EControlIdHalfWidthKatakanaEdwin,
-	EControlIdPhoneticAlphabetEdwin,
-	EControlIdCJKEdwin
+	EControlIdPhoneticAlphabetEdwin
 	};
 
 #endif
--- a/fep/frontendprocessor/test/src/TFEP1TESTTARGET.CPP	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/frontendprocessor/test/src/TFEP1TESTTARGET.CPP	Mon Mar 15 12:42:02 2010 +0200
@@ -40,7 +40,6 @@
 
 
 const TUid KUidTFep1 = { 0x102024D0 };
-const TUid KUidTFep4 = { 0x1028716D };
 
 // String literal to represent the language-specific resource file path.
 _LIT(KFep1TestTargetResourceFilePath, "z:\\system\\test\\fepbasetest\\tfep1testtarget.r01");
@@ -50,14 +49,12 @@
 TBuf<16> gTextNormalNumEdwin;
 TBuf<16> gTextKatakanaEdwin;
 TBuf<32> gTextPhoneticalEdwin;
-TBuf<32> gTextCJKEdwin;
 
 // expected results (according to FEP1 settings and the actions performed in the CFep1TestTargetUi::RunTestStepL method below)
 _LIT(KExpectedTextNormalEdwin, "ABCGHIJKLMQRST@");
 _LIT(KExpectedTextNormalNumEdwin, "1230056");
 _LIT(KExpectedTextKatakanaEdwin, "EFG");
 _LIT(KExpectedTextPhoneticalEdwin, "JulietteKiloLimaMNO");
-_LIT(KExpectedTextCJKEdwin, "!\x0411\x0E02\x2E81\x303A\x4E19\xAD00\xD840\xDC00\xD87E\xDC00 !\"#");
 
 
 /*************************************************************
@@ -103,10 +100,6 @@
 	CEikEdwin& phoneticAlphabetEdwin=*static_cast<CEikEdwin*>(Control(EControlIdPhoneticAlphabetEdwin));
 	inputCapabilities=phoneticAlphabetEdwin.InputCapabilities();
 	phoneticAlphabetEdwin.SetInputCapabilitiesL(TCoeInputCapabilities(TCoeInputCapabilities::EWesternAlphabetic|TCoeInputCapabilities::ENavigation, inputCapabilities.FepAwareTextEditor(), inputCapabilities.CaptionRetrieverForFep(), TUid::Uid(KTfep1Uid), this));
-	CEikEdwin& cjkEdwin=*static_cast<CEikEdwin*>(Control(EControlIdCJKEdwin));
-	inputCapabilities=cjkEdwin.InputCapabilities();
-	inputCapabilities.SetCapabilities(TCoeInputCapabilities::EAllText|TCoeInputCapabilities::ENavigation);
-	cjkEdwin.SetInputCapabilitiesL(inputCapabilities);
 	}
 
 
@@ -125,9 +118,6 @@
 	CEikEdwin* edwinPhonetical = static_cast<CEikEdwin*>(Control(EControlIdPhoneticAlphabetEdwin));
 	edwinPhonetical->GetText(gTextPhoneticalEdwin);
 
-	CEikEdwin* edwinCJK = static_cast<CEikEdwin*>(Control(EControlIdCJKEdwin));
-	edwinCJK->GetText(gTextCJKEdwin);
-
 	//It's always ok to return OK in our case...
 	return ETrue;
 	}
@@ -813,197 +803,13 @@
 			
 		case 460:
 			{
-			//INFO_PRINTF1(_L("...simulate Key Event Enter ---> Submits 'MNO' (not Fep installed --> No Alphabetical!"));
-			//SendKey(EKeyEnter);			
+			INFO_PRINTF1(_L("...simulate Key Event Enter ---> Submits 'MNO' (not Fep installed --> No Alphabetical!"));
+			SendKey(EKeyEnter);			
 			RecordTestResultL();
 			}
 			break;
 
-//----------------------------------------------------------------------------------------------
 
-/**
-   @SYMTestCaseID 		TI18N-FEPBASE-CIT-4001
-   @SYMPREQ				2471
-   @SYMTestCaseDesc  	Check FEPBASE Unicode 5.0 support.
-   @SYMTestPriority 	High 
-   @SYMTestStatus 		Implemented
-   @SYMTestActions 		1. Pass BMP code points to WORD.exe
-                        2. Pass non-BMP code points to WORD.exe 
- 		
-   @SYMTestExpectedResults 	When the dialog is dismissed, the text box reads as is expected.
- */
-
-//----------------------------------------------------------------------------------------------
-
-		case 461:
-			{
-			SetTestStepID(_L("TI18N-FEPBASE-CIT-4001"));
-			INFO_PRINTF1(_L("Send cursor down events to move the next dialog"));
-			SendKey(EKeyDownArrow);			
-			INFO_PRINTF1(_L("Install the FEP 1"));
-			iCoeEnv->InstallFepL(KUidTFep1);
-			User::After(TTimeIntervalMicroSeconds32(2000000));
-			}
-			break;
-
-		case 462:
-			{
-			INFO_PRINTF1(_L("...simulate Key Event 'Shift + M' ---> Changes to hex fep!"));
-			SendKey('M', EModifierRightShift);			
-			TUint codes[] = {'0', '0', '2', '1'};
-			for (int i = 0; i < sizeof(codes)/sizeof(TUint); i++)
-				{
-				INFO_PRINTF2(_L("...simulate Key Event '%d'"), codes[i]);
-				SendKey(codes[i]);
-				User::After(TTimeIntervalMicroSeconds32(200000));
-				}
-			INFO_PRINTF1(_L("...simulate Key Event Enter"));
-			SendKey(EKeyEnter);			
-			}
-			break;
-		case 463:  
-			{
-			TUint codes[] = {'0', '4', '1', '1'};
-			for (int i = 0; i < sizeof(codes)/sizeof(TUint); i++)
-				{
-				INFO_PRINTF2(_L("...simulate Key Event '%d'"), codes[i]);
-				SendKey(codes[i]);
-				User::After(TTimeIntervalMicroSeconds32(200000));
-				}
-			INFO_PRINTF1(_L("...simulate Key Event Enter"));
-			SendKey(EKeyEnter);			
-			}
-			break;
-		case 464:  
-			{
-			TUint codes[] = {'0', 'E', '0', '2'};
-			for (int i = 0; i < sizeof(codes)/sizeof(TUint); i++)
-				{
-				INFO_PRINTF2(_L("...simulate Key Event '%d'"), codes[i]);
-				SendKey(codes[i]);
-				User::After(TTimeIntervalMicroSeconds32(200000));
-				}
-			INFO_PRINTF1(_L("...simulate Key Event Enter"));
-			SendKey(EKeyEnter);			
-			}
-			break;
-			
-		case 465:
-			{
-			TUint codes[] = {'2', 'E', '8', '1'};
-			for (int i = 0; i < sizeof(codes)/sizeof(TUint); i++)
-				{
-				INFO_PRINTF2(_L("...simulate Key Event '%d'"), codes[i]);
-				SendKey(codes[i]);
-				User::After(TTimeIntervalMicroSeconds32(1000000));
-				}
-			INFO_PRINTF1(_L("...simulate Key Event Enter"));
-			SendKey(EKeyEnter);			
-			}
-			break;
-		case 466:
-			{
-			TUint codes[] = {'3', '0', '3', 'A'};
-			for (int i = 0; i < sizeof(codes)/sizeof(TUint); i++)
-				{
-				INFO_PRINTF2(_L("...simulate Key Event '%d'"), codes[i]);
-				SendKey(codes[i]);
-				User::After(TTimeIntervalMicroSeconds32(1000000));
-				}
-			INFO_PRINTF1(_L("...simulate Key Event Enter"));
-			SendKey(EKeyEnter);			
-			}
-			break;
-		case 467:
-			{
-			TUint codes[] = {'4', 'E', '1', '9'};
-			for (int i = 0; i < sizeof(codes)/sizeof(TUint); i++)
-				{
-				INFO_PRINTF2(_L("...simulate Key Event '%d'"), codes[i]);
-				SendKey(codes[i]);
-				User::After(TTimeIntervalMicroSeconds32(1000000));
-				}
-			INFO_PRINTF1(_L("...simulate Key Event Enter"));
-			SendKey(EKeyEnter);			
-			}
-			break;
-		case 468:
-			{
-			TUint codes[] = {'A', 'D', '0', '0'};
-			for (int i = 0; i < sizeof(codes)/sizeof(TUint); i++)
-				{
-				INFO_PRINTF2(_L("...simulate Key Event '%d'"), codes[i]);
-				SendKey(codes[i]);
-				User::After(TTimeIntervalMicroSeconds32(1000000));
-				}
-			INFO_PRINTF1(_L("...simulate Key Event Enter"));
-			SendKey(EKeyEnter);			
-			}
-			break;
-
-		case 469:
-			{
-			INFO_PRINTF1(_L("Uninstall the FEP"));
-			iCoeEnv->InstallFepL(KNullUid);
-			INFO_PRINTF1(_L("Install the FEP 4"));
-			iCoeEnv->InstallFepL(KUidTFep4);
-			User::After(TTimeIntervalMicroSeconds32(2000000));
-			}
-			break;
-
-		case 471:
-			{
-			TUint codes[] = {'2', '0', '0', '0', '0'};
-			for (int i = 0; i < sizeof(codes)/sizeof(TUint); i++)
-				{
-				INFO_PRINTF2(_L("...simulate Key Event '%d'"), codes[i]);
-				SendKey(codes[i]);
-				User::After(TTimeIntervalMicroSeconds32(1000000));
-				}
-			INFO_PRINTF1(_L("...simulate Key Event Enter"));
-			SendKey(EKeyEnter);			
-			}
-			break;
-		case 472: 
-			{
-			TUint codes[] =  {'2', 'F', '8', '0', '0'};
-			for (int i = 0; i < sizeof(codes)/sizeof(TUint); i++)
-				{
-				INFO_PRINTF2(_L("...simulate Key Event '%d'"), codes[i]);
-				SendKey(codes[i]);
-				User::After(TTimeIntervalMicroSeconds32(1000000));
-				}
-			INFO_PRINTF1(_L("...simulate Key Event Enter"));
-			SendKey(EKeyEnter);			
-			}
-			break;
-			
-		case 473:
-			{
-            INFO_PRINTF1(_L("...simulate Key Event 'Shift + X' ---> test SimulateKeyEventsL!"));
-            SendKey('X', EModifierRightShift);
-            User::After(TTimeIntervalMicroSeconds32(2000000));
-			INFO_PRINTF1(_L("...simulate Key Event 'Shift + M' ---> Changes to Pinyin!"));
-			SendKey('M', EModifierRightShift);
-            User::After(TTimeIntervalMicroSeconds32(2000000));
-			}
-			break;
-		case 474:
-			{
-			INFO_PRINTF1(_L("...simulate Key Event 'Shift + M' ---> Changes back to Plain!"));
-			SendKey('M', EModifierRightShift);
-			User::After(TTimeIntervalMicroSeconds32(2000000));
-			}
-			break;
-		case 475:
-			{
-			INFO_PRINTF1(_L("Uninstall the FEP"));
-			iCoeEnv->InstallFepL(KNullUid);
-			SendKey(EKeyEnter);  
-			RecordTestResultL();
-			}
-			break;
-						
 //----------------------------------------------------------------------------------------------
 
 /**
@@ -1043,13 +849,11 @@
 			INFO_PRINTF3(_L("gTextNormalNumEdwin was '%S' (expected '%S')"), &gTextNormalNumEdwin, &KExpectedTextNormalNumEdwin);
 			INFO_PRINTF3(_L("gTextKatakanaEdwin was '%S' (expected '%S')"), &gTextKatakanaEdwin, &KExpectedTextKatakanaEdwin);
 			INFO_PRINTF3(_L("gTextPhoneticalEdwin was '%S' (expected '%S')"), &gTextPhoneticalEdwin, &KExpectedTextPhoneticalEdwin);
-			INFO_PRINTF3(_L("gTextCJKEdwin was '%S' (expected '%S')"), &gTextCJKEdwin, &KExpectedTextCJKEdwin);
 
 			TEST(gTextNormalEdwin == KExpectedTextNormalEdwin);
 			TEST(gTextNormalNumEdwin == KExpectedTextNormalNumEdwin);
 			TEST(gTextKatakanaEdwin == KExpectedTextKatakanaEdwin);
 			TEST(gTextPhoneticalEdwin == KExpectedTextPhoneticalEdwin);
-			TEST(gTextCJKEdwin == KExpectedTextCJKEdwin);
 			RecordTestResultL();
 			CloseTMSGraphicsStep();
 			}
--- a/fep/frontendprocessor/test/src/TFEP1TESTTARGET.rss	Fri Mar 12 15:44:07 2010 +0200
+++ b/fep/frontendprocessor/test/src/TFEP1TESTTARGET.rss	Mon Mar 15 12:42:02 2010 +0200
@@ -63,16 +63,7 @@
 			prompt="Phonetic-alphabet edwin";
 			id=EControlIdPhoneticAlphabetEdwin;
 			control=EDWIN {width=15;};
-			},
-		DLG_LINE
-			{
-			type=EEikCtEdwin;
-			prompt="CJK edwin";
-			id=EControlIdCJKEdwin;
-			control=EDWIN
-				{width=15;};
 			}
-			
 		};
     }
 
--- a/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h	Mon Mar 15 12:42:02 2010 +0200
@@ -344,6 +344,23 @@
  * 0 is for portrait and 1 is for landscape.
  */
 const TUint32 KAknFepDefaultArabicFingerHwrOrientation = 0x00000023;
+
+/**
+ * This key is required for the Korean Combine Word flag. Korean
+ * peninputplugin uses it to store the user selection for Korean Combine 
+ * Words settings.
+ * Korean Combining Version is 0x00000001,
+ * Korean ConsonantSsangKiyeok combining stage is 0x00000002,
+ * Korean ConsonantSsangTikeut combining stage is 0x00000004,
+ * Korean ConsonantSsangPieup combining stage is 0x00000008,
+ * Korean ConsonantSsangSios combining stage is 0x00000010,
+ * Korean ConsonantSsangCieuc combining stage is 0x00000020,
+ * Korean ConsonantYaPlusI combining stage is 0x00000040,
+ * Korean ConsonantYuPlusI combining stage is 0x00000080,
+ * Korean Combining Word Setting On is 0x00000100
+ *
+ */
+const TUint32 KAknFepKoreanCombineWordFlag = 0x00000024;              
 #endif
 
 // End of file
--- a/inputmethods_plat/pen_input_server_api/inc/peninputcmd.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/inputmethods_plat/pen_input_server_api/inc/peninputcmd.h	Mon Mar 15 12:42:02 2010 +0200
@@ -139,7 +139,8 @@
     ESignalShowCandidate,
     ESignalSelectCandidate,
     ESignalAcceptTooltip,
-    ESignalCommitITIInlineText,    
+    ESignalCommitITIInlineText,  
+    EPeninputOpSetDiscreeptPop,  
     ESignalUserEventBase = 2000
     };
 
--- a/textinput/group/bld.inf	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/group/bld.inf	Mon Mar 15 12:42:02 2010 +0200
@@ -34,8 +34,6 @@
 #else
 #include "../akninputlanguage/group/bld.inf"
 #endif
-#include "../ptihangulcore/group/bld.inf"
-#include "../ptikoreanqwertycore/group/bld.inf"
 #include "../peninputarc/group/bld.inf"
 #include "../peninputcommonctrls/group/bld.inf"
 #include "../peninputhwrboxcn/group/bld.inf"
--- a/textinput/peninputarc/inc/pensrvcliinc/peninputanim.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/inc/pensrvcliinc/peninputanim.h	Mon Mar 15 12:42:02 2010 +0200
@@ -29,7 +29,6 @@
 
 #include "peninputmsgqueue.h"
 
-class CSubscriber;
 #include "peninputcmdparamext.h"
 /**
  * Animation DLL creation class.
@@ -294,11 +293,10 @@
 #endif // RD_TACTILE_FEEDBACK  
 
     void SetDSAState(TBool aFlag);
+	
     //For discreetPop
-    static TInt DiscreetPopChangeNotification(TAny* aObj);
-    void HandleDiscreetPopNotification();
+    void SetDiscreeptPop(TRect aArea);
     
-    void Refresh();
 private:    // Data
     /**
      * Current state 
@@ -400,13 +398,21 @@
      * Flag to detect primary touch device at startup
      */
     TBool  iPrimaryTouchPtDetected;
-    CSubscriber*    iDiscreetPopSubscriber;
-    RProperty       iDiscreetPopProperty;
+	
+    /**
+     * Flag there is a discreept popped
+     */	
     TBool iDiscreetPoped;
+	
+    /**
+     * Flag need capture for key event when discreept pop
+     */	
     TBool iDiscreetPopedCapture;
+	
+    /**
+     * the discreept pop area
+     */	
     TRect iDiscreetPopArea;
-    RAknUiServer iAknUiSrv; 
-    TBool iDirty;
     
     /**
      * Fix bug HMNN-82CDU5
@@ -417,23 +423,5 @@
 
 
 
-class CSubscriber : public CActive
-    {
-public:
-    CSubscriber(TCallBack aCallBack, RProperty& aProperty);
-    ~CSubscriber();
-
-public: // New functions
-    void SubscribeL();
-    void StopSubscribe();
-
-private: // from CActive
-    void RunL();
-    void DoCancel();
-
-private:
-    TCallBack   iCallBack;
-    RProperty&  iProperty;
-    };
 #endif //C_CPENINPUTANIMDLL_H
 // End of File
--- a/textinput/peninputarc/inc/pensrvcliinc/peninputanimclientobj.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/inc/pensrvcliinc/peninputanimclientobj.h	Mon Mar 15 12:42:02 2010 +0200
@@ -223,6 +223,14 @@
     void OnExiting();           
     
     void GetDSAState(TBool& aState);
+	
+    /**
+     *
+     * @since S60 v4.0
+     * @aArea The rect of the discreet pop 
+     * @return ETrue if command added successfully.
+     */	    
+    TBool SetDiscreetPopArea(const TRect& aArea);
 private:
     /**
      * Default constructor.
--- a/textinput/peninputarc/inc/pensrvcliinc/peninputanimcommand.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/inc/pensrvcliinc/peninputanimcommand.h	Mon Mar 15 12:42:02 2010 +0200
@@ -473,6 +473,27 @@
     TBool iSpriteFlag;    
     };
 	
+//class TAnimSetDiscreeptPopCmd
+/**
+ * Class for handling pop discreept window area command
+ * 
+ *
+ * @since S60 v4.0
+ */
+class TAnimSetDiscreeptPopCmd :  public TAnimCmd
+    {
+public:
+	TAnimSetDiscreeptPopCmd(RPeninputAnim& aAnim,TRect aArea);
+	/**
+     * Execute the command
+     *
+     * @since S60 v4.0
+	 * @return ETrue if command has been executed successfully.     
+     */     
+    virtual TBool ExecuteAnimCommand() const;
+private:
+    TRect iArea;    
+    };
 #include "peninputanimcommand.inl"
 	
 #endif //C_CPENINPUTANIM_CMD_H
--- a/textinput/peninputarc/inc/pensrvcliinc/peninputserver.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/inc/pensrvcliinc/peninputserver.h	Mon Mar 15 12:42:02 2010 +0200
@@ -31,6 +31,8 @@
 
 #include "peninputcmdparamext.h"
 
+#include <AknCapServerClient.h>
+
 // the maximum count of TUpdateArea that area pool can hold
 const TInt KMaxRectNumInBuf = 100;
 class CCoeControl;
@@ -75,6 +77,7 @@
 class CEventQueue;
 class CPtiEngine;
 class CAknLayoutChangeWatcher;
+class CSubscriber;
 // DESCRIPTION
 /**
  * Class MRawEventHandler
@@ -382,6 +385,9 @@
 
     TInt HandleAppInfoChange(CPeninputServerSession* aSession,
                             const TDesC& aAppInfo, TPeninputAppInfo aType) const;
+    static TInt DiscreetPopChangeNotification(TAny* aObj);
+    
+    void HandleDiscreetPopNotification();
 protected:  // New functions
 
     /**
@@ -966,6 +972,12 @@
     CRepository* iSensorRepository;
     
     TInt iInputLanguage;
+	
+	// Add for notify discreept pop
+    CSubscriber*    iDiscreetPopSubscriber;
+    RProperty       iDiscreetPopProperty;
+    RAknUiServer    iAknUiSrv; 
+    TRect iDiscreetPopArea;
     };
 
 /**
@@ -1148,4 +1160,28 @@
     
 #endif //C_CPENINPUTSERVER_H
 
+/**
+ * CSubscriber
+ * Subscribe discreept state.
+ *
+ * @since S60 v4.0
+ */ 
+class CSubscriber : public CActive
+    {
+public:
+    CSubscriber(TCallBack aCallBack, RProperty& aProperty);
+    ~CSubscriber();
+
+public: // New functions
+    void SubscribeL();
+    void StopSubscribe();
+
+private: // from CActive
+    void RunL();
+    void DoCancel();
+
+private:
+    TCallBack   iCallBack;
+    RProperty&  iProperty;
+    };
 // End of File
--- a/textinput/peninputarc/inc/pensrvcliinc/rpeninputanim.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/inc/pensrvcliinc/rpeninputanim.h	Mon Mar 15 12:42:02 2010 +0200
@@ -184,6 +184,8 @@
     void EnableSprite(TBool aFlag);    
     
     void GetDSAState(TBool& aState);
+	
+    void SetDiscreeptPop(const TRect& aArea);
 private:
 
     /**
--- a/textinput/peninputarc/src/peninputanim/peninputanim.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/src/peninputanim/peninputanim.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -131,13 +131,6 @@
 	// Modify for bug ETMA-7X2C5Y begin
 	delete iPointerEventSuppressor;
 	// Modify for bug ETMA-7X2C5Y end
-	if (iDiscreetPopSubscriber)
-	    {
-	    iDiscreetPopSubscriber->StopSubscribe();
-	    }
-	iDiscreetPopProperty.Close();
-	delete iDiscreetPopSubscriber;
-	iAknUiSrv.Close();
     }
 
 // ---------------------------------------------------------------------------
@@ -155,19 +148,6 @@
 	// Modify for bug ETMA-7X2C5Y begin
     iPointerEventSuppressor = CPenPointerEventSuppressor::NewL();
     // Modify for bug ETMA-7X2C5Y end
-    User::LeaveIfError(iDiscreetPopProperty.Attach(KPSUidAvkonDomain, 
-                                         KAknGlobalDiscreetPopupNumChanged));
-    iDiscreetPopSubscriber = new (ELeave) CSubscriber(
-			TCallBack( DiscreetPopChangeNotification, this), 
-			iDiscreetPopProperty);
-    iDiscreetPopSubscriber->SubscribeL();
-	
-	User::LeaveIfError(iAknUiSrv.Connect());
-	iDiscreetPopArea = iAknUiSrv.GetInUseGlobalDiscreetPopupRect();
-    if(iDiscreetPopArea.Size().iWidth > 0)
-    	{
-		iDiscreetPoped = ETrue;
-    	}
     }
 
 
@@ -704,6 +684,14 @@
             
             }
             break;
+        case EPeninputOpSetDiscreeptPop:
+        	{
+            TRect area;
+            TPckg<TRect> msgData(area);
+            msg->ReadL(KMsgSlot1,msgData);
+            SetDiscreeptPop(area); 
+        	}
+        	break;
         default:
             // unsupported opcode, panic the client
             {                
@@ -791,10 +779,6 @@
 		return EFalse;
 	    }
 		
-    if(iDirty )
-        {
-        Refresh();
-        }
     
 	if(iDiscreetPoped && iDiscreetPopArea.Contains(aRawEvent.Pos()))
 		{
@@ -1141,22 +1125,10 @@
 	return EFalse;
 	}
 #endif // RD_TACTILE_FEEDBACK    
-TInt CPeninputAnim::DiscreetPopChangeNotification(TAny* aObj)
-    {
-    if (aObj)
-        {
-        static_cast<CPeninputAnim*>(aObj)->HandleDiscreetPopNotification();
-        return KErrNone;
-        }
-    else
-        {
-        return KErrArgument;
-        }
-    }
 
-void CPeninputAnim::Refresh()
-    {
-    iDiscreetPopArea = iAknUiSrv.GetInUseGlobalDiscreetPopupRect();
+void CPeninputAnim::SetDiscreeptPop(TRect aArea)
+	{
+	iDiscreetPopArea = aArea;
     if(iDiscreetPopArea.Size().iWidth > 0)
         {
         iDiscreetPoped = ETrue;
@@ -1166,51 +1138,5 @@
         iDiscreetPoped = EFalse;
         iDiscreetPopedCapture = EFalse;
         }
-    iDirty = EFalse;
-    }
-
-void CPeninputAnim::HandleDiscreetPopNotification()
-    {
-    iDirty = ETrue;
-    }
-    
-CSubscriber::CSubscriber(TCallBack aCallBack, RProperty& aProperty)
-    :
-    CActive(EPriorityNormal), iCallBack(aCallBack), iProperty(aProperty)
-    {
-    CActiveScheduler::Add(this);
-    }
-
-CSubscriber::~CSubscriber()
-    {
-    Cancel();
-    }
-
-void CSubscriber::SubscribeL()
-    {
-    if (!IsActive())
-        {
-        iProperty.Subscribe(iStatus);
-        SetActive();
-        }
-    }
-
-void CSubscriber::StopSubscribe()
-    {
-    Cancel();
-    }
-
-void CSubscriber::RunL()
-    {
-    if (iStatus.Int() == KErrNone)
-        {
-        iCallBack.CallBack();
-        SubscribeL();
-        }
-    }
-
-void CSubscriber::DoCancel()
-    {
-    iProperty.Cancel();
-    }
+	}
 // End of File
--- a/textinput/peninputarc/src/peninputanim/peninputanim.mmp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/src/peninputanim/peninputanim.mmp	Mon Mar 15 12:42:02 2010 +0200
@@ -44,6 +44,3 @@
 LIBRARY             FeatMgr.lib                // feature manager
 LIBRARY                 tactileclickplugin.lib
 #endif // RD_TACTILE_FEEDBACK
-LIBRARY                 akncapserverclient.lib
-LIBRARY                 apparc.lib
-LIBRARY                 EIKCORE.LIB
--- a/textinput/peninputarc/src/peninputclient/penclientimpl.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/src/peninputclient/penclientimpl.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -29,6 +29,9 @@
 #include <coemain.h>
 #include <apgwgnam.h>
 #include "peninputclient.h"
+#ifndef FIX_FOR_NGA
+#define FIX_FOR_NGA
+#endif
 const TUint KDefaultMessageSlots = 4;
 
 const TInt KMaxSupportLanguages = 100;
@@ -374,7 +377,16 @@
     else //undim the window
         {
         if(iBackgroundCtrl)
-            iBackgroundCtrl->Hide();    
+#ifdef FIX_FOR_NGA
+            {
+            delete iBackgroundCtrl;
+            iBackgroundCtrl = 0;
+            }
+#else            
+            {
+            iBackgroundCtrl->Hide();
+            }
+#endif   
         }
     }
 // ---------------------------------------------------------------------------
@@ -1498,11 +1510,14 @@
 
         Window().SetOrdinalPosition(0,aPriority);      
      
-        Window().SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+        // For fix ELLI-82JD3K for tb92.
+        // The code runs well on 5.0 platform, but on tb92,
+        // it will make the backgourd screen black purely.
+        //Window().SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);   
         }
      else
         {
-        Window().SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);    
+        Window().SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
         }
  
     Window().Invalidate();
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -287,13 +287,11 @@
     switch( aDisPostion )
         {
         case EDispBottomRight:
-            rtPopup.SetRect( TPoint( offsetRect.iTl.iX, offsetRect.iBr.iY ), szPopup );
+            rtPopup.SetRect( TPoint( offsetRect.iTl.iX, offsetRect.iBr.iY ), szPopup );            
             if( rtPopup.iBr.iY > ptScreenSize.iPixelSize.iHeight )
                 {
-                //we need move x also
-                rtPopup.Move( aOffsetRect.Width(), 
-                              ptScreenSize.iPixelSize.iHeight - rtPopup.iBr.iY );
-                }
+                rtPopup.Move( 0, ptScreenSize.iPixelSize.iHeight - rtPopup.iBr.iY );
+                }            
             if(rtPopup.iBr.iX > ptScreenSize.iPixelSize.iWidth )
                 {
                 rtPopup.Move ( ptScreenSize.iPixelSize.iWidth - rtPopup.iBr.iX, 0 );
@@ -304,9 +302,8 @@
                              szPopup );
             if( rtPopup.iBr.iY > ptScreenSize.iPixelSize.iHeight )
                 {
-                //we need move x also
-                rtPopup.Move( aOffsetRect.Width(), 
-                              ptScreenSize.iPixelSize.iHeight - rtPopup.iBr.iY );
+                //we need move the pop wnd up to ensure it not to be out of screen
+                rtPopup.Move( 0, ptScreenSize.iPixelSize.iHeight - rtPopup.iBr.iY );
                 }
             if( rtPopup.iTl.iX < 0 )
                 {
@@ -315,11 +312,11 @@
             break;
         case EDispTopRight:
             rtPopup.SetRect( TPoint( offsetRect.iTl.iX, offsetRect.iTl.iY - szPopup.iHeight ), 
-                             szPopup );
+                             szPopup );            
             if( rtPopup.iTl.iY < 0 )
                {
-               rtPopup.Move ( aOffsetRect.Width(), -rtPopup.iTl.iY );
-               }
+               rtPopup.Move ( 0, -rtPopup.iTl.iY );
+               }                       
             if(rtPopup.iBr.iX > ptScreenSize.iPixelSize.iWidth )
                 {
                 rtPopup.Move ( ptScreenSize.iPixelSize.iWidth - rtPopup.iBr.iX, 0 );
@@ -332,7 +329,7 @@
                                      
             if( rtPopup.iTl.iY < 0 )
                {
-               rtPopup.Move ( -aOffsetRect.Width(), -rtPopup.iTl.iY );
+               rtPopup.Move ( 0, -rtPopup.iTl.iY );
                }
                
             if( rtPopup.iTl.iX < 0 )
--- a/textinput/peninputarc/src/peninputserverapp/peninputanimclientobj.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/src/peninputserverapp/peninputanimclientobj.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -494,4 +494,13 @@
     {
     iAnim.GetDSAState(aState);    
     }
+
+TBool CPeninputAnimObj::SetDiscreetPopArea(const TRect& aArea)
+	{
+    TAnimSetDiscreeptPopCmd* cmd = new TAnimSetDiscreeptPopCmd(iAnim,aArea);	
+    if(!cmd)
+        return EFalse;
+    AddAnimCommand(cmd);
+    return ETrue;		
+	}
 //end of file
--- a/textinput/peninputarc/src/peninputserverapp/peninputanimcommand.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/src/peninputserverapp/peninputanimcommand.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -352,4 +352,13 @@
 	iAnim.EnableSprite(iSpriteFlag);
 	return ETrue;
 	}
-    
+TAnimSetDiscreeptPopCmd::TAnimSetDiscreeptPopCmd(RPeninputAnim& aAnim,TRect aArea)
+                        :TAnimCmd(aAnim),iArea(aArea)
+	{
+	}
+
+TBool TAnimSetDiscreeptPopCmd :: ExecuteAnimCommand() const
+	{
+    iAnim.SetDiscreeptPop(iArea);
+    return ETrue;
+	}
--- a/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -47,6 +47,7 @@
 #include <aknappui.h> 
 
 #include "peninputcrpclient.h"
+#include <avkondomainpskeys.h>
 //#define __WND_TEST_
 
 // CONSTANTS
@@ -264,6 +265,19 @@
     iCurScrMode = CCoeEnv::Static()->ScreenDevice()->CurrentScreenMode();
     iCrpService = CPenInputCrpServiceClient::NewL();
     iSensorRepository = CRepository::NewL(KCRUidSensorSettings);
+    User::LeaveIfError(iDiscreetPopProperty.Attach(KPSUidAvkonDomain, 
+                                         KAknGlobalDiscreetPopupNumChanged));
+    iDiscreetPopSubscriber = new (ELeave) CSubscriber(
+            TCallBack( DiscreetPopChangeNotification, this), 
+            iDiscreetPopProperty);
+    iDiscreetPopSubscriber->SubscribeL();
+    // Get the pop area
+    User::LeaveIfError(iAknUiSrv.Connect());
+    iDiscreetPopArea = iAknUiSrv.GetInUseGlobalDiscreetPopupRect();
+    if(iDiscreetPopArea.Size().iWidth > 0)
+        {
+        HandleDiscreetPopNotification();
+        }
     }
 
 void CPeninputServer::CleanAll()
@@ -332,6 +346,13 @@
 #ifdef __LOG_WNDGROU__    
     iLogFile.Close();    
 #endif
+    if (iDiscreetPopSubscriber)
+	    {
+	    iDiscreetPopSubscriber->StopSubscribe();
+	    }
+    iDiscreetPopProperty.Close();
+    delete iDiscreetPopSubscriber;
+    iAknUiSrv.Close();
     delete iAnimObj;
     iAnimObj = NULL;
     
@@ -2303,7 +2324,9 @@
                 */
                 if(IsGlobalNotesApp(focusApp))
                         {
-                        iInGlobalNotesState = ETrue; 	             
+                        iInGlobalNotesState = ETrue;
+                        // add this to enable global dim   
+                        DeactivatePenUiLayout(EFalse);           
                         break;            
                         }
                     
@@ -2716,7 +2739,34 @@
         }    
     return supportMode;
     }
-    
+	
+// ---------------------------------------------------------------------------
+// CPeninputServer::DiscreetPopChangeNotification
+// handle notification of discreept pop changing
+// ---------------------------------------------------------------------------
+// 
+TInt CPeninputServer::DiscreetPopChangeNotification(TAny* aObj)
+    {
+    if (aObj)
+        {
+        static_cast<CPeninputServer*>(aObj)->HandleDiscreetPopNotification();
+        return KErrNone;
+        }
+    else
+        {
+        return KErrArgument;
+        }
+    }
+// ---------------------------------------------------------------------------
+// CPeninputServer::HandleDiscreetPopNotification
+// handle notification of discreept pop changing
+// ---------------------------------------------------------------------------
+// 
+void CPeninputServer::HandleDiscreetPopNotification()
+    {
+	iDiscreetPopArea = iAknUiSrv.GetInUseGlobalDiscreetPopupRect();
+	iAnimObj->SetDiscreetPopArea(iDiscreetPopArea);
+    }
 // ======== class CEventQueue========
 //
 // ---------------------------------------------------------------------------
@@ -2926,5 +2976,47 @@
     {
     User::Panic( KPeninputServerName, aPanic );
     } 
+	
+// ======== class CSubscriber========
+//
+CSubscriber::CSubscriber(TCallBack aCallBack, RProperty& aProperty)
+    :
+    CActive(EPriorityNormal), iCallBack(aCallBack), iProperty(aProperty)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CSubscriber::~CSubscriber()
+    {
+    Cancel();
+    }
+
+void CSubscriber::SubscribeL()
+    {
+    if (!IsActive())
+        {
+        iProperty.Subscribe(iStatus);
+        SetActive();
+        }
+    }
+
+void CSubscriber::StopSubscribe()
+    {
+    Cancel();
+    }
+
+void CSubscriber::RunL()
+    {
+    if (iStatus.Int() == KErrNone)
+        {
+        iCallBack.CallBack();
+        SubscribeL();
+        }
+    }
+
+void CSubscriber::DoCancel()
+    {
+    iProperty.Cancel();
+    }
 // End of File
 
--- a/textinput/peninputarc/src/peninputserverapp/rpeninputanim.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputarc/src/peninputserverapp/rpeninputanim.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -324,5 +324,16 @@
     CommandReply(EPeninputOpRequestDSAState,KNullDesC8,args);
     //Command(EPeninputOpSimulateEvent,msgData);            
     }        
-    
+
+// ---------------------------------------------------------------------------
+// RPeniputAnim::SetDiscreeptPop
+// ---------------------------------------------------------------------------
+//      	
+void RPeninputAnim::SetDiscreeptPop(const TRect& aArea)
+    {
+    TIpcArgs args (TIpcArgs::ENothing);        
+    TPckg<TRect> msgData(aArea);
+    args.Set(KMsgSlot1,&msgData);
+    CommandReply(EPeninputOpSetDiscreeptPop,KNullDesC8,args);           
+    } 
 // End of File
--- a/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistmultirowwithouticonwithbubble.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlistmultirowwithouticonwithbubble.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -21,7 +21,7 @@
 #include <AknLayoutDef.h>
 #include <peninputdropdownlistcontext.h>
 #include <peninputdropdownlist.h>
-#include <aknsdrawutils.h>
+#include <AknsDrawUtils.h>
 #include "peninputlistmultirowwithouticonwithbubble.h"
 #include "peninputlayout.h"
 
--- a/textinput/peninputfingerhwr/data/peninputfingerhwrcn.rss	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputfingerhwr/data/peninputfingerhwrcn.rss	Mon Mar 15 12:42:02 2010 +0200
@@ -180,7 +180,7 @@
     {
     colormajorskinid = EAknsMajorSkin;
     textcolorgrp = EAknsMinorQsnTextColors;
-    textcoloridx = 50;
+    textcoloridx = 59;
     bordercolorgrp = EAknsMinorQsnOtherColors;
     bordercoloridx = 8;
     }    
--- a/textinput/peninputfingerhwr/src/peninputfingerhwrrangeselector.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputfingerhwr/src/peninputfingerhwrrangeselector.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -230,7 +230,7 @@
 //
 CPeninputFingerHwrRangeSelector::CPeninputFingerHwrRangeSelector( 
     CFepUiLayout* aFepUiLayout, TInt aControlId )
-    : CControlGroup( aFepUiLayout, aControlId )
+    : CControlGroup( aFepUiLayout, aControlId, EFalse )
     {
  
     }
--- a/textinput/peninputfingerhwr/src/peninputfingerhwrwnd.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputfingerhwr/src/peninputfingerhwrwnd.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -2250,7 +2250,7 @@
         }
 
     iContextField->SetBorderColor( icfframecolor );
-    iContextField->SetBgImgSkinId( KAknsIIDQsnFrCall2Rect );
+    iContextField->SetBgImgSkinId( KAknsIIDQgnGrafFepInputBg );
     CleanupStack::PopAndDestroy( 1 ); // icfreader       
     }
 
--- a/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss	Mon Mar 15 12:42:02 2010 +0200
@@ -180,7 +180,7 @@
     {
     colormajorskinid = EAknsMajorSkin;
     textcolorgrp = EAknsMinorQsnTextColors;
-    textcoloridx = 50;
+    textcoloridx = 59;
     bordercolorgrp = EAknsMinorQsnOtherColors;
     bordercoloridx = 8;
     }    
@@ -1195,7 +1195,7 @@
             leftstr = <0x005D>;
             scancode = 0x005D;
             },            
-        PENINPUT_FINGERHWR_KEYPAD_KEY  //half  \
+        PENINPUT_FINGERHWR_KEYPAD_KEY  //half  revert /
             {
             leftstr = <0x005C>;
             scancode = 0x005C;
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h	Mon Mar 15 12:42:02 2010 +0200
@@ -312,7 +312,8 @@
      * @return font of candidate list.
      */     
     const CFont* CandidateFont();
-    
+    TRect GetIndicatorRect();
+	TSize GetArrowPaddingSize();
 public: //sct paging buttons
     /**
      * get text layout of sct paging button.
@@ -406,6 +407,8 @@
 	TAknTextLineLayout iPreviewWndText;
 	TSize iSymButtonSize;
 	TRect iRectOfSymbolTable;
+	TRect iIndicatorRect;
+	TSize iArrowPaddingSize;
     };
 
 #endif // C_PENINPUTFINGERHWRARLAFMANAGER_H
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarindicator.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarindicator.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -105,8 +105,15 @@
     	}
     
 	CFbsBitmap* bmp;
-	CFbsBitmap* bmpMask;	
-    AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(),
+	CFbsBitmap* bmpMask;
+    AknsUtils::CreateIconL(AknsUtils::SkinInstance(),
+                       id,
+                       bmp,
+                       bmpMask,
+                       bmpFileName,
+                       bmpId,
+                       bmpMskId);	
+    /*AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(),
 				                 id,
 				                 KAknsIIDQsnIconColors,
 				                 colorGroup,
@@ -115,7 +122,7 @@
 				                 bmpFileName,
 				                 bmpId,
 				                 bmpMskId,
-				                 TRgb() );   	
+				                 TRgb() );*/   	
     
 	SetBitmapL(bmp);
 	SetMaskBitmapL(bmpMask);
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -381,6 +381,7 @@
         AknLayoutScalable_Avkon::popup_fep_char_preview_window_t1(0).LayoutLine();
     previewWndText.LayoutText(previewWndRect.Rect(), iPreviewWndText);
     iBubbleFont = previewWndText.Font();
+	iArrowPaddingSize = TSize(10,10);
     //==========================================================================
     // going to be removed if the LAF data is ready
     //
@@ -429,7 +430,7 @@
         iRectBtnArrowRight.Move(TPoint(buttonWidth,0));
         
 		iSizeBtnPadding = TSize(6,6);
-
+        iArrowPaddingSize = TSize(8,8);
 	    
 	    iRectSpase = iRectBtnClose;
 	    iRectSpase.Move(TPoint(0,buttonHight));
@@ -450,6 +451,10 @@
     	// iwriting box
     	iRectWritingBox	= TRect(TPoint(KMarginLayout,2*buttonHight+KMarginLayout),iLayoutRect.iBr-TPoint(KMarginLayout,KMarginLayout));
     	
+		iIndicatorRect.iTl = iRectWritingBox.iTl;
+		iIndicatorRect.iTl = iIndicatorRect.iTl + TPoint(20,20);
+		iIndicatorRect.SetSize(TSize(80,80));
+		
     	// construct symbol table
     	iRectOfSymbolTable = iRectWritingBox;
     	iRectOfSymbolTable.Move(TPoint(buttonWidth,-buttonHight));
@@ -513,6 +518,7 @@
         
         // button padding
 		iSizeBtnPadding = TSize(6,6);
+		iArrowPaddingSize = TSize(12,12);
 		
         // candate position
         iCandidateLTPos = iRectBtnClose.iTl + TPoint(0,buttonHight);
@@ -522,6 +528,10 @@
         // HWR Box Rect
         iRectWritingBox = TRect(TPoint(iRectBtnArrowUp.iTl.iX,iRectBtnArrowUp.iBr.iY),iLayoutRect.iBr-TPoint(KMarginLayout,KMarginLayout));
 		
+		iIndicatorRect.iTl = iRectWritingBox.iTl;
+		iIndicatorRect.iTl = iIndicatorRect.iTl + TPoint(20,20);
+		iIndicatorRect.SetSize(TSize(80,80));
+		
 		// construct symbol table
     	iRectOfSymbolTable = iRectWritingBox;
     	iRectOfSymbolTable.Move(TPoint(0,-buttonHight));
@@ -926,7 +936,18 @@
     }
 
 TSize CPeninputFingerHwrArLafManager::SymbolGroupButtonSize()
-   {
-   return iSymButtonSize;
-   }
+    {
+    return iSymButtonSize;
+    }
+
+TRect CPeninputFingerHwrArLafManager::GetIndicatorRect()
+    {
+    return iIndicatorRect;
+    }
+
+TSize CPeninputFingerHwrArLafManager::GetArrowPaddingSize()
+    {
+	return iArrowPaddingSize;
+	}
+   
 // End Of File
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -683,6 +683,7 @@
         case EHwrCtrlIdLanguageOption:
             {
             SignalOwner( ESignalLaunchOptionMenu );
+            OnDeActivate();
             }
             break;
         case EHwrCtrlIdSymbolButton:
@@ -1050,6 +1051,7 @@
 // 
 void CPeninputFingerHwrArLayout::ChangeCurStateToStandby()
     {
+	iHwrWnd->CancelWriting();
     iStateMgr->SetState( CPeninputFingerHwrArStateManagerBase::EStateStandBy );
     }
 
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -163,11 +163,12 @@
 	CFepUiBaseCtrl* ctrl = CControlGroup::HandlePointerMoveEventL( aPoint );
 	if(ctrl)
 	    {
+		HandlePointerEnter(aPoint);
 		ctrl->UpdateArea(ctrl->Rect(),EFalse);
 		}
 	else
 	    {
-	    CControlGroup::HandlePointerLeave(aPoint);
+	    HandlePointerLeave(aPoint);
 	    UpdateArea(iRect,EFalse);
 	    }
 	
@@ -208,10 +209,12 @@
 	
 	// relayout the button group
 	TRect spaceBtnRect(iRect.iTl,iRect.iTl+TPoint(aButtonSize.iWidth,aButtonSize.iHeight));
-	MoveIconButton(iSpaceBtn,spaceBtnRect,KSymbolButtonInnerPadding,KSymbolButtonInnerPadding);
 	
-	TRect innerRect = spaceBtnRect;
-	innerRect.Shrink(4*KSymbolButtonInnerPadding,KSymbolButtonInnerPadding);
+	TInt pdx = (spaceBtnRect.Size().iWidth/3)/2;
+	MoveIconButton(iSpaceBtn,spaceBtnRect,pdx,KSymbolButtonInnerPadding);
+	
+	TRect pieceInnerRect = spaceBtnRect;
+	pieceInnerRect.Shrink(pdx*2,KSymbolButtonInnerPadding);
 	
 	// that's a not good algrithm in funciton AknPenInputDrawUtils::Draw3PiecesColorIcon for drawing 3Pieces icons 
 	// as when the  outter rect's height was not equal to the inter rect's height, the target rects the left icons and right icons 
@@ -221,11 +224,11 @@
 									  TDraw3PiecesFrame(KAknsIIDQgnIndiInputSpaceL,
 									  KAknsIIDQgnIndiInputSpaceMiddle,
 									  KAknsIIDQgnIndiInputSpaceR,
-									  innerRect));
+									  pieceInnerRect));
 	TRect enterBtnRect = spaceBtnRect;
 	enterBtnRect.Move(TPoint(aButtonSize.iWidth,0));
 	
-	MoveIconButton(iEnterBtn,enterBtnRect,KSymbolButtonInnerPadding,KSymbolButtonInnerPadding);
+	MoveIconButton(iEnterBtn,enterBtnRect,pdx,KSymbolButtonInnerPadding);
 	
 	TRect pageBtnRect = enterBtnRect;
 	pageBtnRect.Move(TPoint(aButtonSize.iWidth,0));
@@ -278,6 +281,9 @@
     AddControlL( iMutiPageKeypad );
     iMutiPageKeypad->AddEventObserver( UiLayout() );
     
+	iMutiPageKeypad->SetKeySkinId( EKeyBmpNormal, KAknsIIDQsnFrKeypadButtonNormal );
+    iMutiPageKeypad->SetKeySkinId( EKeyBmpHighlight, KAknsIIDQsnFrKeypadButtonPressed );
+    iMutiPageKeypad->SetKeySkinId( EKeyBmpDim, KAknsIIDQsnFrKeypadButtonInactive );
     iMutiPageKeypad->SetResourceId( KInvalidResId );
         
     iMutiPageKeypad->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG68 );
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -839,14 +839,8 @@
     iWritingBox->SetRect( rect );
     
 	//resize indicator
-	TRect indicatorRect;
-	indicatorRect.iTl = rect.iTl;
-	indicatorRect.Move(TPoint(10,10));
-	
-	indicatorRect.SetSize(TSize(50,30));
-	
 	iHandwritingIndicator->ConstructFromResourceL(R_AKN_FEP_HWR_INDICATOR_ICON);
-	iHandwritingIndicator->SizeChanged(indicatorRect,ETrue);
+	iHandwritingIndicator->SizeChanged(iLafManager->GetIndicatorRect(),ETrue);
 	
     //Move buttons
     TSize siBtnPadding = iLafManager->ButtonInnerPadding();
@@ -861,22 +855,25 @@
     
     rect = iLafManager->CtrlRect( iBackspaceBtn->ControlId() );
     MoveIconButton( iBackspaceBtn, rect,  pdx, pdy, ETrue );
-
-    rect = iLafManager->CtrlRect( iArrowUpBtn->ControlId() );
-    MoveIconButton( iArrowUpBtn, rect,  pdx, pdy, ETrue );
-    
-    rect = iLafManager->CtrlRect( iArrowLeftBtn->ControlId() );
-    MoveIconButton( iArrowLeftBtn, rect,  pdx, pdy, ETrue );
-    
-    rect = iLafManager->CtrlRect( iArrowRightBtn->ControlId() );
-    MoveIconButton( iArrowRightBtn,   rect,  pdx, pdy, ETrue );
-
-    rect = iLafManager->CtrlRect( iArrowDownBtn->ControlId() );
-    MoveIconButton( iArrowDownBtn,    rect,  pdx, pdy, ETrue );
     
     rect = iLafManager->CtrlRect( iOptionBtn->ControlId() );
     MoveIconButton( iOptionBtn, rect,  pdx, pdy, ETrue );
     
+	pdx = iLafManager->GetArrowPaddingSize().iWidth;
+	pdy = iLafManager->GetArrowPaddingSize().iHeight;
+	
+	rect = iLafManager->CtrlRect( iArrowUpBtn->ControlId() );
+    MoveIconButton( iArrowUpBtn, rect, pdx, pdy, ETrue );
+    
+    rect = iLafManager->CtrlRect( iArrowLeftBtn->ControlId() );
+    MoveIconButton( iArrowLeftBtn, rect, pdx, pdy, ETrue );
+    
+    rect = iLafManager->CtrlRect( iArrowRightBtn->ControlId() );
+    MoveIconButton( iArrowRightBtn, rect, pdx, pdy, ETrue );
+
+    rect = iLafManager->CtrlRect( iArrowDownBtn->ControlId() );
+    MoveIconButton( iArrowDownBtn, rect,  pdx, pdy, ETrue );
+	
     // load vkb key image
     TSize keysize = iLafManager->VirtualSctpadCellSize().Size();
     iSymbolTable->LoadVkbKeyImageL(R_FINGER_HWR_SCTPAD_IMAGE, keysize );
@@ -956,7 +953,9 @@
 	// avoid overlap refresh problem after opening symbil table
 	// so set this control to be not ready
     iContextField->SetReady(EFalse);
+    
     iSymbolTable->OpenSymbolTable();
+    iSymbolTable->BringToTop();
     }
 
 
@@ -1164,7 +1163,7 @@
         }
 
     iContextField->SetBorderColor( icfframecolor );
-    iContextField->SetBgImgSkinId( KAknsIIDQsnFrCall2Rect );
+    iContextField->SetBgImgSkinId( KAknsIIDQgnGrafFepInputBg );
     CleanupStack::PopAndDestroy( 1 ); // icfreader       
     }
 
@@ -1340,6 +1339,7 @@
 	if(iSymbolTable->IsPopup())
 		{
 	    iSymbolTable->CloseSymbolTable();
+	    iSymbolTable->BringToBack();
 	    SwitchToStandbyView();		
 	    }	
     }
--- a/textinput/peninputgenericitut/inc/peninputgenericitutwindow.h	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputgenericitut/inc/peninputgenericitutwindow.h	Mon Mar 15 12:42:02 2010 +0200
@@ -134,6 +134,7 @@
                         const TInt aImgID2,
                         const TInt aMaskID2 );
     void SetIndiWithTextFlag( TBool aFlag );
+    void MsgBubbleForChinese();
 private:
     CGenericItutWindow(CGenericItutWindowManager* aWindowMgr, 
                        CGenericItutUiLayout* aLayoutOwner,
--- a/textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -371,11 +371,14 @@
     
 void CGenericItutUiLayout::SetInputModeL(TInt aMode)
     {
-    // fix EJML-7HM6GM, e.g. both EStrokeFind and EStroke will be stored as EStroke
-    if (aMode != iDataMgr->InputMode() || 
-        aMode == EStroke || aMode == EStrokeFind ||
-        aMode == EZhuyin || aMode == EZhuyinFind ||
-        ( iDataMgr->IsNumericOnly() && iDataMgr->IsCharFlagChanged() ) )
+		TBool numericOnlyChanged = iDataMgr->IsCharFlagChanged() ? ETrue : EFalse;
+		//only number mode need judge it
+
+		// fix EJML-7HM6GM, e.g. both EStrokeFind and EStroke will be stored as Estroke  ///// 
+		if ( aMode != iDataMgr->InputMode() || 
+			 aMode == EStroke || aMode == EStrokeFind || 
+			 aMode == EZhuyin || aMode == EZhuyinFind || 
+			 numericOnlyChanged )
         {
         // deactivate original uimgr first
         if (iCurrentUiMgr 
--- a/textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -748,7 +748,7 @@
 
     iICF->SetResourceId(R_FINGER_ICF);
     ConstructIcfFromResourceL();
-    iICF->SetBgImgSkinId(KAknsIIDQsnFrCall2Rect);
+    iICF->SetBgImgSkinId(KAknsIIDQgnGrafFepInputBg);
     //iDataMgr->SetTextAlignment();
     
     AddControlL(iICF);
@@ -2063,6 +2063,23 @@
         }
     }
 
+void CGenericItutWindow::MsgBubbleForChinese()
+	{
+	if ( iICF )
+		{
+		iBubbleSize = AknLayoutScalable_Apps::popup_char_count_window().LayoutLine();
+	    iBubbleTextLayout = AknLayoutScalable_Apps::popup_char_count_window_t1(0).LayoutLine();
+		
+	    iICF->MsgBubbleCtrl()->SetTextFormat(iBubbleTextLayout);
+	    iICF->MsgBubbleCtrl()->SetBitmapParam(NULL,
+	    									  NULL,
+	    									  KAknsIIDQsnFrInputPreviewSideL,
+	    									  KAknsIIDQsnFrInputPreviewMiddle,
+	    									  KAknsIIDQsnFrInputPreviewSideR);  
+	    iICF->SetMsgBubbleCtrlSize(TSize(iBubbleSize.iW,iBubbleSize.iH));
+	    iICF->MsgBubbleCtrl()->SetTextL( KEmptyString );
+		}
+	}
 void CGenericItutWindow::SetIndiWithTextFlag( TBool aFlag )
     {
     iIndiWithText = aFlag;
--- a/textinput/peninputgenericitut/src/peninputgenericitutwindowmanager.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputgenericitutwindowmanager.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -464,6 +464,11 @@
                         iDataMgr->IndicatorData().iIndicatorTextMaskID);
                 }
             }
+        else
+        	{
+			iWindow->Icf()->HideBubble();
+			iWindow->MsgBubbleForChinese();
+        	}
         iWindow->Icf()->ShowBubble(aInfo,iWindow->Icf()->MsgBubbleCtrl()->Rect());
         }
     else
--- a/textinput/peninputgenericitut/src/peninputitutchnuistatestandby.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputitutchnuistatestandby.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -52,6 +52,8 @@
 
 void CChnItutUiStateStandby::OnEntryL()
     {
+	iOwner->LayoutContext()->Control(ECtrlIdSwitch)->Hide(EFalse);
+	iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(EFalse);
     // pinyin    	
     switch (iOwner->DataMgr()->InputMode())
         {
--- a/textinput/peninputgenericitut/src/peninputitutwesternuistatenonpredict.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputitutwesternuistatenonpredict.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -30,6 +30,7 @@
 #include "peninputgenericitutdatamgr.h"
 #include "peninputgenericitutlayoutcontext.h"
 #include "peninputgenericitutwindowmanager.h"
+#include <peninputlayoutbubblectrl.h>
 
 CWesternItutUiStateNonPredict* CWesternItutUiStateNonPredict::NewL(CGenericItutUiMgrBase* aOwner)
     {
@@ -111,10 +112,18 @@
             }
         else
             {
-            //iOwner->LayoutContext()->Control(ECtrlIdSwitch)->Hide(EFalse);
             iOwner->LayoutContext()->Control(ECtrlIdOptions)->Hide(EFalse);
             iOwner->LayoutContext()->Control(ECtrlIdClose)->Hide(EFalse);
-            //iOwner->LayoutContext()->Control(ECtrlIdIndicator)->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())
--- a/textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -172,7 +172,9 @@
     ReCalcLayoutL();
     CAknFepCtrlLabel* indilabel = static_cast<CAknFepCtrlLabel*>
                                   (iOwner->LayoutContext()->Control(ECtrlIdSpellIndicator));
-    if ( indilabel )
+    // Modify begin
+    if ( indilabel && iOwner->DataMgr()->IsChinese())
+    // Modify end
         {
         indilabel->Hide( EFalse );
         }
--- a/textinput/peninputgenericitut/srcdata/peninputgeneralitutnew.rss	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputgenericitut/srcdata/peninputgeneralitutnew.rss	Mon Mar 15 12:42:02 2010 +0200
@@ -468,7 +468,7 @@
     {
     colormajorskinid = EAknsMajorSkin;
     textcolorgrp = EAknsMinorQsnTextColors;
-    textcoloridx = 50;
+    textcoloridx = 59;
     bordercolorgrp = EAknsMinorQsnOtherColors;
     bordercoloridx = 8;
     }
--- a/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Mon Mar 15 12:42:02 2010 +0200
@@ -760,7 +760,7 @@
     iICF->SetFocus(ETrue);
     iICF->SetResourceId( R_SPLIT_ITUT_ICF );
     ConstructIcfFromResourceL();
-    iICF->SetBgImgSkinId( KAknsIIDQsnFrCall2Rect );
+    iICF->SetBgImgSkinId( KAknsIIDQgnGrafFepInputBg);
     
     AddControlL( iICF );
     
--- a/textinput/peninputsplititut/srcdata/peninputsplititutnew.rss	Fri Mar 12 15:44:07 2010 +0200
+++ b/textinput/peninputsplititut/srcdata/peninputsplititutnew.rss	Mon Mar 15 12:42:02 2010 +0200
@@ -437,7 +437,7 @@
     {
     colormajorskinid = EAknsMajorSkin;
     textcolorgrp = EAknsMinorQsnTextColors;
-    textcoloridx = 50;
+    textcoloridx = 59;
     bordercolorgrp = EAknsMinorQsnOtherColors;
     bordercoloridx = 8;
     }