Revision: 201019 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 25 May 2010 13:03:44 +0300
branchRCL_3
changeset 12 5e18d8c489d6
parent 11 c8fb4cf7b3ae
child 13 1bbdde98cc2d
child 15 6c2c2d3ab788
Revision: 201019 Kit: 2010121
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingDialog.h
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUserDictionaryEditDialog.h
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepAvkonCandidatePopup.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingDialog.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidatePane.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseKutenQueryDialog.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictivePane.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp
fep/aknfep/conf/aknfep.confml
fep/aknfep/conf/aknfep_101F876D.crml
fep/aknfep/inc/AknFepPluginManager.h
fep/aknfep/inc/AknFepSharedDataInterface.h
fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKr.cpp
fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp
fep/aknfep/src/AknFepCaseManager.cpp
fep/aknfep/src/AknFepManager.cpp
fep/aknfep/src/AknFepPluginManager.cpp
fep/aknfep/src/AknFepSharedDataInterface.cpp
fep/aknfep/src/AknFepThaiSCTSelector.cpp
fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyCangJie.cpp
fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyPinyinPhrase.cpp
fep/aknfep/src/AknFepUiInputStateCandidateHalfQwertyChinesePhrase.cpp
fep/aknfep/src/AknFepUiInputStateCandidateHiraganaKanji.cpp
fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.cpp
fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.cpp
fep/aknfep/src/AknFepUiInputStateCandidateRetroActive.cpp
fep/aknfep/src/AknFepUiInputStateConversionHiraganaKanji.cpp
fep/aknfep/src/AknFepUiInputStateEntryHalfQwertyWesternPredictive.cpp
fep/aknfep/src/AknFepUiInputStateEntryHiraganaKanji.cpp
fep/aknfep/src/AknFepUiInputStateEntryIndicPredictive.cpp
fep/aknfep/src/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.cpp
fep/aknfep/src/AknFepUiInputStateEntryPinyinPhrase.cpp
fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp
fep/aknfep/src/AknFepUiInputStateEntryThaiPredictive.cpp
fep/aknfep/src/AknFepUiInputStateEntryVietnamesePredictive.cpp
fep/aknfep/src/AknFepUiInputStateEntryWesternPredictive.cpp
fep/aknfep/src/AknFepUiInputStateEntryWesternPredictiveJp.cpp
fep/aknfep/src/AknFepUiInputStateEntryZhuyinStrokeBasePhrase.cpp
fep/aknfep/src/AknFepUiInputStateInitialIndicMultitap.cpp
fep/aknfep/src/AknFepUiInputStateInitialThaiMultitap.cpp
fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp
fep/aknfep/src/AknFepUiInputStateJapanesePredictiveBase.cpp
fep/aknfep/src/AknFepUiInputStateNextWordJapanesePredictive.cpp
fep/aknfep/src/AknFepUiInputStatePredictiveInputJapanese.cpp
fep/aknfep/src/AknFepUiManagerBase.cpp
fep/aknfep/src/AknFepUiManagerChinese.cpp
fep/aknfep/src/AknFepUiManagerWestern.cpp
fep/aknfep/src/aknfepinputstatecandidatepinyinphrasecreation.cpp
fep/aknfep/src/aknfepinputstatepinyinphrasecreationbase.cpp
fep/aknfep/src/aknfepinputstatespellingpinyinphrasecreation.cpp
fep/aknfep/src/aknfepuiinputminiqwertypinyinphrasebase.cpp
fep/aknfep/src/aknfepuiinputminiqwertystrokephrasebase.cpp
fep/aknfep/src/aknfepuiinputminiqwertyzhuyinphrasebase.cpp
fep/aknfep/src/aknfepuiinputstateentryhalfqwertyphrase.cpp
fep/aknfep/src/aknfepuiinputstateentrypinyinphrasecreation.cpp
fep/aknfep/src/aknfepuiinputstateentryzhuyinphrasecreation.cpp
fep/aknfep/src/aknfepuiinputstateinitialindicphoneticmultitap.cpp
fep/aknfep/src/aknfepuiinputstateminiqwertystrokephrase.cpp
fep/aknfep/src/aknfepuiinputstateminiqwertyzhuyinphrase.cpp
fep/aknfep/src/aknfepuiinputstatestrokephrasebase.cpp
fep/aknfep/src/aknfepuiinputstatezhuyinphrasecreationbase.cpp
fep/aknfep/src/aknfepuispellinputpane.cpp
fep/aknfep/src/aknfepuserdbdlg.cpp
fep/aknfep/src/aknfepuserdbquerydlg.cpp
fep/aknfep/src/dbmanagement.cpp
inputmethods_plat/aknfep_pen_support_api/inc/aknfeppeninputenums.h
inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h
inputmethods_plat/pen_input_server_api/inc/peninputcmd.h
inputmethods_plat/ptiengine_key_definations_api/inc/PtiKeyboardDatabase.h
textinput/GSLangPlugin/data/GSLangPluginRsc.rss
textinput/GSLangPlugin/src/DualLanguageDialog.cpp
textinput/GSLangPlugin/src/DualLanguageList.cpp
textinput/GSLangPlugin/src/GSLangContainer.cpp
textinput/GSLangPlugin/src/GSLangModel.cpp
textinput/GSLangPlugin/src/GSLangPlugin.cpp
textinput/GSLangPlugin/src/PredictiveSettingDialog.cpp
textinput/GSLangPlugin/src/PredictiveSettingList.cpp
textinput/peninputarc/bwins/peninputlayoutcontrolU.DEF
textinput/peninputarc/eabi/peninputlayoutcontrolU.DEF
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayout.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbasecontrol.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbasecontrol.inl
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbubblectrl.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutctrlgroup.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutctrlgroup.inl
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutcursor.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutmultilineicf.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutpopupwnd.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvirtualkeyctrl.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h
textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.inl
textinput/peninputarc/inc/pensrvcliinc/peninputclientimpl.h
textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h
textinput/peninputarc/src/peninputanim/peninputanim.cpp
textinput/peninputarc/src/peninputclient/penclientimpl.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbasecontrol.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbutton.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutcursor.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicf.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutrootctrl.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputuilayout.cpp
textinput/peninputarc/src/peninputserverapp/keyrotator.cpp
textinput/peninputarc/src/peninputserverapp/peninputserver.cpp
textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp
textinput/peninputcommonctrls/bwins/peninputcommonctrlsU.DEF
textinput/peninputcommonctrls/eabi/peninputcommonctrlsU.DEF
textinput/peninputcommonctrls/group/bld.inf
textinput/peninputcommonctrls/inc/peninputbuttons/peninputlongpressbutton.h
textinput/peninputcommonctrls/inc/peninputvkbctrl/peninputvkbctrlext.h
textinput/peninputcommonctrls/src/peninputbuttons/peninputbutton.cpp
textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp
textinput/peninputcommonctrls/src/peninputvkbctrl/peninputvkbctrlext.cpp
textinput/peninputcommonlayout/inc/peninputcommonlayoutglobalenum.h
textinput/peninputfingerhwr/data/peninputfingerhwrcn.rss
textinput/peninputfingerhwr/src/peninputfingerhwrlayout.cpp
textinput/peninputfingerhwr/src/peninputfingerhwrrangeselector.cpp
textinput/peninputfingerhwr/src/peninputfingerhwrwnd.cpp
textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss
textinput/peninputfingerhwrar/data/qgn_indi_input_arabic_backspace.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_arabic_enter.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_close.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_1_2.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_1_3.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_2_2.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_2_3.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_3_3.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_symbol_table.svg
textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_writing_area.svg
textinput/peninputfingerhwrar/group/bld.inf
textinput/peninputfingerhwrar/group/iconlist.txt
textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp
textinput/peninputfingerhwrar/inc/peninputfingerhwrar.hrh
textinput/peninputfingerhwrar/inc/peninputfingerhwrarcontrolid.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarengine.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarstoreconstants.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h
textinput/peninputfingerhwrar/rom/peninputfingerhwrar_variant.iby
textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarindicator.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarstatemanager.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp
textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp
textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp
textinput/peninputgenericitut/srcdata/peninputitutconfig_chinese.rss
textinput/peninputgenericvkb/inc/peninputgenericvkblayout.h
textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h
textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp
textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp
textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_50.rss
textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_94.rss
textinput/peninputsplititut/src/peninputsplititutwindow.cpp
textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp
textinput/peninputvkbcn/ctrlsrc/peninputvkbcompositionfield.cpp
textinput/peninputvkbcn/ctrlsrc/peninputvkbwindow.cpp
textinput/peninputvkbcn/src/peninputvkblayout.cpp
textinput/peninputvkbcn/src/peninputvkbuistatecompositionwithchars.cpp
textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp
textinput/ptienginev2/languages/102072F3.rss
textinput/ptienginev2/languages/102818A5.rss
textinput/ptienginev2/languages/102818A6.rss
textinput/ptienginev2/languages/102818A7.rss
textinput/ptienginev2/languages/102818A8.rss
textinput/ptienginev2/languages/102818A9.rss
textinput/ptienginev2/languages/102818AA.rss
textinput/ptienginev2/languages/102818AB.rss
textinput/ptienginev2/languages/102818AC.rss
textinput/ptienginev2/languages/102818AD.rss
textinput/ptienginev2/languages/102818AE.rss
textinput/ptienginev2/languages/102818AF.rss
textinput/ptienginev2/languages/102818B0.rss
textinput/ptienginev2/languages/102818B1.rss
textinput/ptienginev2/languages/102818B2.rss
textinput/ptienginev2/languages/102818B9.rss
textinput/ptienginev2/languages/102818BA.rss
textinput/ptienginev2/languages/102818BB.rss
textinput/ptienginev2/languages/102818BC.rss
textinput/ptienginev2/languages/10281B72.rss
textinput/ptienginev2/languages/10281B74.rss
textinput/ptienginev2/languages/10281B76.rss
textinput/ptienginev2/languages/10281B78.rss
textinput/ptienginev2/languages/10281B7A.rss
textinput/ptienginev2/languages/10281B7C.rss
textinput/ptienginev2/languages/10281B7E.rss
textinput/ptienginev2/languages/10281B80.rss
textinput/ptienginev2/languages/10281B82.rss
textinput/ptienginev2/languages/10281B84.rss
textinput/ptienginev2/languages/10281B88.rss
textinput/ptienginev2/languages/10281B89.rss
textinput/ptienginev2/languages/10281B8D.rss
textinput/ptienginev2/languages/10281B8E.rss
textinput/ptienginev2/languages/10281B8F.rss
textinput/ptienginev2/languages/10281B90.rss
textinput/ptienginev2/languages/10281B92.rss
textinput/ptienginev2/languages/10281B93.rss
textinput/ptienginev2/languages/10281B94.rss
textinput/ptienginev2/languages/10281B95.rss
textinput/ptienginev2/languages/10281B96.rss
textinput/ptienginev2/languages/10281B97.rss
textinput/ptienginev2/languages/10282545.rss
textinput/ptienginev2/languages/10282547.rss
textinput/ptienginev2/languages/10282549.rss
textinput/ptienginev2/languages/1028255C.rss
textinput/ptienginev2/languages/10282562.rss
textinput/ptienginev2/languages/10282568.rss
textinput/ptienginev2/languages/2000B17D.rss
textinput/ptienginev2/languages/2001FDFA.rss
textinput/ptienginev2/languages/2002BC83.rss
textinput/ptienginev2/languages/2002BC85.rss
textinput/ptienginev2/src/PtiDefaultCore.cpp
textinput/ptienginev2/src/PtiEngineImpl.cpp
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingDialog.h	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepPredictiveSettingDialog.h	Tue May 25 13:03:44 2010 +0300
@@ -105,6 +105,13 @@
 		virtual void DynInitMenuPaneL( TInt aResourceId, 
 		                               CEikMenuPane* aMenuPane );
 	    
+	protected:
+        /**
+        * From CAknDialog
+        * Lays out the dialog's components when the size of the dialog 
+        * is changed.
+        */
+        virtual void SizeChanged();
 	private:
 		void ConstructL( TInt aMenuTitleResourceId );
 		CAknFepPredictiveSettingDialog(TInt aConfirmationQueryResId, TInt aTitlePaneResId);
@@ -138,6 +145,7 @@
 	    // the settings item and the flip staus changes.
 	    TBool 						iSettingItemInEditingState; 
 	    CIdle* 						iItemCloseEventCheck;
+		TBool                       iSimuKey;
 	
 	protected:
 	CAknFepPredictiveSettingList*	iSettingsList;
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUserDictionaryEditDialog.h	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/inc/AknFepUserDictionaryEditDialog.h	Tue May 25 13:03:44 2010 +0300
@@ -34,7 +34,7 @@
 #define AKNFEPUSERDICTIONARYEDITDIALOG_H_
 
 #include <aknselectionlist.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <aknsfld.h>
 #include <AknQueryDialog.h>
 #include <avkon.hrh>
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepAvkonCandidatePopup.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepAvkonCandidatePopup.cpp	Tue May 25 13:03:44 2010 +0300
@@ -44,7 +44,7 @@
 #include <AknFepInternalCRKeys.h>
 #include <AvkonInternalCRKeys.h>
 
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <AknFepGlobalEnums.h>
 #include <avkon.hrh>
 #include "AknFepAvkonCandidatePopup.h"
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp	Tue May 25 13:03:44 2010 +0300
@@ -42,7 +42,7 @@
 #include <AknFepGlobalEnums.h>
 #include "AknFepPredictiveSettingDialog.h"
 #include <aknnotewrappers.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <hlplch.h>
 #include <csxhelp/cp.hlp.hrh> 
 #include <akntitle.h> //CAknTitlePane
@@ -69,6 +69,7 @@
 	CAknDialog::ConstructL(aMenuTitleResourceId);
 	PrepareStatusPaneL();
 	iItemCloseEventCheck = CIdle::NewL(CActive::EPriorityStandard);
+	iSimuKey = EFalse;
 	}
 
 CAknFepPredictiveSettingDialog ::CAknFepPredictiveSettingDialog(TInt aConfirmationQueryResId, TInt aTitlePaneResId):
@@ -647,14 +648,18 @@
             {
             if(iSettingItemInEditingState)
             	{
-            	// If we are currently editing the settings item then generate a cancel event
-            	// and start the scheduler so as to close the settings page 
-            	// when the blocking call completes. 
-            	RWsSession& wsSession = CEikonEnv::Static()->WsSession();
-            	TKeyEvent escapeEvent = {EKeyEscape, EStdKeyEscape, 0, 0};
-            	TRAP_IGNORE(CEikonEnv::Static()->SimulateKeyEventL(escapeEvent, EEventKey));
-            	wsSession.Flush();
-            	iItemCloseEventCheck->Start( TCallBack(EventCheckCallback, this) );
+				if (!iSimuKey)
+				    {
+					// If we are currently editing the settings item then generate a cancel event
+					// and start the scheduler so as to close the settings page 
+					// when the blocking call completes. 
+					RWsSession& wsSession = CEikonEnv::Static()->WsSession();
+					TKeyEvent escapeEvent = {EKeyEscape, EStdKeyEscape, 0, 0};
+					TRAP_IGNORE(CEikonEnv::Static()->SimulateKeyEventL(escapeEvent, EEventKey));
+					iSimuKey = ETrue;
+					wsSession.Flush();
+					iItemCloseEventCheck->Start( TCallBack(EventCheckCallback, this) );
+				    }
             	}
             else
 	            {
@@ -786,3 +791,15 @@
             }
         } 
     }
+
+/**
+ * From CAknDialog
+ */
+void CAknFepPredictiveSettingDialog::SizeChanged()
+    {
+    if( iSettingsList != NULL && iSettingsList->ListBox() != NULL )
+    	{
+        iSettingsList->ListBox()->EnableStretching(EFalse);
+    	}
+    CAknDialog::SizeChanged();
+    }
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp	Tue May 25 13:03:44 2010 +0300
@@ -34,7 +34,7 @@
 #include <AvkonInternalCRKeys.h>
 #include <e32property.h>
 #include <PtiDefs.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <AknFepGlobalEnums.h>
 #include <featmgr.h> 
 
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingDialog.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingDialog.cpp	Tue May 25 13:03:44 2010 +0300
@@ -32,7 +32,7 @@
 #include <AvkonInternalCRKeys.h>
 #include <AknFepGlobalEnums.h>
 #include <aknnotewrappers.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include "AknFepUIAvkonCtrlDualLanguageSettingDialog.h"
 #include "AknFepUIAvkonCtrlDualLanguageSettingModel.h"
 #include "AknFepUIAvkonCtrlDualLanguageSettingData.h"
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidatePane.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseCandidatePane.cpp	Tue May 25 13:03:44 2010 +0300
@@ -36,7 +36,7 @@
 #include <AknsDrawUtils.h>
 #include <AknsBasicBackgroundControlContext.h>
 #include <AknLayout.lag>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 #include <skinlayout.cdl.h>
 #include <AknLayout2ScalableDef.h>
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseKutenQueryDialog.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapaneseKutenQueryDialog.cpp	Tue May 25 13:03:44 2010 +0300
@@ -36,7 +36,7 @@
 #include <aknsoundsystem.h>
 #include <charconv.h>
 #include <PtiDefs.h>                //keys
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <avkon.hrh>
 
 #include "AknFepUIAvkonCtrlJapaneseKutenQueryDialog.h"
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictivePane.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictivePane.cpp	Tue May 25 13:03:44 2010 +0300
@@ -35,7 +35,7 @@
 #include <aknPopupHeadingPane.h>
 #include <AknsDrawUtils.h>
 #include <AknsBasicBackgroundControlContext.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <barsread.h>
 #include <eikmop.h>
 #include <AknLayout.lag>
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonImpl.cpp	Tue May 25 13:03:44 2010 +0300
@@ -36,7 +36,7 @@
 #include <aknlistquerydialog.h>
 #include <aknedsts.h>               //CAknEdwinState
 #include <barsread.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include "AknFepGlobalEnums.h"
 #include <aknstyluspopupmenu.h>
 #include <aknSctDialog.h>           //CAknCharMapDialog
Binary file fep/aknfep/conf/aknfep.confml has changed
Binary file fep/aknfep/conf/aknfep_101F876D.crml has changed
--- a/fep/aknfep/inc/AknFepPluginManager.h	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/inc/AknFepPluginManager.h	Tue May 25 13:03:44 2010 +0300
@@ -86,7 +86,8 @@
     EPluginSwitchToLandscape,
     EPluginSwitchMode,
     EPluginUpdatePenInputITIStatus,
-	EPluginEnableFetchDimState
+	EPluginEnableFetchDimState,
+    EPluginArabicNumModeChanged
     };
 
 /** 
@@ -848,6 +849,13 @@
     void SetICFTextForSpellL();
     
     void SendMatchListCmd(const RArray<TPtrC>& aList);
+	/**
+	 * Initialize the Menu item in Option Menu for Arabic Finger HWR
+	 *
+	 * @CAknFepUiInterfaceMenuPane* aMenuPane The menu pane used to add more menu items
+	 */
+	void InitMenuItemForArabicFingerHwrL(CAknFepUiInterfaceMenuPane* aMenuPane);
+	
 private:    // Data
     
     /**
@@ -989,6 +997,7 @@
     
     TBool iLaunchMenu;
     TBool iInMenu; // need to check whether it can be replaced by iLaunchMenu
+    TUint iCurMFNECap;
     MCoeFepAwareTextEditor* iCurEditor;
     MCoeFepAwareTextEditor* iOldFepAwareEditor;
 
@@ -1071,6 +1080,8 @@
     TBool iCurrentDimState;
     
     TBool iLaunchSCTInSpell;
+	
+    TBool iFocuschangedForSpellEditor;
     };
 
 class CConnectAo : public CActive
--- a/fep/aknfep/inc/AknFepSharedDataInterface.h	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/inc/AknFepSharedDataInterface.h	Tue May 25 13:03:44 2010 +0300
@@ -548,6 +548,25 @@
      *               1 is landscape.
      */
     void SetDefaultArabicFingerHwrOrientation(TInt aValue);
+    /**
+     * Returns a value of default arabic finger hwr number mode.
+     *
+     * @since 5.2
+     * @return 0 is portrait.
+     *         1 is landscape.
+     */
+    TInt DefaultArabicNumberMode() const;
+    
+    /**
+     * Set a value of default arabic finger hwr number mode.
+     *
+     * @since 5.2
+     * @param aValue new value set to default arabic finger hwr number mode 
+     * ared data item which represents the default number mode.
+     *               0 is latin nubmer.
+     *               1 is arabic native number.
+     */
+    void SetDefaultArabicNumberMode(TInt aValue);
 private:
     /**
      * C++ Constructor
--- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKr.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/peninputplugins/PeninputPluginKr/src/PeninputPluginKr.cpp	Tue May 25 13:03:44 2010 +0300
@@ -27,7 +27,7 @@
 #include <StringLoader.h>
 
 #include <peninputcmd.h>
-#include <PeninputPluginKrRes.rsg>
+#include <peninputpluginkrres.rsg>
 #include <peninputclient.h>
 #include <AknFepInternalCRKeys.h>
 
--- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/pluginfepmanagerbase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -600,7 +600,14 @@
 		    }
 		iPermittedRange |= ERangeNumber;
         }
-        
+    else if(aPermittedMode == (EAknEditorNumericInputMode | EAknEditorFullWidthNumericInputMode))
+        {
+        if ( SupportNativeNumberRange() )
+            {
+            iPermittedRange = ERangeNativeNumber;
+            }
+        iPermittedRange |= ERangeNumber;    
+        }
     else if ( aPermittedMode & EAknEditorTextInputMode )
         {
         // Derived from edwin and EAknEditorTextInputMode
@@ -664,6 +671,11 @@
                 iPermittedRange = ERangeNativeNumber;
                 } 
             }
+        else if( iPermittedMode == 
+                 (EAknEditorNumericInputMode | EAknEditorFullWidthNumericInputMode))
+            {
+            iPermittedRange = ERangeNumber | ERangeNativeNumber;            
+            }
         }
 
     SendCommandToServer( ECmdPenInputPermittedRange, iPermittedRange );
--- a/fep/aknfep/src/AknFepCaseManager.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepCaseManager.cpp	Tue May 25 13:03:44 2010 +0300
@@ -30,7 +30,7 @@
 #include "AknFepPanic.h"
 #include "aknfeppeninputenums.h"
 
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <aknedsts.h>
 #include <barsread.h>
 #include <jplangutil.h>
--- a/fep/aknfep/src/AknFepManager.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepManager.cpp	Tue May 25 13:03:44 2010 +0300
@@ -69,7 +69,7 @@
 #include <frmtview.h>
 #include <aknedformaccessor.h>
 
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <avkon.mbg>
 
 #include "aknconsts.h"
@@ -1248,8 +1248,7 @@
         							&wordIndexToSelect );
                             
                         	if( iQwertyInputMode 
-                        	    && ( iExactWordPopupContent->IsPopUpVisible() 
-                        	    	|| ( iFepPluginManager && iFepPluginManager->IsTooltipOpenOnFSQ() ) )
+                        	    && IsExactWordPopUpShown()
                         	    && aCode == EKeyUpArrow )
 	                        	{
 		                        iExactWordPopupContent->HidePopUp();
@@ -1515,10 +1514,7 @@
                     response = EKeyWasConsumed;
                     }
                 SendEventsToPluginManL( EPluginHideTooltip );
-                if(iExactWordPopupContent && iExactWordPopupContent->IsPopUpVisible())
-                    {
-                    iExactWordPopupContent->HidePopUp();
-                    }               
+                iExactWordPopupContent->HidePopUp();
 #else
                 else if (FepUI()->HandleKeyL(aCode, aLength))
                     {
@@ -1544,10 +1540,7 @@
             // also need to check and close tooltip on it.
 			SendEventsToPluginManL( EPluginHideTooltip );
 
-			if(iExactWordPopupContent && iExactWordPopupContent->IsPopUpVisible())
-				{
-		        iExactWordPopupContent->HidePopUp();
-				}
+		    iExactWordPopupContent->HidePopUp();
         	if ( IsFlagSet( EFlagInsideInlineEditingTransaction ) )
             	{
             	TryRemoveNoMatchesIndicatorL();
@@ -3312,7 +3305,10 @@
             aResponse = EKeyWasConsumed;
 #ifdef RD_INTELLIGENT_TEXT_INPUT
             // Predictive QWERTY changes ---->
-            ShowExactWordPopupIfNecessaryL();
+            if ( iLangMan->IsSplitView() || ( iFepPluginManager && !iFepPluginManager->EnableITIOnFSQ()))
+                {
+                ShowExactWordPopupIfNecessaryL();
+                }
             // Predictive QWERTY changes <----
             }
 #endif //RD_INTELLIGENT_TEXT_INPUT
@@ -3829,6 +3825,12 @@
         case CAknExtendedInputCapabilities::MAknEventObserver::EActivatePenInputRequest:
             SendEventsToPluginManL( EPluginEditorActivate );
             break;
+        case CAknExtendedInputCapabilities::MAknEventObserver::EClosePenInputRequest:
+            if ( iFepPluginManager )
+                {
+                iFepPluginManager->ClosePluginInputModeL( EFalse );
+                }
+            break;
         case CAknExtendedInputCapabilities::MAknEventObserver::EPointerEventReceived:
 
 /* 
@@ -4462,6 +4464,16 @@
             iCaseMan->SetCurrentCase(EAknEditorLowerCase);
             break;
         case EAknCmdEditModeNumber:
+            //if current input is arabic finger hwr, then change the default 
+            //number mode.
+            if(iSharedDataInterface->InputTextLanguage() == ELangArabic 
+               && iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
+                {
+                iSharedDataInterface->SetDefaultArabicNumberMode(0);
+                HandleChangeInFocus();
+                SendEventsToPluginManL(EPluginArabicNumModeChanged, 0);                
+                break;
+                }
         case EJapanFepCmdEditModeNumber:
         case EChinFepCmdModeNumber:
             SendEventsToPluginManL( EPluginCloseMode, EFalse );
@@ -4475,10 +4487,22 @@
             TryChangeModeL(ENumber);
             break;
         case EAknCmdEditModeArabicIndicNumber:
-            SendEventsToPluginManL( EPluginCloseMode, EFalse );
-            HandleChangeInFocus();
-            iLanguageCapabilities.iLocalDigitType = EDigitTypeArabicIndic;
-            TryChangeModeL(ENativeNumber);
+            //if current input is arabic finger hwr, then change the default 
+            //number mode.
+            if(iSharedDataInterface->InputTextLanguage() == ELangArabic 
+               && iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
+                {
+                iSharedDataInterface->SetDefaultArabicNumberMode(1);
+                SendEventsToPluginManL(EPluginArabicNumModeChanged, 1);
+                HandleChangeInFocus();
+                }
+            else
+                {
+                SendEventsToPluginManL( EPluginCloseMode, EFalse );
+                HandleChangeInFocus();
+                iLanguageCapabilities.iLocalDigitType = EDigitTypeArabicIndic;
+                TryChangeModeL(ENativeNumber);
+                }
             break;
             /*For Eastern Arabic Numeric*/
         case EAknCmdEditModeEasternArabicIndicNumber:
@@ -4603,29 +4627,14 @@
             if ( (iLanguageCapabilities.iInputLanguageCode == ELangThai ) &&
                  (iMode!=ENumber && iMode != ENativeNumber ) )
                 {
-#ifdef RD_INTELLIGENT_TEXT_INPUT                 	
-                // if itut call Thai multitap HandleCommandL to Launch SCT	
-                if(!iQwertyInputMode)
-                    {
-#endif                    	
-                    TInt resourceId = 0;
-                    if (iAknFepThaiSCTSelector)
-                         {
-                        resourceId = iAknFepThaiSCTSelector->ThaiSCRResourceId(PreviousChar(),EPtiKeyStar);
-                        }
-                    LaunchSpecialCharacterTableL(resourceId, 
-                                                 aCommandId==EAknCmdEditInsertSymbol, 
-                                                 aCommandId==EAknCmdEditInsertSmiley);
-#ifdef RD_INTELLIGENT_TEXT_INPUT                 	                    
-                    }
-                else
-                    {
-                    CAknFepUIManagerWestern* westernUIManager = static_cast<CAknFepUIManagerWestern*>(FepUI());
-                    LaunchSpecialCharacterTableL(westernUIManager->ThaiSCTResourceId(static_cast<TChar>(PreviousChar()),EPtiKeyStar),
-                                                 aCommandId==EAknCmdEditInsertSymbol, 
-                                                 aCommandId==EAknCmdEditInsertSmiley);                    
-                    }
-#endif                    
+				TInt resourceId = 0;
+				if (iAknFepThaiSCTSelector)
+					{
+					resourceId = iAknFepThaiSCTSelector->ThaiSCRResourceId(PreviousChar(),EPtiKeyStar);
+					}
+				LaunchSpecialCharacterTableL(resourceId, 
+											 aCommandId==EAknCmdEditInsertSymbol, 
+											 aCommandId==EAknCmdEditInsertSmiley);                  
                 }
             else
             {
@@ -4971,29 +4980,25 @@
             SendEventsToPluginManL( EPluginSwitchToLandscape);
             }
             break;
-        case EPenInputCmdSwitchToVkeyBasedInput:
+        /*case EPenInputCmdSwitchToVkeyBasedInput:
             {
             SendEventsToPluginManL( EPluginCloseMode, EFalse );
             HandleChangeInFocus();            
             SendEventsToPluginManL( EPluginSwitchMode);
             }
-            break;
+            break;*/
         case EPenInputCmdWritingSpeed:
             {
-            SetStopProcessFocus(ETrue);
-            HandleChangeInFocus();
+            SetStopProcessFocus(ETrue,EFalse);
             LaunchWritingSpeedPopupListL();
-            HandleChangeInFocus();
-            iStopProcessFocus = EFalse;
+			SetStopProcessFocus(EFalse);
             }
             break;
         case EPenInputCmdGuidingLine:
             {
-            SetStopProcessFocus(ETrue);
-            HandleChangeInFocus();
+            SetStopProcessFocus(ETrue,EFalse);
             LaunchGuidingLinePopupListL();
-            HandleChangeInFocus();
-            iStopProcessFocus = EFalse;
+			SetStopProcessFocus(EFalse);
             }
             break;
         default:
@@ -8482,7 +8487,7 @@
     // TryPopExactWordInOtherPlaceL directly after extracting them from
     // the OLD ShowExactWordPopupIfNecessaryL.
     iExactWordPopupContent->HidePopUp();
-    SendEventsToPluginManL(EPluginHideTooltip);
+//    SendEventsToPluginManL(EPluginHideTooltip);
     if (!iWesternPredictive || !IsFlagSet(EFlagInsideInlineEditingTransaction))
         return;
 
@@ -8493,7 +8498,7 @@
         return;
         }
 
-    TryPopExactWordInICFL();
+    //TryPopExactWordInICFL();
     if (iFepPluginManager && !iFepPluginManager->IsTooltipOpenOnFSQ())
         TryPopExactWordInOtherPlaceL();
     }
@@ -8506,21 +8511,30 @@
 	
     // Before open tooltip,  
     // also need to check and close tooltip on it.
-    SendEventsToPluginManL(EPluginHideTooltip);
+//    SendEventsToPluginManL(EPluginHideTooltip);
     if (!iWesternPredictive || !IsFlagSet(EFlagInsideInlineEditingTransaction))
+        {
+        SendEventsToPluginManL(EPluginHideTooltip);
         return;
+        }
 
     TInt activeIdx, secondaryIdx;
     GetCandidatesWithIndexL(NULL, activeIdx, secondaryIdx);
     if (activeIdx == secondaryIdx)
+        {
+        SendEventsToPluginManL(EPluginHideTooltip);
         return;
+        }
 
     CDesCArray* candidates = new (ELeave) CDesCArrayFlat(16);
     CleanupStack::PushL(candidates);
     GetCandidatesWithIndexL(candidates, activeIdx, secondaryIdx);
     CleanupStack::PopAndDestroy(candidates);
     if (activeIdx == secondaryIdx)
+        {
+        SendEventsToPluginManL(EPluginHideTooltip);
         return;
+        }
 
     if (iFepPluginManager)
         SendEventsToPluginManL(EPluginShowTooltip, secondaryIdx);
@@ -12983,7 +12997,8 @@
            // Add This condition for  Phonebook, ReTe, PF52.50_2008_wk32: 
            // Navigation bar disappears after tapping find pane and then returning back to Names list view.
            if (!(editingStateIndicator == (MAknEditingStateIndicator*)iIndicator &&
-               ( iFepPluginManager && iFepPluginManager->PluginInputMode() == EPluginInputModeItut ) &&
+               ( iFepPluginManager && ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut 
+            		                    || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ) ) &&
                IsFindPaneEditor()))
                {
                editingStateIndicator->SetState(newState);
@@ -15106,7 +15121,12 @@
                                                                TKeyPressLength aLength)
     {
     TKeyResponse response = EKeyWasNotConsumed;
-
+    if ( iFepPluginManager && iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr 
+    	 && aCode == EKeyBackspace )
+    	{
+        return response;
+    	}
+    
     if (TryHandleCommonArrowAndBackspaceFunctionalityL(aCode, response))
         {
         return response;
@@ -18216,7 +18236,8 @@
         }
     if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == charMap && 
        ( R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_LATIN_ONLY == currentEditorSCTResId || 
-         R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId ) )
+         R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId || 
+         R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId) )
         {
         TBool isEmpty = ETrue;
         TRAP_IGNORE(isEmpty = GetSctLengthL(charMap));
@@ -18378,7 +18399,28 @@
             SetCcpuFlag(ECcpuStateSupressCursorMoveToEnd);
 			// after closing SCT, need change dim state.
             SendEventsToPluginManL(EPluginEnableFetchDimState);
-
+#ifdef RD_SCALABLE_UI_V2 
+            iNotifyPlugin = EFalse;
+            if( iFepFullyConstructed && iFepPluginManager)
+                {
+                 if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
+                     iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
+                     iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
+                    {
+                    SetStopProcessFocus(EFalse);
+                    }            
+                 else
+                    {
+                    HandleChangeInFocus();
+                    }
+                }
+            else
+                {
+                HandleChangeInFocus();
+                }   
+            // Set the flag, not change focus for next.
+            iNotifyPlugin = ETrue;
+#endif            
 
             //Removes auto-complition part if SCT is launched and any special character is selected 
 #ifdef RD_INTELLIGENT_TEXT_INPUT
@@ -18431,9 +18473,6 @@
                                                                    iUncommittedText.iAnchorPos);
                                 }
                             }
-                        // Get new InputCapabilities immediatly.
-                        CCoeEnv* coeEnv = CCoeEnv::Static();
-                        iInputCapabilities = static_cast<const CCoeAppUi*>(coeEnv->AppUi())->InputCapabilities();
                         if (EditorState())
                             {
                             if (charAsDesc[0] == CEditableText::EParagraphDelimiter)
@@ -18474,28 +18513,6 @@
                         }
                     }
                 }
-#ifdef RD_SCALABLE_UI_V2 
-            iNotifyPlugin = EFalse;
-            if( iFepFullyConstructed && iFepPluginManager)
-                {
-                 if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
-                     iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
-                     iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
-                    {
-                    SetStopProcessFocus(EFalse);
-                    }            
-                 else
-                    {
-                    HandleChangeInFocus();
-                    }
-                }
-            else
-                {
-                HandleChangeInFocus();
-                }   
-            // Set the flag, not change focus for next.
-            iNotifyPlugin = ETrue;
-#endif
             }
         else
             {
@@ -18795,11 +18812,13 @@
     	iInputCapabilities.FepAwareTextEditor()->
     		GetCursorSelectionForFep(currentEditorSelection);
     	}    
-        
-	if(!IsMfneEditor() &&
-		(PluginInputMode() == EPluginInputModeItut ||
-		 PluginInputMode() == EPluginInputModeFSQ)  &&
-		 currentEditorSelection.Length() != 0)
+    
+    TInt inputMode = PluginInputMode();
+    TBool isArabicFingerHwr = (inputMode == EPluginInputModeFingerHwr &&
+	                           GetInputLanguageFromSharedDataInterface() == ELangArabic);	
+	if(!IsMfneEditor() && (inputMode == EPluginInputModeItut || 
+		                   inputMode == EPluginInputModeFSQ  || isArabicFingerHwr)  
+		               && currentEditorSelection.Length() != 0)
     	{
     	
         if ((aKeyEvent.iScanCode == EStdKeyLeftArrow) || (aKeyEvent.iScanCode == EStdKeyRightArrow)) 
@@ -20722,12 +20741,18 @@
 
 void CAknFepManager::HideExactWordPopUp()
 	{
-	iExactWordPopupContent->HidePopUp();	
+	iExactWordPopupContent->HidePopUp();
+	SendEventsToPluginManL( EPluginHideTooltip );
 	}
 
 TBool CAknFepManager::IsExactWordPopUpShown()
 	{
-return iExactWordPopupContent->IsPopUpVisible();	
+#ifdef RD_SCALABLE_UI_V2 
+	return iExactWordPopupContent->IsPopUpVisible()
+           || ( iFepPluginManager && iFepPluginManager->IsTooltipOpenOnFSQ() );
+#else
+	return iExactWordPopupContent->IsPopUpVisible();
+#endif // RD_SCALABLE_UI_V2
 	}
 void CAknFepManager::StopDisplayingMenuBar()
     {
--- a/fep/aknfep/src/AknFepPluginManager.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepPluginManager.cpp	Tue May 25 13:03:44 2010 +0300
@@ -42,7 +42,7 @@
 #include <AvkonInternalCRKeys.h>    // KAknQwertyInputModeActive
 #include <hlplch.h>
 #include <peninputgsinterface.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <avkon.rsg>
 #include <AknIndicatorContainer.h>  //CAknIndicatorContainer
 #include <StringLoader.h>
@@ -685,6 +685,7 @@
                 break;
             case ESignalEnterSpellMode:
                 {
+                iCurrentPluginInputFepUI->HandleCommandL(ECmdPeninputDisableLayoutDrawing,ETrue);
                 iFepMan.LaunchEditWordQueryL();
                 }
                 break;
@@ -693,6 +694,10 @@
                 TInt* ptrData = (TInt*)(pBuf.Ptr());
                 TBool exitbyok = *(ptrData);
 
+				//remove spell mode editor will cause focus change, so as pen UI is closed and opened again.
+				iFocuschangedForSpellEditor = ETrue;
+				iCurrentPluginInputFepUI->HandleCommandL(ECmdPeninputDisableLayoutDrawing,ETrue);
+				
                 exitbyok ? iFepMan.ExitPluginSpellModeByOk() : 
                            iFepMan.ExitPluginSpellModeByCancel();
                 }
@@ -770,6 +775,54 @@
                 iFepMan.PtiEngine()->CommitCurrentWord();
                 }
                 break;
+            case ESignalDeleteLastInput:
+                {
+
+                iFepMan.SetFlag( CAknFepManager::EFlagSupressAutoUpdate );
+
+                //set selection
+                MCoeFepAwareTextEditor* edit = iFepMan.FepAwareTextEditor();
+                if( iFepMan.IsFepAwareTextEditor() && edit )
+                    {
+                    TCursorSelection curSor;
+                    edit->GetCursorSelectionForFep(curSor);
+                    if ( curSor.iAnchorPos == curSor.iCursorPos )
+                        {
+                        curSor.iAnchorPos = curSor.iCursorPos - iLastSubmitCount;
+                        
+                        if (curSor.iAnchorPos<0 || 
+                            curSor.iAnchorPos>edit->DocumentLengthForFep())
+                            {
+                            break;
+                            }
+                        
+                        if (curSor.iCursorPos > curSor.iAnchorPos)
+                            {
+                            edit->SetCursorSelectionForFepL(curSor);    
+                            }
+                        }
+                    TBuf<1> backSpace;
+                    backSpace.Append(TChar(EKeyBackspace));
+                    SubmitUiPluginTextL(backSpace, EKeyEvent);
+                    }
+                iFepMan.ClearFlag( CAknFepManager::EFlagSupressAutoUpdate );
+                
+                }
+                break;
+            case ESignalArabicSCTChar:
+                {
+                TPtrC ptr( const_cast<TUint16*>(pBuf.Ptr()), pBuf.Length());
+//                if(iFepMan.InputMode() == ELatin && (iPluginInputMode == EPluginInputModeVkb || 
+//                   iPluginInputMode == EPluginInputModeFSQ))
+//                    {
+//                    AdjustDataCase( ptr );
+//                    }
+                iFepMan.StartInlineEditL(ptr);
+                iFepMan.CommitInlineEditL();
+                SendIcfDataL( EPluginSyncAll );                
+//                OnPenInputServerKeyEventL(pBuf);                
+                }
+                break;
             default:
                 break;
             }
@@ -1019,6 +1072,13 @@
         	iNeedFetchDimState = ETrue;
         	}
         	break;
+        case EPluginArabicNumModeChanged:
+            if(iCurrentPluginInputFepUI)
+                {
+                iCurrentPluginInputFepUI->HandleCommandL(
+                        ECmdPeninputArabicNumModeChanged,aEventData);                            
+                }
+            break;
         default:
             break;
         }
@@ -1107,15 +1167,39 @@
         (  aSuggestMode == EPluginInputModeFSQ &&
            ( iDefaultOrientation == CAknAppUiBase::EAppUiOrientationPortrait ||
 		     ( !landscape && !iAvkonAppUi->OrientationCanBeChanged() ) ) );
+
           
     if ( disableFSQ )
         {
         iPenInputServer.SetDisabledLayout( EPluginInputModeFSQ );
         }
-
-    if ( aSuggestMode == EPluginInputModeFSQ || (aSuggestMode == EPluginInputModeFingerHwr 
-	     && iSharedData.InputTextLanguage() == ELangArabic
-	     && iSharedData.AutoRotateEnabled()))
+    
+    TBool disableITUT = 
+               ( iDefaultOrientation == CAknAppUiBase::EAppUiOrientationLandscape ||
+                      ( landscape && !iAvkonAppUi->OrientationCanBeChanged() ) ) ;
+ 
+    if( disableITUT )
+         {
+         //disable V-ITUT, and if current aSuggestMode is EPluginInputModeItut, replace it with EPluginInputModeFSQ;
+         iPenInputServer.SetDisabledLayout( EPluginInputModeItut );
+         if( aSuggestMode == EPluginInputModeItut )
+          {
+              aSuggestMode = EPluginInputModeFSQ;
+          }
+         }
+    else
+         {
+         // if V-ITUT had been disabled before, enable it now;
+         TInt disableMode = iPenInputServer.DisabledLayout();
+         if( disableMode & EPluginInputModeItut )
+          {
+			iPenInputServer.SetDisabledLayout( -1 );//reset
+			iPenInputServer.SetDisabledLayout( disableMode & ~EPluginInputModeItut );
+          }
+         }
+
+
+    if ( aSuggestMode == EPluginInputModeFSQ)
         {
         TPluginInputMode tempInputMode = iPluginInputMode;           
         iPluginInputMode = aSuggestMode;
@@ -1128,8 +1212,7 @@
         else
             {
             if ( (!iSharedData.AutoRotateEnabled() 
-                    && aSuggestMode == EPluginInputModeFSQ) || 
-                  (aSuggestMode == EPluginInputModeFingerHwr))
+                    && aSuggestMode == EPluginInputModeFSQ))
                 {
                 iFepMan.SetNotifyPlugin( EFalse );
                 iAvkonAppUi->SetOrientationL( CAknAppUiBase::EAppUiOrientationLandscape );
@@ -1187,7 +1270,14 @@
         {
         isSplit = EFalse;
         }    
+
+    if ( iLangMan.IsSplitView() && !isSplit )
+        {
+        NotifyAppUiImeTouchWndStateL( EFalse ); //restore layout
+        }
+
     iLangMan.SetSplitView(isSplit);
+
  
     MAknFepManagerInterface* fepUI = iLangMan.GetPluginInputFepUiL(
                                                     aSuggestMode, 
@@ -1367,7 +1457,17 @@
             InformMfneUiStatusL( EFalse );            
             
             iPenInputServer.ClearServerEvent();
-            iCurrentPluginInputFepUI->CloseUI();
+			if(iFocuschangedForSpellEditor)
+				{
+				iFocuschangedForSpellEditor = EFalse;
+				//disable the redrawing, it will be redrawn in 
+				//iCurrentPluginInputFepUI->HandleCommandL(ECmdPeninputDisableLayoutDrawing,ETrue);
+				return; //don't close the UI if this is caused by removing spell editor
+				}
+			else
+				{
+				iCurrentPluginInputFepUI->CloseUI();
+				}
             if( aResetState )
                 {
                 iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputWindowClose);
@@ -1415,9 +1515,9 @@
         return;
         }
         
-    if ( iPluginInputMode == EPluginInputModeFSQ && 
-         !iSharedData.AutoRotateEnabled() || (iPluginInputMode == EPluginInputModeFingerHwr 
+    if ( (iPluginInputMode == EPluginInputModeFSQ || (iPluginInputMode == EPluginInputModeFingerHwr 
 	     && iSharedData.InputTextLanguage() == ELangArabic))
+	     && !iSharedData.AutoRotateEnabled() )
         {
         return;
         }
@@ -1553,6 +1653,11 @@
                     break;                
                 case EPenInputCmdVITUT:
                     {
+                    //Here calling this function is to reset menu state when the focus change caused by
+                    //the screen orientation, in the normal circumstance the foucus change should not 
+                    //occur while the screen orientation is handling. So directly resetting menu state 
+                    //to avoid the above case, preconditon is that the option menu must be closed.
+                    ResetMenuState();
 					ClosePluginInputModeL(ETrue);             
                     iFepMan.TryCloseUiL();  
                     TryChangePluginInputModeByModeL(EPluginInputModeItut, 
@@ -1562,6 +1667,11 @@
                     break;
                 case EPeninputCmdFSQ:
                     {
+                    //Here calling this function is to reset menu state when the focus change caused by
+                    //the screen orientation, in the normal circumstance the foucus change should not 
+                    //occur while the screen orientation is handling. So directly resetting menu state 
+                    //to avoid the above case, preconditon is that the option menu must be closed.                 
+                    ResetMenuState();
 					ClosePluginInputModeL(ETrue);               
                     iFepMan.TryCloseUiL();  
                     TryChangePluginInputModeByModeL(EPluginInputModeFSQ, 
@@ -1571,6 +1681,11 @@
                     break;
                 case EPeninputCmdHwr:
                 	{
+                    //Here calling this function is to reset menu state when the focus change caused by
+                    //the screen orientation, in the normal circumstance the foucus change should not 
+                    //occur while the screen orientation is handling. So directly resetting menu state 
+                    //to avoid the above case, preconditon is that the option menu must be closed.
+                	ResetMenuState();
                 	ClosePluginInputModeL(ETrue);               
                 	iFepMan.TryCloseUiL();  
                 	TryChangePluginInputModeByModeL( EPluginInputModeFingerHwr, 
@@ -1940,80 +2055,92 @@
     	    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
-                && (ELangArabic == iSharedData.InputTextLanguage())
-                && (!iSharedData.AutoRotateEnabled()))
-            {
-            TBool disableMenu = ETrue;
-            TPixelsTwipsAndRotation size; 
-            CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size);
-            TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight;
-            if(landscape && aMenuPane->MenuItemExists(EPenInputCmdHwrInputToPortrait, index))
-                {
-                disableMenu = EFalse;
-                aMenuPane->SetItemDimmed(EPenInputCmdHwrInputToPortrait,disableMenu);
-                }
-            index = 0;
-            if(!landscape && aMenuPane->MenuItemExists(EPenInputCmdHwrInputToLandscape, index))
-                {
-                disableMenu = EFalse;
-                aMenuPane->SetItemDimmed(EPenInputCmdHwrInputToLandscape,disableMenu);
-                }
-            }   
-        
-        //For arabic finger hwr switch to key based input.
-        index = 0;
-        if(aMenuPane->MenuItemExists(
-                EPenInputCmdSwitchToVkeyBasedInput, index))
+    	if ( FeatureManager::FeatureSupported( KFeatureIdArabicHandwritingRecognitionInput )
+            &&iFepMan.IsArabicInputLanguage() 
+            && ( curInputMode != EPluginInputModeFingerHwr )
+    	    && !( disabledInputMode & EPluginInputModeFingerHwr ))
+    	    {
+    	    aMenuPane->SetItemDimmed( EPeninputCmdHwr, EFalse );
+    	    }
+		
+		// check if this is the arabic finger hwr
+		TBool isArabicFingerHwr = (iPluginInputMode == EPluginInputModeFingerHwr
+		                            && ELangArabic  == iSharedData.InputTextLanguage());
+		
+        // Initialize the menu item for Arabic Finger HWR
+        if(isArabicFingerHwr)
             {
-            TBool disableMenu = ETrue;
-            if(iPluginInputMode == EPluginInputModeFingerHwr
-                    && (ELangArabic == iSharedData.InputTextLanguage()))
-                {
-                disableMenu = EFalse;
-                }   
-            aMenuPane->SetItemDimmed(EPenInputCmdSwitchToVkeyBasedInput,disableMenu);
-            }        
-        //For arabic finger hwr writing speed.
-        index = 0;
-        if(aMenuPane->MenuItemExists(
-                EPenInputCmdWritingSpeed, index))
-            {
-            TBool disableMenu = ETrue;
-            if(iPluginInputMode == EPluginInputModeFingerHwr
-                    && (ELangArabic == iSharedData.InputTextLanguage()))
-                {
-                disableMenu = EFalse;
-                }   
-            aMenuPane->SetItemDimmed(EPenInputCmdWritingSpeed,disableMenu);
-            }        
-        //For arabic finger hwr guide line.
-        index = 0;
-        if(aMenuPane->MenuItemExists(
-                EPenInputCmdGuidingLine, index))
-            {
-            TBool disableMenu = ETrue;
-            if(iPluginInputMode == EPluginInputModeFingerHwr
-                    && (ELangArabic == iSharedData.InputTextLanguage()))
-                {
-                disableMenu = EFalse;
-                }   
-            aMenuPane->SetItemDimmed(EPenInputCmdGuidingLine,disableMenu);
-            }        
+            InitMenuItemForArabicFingerHwrL(aMenuPane);
+            }	     
         
         iLangMan.CurrentImePlugin()->DynInitMenuPaneL(aMenuPane);
         }
-        
-        
-    }    
-
+    }
+    
+void CAknFepPluginManager::InitMenuItemForArabicFingerHwrL(CAknFepUiInterfaceMenuPane* aMenuPane)
+    {
+	TInt index = 0;
+	TBool isAutoRotateEnabled = iSharedData.AutoRotateEnabled();
+	// add menu item to switch to landscape or protrait
+	if(!isAutoRotateEnabled)
+		{
+		TPixelsTwipsAndRotation size; 
+		CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size);
+		TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight;
+		if(landscape)
+			{
+			index = 0;
+			// add switch to protrait
+			if(aMenuPane->MenuItemExists(EPenInputCmdHwrInputToPortrait, index))
+				{
+				aMenuPane->SetItemDimmed(EPenInputCmdHwrInputToPortrait,EFalse);
+				}
+			}
+		else
+			{
+			index = 0;
+			// add switch to landscape
+			if(aMenuPane->MenuItemExists(EPenInputCmdHwrInputToLandscape, index))
+				{
+				aMenuPane->SetItemDimmed(EPenInputCmdHwrInputToLandscape,EFalse);
+				}
+			}
+		}
+	
+	// hide the setting menu			
+//	index = 0;
+//	if(aMenuPane->MenuItemExists(EPenInputCmdSetting, index))
+//		{
+//		aMenuPane->SetItemDimmed(EPenInputCmdSetting, ETrue);
+//		}    			
+	
+	//Show number mode menu item.
+	if(iFepMan.InputMode() == ENumber || iFepMan.InputMode() == ENativeNumber)
+	    {
+        if(iSharedData.DefaultArabicNumberMode())
+            {
+            aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse);
+            }
+        else
+            {
+            aMenuPane->SetItemDimmed(EAknCmdEditModeArabicIndicNumber, EFalse);
+            }
+	    }
+	// add the writing speed menu
+	index = 0;
+	if(aMenuPane->MenuItemExists(EPenInputCmdWritingSpeed, index))
+		{
+		aMenuPane->SetItemDimmed(EPenInputCmdWritingSpeed,EFalse);
+		}
+	
+	// add the guidingline menu
+	index = 0;
+	if(aMenuPane->MenuItemExists(EPenInputCmdGuidingLine, index))
+		{ 
+		aMenuPane->SetItemDimmed(EPenInputCmdGuidingLine,EFalse);			
+		}
+	}
+ 
 // ---------------------------------------------------------------------------
 // CAknFepPluginManager::OnFocusChangedL
 // (other items were commented in a header)
@@ -2149,7 +2276,8 @@
                 if ( enableAdaptiveSearch )
                     {
                     if(!(iInMenu && ( iPluginInputMode == EPluginInputModeItut ||
-                                    iPluginInputMode == EPluginInputModeFSQ )))
+                                    iPluginInputMode == EPluginInputModeFSQ ||
+                                    iPluginInputMode ==EPluginInputModeFingerHwr)))
                         {
                         ClosePluginInputModeL(ETrue);
                         if(iPenInputSvrConnected ) //lost foreground
@@ -2867,8 +2995,11 @@
 //    iPenInputServer.UpdateAppInfo(KNullDesC, EAppIndicatorMsg);  
     
     iPluginInputMode =  (TPluginInputMode)iLangMan.CurrentImePlugin()->CurrentMode(); 
-
-    iPenInputServer.SetDataQueryPopped(IsDisplayDataQuery());  
+    
+    // Not only for data query, but also for other pop dialogs contain editor.
+    //iPenInputServer.SetDataQueryPopped(IsDisplayDataQuery());
+    iPenInputServer.SetDataQueryPopped(CCoeEnv::Static()->AppUi()->IsDisplayingDialog() &&
+											CCoeEnv::Static()->AppUi()->TopFocusedControl());  
 
     //adjust VKB window if data query dialog is displaying
     if(IsDisplayDataQuery())
@@ -2891,7 +3022,9 @@
 
     if ( !NotifyInGlobalNoteEditorL() )
     	{
+        iFocuschangedForSpellEditor = EFalse; // restore the flag
     	iCurrentPluginInputFepUI->ActivateUI(); 
+        iNeedFetchDimState = ETrue;
     	}
     
     iFepMan.UpdateIndicators();
@@ -4611,6 +4744,20 @@
     	{
         iSpell->InputPane()->InputWin()->SetAknEditorCurrentCase(editorCase);
         iSpell->InputPane()->InputWin()->SetAknEditorCurrentInputMode(EAknEditorTextInputMode);
+        if ( iLangMan.IsSplitView() )
+         {
+         iSpell->InputPane()->InputWin()->SetAknEditorFlags( 
+              iSpell->InputPane()->InputWin()->AknEdwinFlags() | 
+              aEditorFlag | EAknEditorFlagNoT9 | 
+              EAknEditorFlagEnablePartialScreen );
+         }
+        else
+         {
+         iSpell->InputPane()->InputWin()->SetAknEditorFlags( 
+              iSpell->InputPane()->InputWin()->AknEdwinFlags() | 
+              aEditorFlag | EAknEditorFlagNoT9 );
+         }
+
         iSpell->MakeVisible( ETrue );
         iSpell->SetInputWinFocus( ETrue );
     	}
@@ -5022,7 +5169,7 @@
     if(!iPenInputSvrConnected ) 
         {
         return;
-        }    	
+        }
 
     if (!(PluginInputMode() == EPluginInputModeItut ||
         PluginInputMode() == EPluginInputModeFSQ ||
@@ -5035,9 +5182,15 @@
     if (aUpdateEditor && !iInMenu)
         {
         if(iFepMan.FepAwareTextEditor())
-            iCurEditor = iFepMan.FepAwareTextEditor();    
+            {
+            iCurMFNECap = iFepMan.IsMfneEditor() ? iFepMan.ExtendedInputCapabilities() : 0;
+            iCurEditor = iFepMan.FepAwareTextEditor();
+            }
         else
-            iCurEditor = NULL;            
+            {
+            iCurMFNECap = 0;
+            iCurEditor = NULL; 
+            }
         }
         
     iInMenu = ETrue;
@@ -5056,9 +5209,10 @@
     if(!iPenInputSvrConnected ) 
         {
         return;
-        }    	
-    	
+        }
+        
     iInMenu = EFalse;
+    iCurMFNECap = 0;
     iCurEditor = NULL;
     if (aUnDim)
         {
@@ -5138,7 +5292,7 @@
 
 void CAknFepPluginManager::InformMfneUiStatusL( TBool aOpened )
     {
-    if ( iMfne && iMfneChanged )
+    if ( iMfne && ( iMfneChanged || !aOpened ))
         {
         //make the selection longer than maximum length of current 
         //text, so it won't change the behavior of MFNE editor which 
@@ -5197,7 +5351,8 @@
 		
     //if it's in global notes, show it.
     if(EPluginInputModeItut == PluginInputMode() ||
-       EPluginInputModeFSQ == PluginInputMode() )      
+       EPluginInputModeFSQ == PluginInputMode() ||
+       EPluginInputModeFingerHwr == PluginInputMode())      
 		{
 		if(iInGlobleNoteEditor && iPenInputSvrConnected)
 			{
@@ -5608,10 +5763,19 @@
 //
 void CAknFepPluginManager::SetItiStateL()
     {
-    if ( iIsITIConfigured || !IsSupportITIOnFSQ() )
+    if ( !IsSupportITIOnFSQ() )
     	{
     	return;
     	}
+    if ( iIsITIConfigured )
+    	{
+        // if fep state has been configed to iti status before,
+        // there is no need to config fep state again,
+        // but sending command to fsq to update iti status flag is needed.               
+        iCurrentPluginInputFepUI->HandleCommandL( ECmdPeninputITIStatus,
+                                              iFepMan.WesternPredictive() );    
+		return;
+    	}
     // 1. Config keyboard layout type
     SetItiKeyboardLayoutL();               
     
@@ -5794,7 +5958,21 @@
     //Normal editors
     CAknEdwinState* state = iFepMan.EditorState(); 
     if (iCurEditor && state == NULL)
-		state = static_cast<CAknEdwinState *> (iCurEditor->Extension1()->State(KNullUid));
+        {
+        if( iCurMFNECap )
+            {
+            return CAknExtendedInputCapabilities::EInputEditorPartialScreen == 
+                 ( iCurMFNECap & CAknExtendedInputCapabilities::EInputEditorPartialScreen );
+            }
+        else
+            {
+            MCoeFepAwareTextEditor_Extension1* extension = iCurEditor->Extension1(); 
+            if( extension )
+                {
+                state = static_cast<CAknEdwinState *>( extension->State(KNullUid) );
+                }
+            }
+        }
     if ( state )
         {
         return EAknEditorFlagEnablePartialScreen == 
--- a/fep/aknfep/src/AknFepSharedDataInterface.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepSharedDataInterface.cpp	Tue May 25 13:03:44 2010 +0300
@@ -1860,6 +1860,35 @@
         }
     }
 	
+/**
+ * Returns a value of default arabic finger hwr number mode.
+ *
+ * @since 5.2
+ * @return Value of default arabic finger hwr number mode.
+ */
+TInt CAknFepSharedDataInterface::DefaultArabicNumberMode() const
+     {
+     TInt value = 0;
+     if (iAknFepRepository)
+       {
+       iAknFepRepository->Get(KAknFepDefaultArabicNumberMode, value);
+       }
+     return value;     
+     }
+
+/**
+ * Set a value of default arabic finger hwr number mode.
+ *
+ * @since 5.2
+ * @param aValue new value set to default arabic finger hwr number mode shared data item
+ */
+void CAknFepSharedDataInterface::SetDefaultArabicNumberMode(TInt aValue)
+    {
+    if (iAknFepRepository)
+        {
+        iAknFepRepository->Set(KAknFepDefaultArabicNumberMode, aValue);
+        }
+    }
 #endif
 
 // End of File
--- a/fep/aknfep/src/AknFepThaiSCTSelector.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepThaiSCTSelector.cpp	Tue May 25 13:03:44 2010 +0300
@@ -37,7 +37,7 @@
 #include <PtiDefs.h>
 #include <aknSctDialog.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <e32std.h>
 
 #include <AknFepManager.h>
--- a/fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyCangJie.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyCangJie.cpp	Tue May 25 13:03:44 2010 +0300
@@ -37,7 +37,7 @@
 #include "AknFepManager.h"                  //FepMan flag
 #include "AknFepUICtrlInputPane.h"
 #include "AknFepUiCtrlContainerChinese.h"
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiEngine.h>      //CPtiEngine
 #include <e32keys.h>        //keys  
 #include <avkon.rsg>
--- a/fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyPinyinPhrase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUIInputStateEntryMiniQwertyPinyinPhrase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -37,7 +37,7 @@
 #include "AknFepManager.h"                  //FepMan flag
 #include "AknFepUICtrlInputPane.h"
 #include "AknFepUiCtrlContainerChinese.h"
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiEngine.h>      //CPtiEngine
 #include <e32keys.h>        //keys  
 #include <avkon.rsg>
--- a/fep/aknfep/src/AknFepUiInputStateCandidateHalfQwertyChinesePhrase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateCandidateHalfQwertyChinesePhrase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -39,7 +39,7 @@
 #include "AknFepUICtrlPinyinPopup.h"
 #include "AknFepUIManagerStateInterface.h"  
 #include "AknFepManager.h" 
-#include <AknFep.rsg>                 
+#include <aknfep.rsg>                 
 
 // Constant definition
 const TInt KMinCandidateCount = 1;
--- a/fep/aknfep/src/AknFepUiInputStateCandidateHiraganaKanji.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateCandidateHiraganaKanji.cpp	Tue May 25 13:03:44 2010 +0300
@@ -42,7 +42,7 @@
 #include <PtiDefs.h>                    // keys
 #include <PtiEngine.h>
 #include <PtiCompositionDataIF.h>       // MPtiEngineCompositionDataInterfac
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 // CONSTANTS
 
--- a/fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -41,7 +41,7 @@
 #include "aknfepuictrleditpane.h"           //phrase creation
 #include "AknFepUIManagerStateInterface.h"  
 #include "AknFepManager.h" 
-#include <AknFep.rsg>                 
+#include <aknfep.rsg>                 
 
 // ---------------------------------------------------------------------------
 // AknFepUiInputStateCandidateMiniQwertyPinyinAndStrokePhrase::
--- a/fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateCandidateMiniQwertyZhuyinPhrase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -38,7 +38,7 @@
 #include "AknFepUICtrlInputPane.h"
 #include "AknFepUIManagerStateInterface.h"  
 #include "AknFepManager.h" 
-#include <AknFep.rsg>   
+#include <aknfep.rsg>   
 
 #include "aknfepuictrleditpane.h"           //for zhuyin phrase creation
 #include "aknfepinputstateminiqwertyzhuyinkeymap.h"
--- a/fep/aknfep/src/AknFepUiInputStateCandidateRetroActive.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateCandidateRetroActive.cpp	Tue May 25 13:03:44 2010 +0300
@@ -42,7 +42,7 @@
 #include <PtiEngine.h>
 #include <PtiCompositionDataIF.h>       // MPtiEngineCompositionDataInterfac
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 
 // CONSTANTS
--- a/fep/aknfep/src/AknFepUiInputStateConversionHiraganaKanji.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateConversionHiraganaKanji.cpp	Tue May 25 13:03:44 2010 +0300
@@ -36,7 +36,7 @@
 #include <PtiDefs.h>                     // keys
 #include <PtiEngine.h>
 #include <PtiCompositionDataIF.h>        // MPtiEngineCompositionDataInterface
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 // CONSTANTS
 
--- a/fep/aknfep/src/AknFepUiInputStateEntryHalfQwertyWesternPredictive.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryHalfQwertyWesternPredictive.cpp	Tue May 25 13:03:44 2010 +0300
@@ -40,7 +40,7 @@
 #include <PtiCompositionDataIF.h>   //MPtiEngineCompositionDataInterface
 #include <featmgr.h>                //FeatureManager
 #include <e32keys.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiUserDicEntry.h>
 // TODO: Remove this include
 #include <AvkonInternalCRKeys.h>
--- a/fep/aknfep/src/AknFepUiInputStateEntryHiraganaKanji.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryHiraganaKanji.cpp	Tue May 25 13:03:44 2010 +0300
@@ -36,7 +36,7 @@
 #include <PtiDefs.h>                     // keys
 #include <PtiEngine.h>
 #include <PtiCompositionDataIF.h>        // MPtiEngineCompositionDataInterface
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 // CONSTANTS
 
--- a/fep/aknfep/src/AknFepUiInputStateEntryIndicPredictive.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryIndicPredictive.cpp	Tue May 25 13:03:44 2010 +0300
@@ -30,7 +30,7 @@
 #include "AknFepUIManagerStateInterface.h"      //MAknFepUIManagerStateInterface
 #include "AknFepPanic.h"
 #include "AknFepManagerUIInterface.h"
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiEngine.h>
 #include <PtiDefs.h>
 
--- a/fep/aknfep/src/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -41,7 +41,7 @@
 #include <e32keys.h>
 #include <PtiDefs.h>    
 #include <avkon.rsg>            //keys
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 const TInt KInputPaneLength = 32;
 _LIT(KSep, "'");
--- a/fep/aknfep/src/AknFepUiInputStateEntryPinyinPhrase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryPinyinPhrase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -40,7 +40,7 @@
 #include <PtiEngine.h>                          //CPtiEngine
 #include <PtiDefs.h>                            //keys
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <aknnotewrappers.h>
 
 const TText KPinyinTone0Valid = 0x02C9;
--- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp	Tue May 25 13:03:44 2010 +0300
@@ -41,7 +41,7 @@
 #include <PtiCompositionDataIF.h>   //MPtiEngineCompositionDataInterface
 #include <featmgr.h>                //FeatureManager
 #include <e32keys.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 
 static const TInt KKeyMappingsLength = 63;
@@ -458,6 +458,12 @@
             	TBool wasInlineEditing = EFalse;	
             	wasInlineEditing = 
                           fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction);
+
+                if(aKey == EStdKeySpace && tailLength > 0)
+                    {
+                    fepMan->RemoveSuggestedAdvanceCompletionL();
+                    }
+                	
             	ptiengine->CommitCurrentWord();
                 fepMan->CommitInlineEditL();
                 /* Temporary Fix */
--- a/fep/aknfep/src/AknFepUiInputStateEntryThaiPredictive.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryThaiPredictive.cpp	Tue May 25 13:03:44 2010 +0300
@@ -37,7 +37,7 @@
 #include <PtiEngine.h>                             //CPtiEngine
 #include <PtiDefs.h>                            //keys
 #include <e32keys.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 TAknFepInputStateEntryThaiPredictive::
 TAknFepInputStateEntryThaiPredictive(MAknFepUIManagerStateInterface* aOwner)
--- a/fep/aknfep/src/AknFepUiInputStateEntryVietnamesePredictive.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryVietnamesePredictive.cpp	Tue May 25 13:03:44 2010 +0300
@@ -39,7 +39,7 @@
 #include <PtiDefs.h>                            //keys
 #include <aknSctDialog.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 #include "AknFepUiManagerWestern.h"
 TAknFepInputStateEntryVietnamesePredictive::
--- a/fep/aknfep/src/AknFepUiInputStateEntryWesternPredictive.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryWesternPredictive.cpp	Tue May 25 13:03:44 2010 +0300
@@ -41,7 +41,7 @@
 #include <PtiDefs.h>                            //keys
 #include <featmgr.h>                //FeatureManager
 #include <e32keys.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiUserDicEntry.h>
 
 // The Maximum world size
--- a/fep/aknfep/src/AknFepUiInputStateEntryWesternPredictiveJp.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryWesternPredictiveJp.cpp	Tue May 25 13:03:44 2010 +0300
@@ -37,7 +37,7 @@
 #include <PtiDefs.h>                            //keys
 #include <featmgr.h>                //FeatureManager
 #include <e32keys.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 TAknFepInputStateEntryWesternPredictiveJp::
 TAknFepInputStateEntryWesternPredictiveJp(MAknFepUIManagerStateInterface* aOwner)
--- a/fep/aknfep/src/AknFepUiInputStateEntryZhuyinStrokeBasePhrase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryZhuyinStrokeBasePhrase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -38,7 +38,7 @@
 #include <PtiEngine.h>      //CPtiEngine
 #include <e32keys.h>        //keys  
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 TAknFepInputStateEntryZhuyinStrokeBasePhrase::TAknFepInputStateEntryZhuyinStrokeBasePhrase(
                                 MAknFepUIManagerStateInterface* aOwner,
--- a/fep/aknfep/src/AknFepUiInputStateInitialIndicMultitap.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateInitialIndicMultitap.cpp	Tue May 25 13:03:44 2010 +0300
@@ -37,7 +37,7 @@
 #include <PtiDefs.h>
 #include <aknSctDialog.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <eikenv.h>
 
 #define PTI_CLEAR_CURRENTWORD( A, B ) \
--- a/fep/aknfep/src/AknFepUiInputStateInitialThaiMultitap.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateInitialThaiMultitap.cpp	Tue May 25 13:03:44 2010 +0300
@@ -37,7 +37,7 @@
 #include <PtiDefs.h>
 #include <aknSctDialog.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 
 TAknFepInputStateInitialThaiMultitap::
--- a/fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp	Tue May 25 13:03:44 2010 +0300
@@ -39,7 +39,7 @@
 #include <PtiDefs.h>
 #include <aknSctDialog.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 #include "AknFepUiManagerWestern.h"
 
--- a/fep/aknfep/src/AknFepUiInputStateJapanesePredictiveBase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateJapanesePredictiveBase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -39,7 +39,7 @@
 #include <PtiDefs.h>                    // keys
 #include <PtiEngine.h>
 #include <PtiCompositionDataIF.h>       // MPtiEngineCompositionDataInterface
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 
 // CONSTANTS
--- a/fep/aknfep/src/AknFepUiInputStateNextWordJapanesePredictive.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateNextWordJapanesePredictive.cpp	Tue May 25 13:03:44 2010 +0300
@@ -40,7 +40,7 @@
 #include <PtiDefs.h>                    // keys
 #include <PtiEngine.h>
 #include <PtiCompositionDataIF.h>       // MPtiEngineCompositionDataInterface
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 
 // CONSTANTS
--- a/fep/aknfep/src/AknFepUiInputStatePredictiveInputJapanese.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStatePredictiveInputJapanese.cpp	Tue May 25 13:03:44 2010 +0300
@@ -40,7 +40,7 @@
 #include <PtiDefs.h>                    // keys
 #include <PtiEngine.h>
 #include <PtiCompositionDataIF.h>       // MPtiEngineCompositionDataInterface
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <avkon.rsg>
 
 // CONSTANTS
--- a/fep/aknfep/src/AknFepUiManagerBase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiManagerBase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -43,7 +43,7 @@
 #include "AknFepCaseManager.h"
 #include "AknFepPanic.h"
 
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <AknIndicatorContainer.h>  // CAknIndicatorContainer::TIndicatorContext
 #include <PtiEngine.h> 
 #include <PtiDefs.h>
--- a/fep/aknfep/src/AknFepUiManagerChinese.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiManagerChinese.cpp	Tue May 25 13:03:44 2010 +0300
@@ -121,7 +121,7 @@
 #include <PtiDefs.h>
 
 #include <avkon.rsg>        //phrase creation
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 // CONSTANTS
 const TInt16 KStrokeHorizontalValue = 0x4e00; 
--- a/fep/aknfep/src/AknFepUiManagerWestern.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/AknFepUiManagerWestern.cpp	Tue May 25 13:03:44 2010 +0300
@@ -96,7 +96,7 @@
 #include <PtiEngine.h> 
 #include <PtiDefs.h>
 #include <PtiUserDicEntry.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 // CONSTANTS
 
 /**
@@ -382,18 +382,35 @@
         {
         case ELatin:
             {
-            if ( iLanguage == ELangTaiwanChinese ||
-                 iLanguage == ELangHongKongChinese ||
-                 iLanguage == ELangPrcChinese ||
-                 iLanguage == ELangJapanese || 
-                 iLanguage == ELangHindi )
+            switch ( iLanguage )
+                {
+                case ELangTaiwanChinese:
+                    {
+                    lang = ELangEnglish_Taiwan;
+                    break;
+                    }
+                case ELangHongKongChinese:
+                    {
+                    lang = ELangEnglish_HongKong;
+                    break;
+                    }
+                case ELangPrcChinese:
+                    {
+                    lang = ELangEnglish_Prc;
+                    break;
+                    }
+                case ELangJapanese:
+                case ELangHindi:
                 {
                 // Chinese and Japanese languages uses always English as a latin language.
                 lang = ELangEnglish;
+                    break;
                 }
-            else
+                default:
                 {
                 lang = iLanguage;
+                    break;
+                    }
                 }
             }
             break;
--- a/fep/aknfep/src/aknfepinputstatecandidatepinyinphrasecreation.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepinputstatecandidatepinyinphrasecreation.cpp	Tue May 25 13:03:44 2010 +0300
@@ -30,7 +30,7 @@
 // System includes
 #include <PtiEngine.h>   
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 //#include <aknquerydialog.h> //CAknQueryDialog  
 
 // User includes
--- a/fep/aknfep/src/aknfepinputstatepinyinphrasecreationbase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepinputstatepinyinphrasecreationbase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -30,7 +30,7 @@
 #include <PtiEngine.h>                          //CPtiEngine
 #include <PtiUserDicEntry.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 #include "aknfepinputstatepinyinphrasecreationbase.h"
 #include "AknFepPanic.h"
--- a/fep/aknfep/src/aknfepinputstatespellingpinyinphrasecreation.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepinputstatespellingpinyinphrasecreation.cpp	Tue May 25 13:03:44 2010 +0300
@@ -29,7 +29,7 @@
 #include <PtiEngine.h>                          //CPtiEngine
 #include <PtiDefs.h>                            //keys
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <aknnotewrappers.h>
 
 #include "AknFepPanic.h"
--- a/fep/aknfep/src/aknfepuiinputminiqwertypinyinphrasebase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputminiqwertypinyinphrasebase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -32,7 +32,7 @@
 #include <PtiEngine.h>
 #include <PtiDefs.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiUserDicEntry.h>
 #include <aknnotewrappers.h> //CAknWarningNote 
 // User includes
--- a/fep/aknfep/src/aknfepuiinputminiqwertystrokephrasebase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputminiqwertystrokephrasebase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -33,7 +33,7 @@
 #include <PtiEngine.h>
 #include <PtiDefs.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiUserDicEntry.h>
 #include <aknnotewrappers.h> //CAknWarningNote 
 
--- a/fep/aknfep/src/aknfepuiinputminiqwertyzhuyinphrasebase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputminiqwertyzhuyinphrasebase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -32,7 +32,7 @@
 #include <PtiEngine.h>
 #include <PtiDefs.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiUserDicEntry.h>
 #include <aknnotewrappers.h> //CAknWarningNote 
 // User includes
--- a/fep/aknfep/src/aknfepuiinputstateentryhalfqwertyphrase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputstateentryhalfqwertyphrase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -37,7 +37,7 @@
 #include "AknFepUICtrlInputPane.h"
 #include "AknFepUICtrlPinyinPopup.h"        //Pinyin phrase
 #include "AknFepUiCtrlContainerChinese.h"
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiEngine.h>      //CPtiEngine
 #include <e32keys.h>        //keys  
 #include <avkon.rsg>
--- a/fep/aknfep/src/aknfepuiinputstateentrypinyinphrasecreation.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputstateentrypinyinphrasecreation.cpp	Tue May 25 13:03:44 2010 +0300
@@ -32,7 +32,7 @@
 
 #include <PtiDefs.h>                            //keys
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <aknnotewrappers.h>
 
 #include "AknFepPanic.h"
--- a/fep/aknfep/src/aknfepuiinputstateentryzhuyinphrasecreation.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputstateentryzhuyinphrasecreation.cpp	Tue May 25 13:03:44 2010 +0300
@@ -31,7 +31,7 @@
 
 #include <PtiDefs.h>                            //keys
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <aknnotewrappers.h>
 
 #include "AknFepPanic.h"
--- a/fep/aknfep/src/aknfepuiinputstateinitialindicphoneticmultitap.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputstateinitialindicphoneticmultitap.cpp	Tue May 25 13:03:44 2010 +0300
@@ -37,7 +37,7 @@
 #include <PtiDefs.h>
 #include <aknsctdialog.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <EikEnv.h>
 #include <Aknutils.h>
 #define PHONETIC_SEPARATOR 0x2e
--- a/fep/aknfep/src/aknfepuiinputstateminiqwertystrokephrase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputstateminiqwertystrokephrase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -33,7 +33,7 @@
 #include <PtiEngine.h>  
 #include <PtiUserDicEntry.h>
 #include <aknnotewrappers.h> //CAknWarningNote
-#include <AknFep.rsg>  
+#include <aknfep.rsg>  
 
 // User includes
 #include "AknFepUiCtrlContainerChinese.h"
--- a/fep/aknfep/src/aknfepuiinputstateminiqwertyzhuyinphrase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputstateminiqwertyzhuyinphrase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -33,7 +33,7 @@
 #include <PtiEngine.h>  
 #include <PtiUserDicEntry.h>
 #include <aknnotewrappers.h> //CAknWarningNote
-#include <AknFep.rsg>  
+#include <aknfep.rsg>  
 
 // User includes
 #include "AknFepUiCtrlContainerChinese.h"
--- a/fep/aknfep/src/aknfepuiinputstatestrokephrasebase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputstatestrokephrasebase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -31,7 +31,7 @@
 // System includes
 #include <PtiEngine.h>
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiUserDicEntry.h>
 #include <aknnotewrappers.h> //CAknWarningNote 
 
--- a/fep/aknfep/src/aknfepuiinputstatezhuyinphrasecreationbase.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputstatezhuyinphrasecreationbase.cpp	Tue May 25 13:03:44 2010 +0300
@@ -29,7 +29,7 @@
 
 #include <PtiEngine.h>                          //CPtiEngine
 #include <avkon.rsg>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 #include "aknfepuiinputstatezhuyinphrasecreationbase.h"
 #include "AknFepUIManagerStateInterface.h"      //MAknFepUIManagerStateInterface
--- a/fep/aknfep/src/aknfepuispellinputpane.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuispellinputpane.cpp	Tue May 25 13:03:44 2010 +0300
@@ -41,7 +41,7 @@
 
 // CONSTANTS
 const TInt KNumberOfControl = 1;
-const TInt KSpellMaxLength = 32;    
+const TInt KSpellMaxLength = 63;    
 const TInt KTouchSpellEditorMaxLine = 1;  
 // Enumarations
 enum TControls
@@ -201,7 +201,15 @@
     {
     if (iInputWin->IsFocused())
         {
-        return iInputWin->OfferKeyEventL( aKeyEvent, aType );
+		TKeyResponse  response = iInputWin->OfferKeyEventL( aKeyEvent, aType );
+		if ( response == EKeyWasNotConsumed )
+			{
+			if ( aType == EEventKeyDown || aType == EEventKeyUp )
+				{
+                response = EKeyWasConsumed;
+                }
+			}
+		return response;
         }
 
     return EKeyWasNotConsumed;
--- a/fep/aknfep/src/aknfepuserdbdlg.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuserdbdlg.cpp	Tue May 25 13:03:44 2010 +0300
@@ -46,7 +46,7 @@
 #include <f32file.h> //RFs
 #include <eikedwin.h> //CEikEdwin 
 #include <akntitle.h> //CAknTitlePane 
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include "AknFep.hrh"
 #include "aknfepuserdbdlg.h"
 #include "dbmanagement.h"
--- a/fep/aknfep/src/aknfepuserdbquerydlg.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/aknfepuserdbquerydlg.cpp	Tue May 25 13:03:44 2010 +0300
@@ -21,7 +21,7 @@
 #include <aknnotewrappers.h> //CAknWarningNote
 #include <eikedwin.h> //CEikEdwin 
 
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 
 #include "aknfepuserdbquerydlg.h"
 #include "dbmanagement.h"
--- a/fep/aknfep/src/dbmanagement.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/fep/aknfep/src/dbmanagement.cpp	Tue May 25 13:03:44 2010 +0300
@@ -27,7 +27,7 @@
 
 
 //system include files
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <PtiUserDicEntry.h>
 #include <PtiEngine.h>
 #include <StringLoader.h> 
--- a/inputmethods_plat/aknfep_pen_support_api/inc/aknfeppeninputenums.h	Tue May 11 16:31:42 2010 +0300
+++ b/inputmethods_plat/aknfep_pen_support_api/inc/aknfeppeninputenums.h	Tue May 25 13:03:44 2010 +0300
@@ -179,6 +179,9 @@
     ECmdPeninputSpellLanguageMode,
 	ECmdPeninputSpellICFDisplayContent,
 	ECmdPenInputDimEnterKey,
+    ECmdPeninputEnableOwnBitmap,    
+	ECmdPeninputDisableLayoutDrawing,
+	ECmdPeninputArabicNumModeChanged,
     ECmdPenInputImeCmdBase = 2000
     };
 
--- a/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h	Tue May 11 16:31:42 2010 +0300
+++ b/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h	Tue May 25 13:03:44 2010 +0300
@@ -361,6 +361,13 @@
  *
  */
 const TUint32 KAknFepKoreanCombineWordFlag = 0x00000024;              
+
+/*
+ * This key is used for arabic finger hwr to set or get the default number mode.
+ * in number table.
+ * 0 is for latin number and 1 is for native number.
+ */
+const TUint32 KAknFepDefaultArabicNumberMode = 0x00000025;
 #endif
 
 // End of file
--- a/inputmethods_plat/pen_input_server_api/inc/peninputcmd.h	Tue May 11 16:31:42 2010 +0300
+++ b/inputmethods_plat/pen_input_server_api/inc/peninputcmd.h	Tue May 25 13:03:44 2010 +0300
@@ -103,6 +103,14 @@
 	ESignalChangeFeedbackType,
     ESignalImmeSimulateEvent,
     ESignalServerReady = 1450,
+    ESignalUpdateCursor,
+    ESignalPopupArea,
+    ESignalUpdateICFArea,
+    ESignalUpdateChangedArea,
+    ESignalUpdateBubble,
+    ESignalRegisterBkControl,
+    ESignalDisableUpdating,
+    ESignalDrawBackground,
     ESignalFepEventBase = 1500,    //Event base for Fep. All fep event
                                     //is re-directed to Fep.
     ESignalKeyEvent = 1501,        //hwr recongition selection event.
@@ -141,6 +149,8 @@
     ESignalAcceptTooltip,
     ESignalCommitITIInlineText,  
     EPeninputOpSetDiscreeptPop,  
+    ESignalDeleteLastInput,
+    ESignalArabicSCTChar,
     ESignalUserEventBase = 2000
     };
 
--- a/inputmethods_plat/ptiengine_key_definations_api/inc/PtiKeyboardDatabase.h	Tue May 11 16:31:42 2010 +0300
+++ b/inputmethods_plat/ptiengine_key_definations_api/inc/PtiKeyboardDatabase.h	Tue May 25 13:03:44 2010 +0300
@@ -36,7 +36,14 @@
 #include "PtiDefs.h"
 
 const TInt KKdbOpaqueDataLen = 8;
-		
+
+class TPtiXt9KeyBinding
+    {
+    public:
+        TUint16 iScanCode;
+        TInt iIndex[2];
+    };
+    
 //
 // TPtiLangDatabaseMappingOpaque
 //
@@ -85,7 +92,7 @@
 		* @param aNumEntries   Number of binding array entries will be stored here.
 		* @return Pointer to scan code binding table.
 		*/
-        virtual TUint8* ScanBindingTable(TPtiKeyboardType aKeyboardType,
+        virtual TPtiXt9KeyBinding* ScanBindingTable(TPtiKeyboardType aKeyboardType,
                                          TInt& aNumEntries) const = 0;	
                                          
 	    /**
--- a/textinput/GSLangPlugin/data/GSLangPluginRsc.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/GSLangPlugin/data/GSLangPluginRsc.rss	Tue May 25 13:03:44 2010 +0300
@@ -31,7 +31,7 @@
 #include    <avkon.rh>
 #include    <avkon.loc>
 #include    <uikon.rh>
-#include    <GSApp.rsg>
+#include    <gsapp.rsg>
 #include     <gs.loc>
 
 #include    <eikon.rh>
--- a/textinput/GSLangPlugin/src/DualLanguageDialog.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/GSLangPlugin/src/DualLanguageDialog.cpp	Tue May 25 13:03:44 2010 +0300
@@ -28,7 +28,7 @@
 #include <AknFepGlobalEnums.h>
 #include "DualLanguageDialog.h"
 #include <aknnotewrappers.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include "GSLangModel.h"
 #include "DualLanguageData.h"
 #include <GSCommon.hrh>
--- a/textinput/GSLangPlugin/src/DualLanguageList.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/GSLangPlugin/src/DualLanguageList.cpp	Tue May 25 13:03:44 2010 +0300
@@ -29,7 +29,7 @@
 #include "GsLangPlugin.hrh"
 #include "DualLanguageList.h"
 #include <aknsettingitemlist.h> 
-#include <GsLangPluginRsc.rsg>
+#include <gslangpluginrsc.rsg>
 #include "DualLanguageDialog.h"
 
 CGSLanguageSettingItem::CGSLanguageSettingItem( TInt aResourceId, TBool aPrimary, CGSDualLanguageData* aData)
--- a/textinput/GSLangPlugin/src/GSLangContainer.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/GSLangPlugin/src/GSLangContainer.cpp	Tue May 25 13:03:44 2010 +0300
@@ -23,7 +23,7 @@
 #include    "GSLangModel.h"
 #include    <gslistbox.h> // CGSListBoxItemTextArray
 #include    <gscommon.hrh>
-#include    <GSLangPluginRsc.rsg>
+#include    <gslangpluginrsc.rsg>
 
 #include    <bldvariant.hrh>
 
--- a/textinput/GSLangPlugin/src/GSLangModel.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/GSLangPlugin/src/GSLangModel.cpp	Tue May 25 13:03:44 2010 +0300
@@ -20,7 +20,7 @@
 #include    "GSLangModel.h"
 #include    "GSLangContainer.h"
 #include    "GSLangPlugin.h"
-#include    <GSLangPluginRsc.rsg>
+#include    <gslangpluginrsc.rsg>
 
 #include    <AknFepInternalCRKeys.h>
 #include    <aknnotedialog.h>
--- a/textinput/GSLangPlugin/src/GSLangPlugin.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/GSLangPlugin/src/GSLangPlugin.cpp	Tue May 25 13:03:44 2010 +0300
@@ -21,7 +21,7 @@
 #include "GSLangContainer.h"
 #include "GSLangModel.h"
 #include <gsfwviewuids.h>
-#include <GSLangPluginRsc.rsg>
+#include <gslangpluginrsc.rsg>
 #include <gslistbox.h>
 #include <gsprivatepluginproviderids.h>
 
@@ -45,7 +45,7 @@
 #include <e32property.h>
 #ifdef RD_INTELLIGENT_TEXT_INPUT
 #include "PredictiveSettingDialog.h"
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <akntitle.h>
 #ifdef FF_DUAL_LANGUAGE_SUPPORT
 #include "DualLanguageDialog.h"
--- a/textinput/GSLangPlugin/src/PredictiveSettingDialog.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/GSLangPlugin/src/PredictiveSettingDialog.cpp	Tue May 25 13:03:44 2010 +0300
@@ -28,7 +28,7 @@
 #include <AknFepGlobalEnums.h>
 #include "PredictiveSettingDialog.h"
 #include <aknnotewrappers.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <hlplch.h> // HlpLauncher
 #include <csxhelp/cp.hlp.hrh> 
 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
--- a/textinput/GSLangPlugin/src/PredictiveSettingList.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/GSLangPlugin/src/PredictiveSettingList.cpp	Tue May 25 13:03:44 2010 +0300
@@ -24,7 +24,7 @@
 #include <AvkonInternalCRKeys.h>
 #include <e32property.h>
 #include <PtiDefs.h>
-#include <AknFep.rsg>
+#include <aknfep.rsg>
 #include <AknFepGlobalEnums.h>
 #include "PredictiveSettingList.h"
 #include "PredictiveSettingData.h"
--- a/textinput/peninputarc/bwins/peninputlayoutcontrolU.DEF	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/bwins/peninputlayoutcontrolU.DEF	Tue May 25 13:03:44 2010 +0300
@@ -323,7 +323,7 @@
 	?SignalOwner@CFepUiLayout@@QAEXHABVTDesC16@@@Z @ 322 NONAME ; void CFepUiLayout::SignalOwner(int, class TDesC16 const &)
 	?SizeChanged@CFepUiLayout@@EAEHPBX@Z @ 323 NONAME ; int CFepUiLayout::SizeChanged(void const *)
 	?UnLockArea@CFepUiLayout@@QAEXABVTRect@@PAVCFepUiBaseCtrl@@@Z @ 324 NONAME ; void CFepUiLayout::UnLockArea(class TRect const &, class CFepUiBaseCtrl *)
-	?UpdateArea@CFepUiBaseCtrl@@QAEXABVTRect@@H@Z @ 325 NONAME ; void CFepUiBaseCtrl::UpdateArea(class TRect const &, int)
+	?UpdateArea@CFepUiBaseCtrl@@UAEXABVTRect@@H@Z @ 325 NONAME ; void CFepUiBaseCtrl::UpdateArea(class TRect const &, int)
 	?UpdateArea@CFepUiLayout@@QAEXPBVCFepUiBaseCtrl@@ABVTRect@@HH@Z @ 326 NONAME ; void CFepUiLayout::UpdateArea(class CFepUiBaseCtrl const *, class TRect const &, int)
 	?UpdateContent@CFepInputContextField@@MAEXABVTCursorSelection@@@Z @ 327 NONAME ; void CFepInputContextField::UpdateContent(class TCursorSelection const &)
 	?UpdateCursorSelection@CFepLayoutEditAreaBase@@QAEXABVTCursorSelection@@@Z @ 328 NONAME ; void CFepLayoutEditAreaBase::UpdateCursorSelection(class TCursorSelection const &)
@@ -569,7 +569,7 @@
 	?ClearStroke@CTransparentHwrWnd@@UAEXXZ @ 568 NONAME ; void CTransparentHwrWnd::ClearStroke(void)
 	?HideKeyCtrl@CVirtualKey@@QAEXH@Z @ 569 NONAME ; void CVirtualKey::HideKeyCtrl(int)
 	?HideTooltip@CFepLayoutMultiLineIcf@@QAEXXZ @ 570 NONAME ; void CFepLayoutMultiLineIcf::HideTooltip(void)
-	?ShowTooltipL@CFepLayoutMultiLineIcf@@QAEXABVTDesC16@@ABVTRect@@@Z @ 571 NONAME ; void CFepLayoutMultiLineIcf::ShowTooltipL(class TDesC16 const &, class TRect const &)
+	?ShowTooltipL@CFepLayoutMultiLineIcf@@QAEXABVTDesC16@@ABVTRect@@H@Z @ 571 NONAME ; void CFepLayoutMultiLineIcf::ShowTooltipL(class TDesC16 const &, class TRect const &, int)
 	?TooltipBubbleCtrl@CFepLayoutMultiLineIcf@@QAEPAVCTooltipBubbleCtrl@@XZ @ 572 NONAME ; class CTooltipBubbleCtrl * CFepLayoutMultiLineIcf::TooltipBubbleCtrl(void)
 	?RegisterFeedbackArea@CFepUiLayout@@QAEXHABVTRect@@H@Z @ 573 NONAME ; void CFepUiLayout::RegisterFeedbackArea(int, class TRect const &, int)
 	?ChangeFeedbackType@CFepUiLayout@@QAEXHH@Z @ 574 NONAME ; void CFepUiLayout::ChangeFeedbackType(int, int)	
@@ -597,4 +597,14 @@
 	?CancelExtResponseArea@CFepUiBaseCtrl@@QAEXXZ @ 596 NONAME ; void CFepUiBaseCtrl::CancelExtResponseArea(void)
 	?EnableExtResponseArea@CFepUiBaseCtrl@@QAEXHABVTRect@@@Z @ 597 NONAME ; void CFepUiBaseCtrl::EnableExtResponseArea(int, class TRect const &)
 	?BaseConstructL@CButtonBase@@QAEXXZ @ 598 NONAME ; void CButtonBase::BaseConstructL(void)
+	?SetRect@CBubbleCtrl@@UAEXABVTRect@@@Z @ 599 NONAME ; void CBubbleCtrl::SetRect(class TRect const &)
+	?HandleResourceChange@CVirtualKeyboard@@MAEXH@Z @ 600 NONAME ; void CVirtualKeyboard::HandleResourceChange(int)
+	?BitmapDevice@CFepUiBaseCtrl@@IAEPAVCFbsBitmapDevice@@XZ @ 601 NONAME ; class CFbsBitmapDevice * CFepUiBaseCtrl::BitmapDevice(void)
+	?BitGc@CFepUiBaseCtrl@@IAEPAVCBitmapContext@@XZ @ 602 NONAME ; class CBitmapContext * CFepUiBaseCtrl::BitGc(void)
+	?MaskBitmapDevice@CFepUiBaseCtrl@@IAEPAVCFbsBitmapDevice@@XZ @ 603 NONAME ; class CFbsBitmapDevice * CFepUiBaseCtrl::MaskBitmapDevice(void)
+	?NotDrawToLayoutDevice@CFepUiLayout@@QAEHXZ @ 604 NONAME ; int CFepUiLayout::NotDrawToLayoutDevice(void)
+	?HandleResourceChange@CBubbleCtrl@@MAEXH@Z @ 605 NONAME ; void CBubbleCtrl::HandleResourceChange(int)
+	?HandleResourceChange@CFepLayoutPopupWnd@@UAEXH@Z @ 606 NONAME ; void CFepLayoutPopupWnd::HandleResourceChange(int)
+	?DisableLayoutDrawing@CFepUiLayout@@QAEXH@Z @ 607 NONAME ; void CFepUiLayout::DisableLayoutDrawing(int)
+	?BkMaskBmp@CFepUiBaseCtrl@@IAEPAVCFbsBitmap@@XZ @ 608 NONAME ; class CFbsBitmap * CFepUiBaseCtrl::BkMaskBmp(void)
 
--- a/textinput/peninputarc/eabi/peninputlayoutcontrolU.DEF	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/eabi/peninputlayoutcontrolU.DEF	Tue May 25 13:03:44 2010 +0300
@@ -702,7 +702,7 @@
 	_ZTI26CPeninputPenTraceDecorator @ 701 NONAME ; #<TI>#
 	_ZTV26CPeninputPenTraceDecorator @ 702 NONAME ; #<VT>#
 	_ZN22CFepLayoutMultiLineIcf17TooltipBubbleCtrlEv @ 703 NONAME
-	_ZN22CFepLayoutMultiLineIcf12ShowTooltipLERK7TDesC16RK5TRect @ 704 NONAME
+	_ZN22CFepLayoutMultiLineIcf12ShowTooltipLERK7TDesC16RK5TRecti @ 704 NONAME
 	_ZN22CFepLayoutMultiLineIcf11HideTooltipEv @ 705 NONAME
 	_ZTI18CTooltipBubbleCtrl @ 706 NONAME
 	_ZTV18CTooltipBubbleCtrl @ 707 NONAME
@@ -731,4 +731,14 @@
 	_ZN14CFepUiBaseCtrl21CancelExtResponseAreaEv @ 730 NONAME
 	_ZN14CFepUiBaseCtrl21EnableExtResponseAreaEiRK5TRect @ 731 NONAME
 	_ZN11CButtonBase14BaseConstructLEv @ 732 NONAME
+	_ZN11CBubbleCtrl20HandleResourceChangeEi @ 733 NONAME
+	_ZN11CBubbleCtrl7SetRectERK5TRect @ 734 NONAME
+	_ZN12CFepUiLayout20DisableLayoutDrawingEi @ 735 NONAME
+	_ZN12CFepUiLayout21NotDrawToLayoutDeviceEv @ 736 NONAME
+	_ZN14CFepUiBaseCtrl12BitmapDeviceEv @ 737 NONAME
+	_ZN14CFepUiBaseCtrl16MaskBitmapDeviceEv @ 738 NONAME
+	_ZN14CFepUiBaseCtrl5BitGcEv @ 739 NONAME
+	_ZN14CFepUiBaseCtrl9BkMaskBmpEv @ 740 NONAME
+	_ZN16CVirtualKeyboard20HandleResourceChangeEi @ 741 NONAME
+	_ZN18CFepLayoutPopupWnd20HandleResourceChangeEi @ 742 NONAME
 
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayout.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayout.h	Tue May 25 13:03:44 2010 +0300
@@ -546,6 +546,8 @@
 	//Advanced Tactile feedback REQ417-47932
 	IMPORT_C void ChangeFeedbackType(TInt aId, TInt aNewTactileType);  
 	
+    IMPORT_C TBool NotDrawToLayoutDevice();
+    IMPORT_C void DisableLayoutDrawing(TBool aFlag);
     /**
      * Get the layout SkinInstance
      *
@@ -627,6 +629,7 @@
      * @param aData Editor text and cursor pos information
      */
     void SendEditorTextAndCursorPosL(TUint8* aData);
+	void SetSelfBmpDeviceFlag(TBool aFlag);
 
 private:
     NONSHARABLE_CLASS( CFepUiLayoutExt) : public CBase
@@ -644,6 +647,8 @@
 			 */ 
 			MTouchFeedback*   iTouchFeedbackInstance;    
             
+			TBool iSelfBmpDeviceFlag;
+            TBool iDisableDrawing;   
         };
  
 private:  
@@ -700,6 +705,7 @@
      * Reserved item1
      */
      TInt iReserved1;     
+friend class CFepUiBaseCtrl;
     
 };
 
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbasecontrol.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbasecontrol.h	Tue May 25 13:03:44 2010 +0300
@@ -43,6 +43,8 @@
 //base control type
 typedef TInt64 TControlType;
 
+const TInt KPenInputOwnDeviceChange = -1;
+const TUint KFepCtrlExtId = 0x00000000;
 //UI layout leave code
 enum TUiLayoutErrorCode
     {
@@ -200,6 +202,64 @@
 friend class CControlGroup;    
 friend class CInsertionPoint;
 public:
+    NONSHARABLE_CLASS(CFepUiBaseCtrlExtension) : public CBase
+        {
+        public: 
+            
+        CFepUiBaseCtrlExtension();
+        
+        /**
+         * Set Tactile Feedback Type
+         * Advanced Tactile feedback REQ417-47932
+         */
+        void SetTactileFeedbackType(TInt aTactileType);
+        
+        /**
+        * Return tactile feedback type
+        *
+        * Advanced Tactile feedback REQ417-47932
+        * @return the tactile feedback type
+        */  
+        IMPORT_C TInt TactileFeedbackType();
+public:
+            TBool iExtResponseAreaActive;
+            TRect iExtResponseArea;
+            TBool iExtResponseAreaEnabled;
+            TRect  iExtResponseAreaMargin;
+                
+        private:
+        /**
+         * Tactile Feedback type
+         */
+        TInt iTactileType;    
+
+        public:
+            ~CFepUiBaseCtrlExtension();
+            CFbsBitmap* Bitmap() { return iBitmap;}
+            CFbsBitmap* MaskBitmap() { return iMaskBitmap;}
+            CFbsBitGc* Gc() { return iGc;}
+            CFbsBitmapDevice* BitmapDevice() { return iBitmapDevice;}
+            CFbsBitmapDevice* MaskBitmapDevice() { return iMaskBitmapDevice;}
+
+            void SetBitmap(CFbsBitmap* aBmp) { iBitmap = aBmp;}
+            void SetGc(CFbsBitGc* aGc) { iGc = aGc;}
+            void SetBmpDevice(CFbsBitmapDevice* aDevice) { iBitmapDevice = aDevice;}
+            void SetMaskBmpDevice(CFbsBitmapDevice* aDevice) { iMaskBitmapDevice = aDevice;}
+            
+        private:
+            CFbsBitmap* iBitmap; // not own, don't delete
+            CFbsBitmap* iMaskBitmap; // not own, don't delete
+            /** 
+             * graphic context
+             * Not own
+             */    
+            CFbsBitGc* iGc;
+            CFbsBitmapDevice* iBitmapDevice;
+            CFbsBitmapDevice* iMaskBitmapDevice;
+friend class CFepUiBaseCtrl;            
+        };
+		
+public:
     enum TZOrder
         {
         EOrderBackground = 1500, //order for background control
@@ -765,7 +825,7 @@
      * @param aRect the rect to be flushed in screen
      * @param aUpdateFlag ETrue if full update.
      */
-    IMPORT_C void UpdateArea(const TRect& aRect,TBool aUpdateFlag= EFalse); 
+    IMPORT_C virtual void UpdateArea(const TRect& aRect,TBool aUpdateFlag= EFalse); 
 
     /**
      * Update layout area immediately
@@ -986,28 +1046,28 @@
      * @since S60 V4.0
      * @return The graphic context
      */
-    inline CBitmapContext* BitGc();
+    IMPORT_C CBitmapContext* BitGc();
 
     /**
      * get Bitmap device for sprite or window
      * @since S60 V4.0
      * @return The bitmap device
      */
-    inline CFbsBitmapDevice* BitmapDevice();
+    IMPORT_C CFbsBitmapDevice* BitmapDevice();
 
     /**
      * get Mask bitmap device for sprite or window
      * @since S60 V4.0
      * @return The mask bitmap device
      */
-    inline CFbsBitmapDevice* MaskBitmapDevice();
+    IMPORT_C CFbsBitmapDevice* MaskBitmapDevice();
     
     /**
      * get control background mask bmp
      * @since S60 V4.0
      * @return The background mask bitmap
      */
-    inline CFbsBitmap* BkMaskBmp();
+    IMPORT_C CFbsBitmap* BkMaskBmp();    
     
     /**
      * get control background  bmp
@@ -1172,6 +1232,9 @@
     virtual IMPORT_C void GraphicDeviceSizeChanged();
     
     inline void SetHidenFlag(TBool aFlag);
+    void CreateOwnDeviceL(CFbsBitmap* aBmp, CFbsBitmap* aMaskBmp = 0);
+    
+    void ResizeDeviceL();
 private:
     /**
      * Draw shadow bitmap
@@ -1369,39 +1432,8 @@
     
     TInt iOrdinalPos;
 
-private:    
-    NONSHARABLE_CLASS(CFepUiBaseCtrlExtension) : public CBase
-        {
-        public: 
-            
-        CFepUiBaseCtrlExtension();
-        
-        /**
-         * Set Tactile Feedback Type
-         * Advanced Tactile feedback REQ417-47932
-         */
-        void SetTactileFeedbackType(TInt aTactileType);
-        
-        /**
-        * Return tactile feedback type
-        *
-        * Advanced Tactile feedback REQ417-47932
-        * @return the tactile feedback type
-        */  
-        IMPORT_C TInt TactileFeedbackType();
-        public:
-            TBool iExtResponseAreaActive;
-            TRect iExtResponseArea;
-            TBool iExtResponseAreaEnabled;
-            TRect  iExtResponseAreaMargin;
-            
-        private:
-            /**
-             * Tactile Feedback type
-             */
-            TInt iTactileType;
-        };    
-private:
+    //class CFepUiBaseCtrlExtension;
+
     /**
      * Reservered
      */
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbasecontrol.inl	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbasecontrol.inl	Tue May 25 13:03:44 2010 +0300
@@ -215,35 +215,7 @@
     {
     return iRootCtrl;
     }
-    
-// ---------------------------------------------------------------------------
-// get graphics context for sprite or window
-// ---------------------------------------------------------------------------
-//   
-inline CBitmapContext* CFepUiBaseCtrl::BitGc()
-    {
-    return iLayoutOwner->BitmapContext();
-    }
-
-// ---------------------------------------------------------------------------
-// get Bitmap device for sprite or window
-// ---------------------------------------------------------------------------
-//
-inline CFbsBitmapDevice* CFepUiBaseCtrl::BitmapDevice()
-    {
-    return iLayoutOwner->BitmapDevice();
-    }
-
-// ---------------------------------------------------------------------------
-// get Mask bitmap device for sprite or window
-// ---------------------------------------------------------------------------
-//
-inline CFbsBitmapDevice* CFepUiBaseCtrl::MaskBitmapDevice()
-    {
-    return iLayoutOwner->MaskBmpDevice();
-    }
  
-
 // ---------------------------------------------------------------------------
 // get control pointer down status
 // ---------------------------------------------------------------------------
@@ -263,14 +235,6 @@
     if(!aFlag)
         iPointerLeft = EFalse;
     }
-// ---------------------------------------------------------------------------
-// get control background maks bmp
-// ---------------------------------------------------------------------------
-//
-inline CFbsBitmap* CFepUiBaseCtrl::BkMaskBmp()
-    {
-    return iBkMaskBmp;
-    }
     
 // ---------------------------------------------------------------------------
 // get control background bmp
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbubblectrl.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutbubblectrl.h	Tue May 25 13:03:44 2010 +0300
@@ -93,6 +93,9 @@
     void UnFreeze( TBool aUpdate = ETrue );
     inline void SetTextColorIndex( TInt aTxtClrIndex );
     inline TInt TextColorIndex() const;
+
+    inline void SetLangCode( TInt aLangCode );
+
 protected:
     IMPORT_C CBubbleCtrl(const TRect& aRect,
                 CFepUiLayout* aUiLayout,
@@ -101,6 +104,9 @@
     IMPORT_C void ConstructL(TInt aBmpId, TInt aMaskId);
        
 private:
+    TRect GetRect();
+       
+private:
     CFbsBitmap* iForgroundBmp;
     CFbsBitmap* iForgroundBmpMask;
     
@@ -127,8 +133,32 @@
     TInt iTextColorIndex;    
     TSize iIconOffset;
     TSize iIconSize;
+	
+public:
+    IMPORT_C virtual void SetRect(const TRect& aRect);
+    void SetBmpDevice(CFbsBitGc* aGc,CFbsBitmapDevice* aDevice);
+    void CreateBmpDevL();
+    inline void SetOffset(TPoint& aPt);
+protected:    
+    IMPORT_C void HandleResourceChange(TInt aType);
+private:
+    
+        
+private:
+    CFbsBitmap* iBitmap;
+    CFbsBitmap* iMaskBitmap;
+    
+    TPoint iOffset;
+    TInt iReserved1;
+    
+    TInt iLangCode;
     };
-    
+
+inline void CBubbleCtrl::SetOffset(TPoint& aPt)
+    {
+    iOffset = aPt;
+    }
+
 inline void CBubbleCtrl::SetTextColorIndex( TInt aTxtClrIndex )
 	{
 	iTextColorIndex = aTxtClrIndex;	
@@ -150,6 +180,11 @@
     aText.Copy( *iText );
     }
 
+inline void CBubbleCtrl::SetLangCode( TInt aLangCode )
+    {
+    iLangCode = aLangCode;
+    }
+
 class CTooltipBubbleCtrl: public CBubbleCtrl
     {
 public: 
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutctrlgroup.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutctrlgroup.h	Tue May 25 13:03:44 2010 +0300
@@ -361,6 +361,10 @@
     
     void AdjustBkCtrlPos();
     
+    inline TBool NeedRedrawBg() const;
+    inline void SetNeedRedrawBg(TBool aNeedRedrawBg);    
+
+    
 protected:
     /**
     * Symbian second phrase constructor
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutctrlgroup.inl	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutctrlgroup.inl	Tue May 25 13:03:44 2010 +0300
@@ -29,4 +29,15 @@
     {
     return iPopCtrlList;
     }
+
+inline TBool CControlGroup::NeedRedrawBg() const
+    {
+    return iNeedRedrawBg;
+    }
+
+inline void CControlGroup::SetNeedRedrawBg(TBool aNeedRedrawBg)
+    {
+    iNeedRedrawBg = aNeedRedrawBg;
+    }
+
 //end of file    
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutcursor.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutcursor.h	Tue May 25 13:03:44 2010 +0300
@@ -237,6 +237,9 @@
     void UpdateCursorArea(const TRect& aRect, TBool aFlag);
     
     TInt OrderPosL();
+    void DrawCursor(CFbsBitGc* aGc,CFbsBitmapDevice* aDevice);    
+    void CreateCursorBmpL();
+    void ResizeCursorBmp();
 private:    // Data
 
     /** 
@@ -285,7 +288,7 @@
      * graphic context
      * Not own
      */    
-    CBitmapContext* iGc;
+    CFbsBitGc* iGc;
     
     /**
      * The timer to restore the cursor while pen is dragging.
@@ -294,6 +297,7 @@
     
     //flag tells whether the cursor is temprary disabled
     TBool iCursorTempDisabled;
+    CFbsBitmap* iBitmap; 
 friend class CFepUiLayoutRootCtrl;
     
     };
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutmultilineicf.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutmultilineicf.h	Tue May 25 13:03:44 2010 +0300
@@ -209,7 +209,8 @@
      * @return None
      */
     IMPORT_C void ShowTooltipL( const TDesC& aText,
-                                const TRect& aRect );
+                                const TRect& aRect, 
+                                TInt aLangCode = ELangTest );
     
 
     /**
@@ -397,7 +398,7 @@
     IMPORT_C void SetInfoBubbleCtrlSize(const TSize& aSize);
     
     // For addition of ITI features on FSQ
-    void ShowTooltipL( const TDesC& aText, const TRect& aRect );
+    void ShowTooltipL( const TDesC& aText, const TRect& aRect, TInt aLangCode = ELangTest );
     void HideTooltip();
     /**
      * Returen the auto-completion state
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutpopupwnd.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutpopupwnd.h	Tue May 25 13:03:44 2010 +0300
@@ -19,6 +19,7 @@
 #define C_CFEPLAYOUTPOPUPWND_H
 
 #include <peninputlayoutctrlgroup.h>
+#include <gdi.h>
 /**
  *  CButtonBase
  *
@@ -29,6 +30,34 @@
  */
 class CFepLayoutPopupWnd : public CControlGroup
     {
+private:
+    class CPopupWndExt : public CBase
+        {
+        public:
+            CFbsBitmap* BackupBitmap(){ return iBitmap;}
+            CFbsBitGc* BackupGc() { return iGc;}
+            CFbsBitmapDevice* BackupDevice() { return iBitmapDevice;}
+            void SetRect(const TRect& aRect);
+            TRect Rect() { return iRect;}
+            
+            static CPopupWndExt* NewL();
+            void ContructBkDeviceL(const TSize& aSize,const TDisplayMode& aMode);
+
+            ~CPopupWndExt() 
+                {
+                delete iBitmapDevice;
+                delete iGc;
+                delete iBitmap;
+                }
+        private:
+            void ResizeBackupDeviceL(const TSize& s);
+        private:
+            CFbsBitmap* iBitmap;
+            CFbsBitGc* iGc;
+            CFbsBitmapDevice* iBitmapDevice;
+            TRect iRect;
+
+        };
 public: 
     enum TDisplayPosition
         {
@@ -96,6 +125,7 @@
     IMPORT_C virtual void OnDeActivate();
     
     IMPORT_C void ReDrawRect(const TRect& aRect);
+    IMPORT_C void HandleResourceChange(TInt aType);
 protected:
 	
     /**
@@ -130,6 +160,8 @@
      * @since S60 V4.0        
      */           	
 	IMPORT_C virtual void OnDisplay(); 
+	void DisableDrawingInGroup();
+	void EnableDrawingInGroup();
 private:    
 	/*
 	 * Flag tells whether the pop up window is shown
@@ -164,7 +196,7 @@
     /**
      * Reserved item2
      */
-     TInt iReserved2;	       	 
+     CPopupWndExt* iExt;
     };
 
 #endif //C_CFEPLAYOUTPOPUPWND_H
\ No newline at end of file
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvirtualkeyctrl.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvirtualkeyctrl.h	Tue May 25 13:03:44 2010 +0300
@@ -174,7 +174,7 @@
      *
      * @since S60 V5.0     
      */            
-    void DrawKeyText();
+    void DrawKeyText(CFbsBitGc* aGc);
     
     /**
      * Redraw and update the key
@@ -197,6 +197,10 @@
                     const CFbsBitmap* aBmp,CFbsBitmap* aMask,
                     TBool aInvertFlag = EFalse);
 
+    void DrawBmp(CFbsBitGc* aGc, const TRect& aDestRect,const TRect& aSourceRect,
+                                      const CFbsBitmap* aBmp,CFbsBitmap* aMask,
+                                      TBool aInvertFlag = EFalse);
+
     /**
      * Get the control event for given internal event type
      *
@@ -231,7 +235,13 @@
     
     TVirtualKeyDrawInfo iVirtualKeyDrawInfo;     
     
-friend class CVirtualKeyboard;    
+protected:
+    void UpdateChangedArea(TBool aFlag);    
+private:    
+    CFbsBitGc* GetGc();
+    TRect GetRect(); 
+    
+    friend class CVirtualKeyboard;    
     };
     
 inline CVirtualKeyboard* CVirtualKeyCtrl::Keyboard()
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.h	Tue May 25 13:03:44 2010 +0300
@@ -136,6 +136,42 @@
         };
     };    
 
+class CFepUiKeyboardExt : public CBase
+    {
+public:
+    ~CFepUiKeyboardExt()
+        {
+        delete iBitmap;
+        delete iHighlightDev;
+        delete iHighlightGc;
+
+        delete iHighlightKeyBmp;
+        delete iNormalKeyBmp;
+        delete iDimmedKeyBmp;
+        delete iNormalKeyDev;
+        delete iHighlightKeyDev;
+        delete iDimmedKeyDev;
+        delete iKeyGc;
+        }
+private:
+    void CreateBmpDevL(const TDisplayMode &aMode);
+private:
+    CFbsBitmap* iBitmap;
+    CFbsBitmapDevice* iHighlightDev;
+    CFbsBitGc* iHighlightGc;
+    
+    CFbsBitmap* iHighlightKeyBmp;
+    CFbsBitmap* iNormalKeyBmp;
+    CFbsBitmap* iDimmedKeyBmp;
+
+    CFbsBitmapDevice* iNormalKeyDev;
+    CFbsBitmapDevice* iHighlightKeyDev;
+    CFbsBitmapDevice* iDimmedKeyDev;
+    CFbsBitGc* iKeyGc;
+    
+friend class CVirtualKeyboard;   
+    };
+
 //class CVirtualKeyboard
 /**
  *  CVirtualKeyboard
@@ -814,12 +850,7 @@
      * Item text display color.
      */
     TRgb  iFontColor;
-    
-    /**
-     * Reserve item
-     */    
-    TInt iReserver1;
-    
+        
     TAknsItemID iKeyNormalSkinId;
     TAknsItemID iKeyHighlightSkinId;
     TAknsItemID iKeyDimSkinId;
@@ -866,13 +897,45 @@
      * The shift icon showing on the key
      */      
     CPenInputColorIcon* iShiftIcon;
-    
+	
 	/**
      * The star icon showing on the key
      */      
     CPenInputColorIcon* iStarIcon;
+	
+    MPeninputVkbPreviewBubbleRenderer* iPreviewBubbleRenderer;
+	
+    /**
+     * Reserve item
+     */    
+    CFepUiKeyboardExt* iExt;
+
+
+protected:
+    //void HandleResourceChange(TInt aType);
+    virtual IMPORT_C void HandleResourceChange(TInt aType);
+private: 
+    void CreateBmpDevL();
+    CFbsBitmap* Bitmap() { return iExt->iBitmap;}
+    CFbsBitmapDevice* HighlightDev() { return iExt->iHighlightDev;}
+    CFbsBitGc* HighlightGc() { return iExt->iHighlightGc;}
+    CFbsBitmap* NormalKeyBmp() { return iExt->iNormalKeyBmp;}
+    CFbsBitmap* HighightKeyBmp() { return iExt->iHighlightKeyBmp;}
+    CFbsBitmap* DimmedKeyBmp() { return iExt->iDimmedKeyBmp;}
     
-    MPeninputVkbPreviewBubbleRenderer* iPreviewBubbleRenderer;
+    CFbsBitmapDevice* HighlightKeyDev() { return iExt->iHighlightKeyDev;}
+    CFbsBitmapDevice* NormalKeyDev() { return iExt->iNormalKeyDev;}
+    CFbsBitmapDevice* DimmedKeyDev() { return iExt->iDimmedKeyDev;}
+    CFbsBitGc* KeyGc() { return iExt->iKeyGc;}
+    
+
+    CFbsBitmap* PrepareMaskBmpL(CFbsBitGc* aGc, const TDisplayMode& aMode, const TRect& aRect);
+    CFbsBitmap* PrepareKeyBmpL(CFbsBitGc* aGc, const TDisplayMode& aMode, const TRect& aRect,
+            const TRect& aInnerRect,const TAknsItemID& aFrameID, const TAknsItemID& aCenterID, const TRect& aKeyRect);
+    
+    TBool PrepareKeyBmp(CFbsBitmap* aBmp,CFbsBitmapDevice* aDev,const TRect& aRect, 
+            const TRect& aInnerRect,const TAknsItemID& aFrameID, const TAknsItemID& aCenterID,const TRect& aKeyRect);
+
 friend class CVirtualKeyCtrl;
 friend class CVirtualRawKeyCtrl;
 //friend class CVirtualKey;    
--- a/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.inl	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/peninputlayoutcontrolinc/peninputlayoutvkb.inl	Tue May 25 13:03:44 2010 +0300
@@ -180,7 +180,7 @@
     
 inline void CVirtualKeyboard::SetDrawOpaqueBackground(TBool aNeedDraw)
     {
-    iNeedDrawBackground = aNeedDraw;
+	SetNeedRedrawBg(aNeedDraw);
     }
 
 inline CPenInputColorIcon* CVirtualKeyboard::ShiftIcon()
--- a/textinput/peninputarc/inc/pensrvcliinc/peninputclientimpl.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/pensrvcliinc/peninputclientimpl.h	Tue May 25 13:03:44 2010 +0300
@@ -32,29 +32,6 @@
 class MPenUiActivationHandler;
 class CPenUiBackgroundWnd;
 	  
-NONSHARABLE_CLASS(CPeninputServerWaiter) : public CBase
-    {
-    public:
-        static CPeninputServerWaiter* NewL();    
-        void Start();
-        void Stop(TInt aFlag);
-        TBool IsStarted() 
-            {
-             return iWaitScheduler->IsStarted();
-            }
-        TInt Error() 
-            {
-             return iError;
-            }
-        ~CPeninputServerWaiter();
-    protected:
-    private:
-        //CPeninputServerWaiter();
-        void ConstructL();       
-        TInt iError;
-        CActiveSchedulerWait* iWaitScheduler;                         
-    };
-
 NONSHARABLE_CLASS(TUiNotificationHandler)
     {
     public:
@@ -426,7 +403,7 @@
     void UpdateAppInfo(const TDesC& aInfo, TPeninputAppInfo aType);    
     
     void HandleServerExit();
-    void OnServerReady(TBool aFlag = ETrue);
+    //void OnServerReady(TBool aFlag = ETrue);
     TBool IsForegroundSession();
     //void SetForegroundFlag(TBool aFlag);
     void FinalClose();    
@@ -540,9 +517,6 @@
         
     TBool iLaunchServer;
     
-    //CActiveSchedulerWait* iWaitScheduler;
-    CPeninputServerWaiter * iWaitScheduler;
-    
     TInt iCurPenUiType;    
     
     CPenUiBackgroundWnd* iBackgroundCtrl;
--- a/textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h	Tue May 25 13:03:44 2010 +0300
@@ -18,8 +18,48 @@
 #define __PEN_UI_WINDOW_CONTROL__
 
 #include <coecntrl.h>
+#include <AknIconUtils.h>
+#include <AknsUtils.h>
+#include <AknsDrawUtils.h> 
+
+#ifndef FIX_FOR_NGA
+#define FIX_FOR_NGA
+#endif
+
 class RAknUiServer;
 class CPenUiWndCtrl;
+class CPenUiHwnWnd;
+
+struct TCommonBgCtrlSubItem
+    {
+    TRect iRect;    
+    TAknsItemID iFrameID;
+    TAknsItemID iCenterID;
+    TBool iIsShow;      
+    };
+class CPenUiWndCtrl;
+
+class CCursorWindow : public CCoeControl
+    {
+public: // Functions from base classes.
+
+    CCursorWindow(CPenUiWndCtrl* aParent);
+    //void ConstructL(CCoeControl* aParent);
+    /**
+     * From CCoeControl    
+     * Function where control's drawing is done.
+     *
+     * @param aRect Control's area.
+     */
+    void Draw( const TRect &aRect ) const;
+    
+    void SetCursorVisible(TBool aFlag);
+
+private:
+    TBool iCursorVisible;
+    CPenUiWndCtrl* iParent;
+    };
+	
 class CPenUiPopWnd : public CCoeControl
     {
 public: // Constructors and destructor
@@ -153,6 +193,14 @@
     void DimPenUiForMenu();
     TInt GetWndPriority();
     void SetResourceChange(TBool aResourceChange);
+    void UpdateCursor(TBool aOnFlag,const CFbsBitmap* aCursorBmp,const TRect& aPos);
+    void SetPopupArea(const TRect& aRect, TBool aFlag);
+    void UpdateICFArea(const CFbsBitmap* aBmp,const TPoint& aPos);
+    void UpdateChangedArea(const CFbsBitmap* aBmp,const TRect& aRect,TBool aFlag);
+    void UpdateBubble(const CFbsBitmap* aBmp,const CFbsBitmap* aMaskBmp,const TRect& aPos,TBool aFlag);
+    void Clean();
+    
+    void HandleNGASpecificSignal(TInt aEventType, const TDesC& aEventData);
 public: // Functions from base classes.
 
     /**
@@ -168,7 +216,11 @@
      * Auto refresh timer callback, refresh pen ui. (for NGA)
      */
     void RefreshUI();
-    
+
+protected:
+    CCoeControl* ComponentControl(TInt) const;
+    TInt CountComponentControls() const;
+	    
 private:
 
     /**
@@ -213,6 +265,11 @@
      */
     void StopRefreshTimer();
     
+    void DrawBkground(CWindowGc& aGc,const TRect& aRect) const;
+    void DrawFrame( CWindowGc& aGc,const TRect& aRect,TAknsItemID aFrameID,TAknsItemID aCenterID ) const;
+    
+    void DrawCursor(CWindowGc& aGc) const;
+    void DrawBubbleAsBackground(CFbsBitGc* aGc, CFbsBitmap* aBmp, const TRect& aRect);
 
 private: // Data
     RWindowGroup& iWndGroup;
@@ -238,13 +295,46 @@
     //TBool iUiLayoutChange;
     TBool iInGlobalEditorState;
     TRect iLayoutClipRect;
+
+    CFbsBitmap * iCursorBmp;
+    CFbsBitmap* iICFBmp;
+    CFbsBitmap* iChangedBmp;
+    RPointerArray<CFbsBitmap> iBubblesArea;
+    RPointerArray<CFbsBitmap> iBubblesMaskArea;
+    RArray<TRect> iBubblesPos;
+    
+    TPoint iCursorPos;
+    TPoint iIcfPos;
+    TPoint iChangedPos;
+    TRect iIcfRect;
+    TRect iCursorRect;
+    CIdle *iIdle;
+    TRect iRedrawRect;
+    TInt iTouchCount;
+    
+    TBool iCursorVisible;
+    
+    RRegion iPopRegion;
+
+    TBool iBackground;
+    TAknsItemID iFrameID;
+    TAknsItemID iCenterID;
     
     /**
      * Auto refresh timer
      * own
      */
     CPeriodic* iAutoRefreshTimer;
+
+    /**
+     * The sub items of the background 
+     */
+    RArray<TCommonBgCtrlSubItem> *iSubItems; //not own
     
+    TBool iNotUpdating;
+    CCursorWindow* iCursorWnd;
+    
+friend class CCursorWindow;
     };
 class CInternalBkCtrl : public CCoeControl
     {
--- a/textinput/peninputarc/src/peninputanim/peninputanim.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputanim/peninputanim.cpp	Tue May 25 13:03:44 2010 +0300
@@ -44,7 +44,7 @@
 //CONSTANT
 const TInt KMsgSlot1 = 1;	//msg slot 2 in IPC
 const TInt KMsgSlot2 = 2; 	//msg slot 2 in IPC
-const TInt KFlushTimerPeriod = 1000;		//1/1000 second
+const TInt KFlushTimerPeriod = 1000 * 10;		//1/100 second
 const TInt KResponseQueueWaitTime = 100000;		//1/10 second
 
 // ======== GLOBAL FUNCTIONS ========
--- a/textinput/peninputarc/src/peninputclient/penclientimpl.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputclient/penclientimpl.cpp	Tue May 25 13:03:44 2010 +0300
@@ -77,40 +77,6 @@
     }
     
     
-   
-CPeninputServerWaiter* CPeninputServerWaiter::NewL()
-    {
-    CPeninputServerWaiter* self = new(ELeave)CPeninputServerWaiter;
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-void CPeninputServerWaiter::ConstructL()    
-    {
-    iWaitScheduler = new(ELeave) CActiveSchedulerWait;
-    }
-    
-CPeninputServerWaiter::~CPeninputServerWaiter()
-    {
-    delete iWaitScheduler;
-    }
-    
-void CPeninputServerWaiter::Start()
-    {
-    iWaitScheduler->Start();
-    }
-    
-void CPeninputServerWaiter::Stop(TInt aFlag)
-    {
-    //if(aFlag)
-    iError = aFlag ? KErrNone : aFlag;
-    
-    iWaitScheduler->AsyncStop();
-    }
-    
-    
-    
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
@@ -152,7 +118,6 @@
     iServerExit = EFalse;
     iLaunchServer = EFalse;
     iCurPenUiType = -1; 
-    iWaitScheduler = NULL; 
     iAppPrefferedUiMode = EPluginInputModeNone;
     iAutoOpenFlag = ETrue;
     iBackgroundCtrl = 0;
@@ -1010,15 +975,15 @@
     iSingletonServer->SendReceive(EPeninputRequestAddUiObserver,arg);        
     
     }
-  */  
+  */
+/*
 void RPeninputServerImpl::OnServerReady( TBool aFlag)    
-    {
+   {
     //iLaunchServer = EFalse;
     
-    iWaitScheduler->Stop(aFlag);//AsyncStop();
     //if(iPenUiNotificationHandler)
       // DoAddPenUiActivationHandler(); 
-    }
+    }*/
 // ---------------------------------------------------------------------------
 // RPeninputServerImpl::AddPenUiActivationHandler
 // Add an UI activate/deactivation handler
@@ -1097,8 +1062,6 @@
     {
     delete iBackgroundCtrl;  
       
-    delete iWaitScheduler;
-    iWaitScheduler = 0;
     iPenUiNotificationHandler.Close();
     delete iObserver;
     iObserver = NULL;
@@ -1299,7 +1262,7 @@
             {
             exitReason = srvThread.ExitReason();        
             srvThread.Close();
-            iPeninputServer->OnServerReady(-1000);
+            //iPeninputServer->OnServerReady(-1000);
             }
         if(err != KErrNone || exitReason != 0) //server has exited
             {
@@ -1312,7 +1275,7 @@
 
     if(iStatus.Int() == ESignalServerReady) //server has started
         {
-        iPeninputServer->OnServerReady();
+        //iPeninputServer->OnServerReady();
         return;
         }
     //if there is also iUiActivationHandler, handle it first
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbasecontrol.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbasecontrol.cpp	Tue May 25 13:03:44 2010 +0300
@@ -322,7 +322,7 @@
 //    	
 EXPORT_C void CFepUiBaseCtrl::DrawMaskBackground(TBool aBmpStretchFlag)
 	{
-	DrawBackgroundToDevice(iRect,MaskBitmapDevice(), iBkMaskBmp, iMaskBkCol,
+	DrawBackgroundToDevice(iRect,MaskBitmapDevice(), BkMaskBmp(), iMaskBkCol,
 	                       iBorderColor,aBmpStretchFlag);
 	}
 
@@ -335,7 +335,7 @@
 EXPORT_C void CFepUiBaseCtrl::DrawOpaqueMaskBackground(TBool aBmpStretchFlag)
 	{
 	const TRgb KOpaqueMask = TRgb(KOpaqueColor);
-	DrawBackgroundToDevice(iRect,MaskBitmapDevice(), iBkMaskBmp, KOpaqueMask,
+	DrawBackgroundToDevice(iRect,MaskBitmapDevice(), BkMaskBmp(), KOpaqueMask,
 	                       KOpaqueMask,aBmpStretchFlag);
 	}
 
@@ -348,7 +348,7 @@
 EXPORT_C void CFepUiBaseCtrl::DrawOpaqueMaskBackground(const TRect aRect, TBool aBmpStretchFlag)
 	{
 	const TRgb KOpaqueMask = TRgb(KOpaqueColor);
-	DrawBackgroundToDevice(aRect, MaskBitmapDevice(), iBkMaskBmp,
+	DrawBackgroundToDevice(aRect, MaskBitmapDevice(), BkMaskBmp(),
 	                       KOpaqueMask, KOpaqueMask, aBmpStretchFlag);
 	}
 
@@ -362,7 +362,7 @@
                                                             TBool aBmpStretchFlag)
 	{
 	const TRgb KOpaqueMask = TRgb(KTransparentColor);
-	DrawBackgroundToDevice(aRect, MaskBitmapDevice(), iBkMaskBmp, KTransparentColor,
+	DrawBackgroundToDevice(aRect, MaskBitmapDevice(), BkMaskBmp(), KTransparentColor,
 	                       KTransparentColor, aBmpStretchFlag);
 	}
 	
@@ -698,7 +698,8 @@
     }
 
 TBool CFepUiBaseCtrl::IsOnTopOf(CFepUiBaseCtrl* aCtrl)
-    {           
+    {     
+    __ASSERT_DEBUG(aCtrl,EUiNullParam);      
     return OrderPos() < aCtrl->OrderPos();
     }
     
@@ -1257,7 +1258,9 @@
 
 EXPORT_C TBool CFepUiBaseCtrl::AbleToDraw()
 	{
-    return UiLayout()->LayoutReady() && Ready() && !WholeHiden() && Rect().Size() != TSize(0,0);
+    return UiLayout()->LayoutReady() && Ready()  
+            && (!UiLayout()->iExtension->iDisableDrawing)
+                    && !WholeHiden() && Rect().Size() != TSize(0,0);
 	}
 
 // ---------------------------------------------------------------------------
@@ -1265,8 +1268,12 @@
 // ---------------------------------------------------------------------------
 //    
 EXPORT_C TInt CFepUiBaseCtrl::Extension_(TUint aExtensionId, TAny *&a0, TAny *a1)
-    {
-    //not implemented, use CBase's
+    {    
+    if( KFepCtrlExtId == aExtensionId)
+        {
+        a0 = iExtension;
+        return KErrNone;
+        }
     return CBase::Extension_(aExtensionId, a0, a1);
     }
     
@@ -1348,7 +1355,11 @@
 
 EXPORT_C void CFepUiBaseCtrl::SetParent(CFepUiBaseCtrl* aParent)
     {
-    //parent control must be type of control group.    
+    //parent control must be type of control group.
+    if(aParent)
+        {
+        __ASSERT_DEBUG(aParent->IsKindOfControl(ECtrlControlGroup),EUiLayoutBadParentType);
+        } 
     iParentCtrl = aParent;
     }
 
@@ -1365,6 +1376,100 @@
     return order;    
     }
 
+void CFepUiBaseCtrl::CreateOwnDeviceL(CFbsBitmap* aBmp, CFbsBitmap* aMaskBmp)
+    {
+    if(iExtension->iBitmap)
+        return;
+    User::LeaveIfError( aBmp->Create( Rect().Size(), iLayoutOwner->BitmapDevice()->DisplayMode() ) );
+    
+    iExtension->iBitmap = aBmp;
+    CFbsBitmapDevice* dev = CFbsBitmapDevice::NewL(aBmp);
+    
+    iExtension->SetBmpDevice(dev); 
+
+    CFbsBitGc* gc = CFbsBitGc::NewL();
+    gc->Reset();
+    iExtension->SetGc(gc);
+    
+    if(iExtension->iMaskBitmap || !aMaskBmp)
+        return;
+    
+    User::LeaveIfError( aMaskBmp->Create( Rect().Size(), iLayoutOwner->MaskBmpDevice()->DisplayMode() ) );
+    
+    iExtension->iMaskBitmap = aMaskBmp;
+    dev = CFbsBitmapDevice::NewL(aMaskBmp);
+    
+    iExtension->SetMaskBmpDevice(dev); 
+        
+    }
+    
+void CFepUiBaseCtrl::ResizeDeviceL()
+    {
+    if(iExtension->BitmapDevice())
+        iExtension->BitmapDevice()->Resize( Rect().Size());
+    //gc must be adjusted
+    if(iExtension->Gc())
+        {
+        iExtension->Gc()->Activate(iExtension->BitmapDevice());
+        iExtension->Gc()->Resized();
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// get graphics context for sprite or window
+// ---------------------------------------------------------------------------
+//   
+EXPORT_C CBitmapContext* CFepUiBaseCtrl::BitGc()
+    {
+
+
+    if(iUiLayout->NotDrawToLayoutDevice() && iExtension->Gc())
+        return iExtension->Gc();
+    else
+	    return iLayoutOwner->BitmapContext();
+    }
+
+// ---------------------------------------------------------------------------
+// get Bitmap device for sprite or window
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFbsBitmapDevice* CFepUiBaseCtrl::BitmapDevice()
+    {
+
+
+    if(iUiLayout->NotDrawToLayoutDevice() && iExtension->BitmapDevice())
+        return iExtension->BitmapDevice();
+    else   
+        return iLayoutOwner->BitmapDevice();
+    }
+
+// ---------------------------------------------------------------------------
+// get Mask bitmap device for sprite or window
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFbsBitmapDevice* CFepUiBaseCtrl::MaskBitmapDevice()
+    {
+
+    if(iUiLayout->NotDrawToLayoutDevice() && iExtension->MaskBitmapDevice())
+        return iExtension->MaskBitmapDevice();
+    else    
+
+        return iLayoutOwner->MaskBmpDevice();
+    }
+
+// ---------------------------------------------------------------------------
+// get control background maks bmp
+// ---------------------------------------------------------------------------
+//
+EXPORT_C  CFbsBitmap* CFepUiBaseCtrl::BkMaskBmp()
+    {
+    if(iUiLayout->NotDrawToLayoutDevice() && iExtension->MaskBitmap())
+        return iExtension->MaskBitmap();
+    else 
+        return iBkMaskBmp;
+    }
+
+
 // ---------------------------------------------------------------------------
 // CFepUiBaseCtrl::EnableExtResponseArea
 // Enable/disable extra response area support
@@ -1452,6 +1557,14 @@
     iExtResponseAreaMargin.SetRect( TPoint(0,0), TSize(0,0) );
 	}
 
+CFepUiBaseCtrl::CFepUiBaseCtrlExtension::~CFepUiBaseCtrlExtension()
+    {
+    //delete iBitmap;
+    delete iGc;
+    delete  iBitmapDevice;
+    delete iMaskBitmapDevice;
+    }
+	
 void CFepUiBaseCtrl::CFepUiBaseCtrlExtension::SetTactileFeedbackType(TInt aTactileType)
 	{
 #ifdef RD_TACTILE_FEEDBACK
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp	Tue May 25 13:03:44 2010 +0300
@@ -20,10 +20,13 @@
 #include <AknsUtils.h>
 #include <AknUtils.h>
 #include <AknsDrawUtils.h> 
+#include <AknBidiTextUtils.h>
 
 #include "peninputlayoutbubblectrl.h"
 #include "peninputlayout.h"
 #include <peninputpluginutils.h>
+#include <imageconversion.h> 
+#include "peninputcmd.h"
 
 const TInt KShrinkSize = 10;
 const TInt KDefaultTextColorIndex = EAknsCIQsnTextColorsCG60;
@@ -75,7 +78,9 @@
 		{
 		delete iForgroundBmpMask;
 		iForgroundBmpMask = NULL;
-		}    
+		}   
+	delete iBitmap;
+	delete iMaskBitmap; 
     }
 
 EXPORT_C void CBubbleCtrl::SetBitmapParam(CFbsBitmap* aBmpId,
@@ -105,7 +110,21 @@
     if(iFreeze)
         {
         iShowing = ETrue;              
-        SetHidenFlag(EFalse);        
+        SetHidenFlag(EFalse);   
+        if(UiLayout()->NotDrawToLayoutDevice())
+            {
+            struct SData
+                {
+                TRect rr;
+                TBool flag;
+                } data;
+            data.rr = aRect;
+            data.flag = ETrue;
+            TPtrC ptr;
+            ptr.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));
+        
+            UiLayout()->SignalOwner(ESignalPopupArea,ptr);
+            }     
         return;
         }
     if(!iShowing || aRect != Rect() || iNeedRedraw)
@@ -117,12 +136,107 @@
         BringToTop();
         //redraw the control under bubble control
         if(aRect != rect)        
-            RootControl()->ReDrawRect(rect);    
+            {
+            // signal the server to remove the pop area added before since the rect 
+			// has been changed
+		    if(UiLayout()->NotDrawToLayoutDevice())
+		        {
+		        struct SData
+		            {
+		            TRect rr;
+		            TBool flag;
+		            } data;
+            
+		        data.rr = rect;
+		        data.flag = EFalse;
+		        TPtrC ptr;
+        
+		        ptr.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));
+		        UiLayout()->SignalOwner(ESignalPopupArea,ptr);
+		        }
+		    else
+			    {
+				//redraw the control under bubble control
+				RootControl()->ReDrawRect(rect); 
+				}
+            }
+		
+        // signal server to add the pop area		
+        if(UiLayout()->NotDrawToLayoutDevice())
+            {
+            struct SData
+                {
+                TRect rr;
+                TBool flag;
+                } data;
+                
+            data.rr = aRect;
+            data.flag = ETrue;
+            TPtrC ptr;
+            ptr.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));
+    
+            UiLayout()->SignalOwner(ESignalPopupArea,ptr);
+            }
+        
+		// signal server to copy the background as background bitmap for its own bitmap
+        if(UiLayout()->NotDrawToLayoutDevice())
+            {
+            //copy backgroud to bitmap. DrawFrame seems to have transparent effect, 
+            //so we need copy the background first.  
+            if(!iBitmap)
+                {
+                TRAP_IGNORE(CreateBmpDevL());
+                }
+        
+            CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
+            gc->Activate( BitmapDevice() ); 
+            CFbsBitGc* layoutGc = static_cast<CFbsBitGc*>(
+                                UiLayout()->LayoutOwner()->BitmapContext()); 
+            gc->BitBlt(TPoint(0,0),*layoutGc,Rect());
+            
+            //ensure other pop up draws correctly on the background
+            struct SData
+                {
+                CFbsBitGc* gc;
+                CFbsBitmap* bmp;
+                TRect rect;
+                } data;
+            
+            data.gc = gc;
+            data.bmp = iBitmap;
+            data.rect = Rect();
+            TPtrC ptr;
+            ptr.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));
+            
+            UiLayout()->SignalOwner(ESignalDrawBackground,ptr);
+            }
 
         Draw();
         
-        rect.BoundingRect(aRect);
-        UpdateAreaImmed(rect,ETrue);     
+		// notify sever to draw the bubble bitmap on the screen
+        if(UiLayout()->NotDrawToLayoutDevice())
+            {
+            struct SData
+                {
+                TBool flag;
+                TRect pos;
+                CFbsBitmap* bmp;
+                CFbsBitmap* mask;
+                } data;
+                
+            data.flag = ETrue;
+            data.pos = Rect();
+            data.bmp = iBitmap;
+            data.mask = iMaskBitmap;
+            TPtrC ptr;
+            ptr.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));            
+            UiLayout()->SignalOwner(ESignalUpdateBubble,ptr);
+            }
+        else
+            {
+            rect.BoundingRect(aRect);
+            UpdateAreaImmed(rect,ETrue);     
+            }   
         
         iNeedRedraw = EFalse;
         }
@@ -154,8 +268,23 @@
 EXPORT_C void CBubbleCtrl::Close()
     {
     TRect rect = Rect();
-    
-    iShowing = EFalse;  
+    if(UiLayout()->NotDrawToLayoutDevice())
+	{
+	SetHidenFlag(ETrue);
+    struct SData
+        {
+        TRect rr;
+        TBool flag;
+        } data;
+    data.rr = rect;
+    data.flag = EFalse;
+    TPtrC ptr;
+    ptr.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));
+
+    UiLayout()->SignalOwner(ESignalPopupArea,ptr);
+	}
+
+    iShowing = EFalse;   
     
     if( iFreeze )
         {
@@ -170,12 +299,34 @@
         }
     else
         {
-        Clear();
-        SetHidenFlag(ETrue);    
-        BringToBack();
-
-        RootControl()->ReDrawRect(rect);
-        UpdateAreaImmed(rect); 
+        if(UiLayout()->NotDrawToLayoutDevice())
+            {
+            struct SData
+                {
+                TBool flag;
+                TRect pos;
+                CFbsBitmap* bmp;
+                } data;
+                
+            data.flag = EFalse;
+            data.pos = Rect();
+            data.bmp = iBitmap;
+            
+            TPtrC ptr;
+            ptr.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));
+            UiLayout()->SignalOwner(ESignalUpdateBubble,ptr);
+            
+            }
+        else
+            {
+        
+            Clear();
+            SetHidenFlag(ETrue);    
+            BringToBack();
+    
+            RootControl()->ReDrawRect(rect);
+            UpdateAreaImmed(rect);
+            }        
         }
     }
 
@@ -204,13 +355,17 @@
 	    {
 	    return;
 	    }
-    
+    if(UiLayout()->NotDrawToLayoutDevice() && !iBitmap)
+        {
+        TRAP_IGNORE(CreateBmpDevL());
+        }
+		
     CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
     
     //mask bitmaps
   	DrawOpaqueMaskBackground();  
   	
-    TRect rect = Rect();        
+    TRect rect = GetRect();          
     TRect innerRect = rect;
     
     if ( ( iLeftDiff == 0 ) && ( iTopDiff == 0 )
@@ -298,14 +453,35 @@
         {
         gc->SetBrushStyle( CGraphicsContext::ENullBrush );
         TAknLayoutText textLayout;
-        textLayout.LayoutText(Rect(), iTextFormat);
+        textLayout.LayoutText(GetRect(), iTextFormat);
         TRgb color( KRgbBlack );  // sane default for nonskinned case
 	    if ( AknsUtils::AvkonSkinEnabled() )
 	        {
 	        AknsUtils::GetCachedColor( UiLayout()->SkinInstance(),
 	                               color, KAknsIIDQsnTextColors, iTextColorIndex );
 	        }
-	     textLayout.DrawText(*gc, *iText, ETrue, color);
+         if ( iLangCode == ELangArabic ||
+              iLangCode == ELangHebrew ||
+              iLangCode == ELangFarsi  ||
+              iLangCode == ELangUrdu )
+             {
+              const CFont* font = textLayout.Font();
+              HBufC* visualBuf = HBufC::New( iText->Length() + KAknBidiExtraSpacePerLine );
+              *visualBuf = *iText;
+              TPtr buf = visualBuf->Des();
+
+              AknBidiTextUtils::ConvertToVisualAndClip(*iText, buf, *font,
+                                          textLayout.TextRect().Size().iWidth,
+                                          textLayout.TextRect().Size().iWidth,
+                                          AknBidiTextUtils::ERightToLeft );
+              textLayout.DrawText(*gc, buf, EFalse, color);
+              delete visualBuf;
+              visualBuf = NULL;
+             }
+         else
+             {
+             textLayout.DrawText(*gc, *iText, EFalse, color);
+             }
         }
     }
            	
@@ -363,6 +539,55 @@
     iInvalidRect = TRect();
     }
 
+TRect CBubbleCtrl::GetRect()
+    {
+    TRect r(Rect());
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        r.Move(-Rect().iTl.iX, -Rect().iTl.iY);
+        }
+    return r;
+    }
+
+
+void CBubbleCtrl::SetBmpDevice(CFbsBitGc* aGc,CFbsBitmapDevice* aDevice)
+    {
+    TAny* extension;
+   
+    if(KErrNone == Extension_(KFepCtrlExtId,extension,0))
+        {
+        static_cast<CFepUiBaseCtrl::CFepUiBaseCtrlExtension*>(extension)->SetGc(aGc);
+        static_cast<CFepUiBaseCtrl::CFepUiBaseCtrlExtension*>(extension)->SetBmpDevice(aDevice);
+        }
+    }
+void CBubbleCtrl::CreateBmpDevL()
+    {
+    iBitmap = new ( ELeave ) CFbsBitmap;   
+    //iMaskBitmap = new ( ELeave ) CFbsBitmap;
+    CreateOwnDeviceL(iBitmap,0);
+    }
+
+EXPORT_C void CBubbleCtrl::HandleResourceChange(TInt aType)
+    {
+    if(aType == KPenInputOwnDeviceChange)
+        {
+        if(UiLayout()->NotDrawToLayoutDevice() && !iBitmap)
+            {
+            TRAP_IGNORE(CreateBmpDevL());
+            }
+        }
+    else
+        CFepUiBaseCtrl::HandleResourceChange(aType);
+    }
+
+EXPORT_C void CBubbleCtrl::SetRect(const TRect& aRect)
+    {
+    if(aRect == Rect())
+        return;
+    CFepUiBaseCtrl::SetRect(aRect);
+    ResizeDeviceL();
+    }
+
 // ---------------------------------------------------------------------------
 // CTooltipBubbleCtrl::NewL
 // factory function
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbutton.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbutton.cpp	Tue May 25 13:03:44 2010 +0300
@@ -358,6 +358,8 @@
 //
 EXPORT_C void CButtonBase::SetDimmed(TBool aDimFlag)
     {
+    if(iDimmed == aDimFlag)
+        return;
     //Remove its active flag if dim an active button.
     if(aDimFlag && IsActive())
         SetActive(EFalse);
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutcursor.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutcursor.cpp	Tue May 25 13:03:44 2010 +0300
@@ -21,6 +21,8 @@
 #include "peninputlayouteditareabase.h"
 #include "peninputlayouttimer.h"
 #include "peninputlayoutrootctrl.h"
+#include "peninputcmd.h"
+#include "peninputlayout.h"
 
 const TInt KDefaultCursorHeight = 10;
 // ============================ MEMBER FUNCTIONS =============================
@@ -54,6 +56,7 @@
     CFepUiBaseCtrl::BaseConstructL();
     iCursorBlinkingTimer = CPeriodic::NewL(CActive::EPriorityStandard);
     iRestoreCursorTimer = CLayoutTimer::NewL(this,CLayoutTimer::EOthers);
+    CreateCursorBmpL();
     }
 
 // ---------------------------------------------------------------------------
@@ -84,6 +87,9 @@
         }    
    
     delete iRestoreCursorTimer;
+    delete iBitmap;
+    delete iBitmapDevice;
+    delete iGc;
     }
 
 
@@ -215,10 +221,35 @@
     if(aReset)
         iIsVisible = EFalse;
     Draw();
-    UpdateArea(iCursorRect,EFalse);
+    //UpdateArea(iCursorRect,EFalse);
+    UpdateCursorArea(iCursorRect,EFalse);
     }
     
+void CFepUiCursor::DrawCursor(CFbsBitGc* aGc,CFbsBitmapDevice* aDevice)
+    {
+    aGc->Activate(aDevice);    
+   
+   // draw cursor by inverting colors in the selected text rectancle
+    //aGc->SetClippingRegion(ValidClipRegion());                   
+    
+    aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+    aGc->SetBrushColor(KRgbBlack);
+    //aGc->SetDrawMode(CGraphicsContext::EDrawModeNOTSCREEN);
+    aGc->Clear();
+    aGc->SetPenColor(KRgbBlack);
+    aGc->SetPenStyle(CGraphicsContext::ESolidPen);
+    aGc->SetPenSize( TSize(1,1));
 
+    // When the blink timer out and cursor is visible, do nothing
+    // else draw the cursor and set the visible flag
+    //aGc->DrawRect(iCursorRect);
+    //iIsVisible = !iIsVisible;
+
+    // restore normal draw mode
+    aGc->SetDrawMode(CGraphicsContext::EDrawModePEN);
+    aGc->SetBrushStyle(CGraphicsContext::ENullBrush);
+    }
+	
 // ---------------------------------------------------------------------------
 // CFepUiCursor::Draw
 // Draws insertion point's Rect and starts blinking timer
@@ -231,7 +262,25 @@
         {
         return;
         }
-    
+
+//#ifdef FIX_FOR_NGA
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        if(iIsOn)
+            {   
+            iIsVisible = !iIsVisible;
+            } 
+        else
+            {
+            if(iIsVisible) //only do when already shown
+                {                
+                iIsVisible = EFalse;                       
+                }   
+            }
+        
+        return;
+        }
+//#endif
     /*if (aReset)    
         {
         iIsVisible = EFalse;
@@ -244,7 +293,14 @@
         {        
         // draw cursor by inverting colors in the selected text rectancle
         gc->SetClippingRegion(ValidClipRegion());        	        
-        
+
+        const TRegion& tr = ValidClipRegion();
+        const TRect* rl = tr.RectangleList();
+        TRect rr;
+        for(TInt id = 0; id < tr.Count(); ++id)
+            {
+            rr = rl[id];
+            }
         gc->SetBrushStyle(CGraphicsContext::ESolidBrush);
         gc->SetBrushColor(KRgbBlack);
         gc->SetDrawMode(CGraphicsContext::EDrawModeNOTSCREEN);
@@ -324,10 +380,12 @@
 //
 void CFepUiCursor::InvalidateInsertionPoint()
     {    
-    //if(iEditor)
+    //if(AbleToDraw())
         {        
         Draw();
-        UpdateArea(iCursorRect,EFalse);
+        //UpdateArea(iCursorRect,EFalse);
+        
+        UpdateCursorArea(iCursorRect,EFalse);
         }
     }
   
@@ -435,6 +493,28 @@
     
 void CFepUiCursor::UpdateCursorArea(const TRect& aRect, TBool aFlag)
     {
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        //CopyToBmp();
+        //signal special update
+    
+        struct SData
+            {
+            TBool onOff;
+            CFbsBitmap* bmp;
+            TRect rect;
+            } data;
+        data.onOff = iIsVisible;
+        data.bmp = iBitmap;
+        data.rect = iCursorRect;
+        TPtrC ptr;
+        ptr.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));
+        
+        UiLayout()->SignalOwner(ESignalUpdateCursor,ptr);
+        
+		return;
+		}
+
     CFepUiBaseCtrl* parent = iEditor->ParentCtrl();
     
     if(parent)
@@ -447,4 +527,30 @@
     else
         UpdateArea(aRect,aFlag);    
     }
+
+void CFepUiCursor::CreateCursorBmpL()
+    {
+    iBitmap = new ( ELeave ) CFbsBitmap;    
+    
+    TRect rect = TRect(TPoint(0,0) , TSize(KCursorWidth,iHeight));
+
+    User::LeaveIfError( iBitmap->Create( rect.Size(), BitmapDevice()->DisplayMode() ) );
+    
+    iBitmapDevice = CFbsBitmapDevice::NewL(iBitmap);
+    iGc = CFbsBitGc::NewL();
+    iGc->Reset();
+    DrawCursor(iGc,iBitmapDevice);
+    }
+
+void CFepUiCursor::ResizeCursorBmp()
+    {
+    TRect rect = TRect(TPoint(0,0) , TSize(KCursorWidth,iHeight));
+    iBitmap->Resize(rect.Size());
+    
+    iBitmapDevice->Resize( rect.Size());
+    //gc must be adjusted
+    iGc->Activate(iBitmapDevice);
+    iGc->Resized();
+    DrawCursor(iGc,iBitmapDevice);    
+    }
 //  End of File  
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicf.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicf.cpp	Tue May 25 13:03:44 2010 +0300
@@ -448,13 +448,14 @@
 // ---------------------------------------------------------------------------
 //
 EXPORT_C void CFepLayoutMultiLineIcf::ShowTooltipL( const TDesC& aText,
-		                                            const TRect& aRect )
+		                                            const TRect& aRect,
+		                                            TInt aLangCode )
     {
     if ( !iTooltip || !iIcfEditor )
         {
         return;
         }
-    iIcfEditor->ShowTooltipL( aText, aRect );
+    iIcfEditor->ShowTooltipL( aText, aRect, aLangCode );
     }
 
 // ---------------------------------------------------------------------------
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp	Tue May 25 13:03:44 2010 +0300
@@ -345,7 +345,6 @@
 
 void CFepLayoutMultiLineIcfEditor::RecalculatePosByNewPromptTextL(const TDesC& aNewPromptText)
     {
-    // recalculate cursor pos
     AdjustSelectionL(TCursorSelection(iTextView->Selection().iCursorPos + aNewPromptText.Length() - iPromptTextLen,
                      iTextView->Selection().iAnchorPos + aNewPromptText.Length() - iPromptTextLen));
 
@@ -357,7 +356,6 @@
     iPreAutoEndPos += (aNewPromptText.Length() - iPromptTextLen);
     iPreTextSelStartPos += (aNewPromptText.Length() - iPromptTextLen);
     iPreTextSelEndPos += (aNewPromptText.Length() - iPromptTextLen);
-
     }
 
 const HBufC* CFepLayoutMultiLineIcfEditor::PromptText()
@@ -367,7 +365,6 @@
 	
 void CFepLayoutMultiLineIcfEditor::SetPromptTextL(const TDesC& aPromptText, TBool aCleanContent)
     {
-    
     if ( aCleanContent )
     	{
     	//clean all the content (include prompt text) on the ICF
@@ -379,15 +376,24 @@
         iNoMatchState = EFalse;
     	}
     else 
-        {
-        /*if ( ( ( !iInitPromptText && aPromptText.Length() == 0 ) )|| 
+        {   
+        if ( ( ( !iInitPromptText && aPromptText.Length() == 0 ) )|| 
             ( iInitPromptText && *iInitPromptText == aPromptText && 
             iPromptText && TextWidth(*iPromptText) <= iViewRect.Width()) )
     	    {
     	    //prompt text has not been change then need not to be reset
     	    //but iLineSeparator may be changed, need reset prompt text
-    	    return;
-            }*/
+            TBool newLineSeparator = iLineSeparator;
+            if ( !iLineSeparator )
+                {
+                newLineSeparator = ( TBidiText::TextDirectionality( aPromptText )
+                                                     == TBidiText:: ERightToLeft );
+                }
+            if ( newLineSeparator == iLineSeparator )
+                {
+                return;
+                }
+            }
         //prompt text need to be reset and not clean the content
         iRichText->DeleteL( 0,  iPromptTextLen );
         iTextView->HandleInsertDeleteL(TCursorSelection(0, 0), iPromptTextLen );
@@ -549,6 +555,7 @@
                 iRichText->DeleteL(iPromptTextLen, delLen );
                 iTextView->HandleInsertDeleteL(TCursorSelection(iPromptTextLen, iPromptTextLen), 
                                                delLen);
+                iTextView->SetSelectionL(TCursorSelection(iPromptTextLen, iPromptTextLen));
                 }
             ptr.Copy(icfdata.iText);
             }
@@ -1635,7 +1642,8 @@
     }
 
 void CFepLayoutMultiLineIcfEditor::ShowTooltipL( const TDesC& aText, 
-		                                         const TRect& aRect )
+		                                         const TRect& aRect,
+		                                         TInt aLangCode )
 	{
 	if ( !iTooltip )
 	    {
@@ -1643,6 +1651,7 @@
 	    }
 
     iTooltip->SetTextL( aText );
+    iTooltip->SetLangCode( aLangCode );
     TPoint tl( 0, 0 ), br( 0, 0 );
     InlineTextPos( tl, br );    
     
@@ -1685,6 +1694,12 @@
 	    	tooltipRect.iTl.iX += moveX;
 	    	}
 	    }		
+
+	if (( iTooltip->Rect().iTl != tooltipRect.iTl ) && ( iTooltip->Rect().iBr != tooltipRect.iBr ))
+	    {
+        iTooltip->Close();
+	    }
+
     iTooltip->Popup( tooltipRect );
 	}
 
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp	Tue May 25 13:03:44 2010 +0300
@@ -48,6 +48,7 @@
 		{		
 		//do nothing
 		}
+    delete iExt;
 	}	
 	
 // ---------------------------------------------------------------------------
@@ -58,6 +59,14 @@
 EXPORT_C void CFepLayoutPopupWnd::ConstructL()
 	{
 	BaseConstructL();
+    iExt = CPopupWndExt::NewL();    
+    //check whether we need create backup bmp. Some pop up window is created after UI layout is created
+    //If a pop up window is created during layout constructing, it will create the backup bitmap in Handleresourcechange
+    if (UiLayout()->NotDrawToLayoutDevice())
+        {
+            iExt->ContructBkDeviceL(Rect().Size(),
+                        UiLayout()->LayoutOwner()->BitmapDevice()->DisplayMode());
+        }
 	}	
 
 EXPORT_C void CFepLayoutPopupWnd::ReDrawRect(const TRect& /*aRect*/)
@@ -258,6 +267,9 @@
 	RootControl()->SetActiveCtrl(this);
     ReportEvent(EEventCapturePointer);
 
+    //When preparing the pop up window, it causes redraw the underlying control sometimes.
+    DisableDrawingInGroup();//disable any drawing during preparation to avoid it dirty the background
+
 	//let pop up window do preparation
 	OnDisplay();	
 	
@@ -359,7 +371,9 @@
         //RootControl()->Clear();
         DrawTransparentMaskBackground( TRect( TPoint(), rtFinal.Size() ) );
         RootControl()->Move(iLayoutMoveOff);
-        RootControl()->Draw();	    
+        EnableDrawingInGroup();
+        RootControl()->Draw();
+        DisableDrawingInGroup();	    
     	//UpdateArea( TRect( TPoint(), rtFinal.Size()), ETrue); 	
 	    }
 	else
@@ -377,8 +391,30 @@
 	    
     //iRect = rtPopup;
     Move( rtPopup.iTl - Rect().iTl);
+    //copy and save the bitmap 
+    if (UiLayout()->NotDrawToLayoutDevice())
+        {    
+        iExt->SetRect(Rect());
+        
+        CFbsBitGc* gc = iExt->BackupGc();
+        gc->Activate( iExt->BackupDevice() );
+        CFbsBitGc* layoutGc = static_cast<CFbsBitGc*>(
+                            UiLayout()->LayoutOwner()->BitmapContext()); 
+        gc->BitBlt(TPoint(0,0),*layoutGc,Rect());
+        
+        Hide(EFalse); 
+        }
+    
+    EnableDrawingInGroup();
+
     UiLayout()->LockArea(iRect,this);
-	Hide(EFalse);    
+
+    SetReady(ETrue);//enalbe it as in Close, the flag is reset.
+    if (UiLayout()->NotDrawToLayoutDevice())
+        Draw();//force draw
+    else
+        Hide(EFalse);
+    UpdateArea(iRect, EFalse); 
         
     iIsShowing = ETrue;
     AfterDisplayed();
@@ -434,7 +470,26 @@
 	iIsShowing = EFalse;
 	if(iWndControl)
 	    iWndControl->MakeVisible(EFalse);    
-	Hide(ETrue);	
+    SetReady(EFalse);//disable redraw
+    TRect popRect = iRect;
+    UiLayout()->UnLockArea(iRect, this);
+
+    //restore the background bitmap
+    TBool bRedraw = ETrue;
+    if (UiLayout()->NotDrawToLayoutDevice())
+        {
+        CFbsBitGc* layoutGc = static_cast<CFbsBitGc*>(
+                    UiLayout()->LayoutOwner()->BitmapContext()); 
+ 
+                iExt->BackupGc();
+        layoutGc->Activate( UiLayout()->LayoutOwner()->BitmapDevice());
+        TRect r;
+        r.SetSize(iExt->Rect().Size());
+        layoutGc->BitBlt(iExt->Rect().iTl,iExt->BackupBitmap(),r);
+        bRedraw = EFalse;
+        }
+    
+    Hide(ETrue);
 	UiLayout()->UnLockArea(iRect,this);
 	iRect.Move(-iRect.iTl);	
 	MLayoutOwner* layoutOwner = UiLayout()->LayoutOwner();
@@ -448,12 +503,15 @@
         RootControl()->GraphicDeviceSizeChanged();
 	    }
 	    
-    RootControl()->Draw();
+    if (bRedraw)    
+	    {
+        RootControl()->Draw();
+		}
 
 	iIsShowing = EFalse;
 	
-	TRect rect( TPoint(0,0),iPrevLayoutRect.Size() );
-	UpdateArea(  rect, EFalse ); 	
+    //TRect rect(TPoint(0, 0), iPrevLayoutRect.Size());
+    UpdateArea(popRect, EFalse);     	
 	}		
 		
 // ---------------------------------------------------------------------------
@@ -496,3 +554,87 @@
     {
     //do nothing
     }
+EXPORT_C void CFepLayoutPopupWnd::HandleResourceChange(TInt aType)
+    {
+    if (aType == KPenInputOwnDeviceChange)
+        {
+        if (UiLayout()->NotDrawToLayoutDevice())
+            {
+            TRAP_IGNORE(iExt->ContructBkDeviceL(Rect().Size(),
+                    UiLayout()->LayoutOwner()->BitmapDevice()->DisplayMode()));
+            }
+        }
+    else
+        CControlGroup::HandleResourceChange(aType);
+    }
+void CFepLayoutPopupWnd::DisableDrawingInGroup()
+    {
+
+    UiLayout()->DisableLayoutDrawing(ETrue);
+    SetReady(EFalse);
+    for(TInt i = 0; i < NumOfControls(); ++i)
+        {
+        //There is potential defect that if the child control is a group control, its children not set.
+        //This can be solved by locking the area so no one can update until we unlock it in Enalbegroup
+        ControlList()[i]->SetReady(EFalse); 
+        }
+    }
+void CFepLayoutPopupWnd::EnableDrawingInGroup()
+    {
+    SetReady(ETrue);
+    for(TInt i = 0; i < NumOfControls(); ++i)
+        {
+        //There is potential defect that if the child control is a group control, its children not set.
+        //This can be solved by locking the area so no one can update until we unlock it in Enalbegroup
+        ControlList()[i]->SetReady(ETrue); 
+        }
+    UiLayout()->DisableLayoutDrawing(EFalse);    
+    }
+
+
+
+CFepLayoutPopupWnd::CPopupWndExt* CFepLayoutPopupWnd::CPopupWndExt::NewL()
+    {
+    CPopupWndExt* self = new (ELeave)CPopupWndExt();
+    return self;
+    }
+
+void CFepLayoutPopupWnd::CPopupWndExt::ContructBkDeviceL(const TSize& aSize,const TDisplayMode& aMode)
+    {
+    TBool bNewBmp = EFalse;
+    if(!iBitmap || iBitmap->DisplayMode() != aMode)
+        {
+        delete iBitmap;
+        iBitmap = 0;
+        iBitmap = new (ELeave) CFbsBitmap;    
+        User::LeaveIfError( iBitmap->Create( aSize,aMode));
+        delete iBitmapDevice;
+        iBitmapDevice = 0;
+        iBitmapDevice = CFbsBitmapDevice::NewL(iBitmap);
+        bNewBmp = ETrue;
+        }
+    if(!iGc)
+        iGc = CFbsBitGc::NewL();    
+
+    if(!bNewBmp && aSize != iBitmap->SizeInPixels())
+        {
+        ResizeBackupDeviceL(aSize);
+        }
+    }
+void CFepLayoutPopupWnd::CPopupWndExt::ResizeBackupDeviceL(const TSize& aSize)
+    {
+    
+    iBitmap->Resize(aSize);
+    iBitmapDevice->Resize( aSize);
+    iGc->Activate(iBitmapDevice);
+    iGc->Resized();    
+    }
+void CFepLayoutPopupWnd::CPopupWndExt::SetRect(const TRect& aRect)
+    {
+    iRect = aRect;
+    if(iBitmap && iBitmap->SizeInPixels() != aRect.Size())
+        {            
+        ResizeBackupDeviceL(aRect.Size());
+        }
+    }
+//  End of File  
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutrootctrl.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutrootctrl.cpp	Tue May 25 13:03:44 2010 +0300
@@ -815,7 +815,8 @@
 
 	if(!AbleToDraw())
         return;
-	
+
+	Clear();	
     CControlGroup::Draw();
 
     if(!iShadowRect.IsEmpty())        
@@ -1004,7 +1005,9 @@
         {
         if(aCtrl->OrderPos() <= iPopCtrlList[i]->OrderPos())
             {
+            CFepUiBaseCtrl* temp = iPopCtrlList[i - 1];
             iPopCtrlList[i - 1] = iPopCtrlList[i];
+            iPopCtrlList[i] = temp;
             }
         else
             {
@@ -1142,7 +1145,10 @@
             {
             if(aCtrl->OrderPos() >= iPopCtrlList[i]->OrderPos())
                 {
-                iPopCtrlList[i+1] = iPopCtrlList[i];
+                CFepUiBaseCtrl* temp = iPopCtrlList[i + 1];
+                iPopCtrlList[i + 1] = iPopCtrlList[i];
+                iPopCtrlList[i] = temp;   
+
                 }
             else
                 {
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkb.cpp	Tue May 25 13:03:44 2010 +0300
@@ -95,7 +95,6 @@
                                 iKeyNormalSkinId(KAknsIIDNone),
                                 iKeyHighlightSkinId(KAknsIIDNone),
                                 iKeyDimSkinId(KAknsIIDNone),
-                                iNeedDrawBackground(ETrue),
                                 iIrregularKey(aIrregular),
                                 iBubbleCtrl(NULL),
                                 iBubbleVerticalMargin(0),                                
@@ -113,6 +112,7 @@
 //
 EXPORT_C CVirtualKeyboard::~CVirtualKeyboard()
     {
+    delete iExt;
     if ( iBubbleCtrl )
         delete iBubbleCtrl;
     if ( iPreviewBubbleRenderer )
@@ -189,7 +189,8 @@
     if (iIrregularKey)
         {
         ConstructIrregularBmps();    
-        }        
+        }  
+    iExt = new(ELeave) CFepUiKeyboardExt;      
     }
 
 // ---------------------------------------------------------------------------
@@ -387,7 +388,12 @@
     	return;    
     const TRect& keyboardRect = Rect();
 
-    if (iNeedDrawBackground)
+    if(UiLayout()->NotDrawToLayoutDevice() && !Bitmap())
+        {
+        TRAP_IGNORE(CreateBmpDevL());
+        }
+
+    if ( NeedRedrawBg())
         {
         CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
 
@@ -527,6 +533,10 @@
         if(!flag)
             {
             TRAP_IGNORE(iBubbleCtrl = CBubbleCtrl::NewL(TRect(0,0,0,0),UiLayout(),-0xFFFF));
+            if(iBubbleCtrl && UiLayout()->NotDrawToLayoutDevice())
+                {
+                iBubbleCtrl->CreateBmpDevL();
+                }
             iBubbleSize = TSize(KDefaultBubbleSize,KDefaultBubbleSize);
             }
         }
@@ -1441,4 +1451,154 @@
         iKeyCtrl->Hide( aHide );
         }
     }
+
+void CFepUiKeyboardExt::CreateBmpDevL(const TDisplayMode &aMode )
+    {
+    if(iBitmap && iHighlightDev && iHighlightGc && iHighlightKeyBmp && iHighlightKeyDev && 
+            iNormalKeyBmp && iNormalKeyDev && iDimmedKeyBmp && iDimmedKeyDev && iKeyGc)
+        return;
+    
+    delete iBitmap;
+    delete iHighlightDev; 
+    delete iHighlightGc; 
+    delete iHighlightKeyBmp; 
+    delete iHighlightKeyDev; 
+    delete iNormalKeyBmp; 
+    delete iNormalKeyDev; 
+    delete iDimmedKeyBmp; 
+    delete iDimmedKeyDev;
+    delete iKeyGc;
+
+    iBitmap = 0;
+    iHighlightDev = 0 ; 
+    iHighlightGc = 0 ; 
+    iHighlightKeyBmp = 0 ; 
+    iHighlightKeyDev = 0 ; 
+    iNormalKeyBmp = 0 ; 
+    iNormalKeyDev = 0 ; 
+    iDimmedKeyBmp = 0 ; 
+    iDimmedKeyDev = 0;
+    iKeyGc = 0;
+    
+    iBitmap = new ( ELeave ) CFbsBitmap;    
+    User::LeaveIfError( iBitmap->Create( TSize(1,1), aMode) );
+    
+    iHighlightDev = CFbsBitmapDevice::NewL(iBitmap);
+    
+    iHighlightGc = CFbsBitGc::NewL();
+    iHighlightGc->Reset();
+    
+
+    iHighlightKeyBmp = new ( ELeave ) CFbsBitmap;    
+    User::LeaveIfError( iHighlightKeyBmp->Create( TSize(1,1), aMode) );    
+    iHighlightKeyDev = CFbsBitmapDevice::NewL(iHighlightKeyBmp);
+
+    iNormalKeyBmp = new ( ELeave ) CFbsBitmap;    
+    User::LeaveIfError( iNormalKeyBmp->Create( TSize(1,1), aMode) );    
+    iNormalKeyDev = CFbsBitmapDevice::NewL(iNormalKeyBmp);
+
+    iDimmedKeyBmp = new ( ELeave ) CFbsBitmap;    
+    User::LeaveIfError( iDimmedKeyBmp->Create( TSize(1,1), aMode) );    
+    iDimmedKeyDev = CFbsBitmapDevice::NewL(iDimmedKeyBmp);
+    
+    iKeyGc = CFbsBitGc::NewL();
+    iKeyGc->Reset();   
+    }
+
+void CVirtualKeyboard::CreateBmpDevL()
+    {
+    iExt->CreateBmpDevL(UiLayout()->LayoutOwner()->BitmapDevice()->DisplayMode());
+    }
+
+EXPORT_C void CVirtualKeyboard::HandleResourceChange(TInt aType)
+    {
+    if(aType == KPenInputOwnDeviceChange)
+        {
+        if(UiLayout()->NotDrawToLayoutDevice())
+            {
+            TRAP_IGNORE(CreateBmpDevL());
+            }
+        }
+    else
+        CControlGroup::HandleResourceChange(aType);
+    }
+    
+CFbsBitmap* CVirtualKeyboard::PrepareMaskBmpL(CFbsBitGc* aGc, const TDisplayMode& aMode, const TRect& aRect)
+    {
+    CFbsBitmap* mask = new(ELeave) CFbsBitmap();
+    CleanupStack::PushL(mask);
+    User::LeaveIfError( mask->Create( aRect.Size(), aMode) );
+    CFbsBitmapDevice* maskDev = CFbsBitmapDevice::NewL(mask);
+    const TRgb KOpaqueMask = TRgb(KOpaqueColor);
+    DrawBackgroundToDevice(aRect,maskDev,NULL,KOpaqueMask,KOpaqueMask,EFalse);
+    delete maskDev;
+    CleanupStack::Pop(mask);
+    return mask;
+    }
+CFbsBitmap* CVirtualKeyboard::PrepareKeyBmpL(CFbsBitGc* aGc, const TDisplayMode& aMode, const TRect& aRect,
+        const TRect& aInnerRect,const TAknsItemID& aFrameID, const TAknsItemID& aCenterID, const TRect& aKeyRect)
+    {
+    CFbsBitmap* key = new(ELeave) CFbsBitmap();
+    CleanupStack::PushL(key);
+    User::LeaveIfError( key->Create( aRect.Size(), aMode) );
+    
+    CFbsBitmapDevice* dev = CFbsBitmapDevice::NewL(key);
+    CleanupStack::PushL(dev);
+    
+    CFbsBitGc* keyGc = CFbsBitGc::NewL();
+    keyGc->Reset();
+    CleanupStack::PushL(keyGc);
+    
+    keyGc->Activate(dev);
+    
+    CFbsBitGc* layoutGc = static_cast<CFbsBitGc*>(
+                            UiLayout()->LayoutOwner()->BitmapContext());
+    layoutGc->Activate(UiLayout()->LayoutOwner()->BitmapDevice()); 
+    
+    keyGc->BitBlt(TPoint(0,0),*layoutGc,aKeyRect);
+    
+    AknsDrawUtils::DrawFrame(AknsUtils::SkinInstance(), 
+                             *keyGc, 
+                             aRect, 
+                             aInnerRect,
+                             aFrameID, 
+                             aCenterID);
+
+    layoutGc->Activate(UiLayout()->LayoutOwner()->BitmapDevice());    
+    
+    CleanupStack::PopAndDestroy(2);
+    CleanupStack::Pop(key);
+    
+    return key;
+    }
+
+TBool CVirtualKeyboard::PrepareKeyBmp(CFbsBitmap* aBmp,CFbsBitmapDevice* aDev,const TRect& aRect, 
+                        const TRect& aInnerRect,const TAknsItemID& aFrameID, const TAknsItemID& aCenterID, const TRect& aKeyRect)
+    {
+
+    aBmp->Resize(aRect.Size());
+    aDev->Resize(aRect.Size());
+    iExt->iKeyGc->Activate(aDev);
+    iExt->iKeyGc->Resized();        
+
+    TRect r = aRect;
+    r.Move(-r.iTl.iX, -r.iTl.iY);
+   
+    CFbsBitmap* keyBmp = NULL;
+    TRect inner = aInnerRect;
+    TPoint off = aInnerRect.iTl - aRect.iTl;
+    inner.Move(-inner.iTl.iX + off.iX, -inner.iTl.iY + off.iY);
+    TRAP_IGNORE(keyBmp = PrepareKeyBmpL(iExt->iKeyGc,
+                        UiLayout()->LayoutOwner()->BitmapDevice()->DisplayMode(),
+                        r,inner,aFrameID,aCenterID,aKeyRect));
+    if(!keyBmp)
+        {
+        return EFalse;
+        }
+
+    iExt->iKeyGc->BitBlt(TPoint(0,0), keyBmp,r);      
+
+    delete keyBmp;        
+    return ETrue;
+    }
 //end of implementation of Class CVirtualKey    
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp	Tue May 25 13:03:44 2010 +0300
@@ -28,6 +28,7 @@
 #include "peninputlayoutvkb.h"
 #include "peninputlayout.h"
 #include "peninputpluginutils.h"
+#include "peninputcmd.h"
 
 _LIT( KKeyShiftCharacter, "\x2191");
 _LIT( KKeyStarCharacter, "\x002a");
@@ -117,7 +118,7 @@
 // (other items were commented in a header).
 // ---------------------------------------------------------------------------
 //        
-void CVirtualKeyCtrl::DrawKeyText()    
+void CVirtualKeyCtrl::DrawKeyText(CFbsBitGc* aGc)  
     {
     TBool textlineset = EFalse;
 
@@ -131,7 +132,7 @@
             if (iKeyInfo->KeyUnicodes(TVirtualKeyTextPos(i)) != KNullDesC)
                 {
                 TAknLayoutText textLayout;
-                textLayout.LayoutText(Rect(), 
+                textLayout.LayoutText(GetRect(), 
                                       iKeyboard->TextLineLayout(TVirtualKeyTextPos(i)));
 				TRgb color( KRgbBlack );  // sane default for nonskinned case			    
 			    if ( AknsUtils::AvkonSkinEnabled() )
@@ -146,22 +147,22 @@
 				if( iKeyboard->ShiftIcon() &&
 					iKeyInfo->KeyUnicodes(TVirtualKeyTextPos(i)) == KKeyShiftCharacter )
 					{
-					CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
+					//CFbsBitGc* gc = GetGc();//static_cast<CFbsBitGc*>(BitGc());
 					AknPenInputDrawUtils::DrawColorIcon( iKeyboard->ShiftIcon(),
-														 *gc,
+														 *aGc,
 														 textLayout.TextRect() );	
 					}
 				else if(iKeyboard->StarIcon() &&
 						iKeyInfo->KeyUnicodes(TVirtualKeyTextPos(i)) == KKeyStarCharacter )
 					{
-					CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
+					//CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
 					AknPenInputDrawUtils::DrawColorIcon( iKeyboard->StarIcon(),
-														 *gc,
+														 *aGc,
 														 textLayout.TextRect() );		
 					}
 				else				    
 				    {
-				    textLayout.DrawText(*BitGc(), iKeyInfo->KeyUnicodes(TVirtualKeyTextPos(i)), 
+				    textLayout.DrawText(*aGc, iKeyInfo->KeyUnicodes(TVirtualKeyTextPos(i)), 
                                     EFalse, color);
 				    }
                 }
@@ -171,9 +172,9 @@
     if (!textlineset)
         {
 		TAknLayoutText textLayout;
-		textLayout.LayoutText(Rect(), iKeyboard->iVKBTextLineLayout);
+		textLayout.LayoutText(GetRect(), iKeyboard->iVKBTextLineLayout);
 	    
-	    CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());    
+	    //CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());    
 	    
 	    //charRect.Move(keyboardRect.iTl);
 	    //if(iKeyInfo->Dimmed())
@@ -201,11 +202,11 @@
 			}	
     	if( iKeyInfo->DisplayUnicode() && iKeyInfo->DisplayUnicode()->Length() != 0)
     		{
-    		textLayout.DrawText(*BitGc(), *iKeyInfo->DisplayUnicode(), EFalse, color);		
+    		textLayout.DrawText(*aGc, *iKeyInfo->DisplayUnicode(), EFalse, color);		
     		}
     	else
     		{
-    		textLayout.DrawText(*BitGc(), iKeyInfo->KeyUnicodes(), EFalse, color);		
+    		textLayout.DrawText(*aGc, iKeyInfo->KeyUnicodes(), EFalse, color);		
     		}		
     		
 	    //if(iKeyInfo->Dimmed())
@@ -299,7 +300,7 @@
     gc->SetPenColor(KRgbBlack);
     gc->SetBrushStyle( CGraphicsContext::ENullBrush );    
     //Draw text again.
-    DrawKeyText(); 
+    DrawKeyText(gc); 
     }
 
 // ---------------------------------------------------------------------------
@@ -313,15 +314,28 @@
                                   TBool aInvertFlag)
     {
     CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
+    DrawBmp(gc,aDestRect,aSourceRect,aBmp,aMask,aInvertFlag);					     
+    }
+
+// ---------------------------------------------------------------------------
+// CVirtualKeyCtrl::DrawBmp
+// Draw bitmap
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//        
+void CVirtualKeyCtrl::DrawBmp(CFbsBitGc* aGc, const TRect& aDestRect,const TRect& aSourceRect,
+                                  const CFbsBitmap* aBmp,CFbsBitmap* aMask,
+                                  TBool aInvertFlag)
+    {
     if(aMask)
         {
         //TRect bmpRect(TPoint(0,0),aMask->SizeInPixels());
-        gc->DrawBitmapMasked(aDestRect,aBmp,aSourceRect,aMask,aInvertFlag);        
+        aGc->DrawBitmapMasked(aDestRect,aBmp,aSourceRect,aMask,aInvertFlag);        
         }
     else
         {
-        gc->DrawBitmap(aDestRect,aBmp,aSourceRect);
-        }						     
+        aGc->DrawBitmap(aDestRect,aBmp,aSourceRect);
+        }                            
     }
     
 // ---------------------------------------------------------------------------
@@ -360,13 +374,30 @@
         {
         TRect innerrect = rect;
         innerrect.Shrink( KDefaultKeyMargin, KDefaultKeyMargin );
-
-        AknsDrawUtils::DrawFrame(UiLayout()->SkinInstance(), 
-                                 *gc, 
-                                 rect, 
-                                 innerrect,
-                                 iKeyboard->KeySkinId(EKeyBmpNormal), 
-                                 KAknsIIDDefault); 
+        TBool bHasDrawn = EFalse;
+        if(UiLayout()->NotDrawToLayoutDevice())
+            {
+            TBool ret = iKeyboard->PrepareKeyBmp(iKeyboard->NormalKeyBmp(),
+                                    iKeyboard->NormalKeyDev(),
+                                    rect,innerrect,
+                                    iKeyboard->KeySkinId(EKeyBmpNormal), 
+                                    KAknsIIDDefault,Rect());
+            if(ret)
+                {
+                gc->BitBlt(rect.iTl,iKeyboard->NormalKeyBmp());
+                bHasDrawn = ETrue;
+                }
+            }
+        
+        if(!bHasDrawn)
+            {
+	        AknsDrawUtils::DrawFrame(UiLayout()->SkinInstance(), 
+	                                 *gc, 
+	                                 rect, 
+	                                 innerrect,
+	                                 iKeyboard->KeySkinId(EKeyBmpNormal), 
+	                                 KAknsIIDDefault); 
+            }
         }
     else if( iKeyboard->NonIrregularKeyBitmap( EKeyBmpNormal ) )
     	{
@@ -403,9 +434,28 @@
     gc->SetPenColor( KRgbBlack );
     gc->SetBrushStyle( CGraphicsContext::ENullBrush );    
     gc->SetFaded(EFalse);            
-    DrawKeyText();        
+    DrawKeyText(gc);        
     }
-    
+
+CFbsBitGc* CVirtualKeyCtrl::GetGc()
+    {
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        //draw to highligh bitmap
+        if(Keyboard()->Bitmap()->SizeInPixels() != Rect().Size())
+            {
+            Keyboard()->Bitmap()->Resize(Rect().Size());
+            Keyboard()->HighlightDev()->Resize( Rect().Size());
+                //gc must be adjusted
+            Keyboard()->HighlightGc()->Activate(Keyboard()->HighlightDev());
+            Keyboard()->HighlightGc()->Resized();
+            }
+        return Keyboard()->HighlightGc();
+        }
+    else
+        return static_cast<CFbsBitGc*>(BitGc());
+    }
+
 // ---------------------------------------------------------------------------
 // CVirtualKeyCtrl::DrawHighlightKey
 // Draw key in highlight state
@@ -414,8 +464,11 @@
 //                
 void CVirtualKeyCtrl::DrawHighlightKey()
     {    
-    CFbsBitGc* gc = static_cast<CFbsBitGc*>(BitGc());
-    TRect rect = Rect();
+    CFbsBitGc* gc = GetGc();
+    if(UiLayout()->NotDrawToLayoutDevice())
+        gc->Activate( Keyboard()->HighlightDev() );
+    TRect rect = GetRect();
+
     TPoint bmpPos = rect.iTl;
     TRect bmpRect(TPoint(0,0),rect.Size());
    
@@ -423,12 +476,12 @@
        iVirtualKeyDrawInfo.iVKPressedMiddleImgID.iMajor &&
        iVirtualKeyDrawInfo.iVKPressedRightImgID.iMajor)
         {
-        TRect innerRect = Rect();
+        TRect innerRect = GetRect();
 		innerRect.Shrink( 4, 0 );
 		    
 		AknPenInputDrawUtils::Draw3PiecesFrame(UiLayout()->SkinInstance(),
 								   *gc,
-								   Rect(),
+								   GetRect(),
 								   innerRect,
 								   iVirtualKeyDrawInfo.iVKPressedLeftImgID,
 								   iVirtualKeyDrawInfo.iVKPressedMiddleImgID,
@@ -444,20 +497,38 @@
     else if (iKeyboard->KeySkinId(EKeyBmpHighlight) != KAknsIIDNone)
         {
         TRect innerrect = rect;
+
         innerrect.Shrink( KDefaultKeyMargin, KDefaultKeyMargin );
-
-        AknsDrawUtils::DrawFrame(UiLayout()->SkinInstance(), 
-                                 *gc, 
-                                 rect, 
-                                 innerrect,
-                                 iKeyboard->KeySkinId(EKeyBmpHighlight), 
-                                 KAknsIIDDefault); 
+        TBool bHasDrawn = EFalse;
+        if(UiLayout()->NotDrawToLayoutDevice())
+            {
+            TBool ret = iKeyboard->PrepareKeyBmp(iKeyboard->HighightKeyBmp(),
+                                    iKeyboard->HighlightKeyDev(),
+                                    rect,innerrect,
+                                    iKeyboard->KeySkinId(EKeyBmpHighlight), 
+                                    KAknsIIDDefault,Rect());
+            if(ret)
+                {
+                gc->BitBlt(rect.iTl,iKeyboard->HighightKeyBmp());
+                bHasDrawn = ETrue;
+                }
+            }
+        
+        if(!bHasDrawn)
+            {        
+	        AknsDrawUtils::DrawFrame(UiLayout()->SkinInstance(), 
+	                                 *gc, 
+	                                 rect, 
+	                                 innerrect,
+	                                 iKeyboard->KeySkinId(EKeyBmpHighlight), 
+	                                 KAknsIIDDefault); 
+            }
         }
     else if( iKeyboard->NonIrregularKeyBitmap( EKeyBmpHighlight ) )
     	{
         TRect srcRect(TPoint(0,0), 
                       iKeyboard->NonIrregularKeyBitmap( EKeyBmpHighlight )->SizeInPixels());
-        DrawBmp(rect,
+        DrawBmp(gc, rect,
                 srcRect,
                 iKeyboard->NonIrregularKeyBitmap( EKeyBmpHighlight ),
                 iKeyboard->NonIrregularKeyBitmap( EKeyBmpHighlightMask ),
@@ -490,7 +561,15 @@
 
     gc->SetBrushStyle( CGraphicsContext::ENullBrush );    
     gc->SetFaded(EFalse);       
-    DrawKeyText();    
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+		DrawKeyText(Keyboard()->HighlightGc());
+        UpdateChangedArea(ETrue);
+		}
+    else
+        {
+		DrawKeyText(gc);
+		}   
 
     }
     
@@ -554,7 +633,22 @@
     
     //draw key new state
     iKeyboard->DrawBubble(iKeyInfo);
-    ReDraw();            	
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        if( !(iKeyInfo->Dimmed()) && (iKeyInfo->Latched() || (PointerDown()&&!iKeyInfo->IsLatchKey())) )
+            {        
+            DrawHighlightKey();
+            }
+		else
+		    {
+			ReDraw();
+			}	
+        }
+    else
+        {
+        ReDraw();
+        UpdateArea( Rect() );
+        }         	
     UpdateArea( Rect() );
 
     if(iKeyInfo->IsLatchKey())
@@ -593,8 +687,17 @@
         // When key down, latch key won't generate event.
         eventType = iKeyInfo->Latched() ? EEventVirtualKeyLatched : EEventVirtualKeyUnLatched;
         }     
-    ReDraw();            
-    UpdateAreaImmed( Rect() );
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        //no need to draw again, just remove the highlight bitmap
+        UpdateChangedArea(EFalse);
+		Draw();
+        }
+    else
+        {
+        ReDraw();
+        UpdateAreaImmed( Rect() );
+        }
     ReportKeyEvent(eventType); 
     
     
@@ -628,7 +731,12 @@
         
     iKeyboard->DrawBubble(iKeyInfo);    
     ReDraw();
-    UpdateArea( Rect() );
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        UpdateChangedArea(ETrue);
+        }
+    else
+        UpdateArea( Rect() );
       
     }
 
@@ -651,8 +759,15 @@
         }
         
     iKeyboard->ClearBubble(ETrue);
-	ReDraw();
-    UpdateArea( Rect() );
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        UpdateChangedArea(EFalse);
+        }
+    else
+        {
+        ReDraw();
+        UpdateArea( Rect() );
+        }
 	
 #ifdef RD_TACTILE_FEEDBACK
     if ( iKeyboard->GowithPointerDown() )
@@ -673,8 +788,15 @@
 	{
 	CFepUiBaseCtrl::CancelPointerDownL();
 	iKeyboard->ClearBubble(ETrue);
-	ReDraw();
-    UpdateArea( Rect() );
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        UpdateChangedArea(EFalse);
+        }
+    else
+        {	
+        ReDraw();
+        UpdateArea( Rect() );
+        }
 	}
 // ---------------------------------------------------------------------------
 // CVirtualKeyCtrl::ReDraw
@@ -684,8 +806,24 @@
 //    
 void CVirtualKeyCtrl::ReDraw()
     {
-    Draw();    
-    UpdateArea(Rect(), EFalse);            
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        if(iKeyInfo->Latched()||(PointerDown()&&!iKeyInfo->IsLatchKey()))
+            {        
+            DrawHighlightKey();
+            UpdateChangedArea(ETrue);
+            }
+		else
+            {
+			Draw();
+			UpdateArea(Rect(), EFalse);
+			}		
+        }
+    else
+        {
+        Draw();        
+        UpdateArea(Rect(), EFalse);
+        }    
     }
     
 // ---------------------------------------------------------------------------
@@ -903,6 +1041,10 @@
 //
 void CVirtualRawKeyCtrl::HandlePointerLeave(const TPoint& aPoint)
     {    
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        UpdateChangedArea(EFalse);
+        }
     TRawEvent event;
     event.Set(TRawEvent::EButton1Up,aPoint.iX,aPoint.iY);
     
@@ -919,4 +1061,34 @@
         }
 #endif //RD_TACTILE_FEEDBACK     
 	}
+
+TRect CVirtualKeyCtrl::GetRect()
+    {
+    TRect r(Rect());
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+		if(iKeyInfo->Latched()||(PointerDown()&&!iKeyInfo->IsLatchKey()))
+		    {
+			r.Move(-r.iTl.iX, -r.iTl.iY);
+			}
+        }
+    return r;
+    }
+	
+void CVirtualKeyCtrl::UpdateChangedArea(TBool aFlag)
+    {
+    struct SData
+        {
+        TBool flag;
+        CFbsBitmap* bmp;
+        TRect pos;
+        } data;
+    data.flag = aFlag;
+    data.bmp = Keyboard()->Bitmap();//aFlag ? Keyboard()->iBitmap : 0;
+    data.pos = Rect();
+    TPtrC ptr;
+    ptr.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));
+    
+    UiLayout()->SignalOwner(ESignalUpdateChangedArea,ptr);
+    }
 //end of file
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputuilayout.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputuilayout.cpp	Tue May 25 13:03:44 2010 +0300
@@ -28,8 +28,8 @@
 #include <AknDef.h>
 #include <AknsConstants.h>
 #include <coemain.h>
-#include <aknsutils.h> 
-#include <aknsskininstance.h> 
+#include <AknsUtils.h> 
+#include <AknsSkinInstance.h> 
 
 #ifdef RD_TACTILE_FEEDBACK
 #include <touchfeedback.h>
@@ -84,6 +84,7 @@
 #endif // RD_TACTILE_FEEDBACK
     iExtension->iSkinInstance = AknsUtils::SkinInstance();
     iExtension->iTouchFeedbackInstance = MTouchFeedback::Instance();
+	iExtension->iDisableDrawing = EFalse;
     }
 
 // ---------------------------------------------------------------------------
@@ -175,6 +176,17 @@
             TRAP_IGNORE(SendEditorTextAndCursorPosL(aData));
             }
             break;
+        case ECmdPeninputEnableOwnBitmap:
+            {
+            SetSelfBmpDeviceFlag(*(reinterpret_cast<TBool*>(aData)));
+            OnResourceChange(KPenInputOwnDeviceChange);
+            }
+            break;
+        case ECmdPeninputDisableLayoutDrawing:
+            {
+            DisableLayoutDrawing(*(reinterpret_cast<TBool*>(aData)));
+            }
+            break;
         default: 
             {
             ret = -1;
@@ -572,6 +584,8 @@
                         const TRect& aRect,TBool aUpdateFlag,TBool aImmedFlag)
     {
     //do nothing if it's locked and aCtrl is not the owner.
+    if(!iLayoutReady || iExtension->iDisableDrawing)
+        return;
     TBool bUpdate = ETrue;
     if(!iLockedArea.IsEmpty() )
         {
@@ -876,4 +890,27 @@
     {
     return iRootCtrl->CreateCursor();
     }
+
+EXPORT_C TBool CFepUiLayout::NotDrawToLayoutDevice()
+    {
+    return iExtension->iSelfBmpDeviceFlag;
+    }
+
+void CFepUiLayout::SetSelfBmpDeviceFlag(TBool aFlag)
+    {
+    iExtension->iSelfBmpDeviceFlag = aFlag;
+    }
+
+
+EXPORT_C void CFepUiLayout::DisableLayoutDrawing(TBool aFlag)
+    {
+    if(iExtension->iDisableDrawing == aFlag)
+        return;
+    iExtension->iDisableDrawing = aFlag;
+    TPtrC ptr;
+    ptr.Set(reinterpret_cast<const TUint16*>(&aFlag),sizeof(aFlag)/sizeof(TUint16));
+    
+    SignalOwner(ESignalDisableUpdating,ptr);
+    }
+
 //end of file
--- a/textinput/peninputarc/src/peninputserverapp/keyrotator.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputserverapp/keyrotator.cpp	Tue May 25 13:03:44 2010 +0300
@@ -18,7 +18,7 @@
 #include "keyrotator.h"
 #include <UikonInternalPSKeys.h>
 #include <PSVariables.h>
-#include <AknPriv.rsg>
+#include <aknpriv.rsg>
 #include <barsread.h>
 #include <barsc.h>
 #include <bautils.h>
--- a/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp	Tue May 25 13:03:44 2010 +0300
@@ -528,7 +528,10 @@
 
     if(!iUiLayout)
         return;
-    
+
+    TBool notDraw = EFalse;
+    iUiLayout->HandleCommand(ECmdPeninputDisableLayoutDrawing,(unsigned char*)&notDraw);
+  
     // move it out from if(!iActive) to make sure that msg bubble can be 
     // shown if fast swap from other application to msg application.
     TBool bNeedWait = AnimOpNeedWaiting(ESignalPenUiActivated);
@@ -1204,6 +1207,13 @@
 		ClearSpriteGc();
         DeactivateSprite();
         iDestroyingLayout = ETrue;
+        if(iUseWindowCtrl)
+		   {
+		   if(iPenUiCtrl)
+		       {
+			   iPenUiCtrl->Clean();
+			   }
+		   }
         iUiLayout->Destroy();
         iUiLayout = NULL;    
         iDestroyingLayout = EFalse;
@@ -1307,8 +1317,12 @@
         iUseWindowCtrl = ETrue;
 
         if(iUseWindowCtrl)
-            {            
-        iPenUiCtrl->SetExtent(layoutRect.iTl,layoutSize);
+            {
+#ifdef FIX_FOR_NGA
+            TBool flag = ETrue;
+            iUiLayout->HandleCommand(ECmdPeninputEnableOwnBitmap,reinterpret_cast<TUint8*>(&flag));
+#endif            
+            iPenUiCtrl->SetExtent(layoutRect.iTl,layoutSize);
             if(iAnimObj)
                 {
                 iAnimObj->AddEnalbeSpriteCmd(EFalse);
@@ -1563,10 +1577,6 @@
     return;
     }
 
-#ifndef FIX_FOR_NGA
-#define FIX_FOR_NGA
-#endif
-
 //MLayoutOwner
 // ---------------------------------------------------------------------------
 // CPeninputServer::UpdateArea
@@ -1901,15 +1911,11 @@
         	    }
         	    break;
 
-        	case ESignalPopupWndClosed:
-        	    {        	    
-        	    if(iUseWindowCtrl)
+        	default:
+        	    if(iUseWindowCtrl)                    
         	        {
-        	        iPenUiCtrl->ClosePopup();
+                    iPenUiCtrl->HandleNGASpecificSignal(aEventType, aEventData);
         	        }
-        	    }
-        	    break;
-        	default:
         		break;
         	}
         }
@@ -2117,9 +2123,17 @@
             }
         return;    
         }
-*/    if(iActive && !iPrevActive && 
-       iUiLayout->PenInputType() != EPluginInputModeFSQ && 
-       iBackgroudDefaultOri == CAknAppUiBase::EAppUiOrientationUnspecified )
+*/    
+    TInt inputMode = iUiLayout ? iUiLayout->PenInputType() : EPluginInputModeNone;
+	
+    TBool isArabicFingerInput = (inputMode == EPluginInputModeFingerHwr && iInputLanguage == ELangArabic);
+    
+    if(isArabicFingerInput)
+        {
+        return;
+        }
+    
+	if(iActive && !iPrevActive && inputMode != EPluginInputModeFSQ && iBackgroudDefaultOri == CAknAppUiBase::EAppUiOrientationUnspecified )
         {
         
         iPrevActive = ETrue;
--- a/textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp	Tue May 25 13:03:44 2010 +0300
@@ -29,10 +29,7 @@
 #include <e32property.h>
 #include <avkondomainpskeys.h>
 #endif
-
-#ifndef FIX_FOR_NGA
-#define FIX_FOR_NGA
-#endif
+#include "peninputcmd.h"
 
 const TInt KAknCapServerUid = 0x10207218;
 const TInt KAknNotifySrvUid = 0x10281EF2;  
@@ -74,7 +71,13 @@
         {
         iAutoRefreshTimer->Cancel();
         }
-    delete iAutoRefreshTimer;    
+    delete iAutoRefreshTimer; 
+	iPopRegion.Close();
+	iBubblesArea.Close();
+    iBubblesMaskArea.Close();
+	iBubblesPos.Close();
+    
+	delete iCursorWnd;   
 }
 
 void CPenUiWndCtrl::ConstructL()
@@ -84,7 +87,7 @@
 
     Window().SetRequiredDisplayMode( EColor16MA );
     iIncallBubble = CAknIncallBubble::NewL();        
-    MakeVisible( EFalse );
+
 #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS    
     // only change registration, if not registered, don't register
     if (!GfxTransEffect::IsRegistered( this ) ) 
@@ -96,24 +99,39 @@
     iPopupWnd = CPenUiPopWnd::NewL(iWndGroup,iBitmap,this);
     
     iAutoRefreshTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+
+    iCursorWnd = new (ELeave) CCursorWindow(this);
+    //iCursorWnd->ConstructL(this);
+    iCursorWnd->SetContainerWindowL(*this);
+    
+    MakeVisible( EFalse );
 }
 
 
 void CPenUiWndCtrl::Draw(const TRect& aRect) const
     {
+    if(iNotUpdating)
+        return;
+    
     CWindowGc& gc = SystemGc();
         
     if ( iShowPopup ) 
         {
         //layout is extended by popup
-        TRect rect = aRect;
-        rect.Intersection( iLayoutClipRect );        
-        TPoint pos = rect.iTl - iLayoutClipRect.iTl;
-        gc.BitBlt( pos, iBitmap, rect );
-        return;
+        gc.SetClippingRect( iLayoutClipRect );
         }
-    
-    gc.BitBlt(aRect.iTl,iBitmap,aRect);
+
+	#ifdef FIX_FOR_NGA
+	gc.BitBlt(TPoint(0,0),iBitmap,Rect());
+
+	//draw bubble
+	for(TInt i = 0 ; i < iBubblesArea.Count(); ++i)
+		{
+		gc.BitBlt(iBubblesPos[i].iTl,iBubblesArea[i]);
+		}
+	#else    
+		gc.BitBlt(aRect.iTl,iBitmap,aRect);
+	#endif            
     }
 
 void CPenUiWndCtrl::RefreshUI()
@@ -133,6 +151,152 @@
     
     }
 
+void CPenUiWndCtrl::Clean()
+    {
+    iCursorBmp = NULL;
+    iBubblesArea.Reset();
+    iBubblesPos.Reset();
+	iBubblesMaskArea.Close();
+	iPopRegion.Close();
+    iChangedBmp= NULL;
+    iBackground = EFalse;
+    iNotUpdating = EFalse;
+    }
+
+CCursorWindow::CCursorWindow(CPenUiWndCtrl* aParent)
+                            :iParent(aParent) 
+    {
+    }
+
+void CCursorWindow::SetCursorVisible(TBool aFlag)
+    {
+    iCursorVisible = aFlag;
+    DrawNow();
+    }
+void CCursorWindow::Draw(const TRect &aRect ) const
+    {
+    if(!iCursorVisible)
+        return;
+   
+    CWindowGc& gc = SystemGc();
+    iParent->DrawCursor(gc);  
+    }
+
+void CPenUiWndCtrl::DrawCursor(CWindowGc& aGc) const
+    {
+    aGc.SetPenColor(KRgbBlack);
+    aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+    aGc.SetBrushColor(KRgbBlack);
+    aGc.SetDrawMode(CGraphicsContext::EDrawModeNOTSCREEN);
+    aGc.SetPenStyle(CGraphicsContext::ESolidPen);
+    aGc.SetPenSize( TSize(1,1));
+    
+    TRect drawRect = iCursorRect;
+    if(!iPopRegion.IsEmpty() && iPopRegion.Intersects(iCursorRect))
+        {
+        RRegion r;
+        r.AddRect(iCursorRect);
+        const TRect* rl = iPopRegion.RectangleList();
+        
+        for(TInt i = 0 ; i < iPopRegion.Count(); ++i)
+            {
+            drawRect = iCursorRect;
+            drawRect.Intersection(rl[i]);
+            if(!drawRect.IsEmpty())
+                r.SubRect(drawRect);
+            }
+        
+        for(TInt ii = 0; ii < r.Count(); ++ii)
+            {
+        aGc.DrawRect(r.RectangleList()[ii]);
+            }
+        r.Close();
+        }
+    else
+        aGc.DrawRect(iCursorRect);
+
+    // restore normal draw mode
+    aGc.SetDrawMode(CGraphicsContext::EDrawModePEN);
+    aGc.SetBrushStyle(CGraphicsContext::ENullBrush);
+    
+    }
+void CPenUiWndCtrl::UpdateCursor(TBool aOnFlag,const CFbsBitmap* aCursorBmp,const TRect& aRect)
+    {
+    if(iNotUpdating || !IsReadyToDraw())
+        {
+        //some times when layout is diabled, the cursor is still change its pos, and draw to the last place
+        //when layout enabled. So we set the cursor invisible, and wait for next cursor updating event.
+		iCursorWnd->SetCursorVisible(EFalse);
+        return;
+        }
+    
+    iCursorBmp = const_cast<CFbsBitmap*>(aCursorBmp);
+    iCursorPos = aRect.iTl;
+	
+    if(iCursorRect != aRect)
+        {
+        iCursorRect = aRect;
+        iCursorWnd->SetRect(iCursorRect);
+        }
+    iCursorWnd->SetCursorVisible(aOnFlag);
+    }
+	
+void CPenUiWndCtrl::UpdateBubble(const CFbsBitmap* aBmp,const CFbsBitmap* aMask,
+                                                const TRect& aPos,TBool aFlag)
+    {
+    TInt idx = iBubblesArea.Find(aBmp);
+    
+    if(aFlag)
+        {
+        if(KErrNotFound == idx)
+            {
+            iBubblesArea.Append(aBmp);
+            iBubblesMaskArea.Append(aMask);
+            iBubblesPos.Append(aPos);
+            }
+        else
+            {
+            iBubblesPos[idx] = aPos;
+            }
+
+        }
+    else
+        {
+        //remove
+        if(idx != KErrNotFound)
+            {
+            iBubblesArea.Remove(idx);
+            iBubblesMaskArea.Remove(idx);
+            iBubblesPos.Remove(idx);            
+            }        
+        }
+    Invalidate(Rect(), ETrue);
+    }
+void CPenUiWndCtrl::UpdateICFArea(const CFbsBitmap* aBmp,const TPoint& aPos)
+    {
+    iICFBmp = const_cast<CFbsBitmap*>(aBmp);
+    iIcfPos = aPos;
+    Invalidate(Rect(), ETrue);   
+    }
+void CPenUiWndCtrl::UpdateChangedArea(const CFbsBitmap* aBmp,const TRect& aPos,TBool aFlag)
+    {
+    UpdateBubble(aBmp,0,aPos,aFlag);
+    return;
+
+    
+    }
+void CPenUiWndCtrl::SetPopupArea(const TRect& aRect, TBool aFlag)
+    {
+    if(aFlag) //add pop area
+        {
+        iPopRegion.AddRect(aRect);
+        }
+    else
+        {
+        iPopRegion.SubRect(aRect);
+        }
+    }
+
 TInt CPenUiWndCtrl::WndPriority()
     {
     return iPriority;
@@ -232,6 +396,7 @@
 
 void CPenUiWndCtrl::ClosePenUi(TBool aResChanging)
     {
+    iCursorBmp = NULL;
     if (aResChanging)
         {
         TRAP_IGNORE(iIncallBubble->SetIncallBubbleFlagsL( EAknStatusBubbleInputHide ));
@@ -271,13 +436,10 @@
         }
 #endif // RD_UI_TRANSITION_EFFECTS_POPUPS
 
-    //iResourceChange = EFalse;
     iShowPopup = EFalse;
     iWndGroup.SetOrdinalPosition( -1, ECoeWinPriorityNormal-1 );
     DrawableWindow()->SetOrdinalPosition(-1, ECoeWinPriorityNormal-1 );
     TRAP_IGNORE(iIncallBubble->SetIncallBubbleFlagsL( EAknStatusBubbleInputHide ));
-    //MakeVisible( EFalse );
-      
 }
 
 
@@ -465,6 +627,181 @@
     iResourceChange = aResourceChange;
     }
     
+void CPenUiWndCtrl::HandleNGASpecificSignal(TInt aEventType, const TDesC& aEventData)
+    {
+    switch(aEventType)
+        {
+        case ESignalPopupWndClosed:
+            {               
+            ClosePopup();
+            }               
+            break;
+        case ESignalUpdateCursor :
+            {
+            struct SData
+                {
+                TBool onOff;
+                CFbsBitmap* bmp;
+                TRect rect;
+                } data;
+            
+            data = * (reinterpret_cast<SData*>( const_cast<TUint16*>( aEventData.Ptr() )));
+            UpdateCursor(data.onOff,data.bmp,data.rect);
+              
+            }
+            break;
+        case ESignalPopupArea:
+            {
+            struct SData
+                {
+                TRect rr;
+                TBool flag;
+                } data;
+            
+            data = * (reinterpret_cast<SData*>( const_cast<TUint16*>( aEventData.Ptr() )));
+            SetPopupArea(data.rr,data.flag);
+            }
+            break;
+        case ESignalUpdateICFArea:            
+            {
+            struct SData
+                {
+                CFbsBitmap* bmp;                        
+                TPoint pos;
+                } data;
+            
+            data = * (reinterpret_cast<SData*>( const_cast<TUint16*>( aEventData.Ptr() )));
+            UpdateICFArea(data.bmp,data.pos);
+            }
+            break;
+        case ESignalUpdateBubble:
+            {
+            struct SData
+                {
+                TBool flag;
+                TRect pos;
+                CFbsBitmap* bmp;
+                CFbsBitmap* mask;
+                } data;
+            data = * (reinterpret_cast<SData*>( const_cast<TUint16*>( aEventData.Ptr() )));
+            UpdateBubble(data.bmp,data.mask,data.pos,data.flag);
+            }
+            break;
+        case ESignalUpdateChangedArea:
+            {
+            struct SData
+                {
+                TBool flag;
+                CFbsBitmap* bmp;
+                TRect pos;
+                } data;
+            data = * (reinterpret_cast<SData*>( const_cast<TUint16*>( aEventData.Ptr() )));
+            UpdateChangedArea(data.bmp,data.pos,data.flag);
+            }
+            break;
+        case ESignalRegisterBkControl:
+            {
+            
+            struct SData
+                {
+                //TBool bChangeFrameId;
+        
+                TAknsItemID frameID;
+                TAknsItemID centerID;        
+                RArray<TCommonBgCtrlSubItem> *subItems;
+                } data;
+            data = * (reinterpret_cast<SData*>( const_cast<TUint16*>( aEventData.Ptr() )));
+            iSubItems = data.subItems;
+            iFrameID = data.frameID;
+            iCenterID = data.centerID;
+            iBackground = ETrue;
+            }
+            break;
+        case ESignalDisableUpdating:
+            {
+            iNotUpdating = * (reinterpret_cast<TBool*>( const_cast<TUint16*>( aEventData.Ptr() )));
+            }
+			break;
+        case ESignalDrawBackground:
+            {
+            struct SData
+                {
+                CFbsBitGc* gc;
+                CFbsBitmap* bmp;
+                TRect rect;
+                } data;
+            data = * (reinterpret_cast<SData*>( const_cast<TUint16*>( aEventData.Ptr() )));
+            DrawBubbleAsBackground(data.gc,data.bmp,data.rect);
+            }
+            break;
+        default:
+            break;
+        }
+    
+    }
+
+void CPenUiWndCtrl::DrawBkground(CWindowGc& aGc,const TRect& aRect)  const
+    {
+    
+    DrawFrame(aGc,aRect, iFrameID, iCenterID);
+    
+    for( TInt i = 0; i < (*iSubItems).Count(); i++ )
+        {
+        if( (*iSubItems)[i].iIsShow )
+            {
+            DrawFrame(aGc, (*iSubItems)[i].iRect, 
+                       (*iSubItems)[i].iFrameID, 
+                       (*iSubItems)[i].iCenterID );                
+            }
+        }       
+    
+    }
+
+void CPenUiWndCtrl::DrawBubbleAsBackground(CFbsBitGc* aGc, CFbsBitmap* aBmp, const TRect& aRect)
+    {
+    for(TInt i = 0 ; i < iBubblesArea.Count(); ++i)
+        {
+        if(iBubblesArea[i] != aBmp) //not draw same bitmap
+            {
+            //gc.BitBlt(iBubblesPos[i],iBubblesArea[i]);
+            TRect r = aRect;
+            TRect rect2 = iBubblesPos[i];
+            r.Intersection(rect2);
+            if(!r.IsEmpty())
+                {
+                TRect src = r;
+                r.Move(TPoint(-aRect.iTl.iX,-aRect.iTl.iY));
+                src.Move(TPoint(-rect2.iTl.iX,-rect2.iTl.iY));
+                aGc->BitBlt(r.iTl, iBubblesArea[i], src);
+                }
+            }
+        }
+    
+    }
+
+
+CCoeControl* CPenUiWndCtrl::ComponentControl(TInt) const
+    {
+    return iCursorWnd;
+    }
+TInt CPenUiWndCtrl::CountComponentControls() const
+    {
+    return 1;
+    }
+
+
+void CPenUiWndCtrl::DrawFrame(CWindowGc& aGc, const TRect& aRect,TAknsItemID aFrameID,
+                                                TAknsItemID aCenterID )  const
+    {    
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRect innerRect = aRect;
+    innerRect.Shrink( 4, 4 );
+    
+    AknsDrawUtils::DrawFrame(
+                            skin, aGc, 
+                            aRect, innerRect, 
+                            aFrameID, aCenterID);
+    }
 
 void CPenUiWndCtrl::RestartRefreshTimer()
     {
--- a/textinput/peninputcommonctrls/bwins/peninputcommonctrlsU.DEF	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputcommonctrls/bwins/peninputcommonctrlsU.DEF	Tue May 25 13:03:44 2010 +0300
@@ -347,3 +347,15 @@
 	?CancelPointerDownL@CAknFepCtrlCommonButton@@UAEXXZ @ 346 NONAME ; void CAknFepCtrlCommonButton::CancelPointerDownL(void)
 	?SetHighlightCell@CFepCtrlDropdownList@@QAEXHHH@Z @ 347 NONAME ; void CFepCtrlDropdownList::SetHighlightCell(int, int, int)
 	?Hide@CFepCtrlDropdownList@@UAEXH@Z @ 348 NONAME ; void CFepCtrlDropdownList::Hide(int)
+	?HandleResourceChange@CPeninputVkbCtrlExt@@MAEXH@Z @ 349 NONAME ; void CPeninputVkbCtrlExt::HandleResourceChange(int)
+	?CancelPointerDownL@CAknFepCtrlLongPressButton@@MAEXXZ @ 350 NONAME ; void CAknFepCtrlLongPressButton::CancelPointerDownL(void)
+	?HandlePointerLeave@CAknFepCtrlLongPressButton@@MAEXABVTPoint@@@Z @ 351 NONAME ; void CAknFepCtrlLongPressButton::HandlePointerLeave(class TPoint const &)
+	?ConstructL@CAknFepCtrlLongPressButton@@IAEXXZ @ 352 NONAME ; void CAknFepCtrlLongPressButton::ConstructL(void)
+	?HandlePointerDownEventL@CAknFepCtrlLongPressButton@@MAEPAVCFepUiBaseCtrl@@ABVTPoint@@@Z @ 353 NONAME ; class CFepUiBaseCtrl * CAknFepCtrlLongPressButton::HandlePointerDownEventL(class TPoint const &)
+	??0CAknFepCtrlLongPressButton@@IAE@PAVCFepUiLayout@@HHHVTAknsItemID@@11@Z @ 354 NONAME ; CAknFepCtrlLongPressButton::CAknFepCtrlLongPressButton(class CFepUiLayout *, int, int, int, class TAknsItemID, class TAknsItemID, class TAknsItemID)
+	?NewLC@CAknFepCtrlLongPressButton@@SAPAV1@PAVCFepUiLayout@@HHHVTAknsItemID@@11@Z @ 355 NONAME ; class CAknFepCtrlLongPressButton * CAknFepCtrlLongPressButton::NewLC(class CFepUiLayout *, int, int, int, class TAknsItemID, class TAknsItemID, class TAknsItemID)
+	?HandlePointerUpEventL@CAknFepCtrlLongPressButton@@MAEPAVCFepUiBaseCtrl@@ABVTPoint@@@Z @ 356 NONAME ; class CFepUiBaseCtrl * CAknFepCtrlLongPressButton::HandlePointerUpEventL(class TPoint const &)
+	?NewL@CAknFepCtrlLongPressButton@@SAPAV1@PAVCFepUiLayout@@HHHVTAknsItemID@@11@Z @ 357 NONAME ; class CAknFepCtrlLongPressButton * CAknFepCtrlLongPressButton::NewL(class CFepUiLayout *, int, int, int, class TAknsItemID, class TAknsItemID, class TAknsItemID)
+	??1CAknFepCtrlLongPressButton@@UAE@XZ @ 358 NONAME ; CAknFepCtrlLongPressButton::~CAknFepCtrlLongPressButton(void)
+	?HandleTimerOut@CAknFepCtrlLongPressButton@@UAEXPBVCAknFepTimer@@@Z @ 359 NONAME ; void CAknFepCtrlLongPressButton::HandleTimerOut(class CAknFepTimer const *)
+	?CancelTimer@CAknFepCtrlLongPressButton@@QAEXXZ @ 360 NONAME ; void CAknFepCtrlLongPressButton::CancelTimer(void)
--- a/textinput/peninputcommonctrls/eabi/peninputcommonctrlsU.DEF	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputcommonctrls/eabi/peninputcommonctrlsU.DEF	Tue May 25 13:03:44 2010 +0300
@@ -473,4 +473,22 @@
 	_ZN20CFepCtrlDropdownList10ReDrawRectERK5TRect @ 472 NONAME
 	_ZN23CAknFepCtrlCommonButton18CancelPointerDownLEv @ 473 NONAME
 	_ZN20CFepCtrlDropdownList4HideEi @ 474 NONAME
+	_ZN19CPeninputVkbCtrlExt20HandleResourceChangeEi @ 475 NONAME
+	_ZN26CAknFepCtrlLongPressButton10ConstructLEv @ 476 NONAME
+	_ZN26CAknFepCtrlLongPressButton11CancelTimerEv @ 477 NONAME
+	_ZN26CAknFepCtrlLongPressButton14HandleTimerOutEPK12CAknFepTimer @ 478 NONAME
+	_ZN26CAknFepCtrlLongPressButton18CancelPointerDownLEv @ 479 NONAME
+	_ZN26CAknFepCtrlLongPressButton18HandlePointerLeaveERK6TPoint @ 480 NONAME
+	_ZN26CAknFepCtrlLongPressButton21HandlePointerUpEventLERK6TPoint @ 481 NONAME
+	_ZN26CAknFepCtrlLongPressButton23HandlePointerDownEventLERK6TPoint @ 482 NONAME
+	_ZN26CAknFepCtrlLongPressButton4NewLEP12CFepUiLayoutiii11TAknsItemIDS2_S2_ @ 483 NONAME
+	_ZN26CAknFepCtrlLongPressButton5NewLCEP12CFepUiLayoutiii11TAknsItemIDS2_S2_ @ 484 NONAME
+	_ZN26CAknFepCtrlLongPressButtonC1EP12CFepUiLayoutiii11TAknsItemIDS2_S2_ @ 485 NONAME
+	_ZN26CAknFepCtrlLongPressButtonC2EP12CFepUiLayoutiii11TAknsItemIDS2_S2_ @ 486 NONAME
+	_ZN26CAknFepCtrlLongPressButtonD0Ev @ 487 NONAME
+	_ZN26CAknFepCtrlLongPressButtonD1Ev @ 488 NONAME
+	_ZN26CAknFepCtrlLongPressButtonD2Ev @ 489 NONAME
+	_ZTI26CAknFepCtrlLongPressButton @ 490 NONAME
+	_ZTV26CAknFepCtrlLongPressButton @ 491 NONAME
+	_ZThn804_N26CAknFepCtrlLongPressButton14HandleTimerOutEPK12CAknFepTimer @ 492 NONAME
 
--- a/textinput/peninputcommonctrls/group/bld.inf	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputcommonctrls/group/bld.inf	Tue May 25 13:03:44 2010 +0300
@@ -43,6 +43,7 @@
 ../inc/peninputbuttons/peninputrawkeybutton.inl             |../../../inc/peninputrawkeybutton.inl
 ../inc/peninputbuttons/peninputcommonbutton.h               |../../../inc/peninputcommonbutton.h
 ../inc/peninputbuttons/peninputmultiimagebutton.h               |../../../inc/peninputmultiimagebutton.h
+../inc/peninputbuttons/peninputlongpressbutton.h               |../../../inc/peninputlongpressbutton.h
 
 // From peninputbasewindow
 ../inc/peninputbasewindow/peninputbasewindow.h              |../../../inc/peninputbasewindow.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrls/inc/peninputbuttons/peninputlongpressbutton.h	Tue May 25 13:03:44 2010 +0300
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2002-2005 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:  Interface of normal button and multidisplay button
+*
+*/
+
+
+#ifndef C_CAKNFEPCTRLLONGPRESSBUTTON_H
+#define C_CAKNFEPCTRLLONGPRESSBUTTON_H
+
+// system includes
+#include <peninputlayoutbasecontrol.h>
+#include <peninputlayoutbutton.h>
+#include <peninputpluginutils.h>
+#include <peninputeventbutton.h>
+
+// forward declarations
+class TResourceReader;
+
+/**
+ *  CAknFepCtrlLongPressButton
+ *
+ *  @lib fepcommonctrls.lib
+ *  @since S60 v3.2
+ */
+class CAknFepCtrlLongPressButton: public CAknFepCtrlEventButton, public MAknFepTimerHandler
+{
+public:
+    
+    /**
+     * Symbian constructor.
+     *
+     * @since S60 v3.2
+     * @param aUiLayout The layout
+     * @param aControlId The control id
+     * @param aEvent An event to be sent
+     * @param aUnicode A Unicode value to be sent
+     * @return Pointer to created CAknFepCtrlLongPressButton object
+     */
+    IMPORT_C static CAknFepCtrlLongPressButton* NewL(CFepUiLayout* aUiLayout, 
+                                                  TInt aControlId, 
+                                                  TInt aEvent = 0xFFFF,
+                                                  TInt aUnicode = 0,
+                                                  TAknsItemID aNormalID = KAknsIIDQsnFrFunctionButtonNormal,
+                                                  TAknsItemID aPressedID = KAknsIIDQsnFrFunctionButtonPressed,
+                                                  TAknsItemID aInactiveID = KAknsIIDQsnFrFunctionButtonInactive);
+
+    /**
+     * Symbian constructor.
+     *
+     * @since S60 v3.2
+     * @param aUiLayout The layout
+     * @param aControlId The control id
+     * @param aEvent An event to be sent
+     * @param aUnicode A Unicode value to be sent
+     * @return Pointer to created CAknFepCtrlLongPressButton object
+     */
+    IMPORT_C static CAknFepCtrlLongPressButton* NewLC(CFepUiLayout* aUiLayout, 
+                                                   TInt aControlId, 
+                                                   TInt aEvent = 0xFFFF,
+                                                   TInt aUnicode = 0,
+                                                  TAknsItemID aNormalID = KAknsIIDQsnFrFunctionButtonNormal,
+                                                  TAknsItemID aPressedID = KAknsIIDQsnFrFunctionButtonPressed,
+                                                  TAknsItemID aInactiveID = KAknsIIDQsnFrFunctionButtonInactive);
+    /**
+     * destructor.
+     *
+     * @since S60 v3.2
+     * @return None
+     */
+    IMPORT_C virtual ~CAknFepCtrlLongPressButton();
+
+    /**
+     * Cancel long press timer
+     *
+     * @since S60 v3.2
+     * @return None
+     */
+    IMPORT_C void CancelTimer();
+
+// from base class MAknFepHwrTimerHandler
+    
+    /**
+     * from MAknFepHwrTimerHandler
+     * HandleTimerOut. Handling time out event
+     *
+     * @since S60 v3.2
+     * @param aTimer The timer which sending the request
+     * @return None
+     */                
+    IMPORT_C void HandleTimerOut(const CAknFepTimer* aTimer);
+
+protected:
+    
+    /**
+     * C++ constructor.
+     *
+     * @since S60 v3.2
+     * @param aUiLayout Ui Layout who contains this control
+     * @param aCtrlId Control Id
+     * @param aEvent An event to be sent
+     * @param aUnicode A Unicode value to be sent     
+     * @return None 
+     */
+    IMPORT_C CAknFepCtrlLongPressButton(CFepUiLayout* aUiLayout, 
+                                     TInt aCtrlId,
+                                     TInt aEvent,
+                                     TInt aUnicode,
+                                     TAknsItemID aNormalID = KAknsIIDQsnFrFunctionButtonNormal,
+                                     TAknsItemID aPressedID = KAknsIIDQsnFrFunctionButtonPressed,
+                                     TAknsItemID aInactiveID = KAknsIIDQsnFrFunctionButtonInactive);
+
+// from base class CButtonBase
+
+    /**
+     * From CButtonBase
+     * Handle button down event. start long press timer        
+     *
+     * @since S60 v3.2
+     * @param aPt Point position
+     * @return The control who handles the event
+     */                
+    IMPORT_C CFepUiBaseCtrl* HandlePointerDownEventL(const TPoint& aPt);
+    
+    /**
+     * From CButtonBase
+     * Handle button up event. cancel the timer
+     *
+     * @since S60 v3.2
+     * @param aPt Point position
+     * @return The control who handles the event
+     */                
+    IMPORT_C CFepUiBaseCtrl* HandlePointerUpEventL(const TPoint& aPt);
+    
+    /**
+     * From CButtonBase
+     * Handle pointer leave event. 
+     *
+     * @since S60 v3.2
+     * @param aPoint current pointer position
+     * @return Nothing
+     */
+    IMPORT_C void HandlePointerLeave(const TPoint& aPoint);
+    
+    /**
+     * From CButtonBase
+     * Cancel pointer down event.
+     *
+     * @since S60 v3.2
+     * @param aPoint current pointer position
+     * @return Nothing
+     */
+    IMPORT_C void CancelPointerDownL();
+    
+    /**
+     * Symbian 2nd phase constructor.
+     */
+    IMPORT_C void ConstructL();  
+    
+private:
+
+    /**
+     * interval of long press
+     */
+    TTimeIntervalMicroSeconds32 iLongPressInterval;
+
+    /**
+     * long press timer (Own)
+     */
+    CAknFepTimer* iLongPressTimer;
+    
+    /**
+     * indicates whether long press has occurred
+     */
+    TBool iIsLongPress;
+   
+};
+
+#endif // C_CAKNFEPCTRLLONGPRESSBUTTON_H
+
+// End Of File
--- a/textinput/peninputcommonctrls/inc/peninputvkbctrl/peninputvkbctrlext.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputcommonctrls/inc/peninputvkbctrl/peninputvkbctrlext.h	Tue May 25 13:03:44 2010 +0300
@@ -186,6 +186,8 @@
      * The left top point
      */
     TPoint iLeftTopPoint;
+protected:
+    virtual IMPORT_C void HandleResourceChange(TInt aType);
     };  
 
 #endif // C_CPENINPUTVKBCTRLEXT_H
--- a/textinput/peninputcommonctrls/src/peninputbuttons/peninputbutton.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputcommonctrls/src/peninputbuttons/peninputbutton.cpp	Tue May 25 13:03:44 2010 +0300
@@ -35,6 +35,7 @@
 #include <peninputmultiimagebutton.h>
 #include <peninputcommonctrls.hrh>
 #include <peninputcommonlayoutglobalenum.h>
+#include <peninputlongpressbutton.h>
 
 const TInt KInvalidBmp = -1 ;
 
@@ -2454,6 +2455,10 @@
     //PRINTF((_L("CAknFepCtrlRepeatButton::HandleButtonDown()\n")));
     
     //PRINTF((_L("Set long press Timer\n")));
+    if( IsDimmed() )
+    	{
+    	return NULL;
+    	}
     iLongPressTimer->SetTimer(iLongPressInterval);
     TInt unicode = Unicode();
     TPtrC ptr = (TUint16*)(&unicode);
@@ -4099,4 +4104,188 @@
     iForground2BmpRect.Move( aOffset );
     }
 
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlLongPressButton* CAknFepCtrlLongPressButton::NewLC(CFepUiLayout* aUiLayout, 
+                                                                 TInt aCtrlId,
+                                                                 TInt aEvent,
+                                                                 TInt aUnicode,
+                                                                 TAknsItemID aNormalID,
+                                                                 TAknsItemID aPressedID,
+                                                                 TAknsItemID aInactiveID)
+    {
+    //PRINTF((_L("CAknFepCtrlLongPressButton::NewLC(), aCtrlId = %d\n"), aCtrlId));
+    CAknFepCtrlLongPressButton *self = new(ELeave) CAknFepCtrlLongPressButton(aUiLayout, 
+                                                                        aCtrlId, 
+                                                                        aEvent, 
+                                                                        aUnicode,
+                                                                        aNormalID,
+                                                                        aPressedID,
+                                                                        aInactiveID);
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    
+    return self;
+    }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlLongPressButton* CAknFepCtrlLongPressButton::NewL(CFepUiLayout* aUiLayout, 
+                                                                TInt aCtrlId,
+                                                                TInt aEvent,
+                                                                TInt aUnicode,
+                                                                TAknsItemID aNormalID,
+                                                                TAknsItemID aPressedID,
+                                                                TAknsItemID aInactiveID)
+    {
+    //PRINTF((_L("CAknFepCtrlLongPressButton::NewL(), aCtrlId = %d\n"), aCtrlId));
+    CAknFepCtrlLongPressButton *self = NewLC(aUiLayout, aCtrlId, aEvent, aUnicode,
+                                          aNormalID, aPressedID, aInactiveID);
+    CleanupStack::Pop(self);
+    
+    return self;
+    }
+        
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlLongPressButton::~CAknFepCtrlLongPressButton()
+    {
+    //PRINTF((_L("CAknFepCtrlLongPressButton::~CAknFepCtrlLongPressButton()\n")));
+    CancelTimer();
+
+    delete iLongPressTimer;
+    }
+    
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C CAknFepCtrlLongPressButton::CAknFepCtrlLongPressButton(CFepUiLayout* aUiLayout, 
+                                                          TInt aCtrlId,
+                                                          TInt aEvent,
+                                                          TInt aUnicode,
+                                                          TAknsItemID aNormalID,
+                                                          TAknsItemID aPressedID,
+                                                          TAknsItemID aInactiveID)
+    :CAknFepCtrlEventButton(aUiLayout, aCtrlId, aEvent, aUnicode,
+                                                        aNormalID,
+                                                        aPressedID,
+                                                        aInactiveID)
+    {
+    iLongPressInterval = KLongPressInterval;
+    }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlLongPressButton::ConstructL()
+    {
+    //PRINTF((_L("CAknFepCtrlLongPressButton::ConstructL()\n")));
+    BaseConstructL();
+    iIsLongPress = EFalse;
+    iLongPressTimer = CAknFepTimer::NewL(this);
+    }
+    
+// ---------------------------------------------------------
+// Time out event handler of long press timer
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlLongPressButton::HandleTimerOut(const CAknFepTimer* aTimer)
+    {
+    //PRINTF((_L("CAknFepCtrlLongPressButton::HandleTimerOut()--")));
+    if (aTimer == iLongPressTimer)
+        {
+        iIsLongPress = ETrue;
+        CancelTimer();
+        TInt unicode = Unicode();
+        TPtrC ptr = (TUint16*)(&unicode);
+        ReportEvent(EPeninputLayoutEventMultiRangeLongPress, ptr);
+        }
+    }
+
+// ---------------------------------------------------------
+// Handle button down start long press timer 
+// ---------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlLongPressButton::HandlePointerDownEventL(const TPoint& aPt)
+    {
+    //PRINTF((_L("CAknFepCtrlLongPressButton::HandleButtonDown()\n")));
+    //PRINTF((_L("Set long press Timer\n")));
+    if ( IsDimmed() )
+        {
+        return;
+        }
+    
+    iLongPressTimer->SetTimer(iLongPressInterval);
+
+    return CAknFepCtrlCommonButton::HandlePointerDownEventL(aPt);
+    }
+                                                          
+// ---------------------------------------------------------
+// Handle button up cancel timer
+// ---------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CAknFepCtrlLongPressButton::HandlePointerUpEventL(const TPoint& aPt)
+    {
+    //PRINTF((_L("CAknFepCtrlLongPressButton::HandleButtonUp()\n")));
+
+    if ( IsDimmed() )
+        {
+        return;
+        }
+
+    CancelTimer();
+    
+    if (!iIsLongPress)
+        {
+        TInt unicode = Unicode();
+        TPtrC ptr = (TUint16*)(&unicode);
+        ReportEvent(EPeninputLayoutEventMultiRange, ptr);   
+        }
+
+    iIsLongPress = EFalse;
+    
+    
+    return CAknFepCtrlCommonButton::HandlePointerUpEventL(aPt);
+    }
+
+// ---------------------------------------------------------
+// Handle pointer leave event cancel timer 
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlLongPressButton::HandlePointerLeave(const TPoint& aPoint)
+    {
+    CAknFepCtrlCommonButton::HandlePointerLeave(aPoint);
+
+    CancelTimer();
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepCtrlLongPressButton::CancelPointerDownL
+// Cancel pointer down event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C void CAknFepCtrlLongPressButton::CancelPointerDownL()
+    {
+    // No implementation needed
+    }
+
+// ---------------------------------------------------------
+// Cancel timer
+// ---------------------------------------------------------
+//
+EXPORT_C void CAknFepCtrlLongPressButton::CancelTimer()
+    {
+    //PRINTF((_L("CAknFepCtrlLongPressButton::CancelTimer()\n")));
+    iLongPressTimer->Cancel();
+    }
 //  End Of File
--- a/textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp	Tue May 25 13:03:44 2010 +0300
@@ -489,8 +489,17 @@
 	gc->SetPenSize(PenSize());
 
 	TBuf<KDisplayTextLen> buf;
-	AknBidiTextUtils::ConvertToVisualAndClip(item->iText, buf, *iFont,
-										 itemRect.Width(), itemRect.Width());
+	if ( iAlign == CGraphicsContext::ERight )
+	    {
+        AknBidiTextUtils::ConvertToVisualAndClip(item->iText, buf, *iFont,
+                                         itemRect.Width(), itemRect.Width(),
+                                         AknBidiTextUtils::ERightToLeft );
+	    }
+	else
+	    {
+        AknBidiTextUtils::ConvertToVisualAndClip(item->iText, buf, *iFont,
+                                         itemRect.Width(), itemRect.Width());
+	    }
 	gc->DrawText(buf, itemRect, baseLine, iAlign);
 	gc->DiscardFont();
     }
--- a/textinput/peninputcommonctrls/src/peninputvkbctrl/peninputvkbctrlext.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputcommonctrls/src/peninputvkbctrl/peninputvkbctrlext.cpp	Tue May 25 13:03:44 2010 +0300
@@ -392,3 +392,8 @@
     	}
     CleanupStack::PopAndDestroy( 1 );		
 	}
+	
+EXPORT_C void CPeninputVkbCtrlExt::HandleResourceChange(TInt aType)
+    {
+    CVirtualKeyboard::HandleResourceChange(aType);
+    }
--- a/textinput/peninputcommonlayout/inc/peninputcommonlayoutglobalenum.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputcommonlayout/inc/peninputcommonlayoutglobalenum.h	Tue May 25 13:03:44 2010 +0300
@@ -71,6 +71,7 @@
     EPeninputLayoutEventRightArrow,    
     
 	EPeninputLayoutEventMultiRange,
+	EPeninputLayoutEventMultiRangeLongPress,
     EPeninputLayoutEventLast = 2000  // user event starts from here, same as base control
     };
 
--- a/textinput/peninputfingerhwr/data/peninputfingerhwrcn.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwr/data/peninputfingerhwrcn.rss	Tue May 25 13:03:44 2010 +0300
@@ -251,7 +251,7 @@
     
     colormajorskinid=EAknsMajorSkin;
     textcolorgrp=EAknsMinorQsnTextColors;
-    textcoloridx=59;
+    textcoloridx=64;
     
     bordercolormajorskinid=EAknsMajorSkin;
     bordercolorgrp=EAknsMinorQsnOtherColors;
@@ -315,7 +315,7 @@
     
     colormajorskinid=EAknsMajorSkin;
     textcolorgrp=EAknsMinorQsnTextColors;
-    textcoloridx=59;
+    textcoloridx=64;
     
     bordercolormajorskinid=EAknsMajorSkin;
     bordercolorgrp=EAknsMinorQsnOtherColors;
--- a/textinput/peninputfingerhwr/src/peninputfingerhwrlayout.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwr/src/peninputfingerhwrlayout.cpp	Tue May 25 13:03:44 2010 +0300
@@ -1035,13 +1035,6 @@
         
         // The default candidate cell is not highlight
         iDataStore->SetHighlight(EFalse);
-              
-        iHwrWnd->UpdateLayout(EFalse);
-        
-        // Show two empty dropdown list       
-        iHwrWnd->CandidateList()->ResetAndClear();
-        iHwrWnd->PredictiveList()->ResetAndClear();
-        
 #else
         if(iDataStore->PrimaryRange() == ERangeEnglish)
             {
@@ -1052,18 +1045,6 @@
         
         // The default candidate cell is not highlight
         iDataStore->SetHighlight(EFalse);      
-        iHwrWnd->UpdateLayout(EFalse);
-        
-        // Show empty upper row in Native range
-        // Show fix English Symbol in English range
-        if(iDataStore->PrimaryRange() != ERangeEnglish)
-            {
-            iHwrWnd->CandidateList()->ResetAndClear();
-            }
-            
-        // Show empty lower row
-        iHwrWnd->PredictiveList()->ResetAndClear();
-        
 #endif
         }
         
--- a/textinput/peninputfingerhwr/src/peninputfingerhwrrangeselector.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwr/src/peninputfingerhwrrangeselector.cpp	Tue May 25 13:03:44 2010 +0300
@@ -111,7 +111,7 @@
     CapturePointer( EFalse );
     iPopupVisible = EFalse;
 
-    RootControl()->Draw();
+    
     UpdateArea( extendRect, EFalse );
     }
 
@@ -183,11 +183,6 @@
 CFepUiBaseCtrl* CPeninputFingerHwrRangeSelector::HandlePointerDownEventL(
     const TPoint& aPoint )
     {
-    // Cancel all highlighted button, when pressing down
-	iRangeChBtn->SetHighlight( EFalse );
-	iRangeEnBtn->SetHighlight( EFalse );
-	iRangeNumBtn->SetHighlight( EFalse );
-
     CFepUiBaseCtrl* ctrl = CControlGroup::HandlePointerDownEventL( aPoint );
     
     if ( !ctrl )
@@ -208,16 +203,26 @@
 CFepUiBaseCtrl* CPeninputFingerHwrRangeSelector::HandlePointerUpEventL(
     const TPoint& aPoint )
     {
+	if(IsPopup())
+	    {
+		if(iCurRangeActive)
+			{
+			if(iCurRange == EFingerHwrNativeRange)
+			    {
+				iRangeChBtn->SetHighlight(EFalse);
+				}
+			else if(iCurRange == EFingerHwrEnglishRange)
+                {
+				iRangeEnBtn->SetHighlight(EFalse);
+				}
+            else
+                {
+				iRangeNumBtn->SetHighlight(EFalse);
+				}			
+			}
+		}
     CFepUiBaseCtrl* ctrl = CControlGroup::HandlePointerUpEventL( aPoint );
 
-    // When upCtrl does not equal to down ctrl, restore the highlight button state.
-    if (ctrl != iCtrlWithPointerDown)
-         {
-         iRangeChBtn->SetHighlight( iCurRange == EFingerHwrNativeRange );
-         iRangeEnBtn->SetHighlight( iCurRange == EFingerHwrEnglishRange );
-         iRangeNumBtn->SetHighlight( iCurRange == EFingerHwrNumberRange );
-         }
-
     iRangeChBtn->CancelPointerDownL();
     iRangeEnBtn->CancelPointerDownL();
     iRangeNumBtn->CancelPointerDownL(); 
--- a/textinput/peninputfingerhwr/src/peninputfingerhwrwnd.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwr/src/peninputfingerhwrwnd.cpp	Tue May 25 13:03:44 2010 +0300
@@ -1781,6 +1781,9 @@
         {
         rect = iLafManager->CtrlRect( iVirtualNumpad->ControlId() );
         iVirtualNumpad->SetRect( rect );
+        
+        TAknTextLineLayout txtlayout = iLafManager->NumpadKeyTxtLayout();
+        iVirtualNumpad->SetTextLineLayout( txtlayout );
 
         const RPointerArray<CVirtualKey>& keys = iVirtualNumpad->KeyArray();
         RArray<TRect> rects;
@@ -1802,6 +1805,9 @@
         rect = iLafManager->CtrlRect( iVirtualSctpad->ControlId() );
         iVirtualSctpad->SetRect( rect );
         
+        TAknTextLineLayout txtlayout = iLafManager->SctpadKeyTxtLayout();
+        iVirtualSctpad->SetTextLineLayout( txtlayout );
+        
         const RPointerArray<CVirtualKey>& keys = iVirtualSctpad->KeyArray();
         RArray<TRect> rects;
         iLafManager->GetVirtualKeyRects( rects );
@@ -1821,6 +1827,9 @@
         {
         rect = iLafManager->CtrlRect( iVirtualSctpadFix->ControlId() );
         iVirtualSctpadFix->SetRect( rect );
+                
+        TAknTextLineLayout txtlayout = iLafManager->FixSctpadKeyTxtLayout();
+        iVirtualSctpadFix->SetTextLineLayout( txtlayout );
         
         const RPointerArray<CVirtualKey>& keys = iVirtualSctpadFix->KeyArray();
         RArray<TRect> rects;
--- a/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss	Tue May 25 13:03:44 2010 +0300
@@ -446,20 +446,20 @@
     
     imgmajorskinid=EAknsMajorGeneric;
     
-    nactive=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter;
-    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter_mask;
+    nactive=EMbmPeninputfingerhwrarQgn_indi_input_enter;
+    nactivemsk=EMbmPeninputfingerhwrarQgn_indi_input_enter_mask;
        
-    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter;
-    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter_mask;
+    nactivep=EMbmPeninputfingerhwrarQgn_indi_input_enter;
+    nactivepmsk=EMbmPeninputfingerhwrarQgn_indi_input_enter_mask;
     
-    active=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter;
-    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter_mask;
+    active=EMbmPeninputfingerhwrarQgn_indi_input_enter;
+    activemsk=EMbmPeninputfingerhwrarQgn_indi_input_enter_mask;
         
-    activep=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter;
-    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter_mask;
+    activep=EMbmPeninputfingerhwrarQgn_indi_input_enter;
+    activepmsk=EMbmPeninputfingerhwrarQgn_indi_input_enter_mask;
     
-    disable=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter;
-    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_arabic_enter_mask;
+    disable=EMbmPeninputfingerhwrarQgn_indi_input_enter;
+    disablemsk=EMbmPeninputfingerhwrarQgn_indi_input_enter_mask;
     }
 
    
--- a/textinput/peninputfingerhwrar/data/qgn_indi_input_arabic_backspace.svg	Tue May 11 16:31:42 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
-<defs>
-</defs>
-<polygon fill="none" points="22,22 2,22 2,1.999 22,1.999 "/>
-<rect fill="none" width="24" height="24"/>
-<polygon points="15.908,15.528 15.908,13.102 2,13.102 2,10.749 15.908,10.749 15.908,8.474 22,12.001 "/>
-</svg>
--- a/textinput/peninputfingerhwrar/data/qgn_indi_input_arabic_enter.svg	Tue May 11 16:31:42 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
-<defs>
-</defs>
-<rect fill="none" width="24" height="24"/>
-<polygon fill="none" points="22,22.002 2,22.002 2,1.999 22,1.999 "/>
-<polygon points="16.014,15.654 16.014,18.033 22,14.566 16.014,11.104 16.014,13.342 4.165,13.342 4.165,5.965 2,5.965 2,15.654 "/>
-</svg>
--- a/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_close.svg	Tue May 11 16:31:42 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
-<defs>
-</defs>
-<rect fill="none" width="24" height="24"/>
-<polygon fill="none" points="22,22.001 2,22.001 2,2 22,2 "/>
-<polygon fill="#28B304" points="18.383,2.377 10.146,15.546 3.887,9.787 2,12.324 12.157,21.625 22,4.679 "/>
-</svg>
--- a/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_1_2.svg	Tue May 11 16:31:42 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="48px" height="24px" viewBox="0 0 48 24" enable-background="new 0 0 48 24" xml:space="preserve">
-<defs>
-</defs>
-<rect fill="none" width="48" height="24"/>
-<polygon points="41.865,7.944 46,12 41.865,16.057 "/>
-<path d="M35.072,5.766l-0.367,0.021c-0.09,0.753-0.221,1.273-0.393,1.56c-0.303,0.527-0.855,0.792-1.646,0.792
-	c-0.752,0-1.465-0.296-2.139-0.887c-0.371-0.322-0.791-0.818-1.27-1.488l-0.691,2.11c0.932,1.151,1.629,2.159,2.096,3.027
-	c0.465,0.864,0.871,1.882,1.211,3.045c0.178,0.598,0.537,2.025,1.078,4.291h0.314c0-0.043,0.006-0.307,0.021-0.805
-	c0.016-0.49,0.023-0.846,0.023-1.063c0-1.246-0.051-2.238-0.15-2.982c-0.1-0.739-0.246-1.384-0.436-1.939
-	c-0.113-0.329-0.307-0.773-0.576-1.331c0.398,0.055,0.645,0.082,0.736,0.082c0.738,0,1.311-0.252,1.717-0.758
-	c0.369-0.463,0.555-1.078,0.555-1.852c0-0.316-0.006-0.64-0.021-0.965C35.119,6.299,35.098,6.012,35.072,5.766z"/>
-<path d="M16.327,10.237c-0.25-0.898-0.615-1.748-1.097-2.555C14.89,7.119,14.439,6.5,13.878,5.834l-1.036,2.277
-	c0.527,0.631,0.934,1.17,1.218,1.617c0.564,0.881,1.005,1.821,1.325,2.824c0.414,1.288,0.62,2.67,0.62,4.153
-	c-0.029,0.809-0.044,1.293-0.044,1.459h0.365c0.178-1.26,0.277-1.992,0.299-2.195c0.099-0.832,0.149-1.564,0.149-2.193
-	C16.775,12.479,16.626,11.301,16.327,10.237z"/>
-<path d="M20.211,18.526l5.023-13.053h1.225l-5.042,13.053H20.211z"/>
-</svg>
--- a/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_1_3.svg	Tue May 11 16:31:42 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="48px" height="24px" viewBox="0 0 48 24" enable-background="new 0 0 48 24" xml:space="preserve">
-<defs>
-</defs>
-<path d="M37.436,5.763H37.07c-0.144,1.169-0.584,1.751-1.328,1.751c-0.369,0-0.648-0.128-0.847-0.391
-	c-0.201-0.258-0.326-0.712-0.384-1.36h-0.365c-0.115,0.648-0.316,1.145-0.609,1.498c-0.341,0.408-0.813,0.612-1.42,0.612
-	c-0.581,0-1.111-0.171-1.589-0.512c-0.427-0.305-0.825-0.759-1.194-1.358l-0.768,2.494c0.93,1.35,1.576,2.376,1.946,3.082
-	c0.481,0.933,0.822,1.889,1.021,2.872c0.197,0.987,0.299,2.248,0.299,3.786h0.438c0.171-1.069,0.275-1.81,0.316-2.218
-	c0.037-0.411,0.056-0.834,0.056-1.276c0-0.789-0.056-1.465-0.166-2.021c-0.111-0.561-0.271-1.087-0.478-1.587
-	c-0.116-0.271-0.307-0.664-0.57-1.176c0.521,0,0.967-0.098,1.338-0.298c0.373-0.201,0.678-0.5,0.922-0.896
-	c0.143,0.26,0.363,0.451,0.664,0.576c0.3,0.128,0.653,0.188,1.062,0.188c0.705,0,1.23-0.231,1.568-0.694
-	c0.339-0.463,0.509-1.133,0.509-2.01c0-0.042-0.011-0.192-0.027-0.448C37.444,6.122,37.436,5.918,37.436,5.763z"/>
-<rect fill="none" width="48" height="24"/>
-<polygon points="41.866,7.944 46,12 41.866,16.057 "/>
-<path d="M16.327,10.237c-0.25-0.898-0.615-1.748-1.097-2.555C14.89,7.119,14.439,6.5,13.878,5.834l-1.036,2.277
-	c0.527,0.631,0.934,1.17,1.218,1.617c0.564,0.881,1.005,1.821,1.325,2.824c0.414,1.288,0.62,2.67,0.62,4.153
-	c-0.029,0.808-0.044,1.292-0.044,1.459h0.365c0.178-1.261,0.277-1.992,0.299-2.196c0.099-0.831,0.149-1.564,0.149-2.192
-	C16.775,12.479,16.626,11.301,16.327,10.237z"/>
-<path d="M20.211,18.526l5.023-13.054h1.225l-5.042,13.054H20.211z"/>
-</svg>
--- a/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_2_2.svg	Tue May 11 16:31:42 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="48px" height="24px" viewBox="0 0 48 24" enable-background="new 0 0 48 24" xml:space="preserve">
-<defs>
-</defs>
-<rect fill="none" width="48" height="24"/>
-<polygon points="6.135,7.944 2,12 6.135,16.056 "/>
-<path d="M35.072,5.766l-0.367,0.021c-0.09,0.753-0.221,1.273-0.393,1.56c-0.303,0.527-0.855,0.792-1.646,0.792
-	c-0.752,0-1.465-0.296-2.139-0.887c-0.371-0.322-0.791-0.818-1.27-1.488l-0.691,2.11c0.932,1.151,1.629,2.159,2.096,3.027
-	c0.465,0.864,0.871,1.882,1.211,3.046c0.178,0.596,0.537,2.025,1.078,4.291h0.314c0-0.043,0.006-0.309,0.021-0.805
-	c0.016-0.49,0.023-0.848,0.023-1.063c0-1.246-0.051-2.238-0.15-2.982c-0.1-0.74-0.246-1.385-0.436-1.94
-	c-0.113-0.329-0.307-0.773-0.576-1.331c0.398,0.055,0.645,0.082,0.736,0.082c0.738,0,1.311-0.252,1.717-0.758
-	c0.369-0.463,0.555-1.078,0.555-1.852c0-0.316-0.006-0.64-0.021-0.965C35.119,6.299,35.098,6.012,35.072,5.766z"/>
-<path d="M20.211,18.527l5.023-13.054h1.225l-5.042,13.054H20.211z"/>
-<path d="M19.348,5.766l-0.366,0.021c-0.091,0.753-0.222,1.273-0.393,1.56c-0.304,0.527-0.856,0.792-1.647,0.792
-	c-0.752,0-1.465-0.296-2.138-0.887c-0.371-0.322-0.792-0.818-1.269-1.488l-0.692,2.11c0.932,1.151,1.629,2.159,2.095,3.027
-	c0.466,0.864,0.871,1.882,1.212,3.046c0.177,0.596,0.536,2.025,1.077,4.291h0.315c0-0.043,0.006-0.309,0.022-0.805
-	c0.014-0.49,0.023-0.848,0.023-1.063c0-1.246-0.052-2.238-0.151-2.982c-0.099-0.74-0.246-1.385-0.437-1.94
-	c-0.113-0.329-0.305-0.773-0.576-1.331c0.399,0.055,0.646,0.082,0.737,0.082c0.739,0,1.311-0.252,1.716-0.758
-	c0.37-0.463,0.556-1.078,0.556-1.852c0-0.316-0.006-0.64-0.022-0.965C19.395,6.299,19.375,6.012,19.348,5.766z"/>
-</svg>
--- a/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_2_3.svg	Tue May 11 16:31:42 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="48px" height="24px" viewBox="0 0 48 24" enable-background="new 0 0 48 24" xml:space="preserve">
-<defs>
-</defs>
-<rect fill="none" width="48" height="24"/>
-<path d="M37.436,5.763h-0.365c-0.145,1.169-0.584,1.751-1.328,1.751c-0.369,0-0.648-0.128-0.848-0.39
-	c-0.201-0.258-0.326-0.712-0.383-1.361h-0.365c-0.115,0.649-0.316,1.145-0.609,1.498c-0.342,0.408-0.813,0.612-1.42,0.612
-	c-0.582,0-1.111-0.17-1.59-0.512c-0.426-0.305-0.824-0.758-1.193-1.358l-0.768,2.494c0.93,1.349,1.576,2.375,1.945,3.082
-	c0.482,0.932,0.822,1.889,1.021,2.872c0.197,0.987,0.299,2.247,0.299,3.786h0.438c0.17-1.07,0.275-1.81,0.316-2.218
-	c0.037-0.411,0.055-0.835,0.055-1.276c0-0.789-0.055-1.465-0.166-2.021c-0.111-0.561-0.27-1.087-0.477-1.587
-	c-0.117-0.271-0.307-0.665-0.57-1.176c0.521,0,0.967-0.097,1.338-0.298c0.373-0.201,0.678-0.5,0.922-0.896
-	c0.143,0.259,0.363,0.451,0.664,0.576c0.299,0.127,0.652,0.188,1.061,0.188c0.705,0,1.23-0.231,1.568-0.694
-	c0.34-0.463,0.51-1.133,0.51-2.01c0-0.042-0.012-0.192-0.027-0.448C37.444,6.122,37.436,5.918,37.436,5.763z"/>
-<polygon points="41.866,7.944 46,12 41.866,16.056 "/>
-<polygon points="6.135,7.944 2,12 6.135,16.056 "/>
-<path d="M20.211,18.527l5.023-13.054h1.225l-5.042,13.054H20.211z"/>
-<path d="M17.889,5.693l-0.366,0.021c-0.091,0.753-0.222,1.273-0.393,1.56c-0.304,0.527-0.856,0.792-1.647,0.792
-	c-0.752,0-1.465-0.296-2.138-0.887c-0.371-0.322-0.792-0.818-1.269-1.488l-0.692,2.11c0.932,1.151,1.629,2.159,2.095,3.027
-	c0.466,0.864,0.871,1.882,1.212,3.046c0.177,0.596,0.536,2.025,1.077,4.291h0.315c0-0.043,0.006-0.309,0.022-0.805
-	c0.014-0.49,0.023-0.848,0.023-1.063c0-1.246-0.052-2.238-0.151-2.982c-0.099-0.74-0.246-1.385-0.437-1.94
-	c-0.113-0.329-0.305-0.773-0.576-1.331c0.399,0.055,0.646,0.082,0.737,0.082c0.739,0,1.311-0.252,1.716-0.758
-	c0.37-0.463,0.556-1.078,0.556-1.852c0-0.316-0.006-0.64-0.022-0.965C17.936,6.227,17.916,5.939,17.889,5.693z"/>
-</svg>
--- a/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_page_3_3.svg	Tue May 11 16:31:42 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="48px" height="24px" viewBox="0 0 48 24" enable-background="new 0 0 48 24" xml:space="preserve">
-<defs>
-</defs>
-<rect fill="none" width="48" height="24"/>
-<polygon points="6.135,7.944 2,12 6.135,16.057 "/>
-<path d="M20.211,18.526l5.023-13.054h1.225l-5.042,13.054H20.211z"/>
-<path d="M20.253,5.69h-0.366c-0.143,1.169-0.583,1.751-1.328,1.751c-0.369,0-0.649-0.128-0.847-0.39
-	c-0.201-0.258-0.326-0.712-0.384-1.361h-0.365c-0.114,0.649-0.316,1.145-0.609,1.498c-0.341,0.408-0.813,0.612-1.419,0.612
-	c-0.582,0-1.112-0.17-1.589-0.512c-0.427-0.305-0.826-0.758-1.195-1.358l-0.767,2.494c0.929,1.349,1.577,2.375,1.946,3.082
-	c0.481,0.932,0.822,1.888,1.02,2.872c0.198,0.987,0.299,2.248,0.299,3.786h0.438c0.17-1.069,0.274-1.81,0.315-2.218
-	c0.038-0.41,0.056-0.834,0.056-1.275c0-0.789-0.055-1.465-0.166-2.022c-0.111-0.561-0.27-1.087-0.478-1.587
-	c-0.116-0.271-0.307-0.665-0.57-1.176c0.521,0,0.966-0.097,1.338-0.298c0.372-0.201,0.678-0.5,0.922-0.896
-	c0.142,0.259,0.363,0.451,0.664,0.576c0.3,0.127,0.653,0.188,1.062,0.188c0.705,0,1.23-0.231,1.568-0.694
-	c0.338-0.463,0.508-1.133,0.508-2.01c0-0.042-0.01-0.192-0.027-0.448C20.262,6.05,20.253,5.846,20.253,5.69z"/>
-<path d="M37.436,5.763H37.07c-0.144,1.169-0.584,1.751-1.328,1.751c-0.369,0-0.648-0.128-0.847-0.39
-	c-0.201-0.258-0.326-0.712-0.384-1.361h-0.365c-0.115,0.649-0.316,1.145-0.609,1.498c-0.341,0.408-0.813,0.612-1.42,0.612
-	c-0.581,0-1.111-0.17-1.589-0.512c-0.427-0.305-0.825-0.758-1.194-1.358l-0.768,2.494c0.93,1.349,1.576,2.375,1.946,3.082
-	c0.481,0.932,0.822,1.888,1.021,2.872c0.197,0.987,0.299,2.248,0.299,3.786h0.438c0.171-1.069,0.275-1.81,0.316-2.218
-	c0.037-0.41,0.056-0.834,0.056-1.275c0-0.789-0.056-1.465-0.166-2.022c-0.111-0.561-0.271-1.087-0.478-1.587
-	c-0.116-0.271-0.307-0.665-0.57-1.176c0.521,0,0.967-0.097,1.338-0.298c0.373-0.201,0.678-0.5,0.922-0.896
-	c0.143,0.259,0.363,0.451,0.664,0.576c0.3,0.127,0.653,0.188,1.062,0.188c0.705,0,1.23-0.231,1.568-0.694
-	c0.339-0.463,0.509-1.133,0.509-2.01c0-0.042-0.011-0.192-0.027-0.448C37.444,6.122,37.436,5.918,37.436,5.763z"/>
-</svg>
--- a/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_symbol_table.svg	Tue May 11 16:31:42 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
-<defs>
-</defs>
-<rect fill="none" width="24" height="24"/>
-<polygon fill="none" points="22,22 2,22 2,2 22,2 "/>
-<path d="M7.408,9.259h1.547c-0.27,1.672-0.404,2.826-0.404,3.463c0,0.395,0.037,0.692,0.111,0.891s0.256,0.299,0.545,0.299
-	c0.34,0,0.613-0.193,0.82-0.578c0.207-0.384,0.311-0.911,0.311-1.579c0-1.207-0.291-2.14-0.873-2.798S8.055,7.97,6.98,7.97
-	c-1.133,0-2.053,0.347-2.76,1.04S3.16,10.666,3.16,11.896c0,1.375,0.327,2.405,0.981,3.09s1.636,1.029,2.944,1.029
-	c0.754,0,1.537-0.145,2.35-0.434v0.938c-0.309,0.121-0.696,0.225-1.163,0.311s-0.882,0.129-1.245,0.129
-	c-1.539,0-2.762-0.434-3.668-1.299S2,13.561,2,11.955c0-1.008,0.209-1.882,0.627-2.622s1.01-1.308,1.775-1.702
-	s1.615-0.592,2.549-0.592c1.43,0,2.531,0.407,3.305,1.222s1.16,1.958,1.16,3.431c0,0.969-0.216,1.721-0.647,2.258
-	s-1.011,0.807-1.737,0.807c-0.348,0-0.648-0.104-0.902-0.311s-0.422-0.496-0.504-0.867c-0.367,0.785-0.891,1.178-1.57,1.178
-	c-0.484,0-0.882-0.191-1.192-0.572s-0.466-0.906-0.466-1.579c0-1.047,0.273-1.866,0.82-2.458S6.494,9.259,7.408,9.259z
-	 M7.408,11.896l0.217-1.775H7.232c-0.473,0-0.865,0.212-1.178,0.636s-0.469,1.009-0.469,1.755c0,0.512,0.063,0.874,0.19,1.084
-	s0.327,0.316,0.601,0.316C6.9,13.912,7.244,13.24,7.408,11.896z"/>
-<path d="M20.403,16.689c-0.182-0.182-0.272-0.402-0.272-0.66s0.091-0.475,0.272-0.656c0.182-0.178,0.401-0.27,0.659-0.27
-	c0.262,0,0.483,0.092,0.665,0.27C21.909,15.555,22,15.771,22,16.029c0,0.256-0.092,0.475-0.275,0.656
-	c-0.184,0.184-0.404,0.275-0.662,0.275S20.585,16.871,20.403,16.689z"/>
-<path d="M15.698,9.057c-0.445,0-0.779,0.099-1.002,0.293c-0.223,0.196-0.334,0.489-0.334,0.879c0,0.188,0.046,0.38,0.138,0.574
-	c0.092,0.196,0.331,0.48,0.718,0.855c0.367,0.349,0.639,0.667,0.814,0.955c0.176,0.29,0.264,0.632,0.264,1.025v0.615h-1.488v-0.533
-	c0-0.236-0.062-0.447-0.188-0.629c-0.125-0.181-0.372-0.456-0.744-0.824c-0.507-0.507-0.829-0.914-0.964-1.221
-	s-0.202-0.607-0.202-0.9c0-0.694,0.233-1.22,0.7-1.576c0.467-0.354,1.143-0.533,2.024-0.533c0.531,0,1.135,0.093,1.811,0.275v1.008
-	C16.647,9.145,16.132,9.057,15.698,9.057z M14.898,16.689c-0.182-0.182-0.272-0.402-0.272-0.66s0.091-0.475,0.27-0.656
-	c0.18-0.178,0.398-0.27,0.656-0.27s0.478,0.092,0.656,0.27c0.18,0.182,0.27,0.398,0.27,0.656s-0.09,0.479-0.27,0.66
-	c-0.179,0.182-0.398,0.271-0.656,0.271C15.298,16.961,15.08,16.871,14.898,16.689z"/>
-</svg>
--- a/textinput/peninputfingerhwrar/data/qgn_indi_input_hwr_arabic_writing_area.svg	Tue May 11 16:31:42 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
-	<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
-	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-	 x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
-<defs>
-</defs>
-<polygon fill="none" points="22,22.001 2,22.001 2,1.999 22,1.999 "/>
-<rect fill="none" width="24" height="24"/>
-<path fill="#FFFDFD" d="M20.756,21.087l-2.26-10.469c-0.033-0.15-0.115-0.281-0.23-0.373c0,0-6.611-7.95-6.68-7.998
-	c-0.116-0.083-0.255-0.129-0.395-0.129c-0.068,0-0.137,0.011-0.202,0.034c0,0-3.022,1.072-3.081,1.12L5.072,5.577
-	C5.016,5.624,3.326,8.34,3.326,8.34C3.262,8.444,3.229,8.563,3.229,8.685c0,0.155,0.055,0.328,0.156,0.447l6.976,8.255
-	c0.101,0.118,0.236,0.195,0.384,0.222l9.094,4.213c0.088,0.041,0.184,0.061,0.277,0.061c0.146,0,0.291-0.049,0.41-0.145
-	C20.719,21.582,20.809,21.33,20.756,21.087z"/>
-<path fill-opacity="0.5" d="M16.607,19.548l3.508,1.677l-0.943-4.046C19.172,17.177,18.579,18.808,16.607,19.548z"/>
-<path fill="#E5E5E5" d="M16.607,19.548c1.972-0.74,2.564-2.371,2.564-2.369l0.943,4.046l-2.262-10.468l-1.233,3.125l-2.618,2.268
-	l-3.141,0.79l9.254,4.285L16.607,19.548z"/>
-<polygon fill="#E5E5E5" points="6.465,7.337 9.238,5.026 11.206,2.772 8.322,3.781 5.486,6.087 3.885,8.685 6.452,7.323 "/>
-<polygon fill="#CCCCCC" points="11.206,2.793 9.238,5.047 16.62,13.902 17.854,10.777 "/>
-<polygon fill-opacity="0.3" points="9.225,5.036 6.451,7.348 13.988,16.159 16.607,13.892 "/>
-<polygon fill-opacity="0.5" points="6.465,7.36 6.452,7.347 3.885,8.708 10.861,16.962 14.002,16.173 "/>
-</svg>
--- a/textinput/peninputfingerhwrar/group/bld.inf	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/group/bld.inf	Tue May 25 13:03:44 2010 +0300
@@ -21,17 +21,6 @@
 
 PRJ_EXPORTS
 ../rom/peninputfingerhwrar_variant.iby CUSTOMER_MW_LAYER_IBY_EXPORT_PATH( peninputfingerhwrar_variant.iby )	
-../data/qgn_indi_input_hwr_arabic_close.svg                      /epoc32/s60/icons/qgn_indi_input_hwr_arabic_close.svg
-../data/qgn_indi_input_hwr_arabic_page_1_2.svg                   /epoc32/s60/icons/qgn_indi_input_hwr_arabic_page_1_2.svg
-../data/qgn_indi_input_hwr_arabic_page_2_2.svg                   /epoc32/s60/icons/qgn_indi_input_hwr_arabic_page_2_2.svg
-../data/qgn_indi_input_hwr_arabic_page_1_3.svg                   /epoc32/s60/icons/qgn_indi_input_hwr_arabic_page_1_3.svg
-../data/qgn_indi_input_hwr_arabic_page_2_3.svg                   /epoc32/s60/icons/qgn_indi_input_hwr_arabic_page_2_3.svg
-../data/qgn_indi_input_hwr_arabic_page_3_3.svg                   /epoc32/s60/icons/qgn_indi_input_hwr_arabic_page_3_3.svg
-../data/qgn_indi_input_hwr_arabic_symbol_table.svg               /epoc32/s60/icons/qgn_indi_input_hwr_arabic_symbol_table.svg
-../data/qgn_indi_input_hwr_arabic_writing_area.svg               /epoc32/s60/icons/qgn_indi_input_hwr_arabic_writing_area.svg
-../data/qgn_indi_input_arabic_backspace.svg                      /epoc32/s60/icons/qgn_indi_input_arabic_backspace.svg
-../data/qgn_indi_input_arabic_enter.svg                          /epoc32/s60/icons/qgn_indi_input_arabic_enter.svg
-
 	
 PRJ_MMPFILES
 peninputfingerhwrar.mmp
--- a/textinput/peninputfingerhwrar/group/iconlist.txt	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/group/iconlist.txt	Tue May 25 13:03:44 2010 +0300
@@ -64,4 +64,4 @@
 -c8,8 qgn_indi_input_hwr_arabic_symbol_table.svg
 -c8,8 qgn_indi_input_hwr_arabic_writing_area.svg
 -c8,8 qgn_indi_input_arabic_backspace.svg
--c8,8 qgn_indi_input_arabic_enter.svg
\ No newline at end of file
+-c8,8 qgn_indi_input_enter.svg
\ No newline at end of file
--- a/textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp	Tue May 25 13:03:44 2010 +0300
@@ -42,6 +42,7 @@
 SOURCE    peninputfingerhwrarindicator.cpp
 SOURCE    hbufcarrayar.cpp 
 SOURCE    peninputfingerhwrarwritingwnd.cpp
+SOURCE    peninputfingerhwrarnumsymboltable.cpp
 
 USERINCLUDE     ../inc
 
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrar.hrh	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrar.hrh	Tue May 25 13:03:44 2010 +0300
@@ -19,7 +19,7 @@
 #ifndef PENINPUTFINGERHWRAR_HRH
 #define PENINPUTFINGERHWRAR_HRH
 
-#include <aknfepglobalenums.h>    
+#include <AknFepGlobalEnums.h>    
 
 /**
  *  special scancode as virtual key mark.
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarcontrolid.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarcontrolid.h	Tue May 25 13:03:44 2010 +0300
@@ -47,16 +47,16 @@
     
     EHwrCtrlIdArrowLeft,
     EHwrCtrlIdArrowRight,
-    EHwrCtrlIdArrowUp,
-    EHwrCtrlIdArrowDown,
+    EHwrCtrlIdBtnEnter,
+    EHwrCtrlIdBtnSpace,
     
-	EHwrCtrlIdBtnEnter,
-	EHwrCtrlIdBtnSpace,
     EHwrCtrlId3Page1Btn,
     EHwrCtrlId3Page2Btn,
     EHwrCtrlId3Page3Btn,
 	EHwrCtrlId2Page1Btn,
-	EHwrCtrlId2Page2Btn
+	EHwrCtrlId2Page2Btn,
+	EHwrCtrlIdNumSymbolTableVkb,
+	EHwrCtrlIdNumSymbolTableVkbGroup
     };
 #endif //PENINPUTFINGERHWRARCONTROLID_H
 
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h	Tue May 25 13:03:44 2010 +0300
@@ -23,10 +23,10 @@
 #include <e32def.h>
 #include <w32std.h>
 #include <eikon.hrh>
-#include <aknutils.h>
+#include <AknUtils.h>
 
 //FEP INCLUDES
-#include <ptiengine.h>
+#include <PtiEngine.h>
 #include <peninputpluginutils.h>
 
 
@@ -311,22 +311,6 @@
      */   
     TBool Highlight();
     
-    /**
-     * Remove duplicate candidate from predictive candidate list
-     *
-     * @since Symbian TB9.2
-     * @param aSrc The punctuation candidate list
-     * @param aTgt The predicative candidate list
-     * @param aSrcStartIdx 
-     * @param aTgtStartIdx 
-     * @return last overlap index
-     */   
-    TInt RemoveDuplicateCand(const RPointerArray<HBufC>& aSrc,
-                             RPointerArray<HBufC>& aTgt,
-                             TInt aSrcStartIdx,
-                             TInt aTgtStartIdx);
-    
-    
 	/**
      * Get top guide line from hwr engine
      *
@@ -373,6 +357,24 @@
      * @return ETrue if it is, EFalse otherwise
      */
     TBool IsArabicNumber(TUint16 aChar);
+    
+    /**
+     * Check if it is in number only mode.
+     *
+     * @since s60 v5.2
+     * @param None
+     * @return ETrue if it is, EFalse otherwise
+     */
+    TBool IsNumberOnlyMode();
+    
+    /**
+     * check if it is native number mode.
+     * 
+     * @since s60 v5.2
+     * @param None
+     * @return ETrue if it is, EFalse otherwise
+     */
+    TBool IsNativeNumMode();
 private:  
 
     /**
@@ -489,6 +491,11 @@
     CRepository* iRepositoryFep;
 
     /**
+     * repository object.
+     */
+    CRepository* iCommonEngineRepository;    
+    
+    /**
      * The engine (Own);
      */
     CPeninputFingerHwrArEngine* iHwrEngine;
@@ -553,6 +560,11 @@
      * First candidate type.
      */
     TFirstCandidateType iFirstCandidateType;
+    
+    /**
+     * the number mode flag
+     */
+    TBool iIsNativeNumMode;
  };
 
 
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarengine.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarengine.h	Tue May 25 13:03:44 2010 +0300
@@ -22,7 +22,7 @@
 //  INCLUDES
 #include <e32cmn.h>
 #include <eikon.hrh>
-#include <ptiengine.h>
+#include <PtiEngine.h>
 
 class CPeninputFingerHwrArDataStore;
 
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h	Tue May 25 13:03:44 2010 +0300
@@ -182,6 +182,21 @@
     TInt VirtualSctpadColCount();
     
     /**
+     * get row count of virtual number sctpad.
+     * 
+     * @since Symbian TB9.2
+     * @return row count of virtual number sctpad.
+     */      
+    TInt VirtualNumSctpadRowCount();
+    
+    /**
+     * get column count of virtual number sctpad.
+     * 
+     * @since Symbian TB9.2
+     * @return column count of virtual number sctpad.
+     */        
+    TInt VirtualNumSctpadColCount();
+    /**
      * get cell size of virtual sctpad.
      * 
      * @since Symbian TB9.2
@@ -199,6 +214,15 @@
     void GetVirtualKeyRects( RArray<TRect>& aArrayRects );
     
     /**
+     * get cell rect of virtual sctpad.
+     * 
+     * @since Symbian TB9.2
+     * @param aArrayRects a TRect array to receive cell rect.
+     * @return none.
+     */     
+    void GetNumVirtualKeyRects( RArray<TRect>& aArrayRects );
+    
+    /**
      * get text layout of virtual sctpad.
      * 
      * @since Symbian TB9.2
@@ -207,6 +231,14 @@
     TAknTextLineLayout SctpadKeyTxtLayout();
     
     /**
+     * get text layout of virtual numpad.
+     * 
+     * @since Symbian TB9.2
+     * @return a TAknTextLineLayout object to layout cell text.
+     */    
+    TAknTextLineLayout NumpadKeyTxtLayout();
+
+    /**
      * get preview bubble rect.
      * 
      * @since Symbian TB9.2
@@ -323,6 +355,10 @@
 	 * Get virtual key pad rect
 	 */
 	TRect GetVirtualKeyRect(); 
+    /**
+     * Get virtual number key pad rect
+     */
+    TRect GetVirtualNumKeyRect(); 
 private:
     
     /**
@@ -368,7 +404,12 @@
 	 */
     void RetrieveLafDataForSymbolTable();
 	
-	/**
+    /**
+     * Retrieve the laf data for symbol table
+     */
+    void RetrieveLafDataForNumSymbolTable();
+
+    /**
 	 * Retrieve the landscape laf data for symbol table
 	 */
 	void RetrieveLandscapeLafDataForSymbolTable();
@@ -379,6 +420,16 @@
 	void RetrievePortraitLafDataForSymbolTable();
 
     /**
+     * Retrieve the landscape laf data for number symbol table
+     */
+    void RetrieveLandscapeLafDataForNumSymbolTable();
+    
+    /**
+     * Retrieve the portrait laf data for number symbol table
+     */
+    void RetrievePortraitLafDataForNumSymbolTable();
+
+    /**
 	 * Retrieve the laf data for HWR writing box
 	 */
     void RetrieveLafDataForHwrBox();	 
@@ -402,8 +453,8 @@
     TRect iRectWritingBox;
     TRect iRectNumpad;
     TRect iRectSctpad;
-    TRect iRectSpase;
-    TRect iRectEnter;
+    TRect iRectBtnSpace;
+    TRect iRectBtnEnter;
     TRect iIndicatorRect;
 	
     /**
@@ -418,6 +469,7 @@
     TRect iRectBtnArrowDown;
     TRect iRectBtnOption;
     TRect iRectBtnSctPage;
+    TRect iRectBtnNumType;
     TSize iArrowPaddingSize;
     TSize iSizeBtnPadding;
 
@@ -457,7 +509,13 @@
 	 * virtual key rects array
 	 */
     RArray<TRect> iSCTrectArray;
-    
+    // Number symbol table laf data
+    TRect iRectOfNumSymbolTable;
+    TInt iNumSctpadRowCount;
+    TInt iNumSctpadColCount;
+    TSize iSizeNumSctpadCell;
+//    RArray<TRect> iNumSymBtnRectArray;    
+    RArray<TRect> iNumSCTrectArray;
     /**
 	 * Preview bubble
 	 */
@@ -469,4 +527,4 @@
 
 #endif // C_PENINPUTFINGERHWRARLAFMANAGER_H
 
-// End Of File
\ No newline at end of file
+// End Of File
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h	Tue May 25 13:03:44 2010 +0300
@@ -30,6 +30,7 @@
 class CPeninputFingerHwrArDataStore;
 class CRepository;
 class CPeninputFingerHwrArWnd;
+class CPeninputFingerHwrArCallBack;
 
 // class DECLARATIONS
 
@@ -155,7 +156,13 @@
      * @return none
      */
     void OnDeActivate();
-    
+    void CallBackL();
+	
+	/**
+	 * Check if the First string will be allowed to submitted directly to editor without selection 
+	 */
+	TBool IsAllowedToSubmitDefaultCandiate();
+	
 public:
     //from MEventObserver;    
     /**
@@ -453,6 +460,21 @@
      */
     void ChangeCurStateToStandby();
 	
+    /**
+     * handler of NumMapping changed event.
+     *  
+     * @since S60 5.0
+     * @return none
+     */
+    void OnNumMappingChangedL();
+    /**
+     * revert special characters direction before sending to editor.
+     * 
+     * @since S60 v5.2
+     * @return none 
+     */
+    TBool RevertSymbolDirection(TInt aInChar, TInt & aOutChar);
+    
 private:
     
     /**
@@ -489,12 +511,24 @@
      */
     CRepository* iRepositorySetting;
     
+    /**
+     * repository object.
+     */
+//    CRepository* iCommonEngineRepository;    
+    
 	/**
 	 * Check if the stroke of drawing the character on the 
 	 * HWR box is started
 	 */
 	TBool iIsStrokeOfDrawingCharacerStarted;
 	
+	CPeninputFingerHwrArCallBack* iCallBack;
+	
+	/**
+	 * Check if the editor is MFNE
+	 */
+	TBool iIsEditorMFNE;
+	
     /**
      * Last overlap index.
      */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h	Tue May 25 13:03:44 2010 +0300
@@ -0,0 +1,269 @@
+/*
+* Copyright (c) 2009-2010 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:  header of number mode symbol table.
+*
+*/
+
+
+#ifndef C_PENINPUTARABICFINGERHWRNUMSYMBOLTABLE_H
+#define C_PENINPUTARABICFINGERHWRNUMSYMBOLTABLE_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <e32cmn.h>
+
+#include <peninputlayoutctrlgroup.h>
+
+// FORWARD DECLARATIONS
+class CAknFepCtrlEventButton;
+class CVirtualKeyboard;
+
+// CLASS DECLARATION
+
+/**
+ *  class CPeninputArabicFingerHwrNumSymbolTable.
+ *
+ *  The symbol table control for arabic input 
+ *
+ *  @lib peninputfingerhwrar.lib
+ *  @since Symbian TB9.2
+ */
+class CPeninputArabicFingerHwrNumSymbolTable : public CControlGroup
+    {
+public:
+    /**
+     * Symbian constructor
+     * 
+     * @since Symbian TB9.2
+     * @param aUiLayout The layout
+     * @param aId The control id
+     * @return pointer of created object.
+     */
+    static CPeninputArabicFingerHwrNumSymbolTable* NewL( CFepUiLayout* aUiLayout, TInt aId );
+
+    /**
+     * Symbian constructor
+     * 
+     * @since Symbian TB9.2
+     * @param aUiLayout The layout
+     * @param aId The control id
+     * @return pointer of created object.
+     */    
+    static CPeninputArabicFingerHwrNumSymbolTable* NewLC( CFepUiLayout* aUiLayout, TInt aId );
+
+    /**
+     * standard c++ destructor.
+     *
+     * @since Symbian TB9.2
+     */    
+    ~CPeninputArabicFingerHwrNumSymbolTable();
+    
+public:
+	/**
+	 * open the symbol table.
+	 * 
+	 * @since Symbian TB9.2
+	 *
+	 * @return None
+	 */
+	void OpenSymbolTable();
+    
+    /**
+     * cancel the popup.
+     * 
+     * @since Symbian TB9.2
+     * @return None
+     * 
+     */
+    void CloseSymbolTable();
+    
+    /**
+     * get visibility of popup.
+     * @since Symbian TB9.2
+     * @return ETrue if the popup is visible
+     */
+    TBool IsPopup();
+    
+	/**
+	 * sizechanged
+	 *
+	 */
+	void SizeChanged(const TRect aVirtualKeypadRect, const RArray<TRect> aBtnRects,
+                     const TInt aKeypadRow, const TInt aKeypadCol, TBool aIsLandscape = ETrue);
+    
+	/**
+	 * Load VKB image
+	 *
+	 */
+    void LoadVkbKeyImageL(TInt aResId, const TSize& aKeySize);
+	
+	/**
+	 * Load virutal Key and set key rects.
+	 *
+	 */
+	void LoadVirtualKeypadKeyL(const TInt aResId, const RArray<TRect>& aCellRects);
+    
+	/**
+	 * Return keypad control
+	 *
+	 */
+	inline CVirtualKeyboard* KeyPad(){return iNumKeypad;}
+    
+	/**
+	 * Navigate page
+	 *
+	 */
+	void UpdateNumSymbolTable(TInt aNumSctType = ENumSCTLatin);
+    
+	/**
+	 * Construct from resource
+	 * This funciton will be called when the resource has changed for example skin was changed
+	 */
+	void ConstructFromResourceL();	
+	
+    /**
+     * accept editor's number mapping restriction.
+     * 
+     * @since S60 v5.0
+     * @param aNumMapping a string contains numbers and related char. max length is 16.
+     * @return none
+     */
+    void SetNumericMapping( const TDesC& aNumMapping );
+    
+    /*
+     * set arabic number mode.
+     * @since s60 v5.2
+     * @param aIsNativeNumMode a flag to indicate whether it is native number mode.
+     * @return none.
+     */
+    void SetNativeNumMode(const TBool aIsNativeNumMode);
+protected: //virtuals from CControlGroup (CFepUiBaseCtrl)
+
+    /**
+     * From CControlGroup
+     * Handle pointer down event
+     *
+     * @since Symbian TB9.2
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */   
+    CFepUiBaseCtrl* HandlePointerDownEventL(const TPoint& aPoint);
+    
+    /**
+     * From CControlGroup
+     * Handle pointer up event
+     *
+     * @since Symbian TB9.2
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */           
+    CFepUiBaseCtrl* HandlePointerUpEventL(const TPoint& aPoint);
+    
+    /**
+     * From CControlGroup
+     * Handle pointer move event
+     *
+     * @since S60 54.0
+     * @param aPoint The point position relative the layout
+     * @return The control which handles the event.     
+     */      
+    CFepUiBaseCtrl* HandlePointerMoveEventL(const TPoint& aPoint);
+    
+    /**
+     * C++ constructor
+     * 
+     * @since Symbian TB9.2
+     * @param aFepUiLayout A Ui Layout environment (CFepUiLayout)
+     * @param aControlId Control id
+     * @return none.
+     */
+    CPeninputArabicFingerHwrNumSymbolTable(CFepUiLayout* aFepUiLayout, TInt aControlId);
+    
+    /**
+     * Symbian second-phase constructor
+     *
+     * @since Symbian TB9.2
+     * @return None
+     */    
+    void ConstructL();
+    
+	/**
+     * create a virtual keypad
+     *
+     * @since Symbian TB9.2
+     * @return None
+     */
+	void CreateVirtualKeypadL();
+	
+	/** 
+	 * create a new virtual key
+	 *
+	 */
+	CVirtualKey* CreateVkbKeyL(TResourceReader& aReader, const TRect aKeyRect);
+	
+	/**
+	 * update the virtal key
+	 *
+	 */
+	void UpdateVkbKeyL( CVirtualKey* aVirtualKey, TResourceReader& aReader, 
+	                    const TRect aKeyRect );
+    void OnActivate();
+	
+	/**
+	 * Update the virtual key feedback
+	 *
+	 */
+	void UpdateAllVirtualKeysFeedback();
+	
+	/**
+	 * Draw group control
+	 */
+	void Draw();
+	
+	/**
+	 * Load background from resource
+	 *
+	 */
+	void LoadBackgroundFromResourceL(const TInt aResId);
+    
+	/*
+	 * map latin number to arabic number.
+	 */
+	TInt16 MapLatinNumAccordingToNumMode(TInt16 aUnicode);
+private:
+    /**
+	 * multipage viritual keyboard
+	 * not own.
+	 */
+	CVirtualKeyboard* iNumKeypad;
+    
+    /**
+     * visibility of popup list.
+     */
+    TBool iPopupVisible;
+	
+	/**
+	 * store the layout mode
+	 */
+	TBool iIsLandscape;
+	
+    TInt iCurrentNumSCTType;	
+    /*
+     * Default number mode.
+     */
+    TBool iIsNativeNumMode;
+    };
+
+#endif // C_PENINPUTARABICFINGERHWRNUMSYMBOLTABLE_H
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarstoreconstants.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarstoreconstants.h	Tue May 25 13:03:44 2010 +0300
@@ -71,7 +71,12 @@
     EPagePosLastPage,
     EPagePosFirstPage,
     };
-		
+
+enum TNumSCTType
+    {
+    ENumSCTLatin,
+    ENumSCTArabic
+    };
 // the default end mark    
 const TInt KDefaultStrokeEndMarkX = -65536;
 const TInt KDefaultStrokeEndMarkY = -65536;
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h	Tue May 25 13:03:44 2010 +0300
@@ -260,7 +260,7 @@
 	 *
 	 */
 	void LoadBackgroundFromResourceL(const TInt aResId);
-		
+
 private:
     /**
 	 * multipage viritual keyboard
@@ -268,18 +268,6 @@
 	 */
 	CMultiPageVirtualKeyboard* iMutiPageKeypad;
     
-	/**
-     * Enter button.
-     * not own.
-     */
-    CAknFepCtrlEventButton* iEnterBtn;
-    
-    /**
-     * space button.
-     * not own.
-     */
-    CAknFepCtrlEventButton* iSpaceBtn;
-    
     /**
      * Sct page 0 selction button control.
      * Not own.
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h	Tue May 25 13:03:44 2010 +0300
@@ -31,6 +31,7 @@
 class CPeninputArabicFingerHwrSymbolTable;
 class CPeninputArabicFingerHwrIndicator;
 class CPeninputArabicFingerHwrWritingWnd;
+class CPeninputArabicFingerHwrNumSymbolTable;
 
 /**
  *  class CPeninputFingerHwrArWnd.
@@ -240,7 +241,16 @@
      * @return none
      */
     void ShowSymbolPage( TInt aPageNo, TInt aPos );
-    
+    /**
+     * accept editor's number mapping restriction.
+     * 
+     * @since S60 v5.0
+     * @param aNumMapping a string contains numbers and related char. max length is 16.
+     * @return none
+     */
+    void SetNumericMapping( const TDesC& aNumMapping );
+
+
 public: //child control access
     
     /**
@@ -260,13 +270,13 @@
      */    
     CFepCtrlDropdownList* CandidateList();
     
-    /**
-     * retrieve the number candicate list control. 
-     * 
-     * @since Symbian TB9.2
-     * @return pointer to candicate list 
-     */    
-    CFepCtrlDropdownList* NumCandidateList();
+//    /**
+//     * retrieve the number candicate list control. 
+//     * 
+//     * @since Symbian TB9.2
+//     * @return pointer to candicate list 
+//     */    
+//    CFepCtrlDropdownList* NumCandidateList();
 	
     /**
      * dim arrow buttons
@@ -327,7 +337,8 @@
      */
     TBool IsSymbolTableShowingUp();
 	
-	/**
+
+    /**
      * Check if the candidate list was opened up
      * 
      * @since Symbian TB9.2
@@ -356,7 +367,21 @@
 	 * Handle window open
 	 */
 	void HandleWindowOpenCommandL();
-	
+    /*
+     * set arabic number mode.
+     * @since s60 v5.2
+     * @param aIsNativeNumMode a flag to indicate whether it is native number mode.
+     * @return none.
+     */
+    void SetNativeNumMode(const TBool aIsNativeNumMode);
+    
+    /*
+     * set icf language.
+     * @since s60 v5.2
+     * @param aLang language id.
+     * @return none.
+     */
+    void SetIcfLanguage( TInt aLang );    
 protected:
 
     /**
@@ -395,13 +420,13 @@
      * @return None
      */
     void CreateCandidateListL();
-    /**
-     * create number candidate lists.
-     * 
-     * @since Symbian TB9.2
-     * @return None
-     */
-    void CreateNumCandidateListL();
+//    /**
+//     * create number candidate lists.
+//     * 
+//     * @since Symbian TB9.2
+//     * @return None
+//     */
+//    void CreateNumCandidateListL();
     
     /**
      * create writing box.
@@ -428,6 +453,14 @@
     void CreateSymbolTableL();
     
     /**
+     * create virtual number modesct pad.
+     * 
+     * @since Symbian TB9.2
+     * @return None
+     */    
+    void CreateNumSymbolTableL();
+    
+    /**
      * EventButton creation helper.
      * 
      * @since Symbian TB9.2
@@ -464,6 +497,16 @@
     void LoadSymbolVirtualKeysL( const TInt aResId, const RArray<TRect>& aCellRects );
 
     /**
+     * load virtual number mode sct keys.
+     * 
+     * @since Symbian TB9.2
+     * @param aResId resource id.
+     * @param aCellRects rects of virtual keys.
+     * @return None
+     */      
+    void LoadNumSymbolVirtualKeysL( const TInt aResId, const RArray<TRect>& aCellRects );
+    
+    /**
      * relayout full ui, reset all controls position. 
      * 
      * @since Symbian TB9.2
@@ -550,7 +593,7 @@
 	 * @return None
 	 */
     void DrawGuideLine();
-    
+
 private: // datas
 
     /**
@@ -568,11 +611,6 @@
     
     
     /**
-     * number Candidate list control.
-     * Not own.
-     */    
-    CFepCtrlDropdownList* iNumCandidateList;
-    /**
      * Writing box control.
      * Not own.
      */
@@ -630,12 +668,28 @@
      * Not own.
      */     
     CAknFepCtrlEventButton* iSymbolTableBtn;
+    /**
+     * enter button control.
+     * Not own.
+     */     
+    CAknFepCtrlEventButton* iEnterBtn;
+    /**
+     * space button control.
+     * Not own.
+     */     
+    CAknFepCtrlEventButton* iSpaceBtn;
     
     /**
      * Symbol table control.
      * Not own.
      */     
     CPeninputArabicFingerHwrSymbolTable* iSymbolTable;
+
+    /**
+     * Number mode Symbol table control.
+     * Not own.
+     */     
+    CPeninputArabicFingerHwrNumSymbolTable* iNumSymbolTable;
     
     /**
      * L&F manager.
--- a/textinput/peninputfingerhwrar/rom/peninputfingerhwrar_variant.iby	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/rom/peninputfingerhwrar_variant.iby	Tue May 25 13:03:44 2010 +0300
@@ -24,7 +24,7 @@
 
 #ifdef __PEN_SUPPORT
 #ifdef FF_CAPACITIVE_DISPLAY
-#ifdef __HANDWRITING_RECOGNITION_INPUT
+#ifdef FF_ARABIC_HANDWRITING_RECOGNITION_INPUT
 
 
 data = DATAZ_\RESOURCE_FILES_DIR\peninputfingerhwrarwnd.rsc    RESOURCE_FILES_DIR\peninputfingerhwrarwnd.rsc
@@ -33,7 +33,7 @@
 ECOM_PLUGIN(peninputfingerhwrar.dll, peninputfingerhwrar.rsc)
 
 
-#endif //__HANDWRITING_RECOGNITION_INPUT
+#endif //FF_ARABIC_HANDWRITING_RECOGNITION_INPUT
 #endif //FF_CAPACITIVE_DISPLAY
 #endif // __PEN_SUPPORT
 
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp	Tue May 25 13:03:44 2010 +0300
@@ -18,11 +18,12 @@
 //SYSTEM INCLUDE
 #include <centralrepository.h>
 #include <settingsinternalcrkeys.h>
+#include <CommonEngineDomainCRKeys.h>
 
 //FEP INCLUDE
 #include <aknfeppeninputenums.h>
-#include <aknfepglobalenums.h>
-#include <aknfepinternalcrkeys.h>
+#include <AknFepGlobalEnums.h>
+#include <AknFepInternalCRKeys.h>
 
 //USER INCLUDE
 #include "peninputfingerhwrarlayout.h"
@@ -70,6 +71,7 @@
     iKeyMappingStringList.Close();
 
     delete iRepositoryFep;
+    delete iCommonEngineRepository;
 //    delete iTriggerStr;   
     delete iHwrEngine;
     delete iUserDefinedResource;
@@ -449,49 +451,17 @@
    return iIsHighlightCell;
    }
  
-// -----------------------------------------------------------------------------
-// CPeninputFingerHwrArDataStore::RemoveDuplicateCand
-// -----------------------------------------------------------------------------
-//
-TInt CPeninputFingerHwrArDataStore::RemoveDuplicateCand(const RPointerArray<HBufC>& aSrc,
-                                                 RPointerArray<HBufC>& aTgt,
-                                                 TInt aSrcStartIdx,
-                                                 TInt aTgtStartIdx)
-    {
-    TInt lastOverlapIdx = KInvalidIndex;
-
-    // on the assumption that if candidate overlap,
-    // it is overlap only once
-    TInt srccandcnt = aSrc.Count();
-
-    for (TInt i = aSrcStartIdx; i < srccandcnt; i++)
-        {
-        for (TInt j = aTgtStartIdx; j < aTgt.Count(); j++)
-            {
-            if (aTgt[j]->Compare(*(aSrc[i])) == 0)
-                {
-                lastOverlapIdx = i;
-                delete aTgt[j];
-                aTgt.Remove(j);
-                j--;
-                break;
-                }
-            }
-        }
-
-    return lastOverlapIdx;
-    }        
-       
  // ----------------------------------------------------------------------------
  // C++ constructor
  // ----------------------------------------------------------------------------
  //
  CPeninputFingerHwrArDataStore::CPeninputFingerHwrArDataStore(CPeninputFingerHwrArLayout* aLayout)
-     :iLayout( aLayout )
+     :iLanguage(ELangNone),
+      iCurrentNumberMode(EAknEditorStandardNumberModeKeymap),
+      iLayout( aLayout ),
+      iIsHighlightCell(ETrue),
+      iIsNativeNumMode(EFalse)
      {
-     iLanguage = ELangNone;
-     iCurrentNumberMode = EAknEditorStandardNumberModeKeymap;
-     iIsHighlightCell = ETrue;
      }
 
  // ----------------------------------------------------------------------------
@@ -511,6 +481,26 @@
      
      //initialize the key mapping list
      InitKeyMappingListL();
+     
+     // read number mode flag.
+     //create the repository for common engine.
+     iCommonEngineRepository = CRepository::NewL(KCRUidCommonEngineKeys);
+     TInt displayLang = 0;
+     iCommonEngineRepository->Get(KGSDisplayTxtLang,displayLang);
+     if( displayLang == ELangTest )
+         {
+         displayLang = User::Language();
+         }     
+     if(displayLang == ELangArabic)
+         {
+         iIsNativeNumMode = ETrue;
+         }
+     else
+         {
+         iIsNativeNumMode = EFalse;
+         }
+     iRepositoryFep->Set(KAknFepDefaultArabicNumberMode,iIsNativeNumMode);
+     
      }
 
  // ----------------------------------------------------------------------------
@@ -701,12 +691,33 @@
 //	
 TBool CPeninputFingerHwrArDataStore::IsArabicNumber(TUint16 aChar)
     {
-	if(aChar >= 0x0661 && aChar <= 0x0669)
+	if(aChar >= 0x0660 && aChar <= 0x0669)
 	    {
 		return ETrue;
 		}
 	
     return EFalse;	
 	}
-	
+
+// ----------------------------------------------------------------------------
+// CPeninputFingerHwrArDataStore::IsNumberOnlyMode
+// ----------------------------------------------------------------------------
+//  
+TBool CPeninputFingerHwrArDataStore::IsNumberOnlyMode()
+    {
+    if(PrimaryRange() == ERangeNumber)
+        {
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CPeninputFingerHwrArDataStore::IsNativeNumMode
+// ----------------------------------------------------------------------------
+//  
+TBool CPeninputFingerHwrArDataStore::IsNativeNumMode()
+    {
+    return iIsNativeNumMode;
+    }
 // End Of File
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp	Tue May 25 13:03:44 2010 +0300
@@ -17,9 +17,9 @@
 
 
 //FEP INCLUDES
-#include <aknfepglobalenums.h>
+#include <AknFepGlobalEnums.h>
 #include <aknfeppeninputenums.h>
-#include <ptihwrrecognizer.h>
+#include <PtiHwrRecognizer.h>
 #include <e32property.h>
 #include "ptidefs.h"
 
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarindicator.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarindicator.cpp	Tue May 25 13:03:44 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-#include <aknsutils.h>
+#include <AknsUtils.h>
 #include <barsread.h>
 
 #include "peninputfingerhwrarindicator.h"
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp	Tue May 25 13:03:44 2010 +0300
@@ -19,7 +19,7 @@
 // INCLUDES
 #include <aknlayoutscalable_avkon.cdl.h>
 #include <aknlayoutscalable_apps.cdl.h>
-#include <aknutils.h>
+#include <AknUtils.h>
 
 #include "peninputfingerhwrarlafmanager.h"
 #include "peninputfingerhwrarcontrolid.h"
@@ -32,6 +32,8 @@
 const TInt KFuncButtonColNum = 4;
 const TInt KLandscapeVirtualKeypadRow = 4;
 const TInt KLandscapeVirtualKeypadCol = 6;
+const TInt KLandscapeNumpadRow = 4;
+const TInt KLandscapeNumpadCol = 4;
 
 // ---------------------------------------------------------------------------
 // Symbian Constructor
@@ -81,6 +83,8 @@
     {
     iSCTrectArray.Close();
 	iSymBtnRectArray.Close();
+    iNumSCTrectArray.Close();
+//    iNumSymBtnRectArray.Close();
     }
 
 // ---------------------------------------------------------------------------
@@ -268,7 +272,7 @@
 	    {
 		candRowPane = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(0, 0, row).LayoutLine();
 		candRowPaneRect.LayoutRect( rect, candRowPane );
-		
+
 		for(TInt col = 0; col < KFuncButtonColNum; col++)
             {
 			// cell pane
@@ -288,14 +292,17 @@
     iRectBtnOption =     buttonRect[i++];
     iRectBtnRangeSmb = 	 buttonRect[i++];
 	iRectBtnBackspace =  buttonRect[i++];
-	iRectBtnArrowUp =    buttonRect[i++];
-	iRectBtnArrowDown =  buttonRect[i++];
-	iRectBtnArrowLeft =  buttonRect[i++];
-	iRectBtnArrowRight = buttonRect[i++];
+	iRectBtnArrowLeft =    buttonRect[i++];
+	iRectBtnArrowRight =  buttonRect[i++];
+	iRectBtnSpace =  buttonRect[i++];
+	iRectBtnEnter = buttonRect[i++];
 	buttonRect.Close();
 	
 	// padding size of Btn
-	iSizeBtnPadding = TSize(6, 6);
+	TInt xpad = iRectBtnOption.iTl.iX - iRectBtnClose.iBr.iX;
+	TInt ypad = iRectBtnArrowLeft.iTl.iY - iRectBtnClose.iBr.iY;
+	
+	iSizeBtnPadding = TSize(xpad, ypad);
 	
 	// padding size of arrow button
 	if(iIsLandscape)
@@ -345,6 +352,23 @@
     }
 
 // ---------------------------------------------------------------------------
+// CPeninputFingerHwrArLafManager::RetrieveLafDataForNumSymbolTable()
+// Retrieve the laf data for number symbol table area
+// ---------------------------------------------------------------------------
+//  
+void CPeninputFingerHwrArLafManager::RetrieveLafDataForNumSymbolTable()
+    {
+    if(iIsLandscape)
+        {
+        RetrieveLandscapeLafDataForNumSymbolTable();
+        }
+    else
+        {
+        RetrievePortraitLafDataForNumSymbolTable();
+        }           
+    }
+
+// ---------------------------------------------------------------------------
 // CPeninputFingerHwrArLafManager::RetrieveLandscapeLafDataForSymbolTable()
 // Retrieve the landscape laf data for symbol table area
 // ---------------------------------------------------------------------------
@@ -363,53 +387,45 @@
 	candpaneRect.LayoutRect( iLayoutRect, candlistpane );
 	iRectOfSymbolTable = candpaneRect.Rect();
 	
-	// get candidate row1 pane
+	// get 1st row pane in button area
 	TAknWindowLineLayout candRow1Pane = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(1, 0, 0).LayoutLine();
 	TAknLayoutRect candrow1paneRect;
 	candrow1paneRect.LayoutRect( iRectOfSymbolTable, candRow1Pane );
 	
 	iSymBtnRectArray.Reset();
-	for(TInt i = 0; i < 2; i++)
-		{
-		// get candidate cell pane with row 0 and col i
-		TAknWindowLineLayout cellPane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 0, i , 0 ).
-											LayoutLine();
-		TAknLayoutRect cellPaneRect;
-		cellPaneRect.LayoutRect( candrow1paneRect.Rect(), cellPane );
+    TAknWindowLineLayout cellPane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 5, 0, 0 ).
+                                        LayoutLine();
+    TAknLayoutRect cellPaneRect;
+    cellPaneRect.LayoutRect( candrow1paneRect.Rect(), cellPane );
 
-		// get the candidate cell bg pane with row 0 and col i
-		TAknWindowLineLayout candbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(1).LayoutLine();
-		TAknLayoutRect BgRect;
-		BgRect.LayoutRect( cellPaneRect.Rect(), candbgpane ); 
-		iSymBtnRectArray.Append(BgRect.Rect());
-		}
-	
-	TInt xGap = iSymBtnRectArray[1].iTl.iX - iSymBtnRectArray[0].iBr.iX;
-	TRect thirdBtn(iSymBtnRectArray[1]);
-	thirdBtn.Move(TPoint(iSymBtnRectArray[1].Width(),0));
-	iSymBtnRectArray.Append(thirdBtn);
-	
-	TAknWindowLineLayout rowPane, key1bgpane, keypane;
-	TAknLayoutRect rowRect, key1bgRect, keyRect;
-	
+    // get the candidate cell bg pane with row 0 and col i
+    TAknWindowLineLayout cellbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(5).LayoutLine();
+    TAknLayoutRect cellbgRect;
+    cellbgRect.LayoutRect( cellPaneRect.Rect(), cellbgpane ); 
+    iSymBtnRectArray.Append(cellbgRect.Rect());
+	//get 1st row pane in SCT area
 	TAknWindowLineLayout row1Pane = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(1, 0, 1).LayoutLine();
 	TAknLayoutRect row1Rect;
 	row1Rect.LayoutRect(iRectOfSymbolTable,row1Pane);
 	iRectSctpad.iTl = row1Rect.Rect().iTl;
-	iRectSctpad.iBr = iRectOfSymbolTable.iBr;
+//	iRectSctpad.iBr = iRectOfSymbolTable.iBr;
+    
+    TAknWindowLineLayout key1bgpane, keypane;
+    TAknLayoutRect key1bgRect, keyRect;
+    
 	
-	keypane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 3, 0 , 0 ).
+	keypane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 4, 0 , 0 ).
 																LayoutLine();
 	keyRect.LayoutRect(row1Rect.Rect(), keypane);
 	
-	key1bgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(3).LayoutLine();
+	key1bgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(4).LayoutLine();
 	key1bgRect.LayoutRect(keyRect.Rect(), key1bgpane);
 	
-	keypane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 3, 1 , 0 ).
+	keypane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 4, 1 , 0 ).
 																		LayoutLine();
 	keyRect.LayoutRect(row1Rect.Rect(), keypane);
 	
-	TAknWindowLineLayout key2bgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(3).LayoutLine();
+	TAknWindowLineLayout key2bgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(4).LayoutLine();
 	TAknLayoutRect key2bgRect;
 	key2bgRect.LayoutRect(keyRect.Rect(), key2bgpane);
 	
@@ -417,10 +433,10 @@
 	TAknLayoutRect row2Rect;
 	row2Rect.LayoutRect(iRectOfSymbolTable,row2Pane);
 	
-	keypane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 3, 0 , 0 ).LayoutLine();
+	keypane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 4, 0 , 0 ).LayoutLine();
 	keyRect.LayoutRect(row2Rect.Rect(), keypane);
 	
-	TAknWindowLineLayout key3bgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(3).LayoutLine();
+	TAknWindowLineLayout key3bgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(4).LayoutLine();
 	TAknLayoutRect key3bgRect;
 	key3bgRect.LayoutRect(keyRect.Rect(), key3bgpane);
 			
@@ -444,6 +460,9 @@
 			iSCTrectArray.Append(cursorRect);
 			}
 		}
+	iRectOfSymbolTable.iBr = cursorRect.iBr;
+    iRectSctpad.iBr = iRectOfSymbolTable.iBr;
+	
 	}
 
 // ---------------------------------------------------------------------------
@@ -519,6 +538,144 @@
 	}
 	
 // ---------------------------------------------------------------------------
+// CPeninputFingerHwrArLafManager::RetrieveLandscapeLafDataForNumSymbolTable()
+// Retrieve the landscape laf data for number symbol table area
+// ---------------------------------------------------------------------------
+//  
+void CPeninputFingerHwrArLafManager::RetrieveLandscapeLafDataForNumSymbolTable()
+    {
+//    TAknLayoutScalableParameterLimits candiPaneVariety = AknLayoutScalable_Avkon::fshwr2_func_candi_pane_ParamLimits(2);
+    
+    iNumSctpadRowCount = KLandscapeNumpadRow;
+    iNumSctpadColCount = KLandscapeNumpadCol;
+
+    // get the functional buttons laf data for symbol table
+    // candidate list
+    TAknWindowLineLayout candlistpane = AknLayoutScalable_Avkon::fshwr2_func_candi_pane(2).LayoutLine(); 
+    TAknLayoutRect candpaneRect;
+    candpaneRect.LayoutRect( iLayoutRect, candlistpane );
+    iRectOfNumSymbolTable = candpaneRect.Rect();
+    
+    // get candidate row1 pane
+    TAknWindowLineLayout candRow1Pane = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(2, 0, 0).LayoutLine();
+    TAknLayoutRect candrow1paneRect;
+    candrow1paneRect.LayoutRect( candpaneRect.Rect(), candRow1Pane );
+    
+    TAknWindowLineLayout rowPane, key1bgpane, keypane;
+    TAknLayoutRect rowRect, key1bgRect, keyRect;
+    
+    iRectNumpad.iTl = candpaneRect.Rect().iTl;
+    
+    keypane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 6, 0 , 0 ).
+                                                                LayoutLine();
+    keyRect.LayoutRect(candrow1paneRect.Rect(), keypane);
+    
+    key1bgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(6).LayoutLine();
+    key1bgRect.LayoutRect(keyRect.Rect(), key1bgpane);
+    
+    keypane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 6, 1 , 0 ).
+                                                                        LayoutLine();
+    keyRect.LayoutRect(candrow1paneRect.Rect(), keypane);
+    
+    TAknWindowLineLayout key2bgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(6).LayoutLine();
+    TAknLayoutRect key2bgRect;
+    key2bgRect.LayoutRect(keyRect.Rect(), key2bgpane);
+
+    TAknWindowLineLayout row2Pane = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(2, 0, 1).LayoutLine();
+    TAknLayoutRect row2Rect;
+    row2Rect.LayoutRect(candpaneRect.Rect(),row2Pane);
+    
+    keypane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 6, 1, 0 ).LayoutLine();
+    keyRect.LayoutRect(row2Rect.Rect(), keypane);
+    
+    TAknWindowLineLayout key3bgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(6).LayoutLine();
+    TAknLayoutRect key3bgRect;
+    key3bgRect.LayoutRect(keyRect.Rect(), key3bgpane);
+            
+    TInt keyHorizontalGap = key2bgRect.Rect().iTl.iX - key1bgRect.Rect().iBr.iX;
+    TInt keyVerticalGap = key3bgRect.Rect().iTl.iY - key1bgRect.Rect().iBr.iY;
+    
+    TRect cursorRect(key1bgRect.Rect());
+    TRect originRect(key1bgRect.Rect());
+    TInt rectHeight = cursorRect.Height();
+    TInt rectWidth = cursorRect.Width();
+    
+    iNumSCTrectArray.Reset();
+    for(TInt i = 0; i < iNumSctpadRowCount; i++)
+        {
+        cursorRect = originRect;
+        cursorRect.Move(0,i*(rectHeight+keyVerticalGap));
+        iNumSCTrectArray.Append(cursorRect);
+        for(TInt j = 1; j < iNumSctpadColCount; j++)
+            {
+            cursorRect.Move((rectWidth+keyHorizontalGap),0);
+            iNumSCTrectArray.Append(cursorRect);
+            }
+        }    
+
+    // calculate the symbol table rect   
+    iRectOfNumSymbolTable.iBr = cursorRect.iBr;        
+    iRectNumpad.iBr = iRectOfNumSymbolTable.iBr;    
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputFingerHwrArLafManager::RetrievePortraitLafDataForNumSymbolTable()
+// Retrieve the portrait laf data for number symbol table area
+// ---------------------------------------------------------------------------
+//  
+void CPeninputFingerHwrArLafManager::RetrievePortraitLafDataForNumSymbolTable()
+    {
+    
+    // get the functional buttons laf data for number symbol table
+    // candidate list
+    TAknWindowLineLayout candlistpane = AknLayoutScalable_Avkon::fshwr2_func_candi_pane(1).LayoutLine();        
+    
+    TAknLayoutRect candpaneRect;
+    candpaneRect.LayoutRect( iLayoutRect, candlistpane );
+    TRect rect = candpaneRect.Rect();
+    
+    // get candidate row2 pane
+    TAknWindowLineLayout candRow2Pane = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(0, 0, 1).
+                                        LayoutLine();
+    TAknLayoutRect candrow2paneRect;
+    candrow2paneRect.LayoutRect( rect, candRow2Pane );
+    iRectOfNumSymbolTable.iTl = candrow2paneRect.Rect().iTl;
+
+    // get the virtual key rects
+    TAknWindowLineLayout writingBoxPane;
+    TAknLayoutRect boxRect;
+    writingBoxPane = AknLayoutScalable_Avkon::fshwr2_hwr_syb_pane(0).LayoutLine();
+    boxRect.LayoutRect(iLayoutRect, writingBoxPane);
+    iRectNumpad = boxRect.Rect();
+    
+    TAknWindowLineLayout keypane, keybgpane;
+    TAknLayoutRect keyRect, keybgRect;
+  
+    TAknLayoutScalableParameterLimits sctPaneVariety =
+        AknLayoutScalable_Avkon::cell_fshwr2_syb_pane_ParamLimits(0);
+    
+    iNumSctpadRowCount = sctPaneVariety.LastRow() + 1;
+    iNumSctpadColCount = sctPaneVariety.LastColumn() + 1;    
+  
+    iNumSCTrectArray.Reset();
+    for(TInt i = 0; i < iNumSctpadRowCount; i++)
+        {
+        for ( TInt j = 0; j < iNumSctpadColCount; j++ )
+            {
+            keypane = AknLayoutScalable_Avkon::cell_fshwr2_syb_pane(0, j, i).LayoutLine();
+            keyRect.LayoutRect(iRectNumpad, keypane);
+            keybgpane = AknLayoutScalable_Avkon::cell_fshwr2_syb_bg_pane(0).LayoutLine();
+            keybgRect.LayoutRect(keyRect.Rect(), keybgpane);
+            iNumSCTrectArray.Append( keybgRect.Rect());
+            }
+        }
+    iSizeNumSctpadCell = keybgRect.Rect().Size();
+
+    // calculate the symbol table rect   
+    iRectOfNumSymbolTable.iBr = iRectNumpad.iBr;        
+    }
+
+// ---------------------------------------------------------------------------
 // CPeninputFingerHwrArLafManager::RetrieveLafDataForPreviewBubble()
 // Retrieve the laf data for preview bubble
 // ---------------------------------------------------------------------------
@@ -566,6 +723,9 @@
 	// retrieve the laf data of symbol table
     RetrieveLafDataForSymbolTable();
     
+    // retrieve the laf data of number symbol table
+    RetrieveLafDataForNumSymbolTable();
+    
 	// retrieve the laf data of hwr box
     RetrieveLafDataForHwrBox();	 
     #endif
@@ -624,11 +784,11 @@
 		iSizeBtnPadding = TSize(6,6);
         iArrowPaddingSize = TSize(8,8);
 	    
-	    iRectSpase = iRectBtnClose;
-	    iRectSpase.Move(TPoint(0,buttonHight));
+	    iRectBtnSpace = iRectBtnClose;
+	    iRectBtnSpace.Move(TPoint(0,buttonHight));
 	    
-	    iRectEnter = iRectSpase;
-	    iRectEnter.Move(TPoint(buttonWidth,0));
+	    iRectBtnEnter = iRectBtnSpace;
+	    iRectBtnEnter.Move(TPoint(buttonWidth,0));
 	    
         // candate position
         iCandidateLTPos = iRectBtnClose.iTl + TPoint(0,buttonHight);
@@ -814,6 +974,10 @@
 		    {
 			return iRectOfSymbolTable;
 			}         
+        case EHwrCtrlIdNumSymbolTableVkbGroup: 
+            {
+            return iRectOfNumSymbolTable;
+            }         
         case EHwrCtrlIdClose:
             {
             return iRectBtnClose;
@@ -826,14 +990,6 @@
             {
             return iRectBtnBackspace;
             }
-        case EHwrCtrlIdArrowUp:
-            {
-            return iRectBtnArrowUp;
-            }
-        case EHwrCtrlIdArrowDown:
-            {
-            return iRectBtnArrowDown;
-            }  
         case EHwrCtrlIdArrowLeft:
             {
             return iRectBtnArrowLeft;
@@ -842,6 +998,14 @@
             {
             return iRectBtnArrowRight;
             }
+        case EHwrCtrlIdBtnEnter:
+            {
+            return iRectBtnEnter;
+            }
+        case EHwrCtrlIdBtnSpace:
+            {
+            return iRectBtnSpace;
+            }
         case EHwrCtrlIdLanguageOption:
             {
             return iRectBtnOption;
@@ -853,7 +1017,7 @@
         case EHwrCtrlId2Page2Btn:
             {
             return iRectBtnSctPage;
-            }    
+            }
         }
     return TRect();
     }
@@ -960,6 +1124,24 @@
     }
 
 // ---------------------------------------------------------------------------
+// get row count of virtual number sctpad.
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputFingerHwrArLafManager::VirtualNumSctpadRowCount()
+    {
+    return iNumSctpadRowCount;
+    }
+
+// ---------------------------------------------------------------------------
+// get column count of virtual number sctpad.
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputFingerHwrArLafManager::VirtualNumSctpadColCount()
+    {
+    return iNumSctpadColCount;
+    }
+
+// ---------------------------------------------------------------------------
 // get cell size of virtual sctpad.
 // ---------------------------------------------------------------------------
 //
@@ -1022,13 +1204,58 @@
     }
 
 // ---------------------------------------------------------------------------
+// get cell rect of virtual sctpad.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArLafManager::GetNumVirtualKeyRects( RArray<TRect>& aArrayRects )
+    {   
+    aArrayRects.Reset();
+    
+    for(TInt i = 0; i < iNumSCTrectArray.Count(); i++)
+        {
+        TRect absoluteRect = iNumSCTrectArray[i];
+        absoluteRect.Move(-iRectNumpad.iTl.iX, -iRectNumpad.iTl.iY);
+        aArrayRects.Append(absoluteRect);
+        } 
+    }
+
+// ---------------------------------------------------------------------------
 // get text layout of virtual sctpad.
 // ---------------------------------------------------------------------------
 //
 TAknTextLineLayout CPeninputFingerHwrArLafManager::SctpadKeyTxtLayout()
     {
-    TAknTextLineLayout layout = AknLayoutScalable_Avkon::
-        cell_fshwr2_syb_bg_pane_t1(0).LayoutLine();
+    TAknTextLineLayout layout;
+    if(iIsLandscape)
+        {
+        layout = AknLayoutScalable_Avkon::
+                fshwr2_func_candi_cell_pane_t1(4).LayoutLine();
+        }
+    else
+        {
+        layout = AknLayoutScalable_Avkon::
+            cell_fshwr2_syb_bg_pane_t1(0).LayoutLine();
+        }
+    return layout;
+    }
+
+// ---------------------------------------------------------------------------
+// get text layout of virtual sctpad.
+// ---------------------------------------------------------------------------
+//
+TAknTextLineLayout CPeninputFingerHwrArLafManager::NumpadKeyTxtLayout()
+    {
+    TAknTextLineLayout layout;
+    if(iIsLandscape)
+        {
+        layout = AknLayoutScalable_Avkon::
+                fshwr2_func_candi_cell_pane_t1(6).LayoutLine();
+        }
+    else
+        {
+        layout = AknLayoutScalable_Avkon::
+            cell_fshwr2_syb_bg_pane_t1(0).LayoutLine();
+        }
     return layout;
     }
 
@@ -1105,6 +1332,15 @@
 	} 	
     	
 // ---------------------------------------------------------------------------
+// get rect for virtual number keypad
+// ---------------------------------------------------------------------------
+//  
+TRect CPeninputFingerHwrArLafManager::GetVirtualNumKeyRect()
+    {
+    return iRectNumpad;
+    }   
+
+// ---------------------------------------------------------------------------
 // get rect for hwr indicator
 // ---------------------------------------------------------------------------
 //		
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp	Tue May 25 13:03:44 2010 +0300
@@ -18,9 +18,9 @@
 //SYSTEM INCLUDES
 #include <bautils.h>
 #include <coemain.h>
-
+#include <CommonEngineDomainCRKeys.h>
 //FEP Includes
-#include <aknfepglobalenums.h>
+#include <AknFepGlobalEnums.h>
 #include <aknfeppeninputenums.h>
 #include <peninputlayoutchoicelist.h>
 #include <settingsinternalcrkeys.h>
@@ -49,6 +49,46 @@
 
 const TInt16 KEmotionKeyMark = 0xFFFE;
 
+class CPeninputFingerHwrArCallBack : public CActive
+    {
+    friend class CPeninputFingerHwrArLayout;
+public:
+    void IssueRequestL();
+private:
+    CPeninputFingerHwrArCallBack(CPeninputFingerHwrArLayout* aHwrArLayout);
+	void RunL();
+	void DoCancel();
+private:
+    CPeninputFingerHwrArLayout* iHwrArLayout;
+	};
+
+CPeninputFingerHwrArCallBack::CPeninputFingerHwrArCallBack(CPeninputFingerHwrArLayout* aHwrArLayout)
+    :CActive(EPriorityHigh)
+    {
+	CActiveScheduler::Add(this);
+	iHwrArLayout = aHwrArLayout;
+	}
+void CPeninputFingerHwrArCallBack::IssueRequestL()
+    {
+    if(!IsActive())
+        {
+        iStatus=KRequestPending;
+        SetActive();        
+        TRequestStatus *pS=(&iStatus);
+        
+        User::RequestComplete(pS,0);
+        }
+    }
+void CPeninputFingerHwrArCallBack::RunL()
+    {
+    iHwrArLayout->CallBackL();
+    }
+
+void CPeninputFingerHwrArCallBack::DoCancel()
+    {
+    
+    }
+
 // ============================ MEMBER FUNCTIONS =============================
 
 // ---------------------------------------------------------------------------
@@ -87,7 +127,6 @@
 
     //create the repository for gereral settings
     iRepositorySetting = CRepository::NewL( KCRUidPersonalizationSettings );
-
     //create the repository watcher for general settings
     iGSRepositoryWatcher = CAknFepRepositoryWatcher::NewL( 
             KCRUidPersonalizationSettings, 
@@ -103,6 +142,8 @@
 	//retrieve the settings
     LoadAndPublishDefaultL();
 	
+    //iCallBack = new (ELeave) CPeninputFingerHwrArCallBack(this);
+    
     //set screen layout extent
     SetRect( TRect( TPoint( 0, 0 ), ScreenSize() ) );
     }
@@ -142,6 +183,7 @@
         case ECmdPenInputEditorNumericKeyMap:
             {
             iDataStore->SetNumberMode( *(TAknEditorNumericKeymap*)aData );
+            OnNumMappingChangedL();
             }
             break;
         case ECmdPenInputEditorCustomNumericKeyMap:
@@ -161,6 +203,10 @@
             {
             TInt language = *( TInt* )aData;
             iDataStore->SetLanguageL( language );
+            if(iHwrWnd)
+                {
+                iHwrWnd->SetIcfLanguage(language);
+                }
             }
             break;
         case ECmdPenInputPermittedCase:
@@ -225,6 +271,12 @@
             iHwrWnd->SetEnableSettingBtn(isEnableSetting);
             }
             break;
+        case ECmdPeninputArabicNumModeChanged:
+            {
+            TBool isArabicNativeNum = *aData;
+            iHwrWnd->SetNativeNumMode(isArabicNativeNum);
+            }
+            break;
         default:
 		    ret = KErrUnknown;
             break;
@@ -276,14 +328,16 @@
 		// but ICF does not offer such API
 		if(aData.iFlag & EFepICFDataDirectionMFNE )
 			{
+			iIsEditorMFNE = ETrue;
 			return KErrNone;
 			}
-			
+		
+        iIsEditorMFNE = EFalse;		
 		iDataStore->SetFirstCandidateType(ECandDefaultFirst);
-		if(iDataStore->PrimaryRange() == ERangeEnglish)
-		    {
-		    return KErrNone;
-		    }
+//		if(iDataStore->PrimaryRange() == ERangeEnglish)
+//		    {
+//		    return KErrNone;
+//		    }
 		TUint16 charBeforeCursor = 0;
 		
         if(iHwrWnd->GetCharBeforeCursor(aData.iCurSel.LowerPos()-1, charBeforeCursor))
@@ -461,7 +515,7 @@
 // ---------------------------------------------------------------------------
 //
 void CPeninputFingerHwrArLayout::Replace( const TDesC& aOldCharCode,
-    const TDesC& aNewCharCode, const TBool aIsPart )
+    const TDesC& aNewCharCode, const TBool aIsPart)
     {
 	// user tries to correct the previous selection
     // Delete the previous character and append the new one
@@ -573,7 +627,18 @@
 
     iRepositorySetting->Get( KSettingsPenInputLang, newValue );
     iDataStore->SetLanguageL( newValue );
-
+    
+//    TInt displayLang = 0;
+//    iCommonEngineRepository->Get(KGSDisplayTxtLang,displayLang);
+//    if(displayLang == ELangArabic)
+//        {
+//        iHwrWnd->SetNativeNumMode(ETrue);
+//        }
+//    else
+//        {
+//        iHwrWnd->SetNativeNumMode(EFalse);
+//        }
+    iHwrWnd->SetNativeNumMode(iDataStore->IsNativeNumMode());
     }
 
 // ---------------------------------------------------------------------------
@@ -609,6 +674,8 @@
 	delete iStateMgr;
     delete iGSRepositoryWatcher;
     delete iRepositorySetting;
+//    delete iCommonEngineRepository;
+    //delete iCallBack;
     }
 
 // ---------------------------------------------------------------------------
@@ -706,7 +773,7 @@
             }
             break;    
 		case EHwrCtrlIdBtnEnter:
-            {
+		    {
 			TBuf<1> bufEnter;
             bufEnter.Append( EKeyEnter );
             SubmitStringToFep( bufEnter );
@@ -749,16 +816,6 @@
             SignalOwner( ESignalKeyEvent, aData );
             }
             break;
-        case EHwrCtrlIdArrowDown:
-            {
-            iHwrWnd->Icf()->HandleArrowBtnEventL( CFepLayoutMultiLineIcf::EArrowDown );
-            }
-            break;
-        case EHwrCtrlIdArrowUp:
-            {
-            iHwrWnd->Icf()->HandleArrowBtnEventL( CFepLayoutMultiLineIcf::EArrowUp );
-            }
-            break;
         default:
             break;
         }
@@ -773,7 +830,11 @@
 	iHwrWnd->CancelWriting();
     if (iHwrWnd->IsCandidateShowup())
         {
-        // goto standby and clear screen	
+        // goto standby and clear screen
+        if(IsAllowedToSubmitDefaultCandiate())
+            {
+            SignalOwner( ESignalDeleteLastInput, KNullDesC );
+            }
 		ChangeCurStateToStandby();
         }
     else
@@ -818,8 +879,19 @@
     else
         {
         TBuf<1> bufBck;
-        bufBck.Append( keydata->iScanCode );
-        SignalOwner( ESignalKeyEvent, bufBck );
+        TInt convertedCode;
+        TBool converted = EFalse;
+        converted = RevertSymbolDirection(keydata->iScanCode,convertedCode);
+        bufBck.Append(convertedCode);
+//        bufBck.Append(keydata->iScanCode);
+        if(converted)
+            {
+            SignalOwner(ESignalArabicSCTChar,bufBck);
+            }
+        else
+            {
+            SignalOwner( ESignalKeyEvent, bufBck );
+            }
         }
         
     // close the symbol table
@@ -860,6 +932,7 @@
 //                                              
 void CPeninputFingerHwrArLayout::OnHwrStrokeStartedL()
     {
+    //iCallBack->IssueRequestL(); 
 	iHwrWnd->HideIndicator();
 	
 	// The default candidate cell is not highlight
@@ -877,6 +950,25 @@
     iStateMgr->HandleEventL( EEventHwrStrokeStarted, KNullDesC );
     }
 
+void CPeninputFingerHwrArLayout::CallBackL()
+    {
+    iHwrWnd->HideIndicator();
+        
+    // The default candidate cell is not highlight
+    iDataStore->SetHighlight(EFalse); 
+    
+    // close the candidate list if it's currently showing up    
+    if(iHwrWnd->IsCandidateShowup())
+        {
+        iHwrWnd->CloseCandidateList();
+        }
+    
+    // remember the start writing position.
+    iIsStrokeOfDrawingCharacerStarted = ETrue;
+    
+    iStateMgr->HandleEventL( EEventHwrStrokeStarted, KNullDesC );
+    }
+
 // ---------------------------------------------------------------------------
 // handler of StrokeFinished event.
 // ---------------------------------------------------------------------------
@@ -908,6 +1000,15 @@
 // ---------------------------------------------------------------------------
 // get value from repository.
 // ---------------------------------------------------------------------------
+// 	
+TBool CPeninputFingerHwrArLayout::IsAllowedToSubmitDefaultCandiate()	
+    {
+	return (!iIsEditorMFNE);
+	}
+	
+// ---------------------------------------------------------------------------
+// get value from repository.
+// ---------------------------------------------------------------------------
 // 
 TInt CPeninputFingerHwrArLayout::GetNewValue( 
         CAknFepRepositoryWatcher* aWatcher, const TInt aId )
@@ -1033,5 +1134,73 @@
     // set the state to be standby	
     iStateMgr->SetState( CPeninputFingerHwrArStateManagerBase::EStateStandBy );
     }
+// ---------------------------------------------------------------------------
+// handler of NumMapping changed event.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArLayout::OnNumMappingChangedL()
+    {
+    HBufC* mapping = iDataStore->KeyMappingStringL();
+
+    iHwrWnd->SetNumericMapping( *mapping );
+
+    delete mapping;
+    }
+// ---------------------------------------------------------------------------
+// revert special characters direction before sending to editor.
+// ---------------------------------------------------------------------------
+// 
+TBool CPeninputFingerHwrArLayout::RevertSymbolDirection(TInt aInChar, TInt & aOutChar)
+    {
+    TBool converted = ETrue;
+    switch(aInChar)
+        {
+        case 0x0028:
+            {
+            aOutChar = 0x0029;//convert ( to ).
+            }
+            break;
+        case 0x0029:
+            {
+            aOutChar = 0x0028;//convert ) to (.
+            }
+            break;
+        case 0x005B:
+            {
+            aOutChar = 0x005D;//convert [ to ].
+            }
+            break;
+        case 0x005D:
+            {
+            aOutChar = 0x005B;//convert ] to [.
+            }
+            break;
+        case 0x003C:
+            {
+            aOutChar = 0x003E;//convert < to >.
+            }
+            break;
+        case 0x003E:
+            {
+            aOutChar = 0x003C;//convert > to <.
+            }
+            break;
+        case 0x007B:
+            {
+            aOutChar = 0x007D;//convert { to }.
+            }
+            break;
+        case 0x007D:
+            {
+            aOutChar = 0x007B;//convert } to {.
+            }
+            break;
+        default:
+            aOutChar = aInChar;
+            converted = EFalse;
+            break;
+        }
+    return converted;
+    }
 
 //End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp	Tue May 25 13:03:44 2010 +0300
@@ -0,0 +1,645 @@
+/*
+* Copyright (c) 2009-2010 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:  Implementation of symbol table.
+*
+*/
+
+
+// INCLUDE
+#include <peninputfingerhwrarwnd.rsg>
+
+#include <coemain.h>
+#include <s32mem.h>
+#include <barsread.h>
+
+#include <aknlayoutscalable_apps.cdl.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <AknLayoutDef.h>
+#include <AknUtils.h>
+#include <AknsUtils.h>
+#include <akniconutils.h>
+#include <aknfeppeninputenums.h>
+#include <AknFepGlobalEnums.h>
+
+#include <peninputlayout.h>
+#include <peninputrepeatbutton.h>
+
+#include "hbufcarrayar.h"
+#include "peninputfingerhwrarevent.h"
+#include "peninputfingerhwrarcontrolid.h"
+#include "peninputfingerhwrarstoreconstants.h"
+#include "peninputlayoutvkb.h"
+#include "peninputfingerhwrarnumsymboltable.h"
+
+
+// ---------------------------------------------------------------------------
+// Symbian Constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputArabicFingerHwrNumSymbolTable* CPeninputArabicFingerHwrNumSymbolTable::NewL( 
+    CFepUiLayout* aUiLayout, TInt aId )
+    {
+    CPeninputArabicFingerHwrNumSymbolTable* self = CPeninputArabicFingerHwrNumSymbolTable::NewLC( 
+            aUiLayout, aId );
+    
+    CleanupStack::Pop( self ); // self;
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian Constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputArabicFingerHwrNumSymbolTable* CPeninputArabicFingerHwrNumSymbolTable::NewLC( 
+    CFepUiLayout* aUiLayout, TInt aId )
+    {
+    CPeninputArabicFingerHwrNumSymbolTable* self = new (ELeave) CPeninputArabicFingerHwrNumSymbolTable( 
+            aUiLayout, aId );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CPeninputArabicFingerHwrNumSymbolTable::CPeninputArabicFingerHwrNumSymbolTable( 
+    CFepUiLayout* aFepUiLayout, TInt aControlId )
+    : CControlGroup( aFepUiLayout, aControlId ),iIsNativeNumMode(EFalse)
+    {
+	SetControlType(ECtrlControlGroup|ECtrlTactileFeedback);
+	SetTactileFeedbackType(ETouchFeedbackSensitiveInput);
+    }
+	
+// ---------------------------------------------------------------------------
+// c++ destructor
+// ---------------------------------------------------------------------------
+//
+CPeninputArabicFingerHwrNumSymbolTable::~CPeninputArabicFingerHwrNumSymbolTable()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// popup the list.
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::OpenSymbolTable()
+    {
+    CapturePointer( ETrue );
+    iPopupVisible = ETrue; 
+    iCurrentNumSCTType = ENumSCTLatin;
+	UiLayout()->LockArea(UiLayout()->Rect(),this);  
+    UpdateNumSymbolTable(ENumSCTLatin);
+	}
+
+// ---------------------------------------------------------------------------
+// cancel the popup.
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::CloseSymbolTable()
+    {
+    CapturePointer( EFalse );
+    iPopupVisible = EFalse;
+    UiLayout()->UnLockArea(UiLayout()->Rect(),this);
+    }
+
+// ---------------------------------------------------------------------------
+// get visibility of popup.
+// ---------------------------------------------------------------------------
+//
+TBool CPeninputArabicFingerHwrNumSymbolTable::IsPopup()
+    {
+    return iPopupVisible;
+    }
+
+// ---------------------------------------------------------------------------
+// Handle pointer down event.
+// ---------------------------------------------------------------------------
+//
+CFepUiBaseCtrl* CPeninputArabicFingerHwrNumSymbolTable::HandlePointerDownEventL(
+    const TPoint& aPoint )
+    {
+    CancelPointerDownL();
+    CFepUiBaseCtrl* ctrl = CControlGroup::HandlePointerDownEventL( aPoint );
+	
+    if(!ctrl)
+	   {
+	   ReportEvent(EHwrEventOutsideEvent);
+	   }
+	else
+       {
+	    #ifdef RD_TACTILE_FEEDBACK
+        if (UiLayout()->SupportTactileFeedback())
+            {
+            UiLayout()->DoTactileFeedback(ETouchFeedbackSensitiveInput);
+            }
+        #endif //RD_TACTILE_FEEDBACK
+	   ctrl->UpdateArea(ctrl->Rect(),EFalse);
+	   }	
+	   
+    return ctrl;
+    }
+
+// ---------------------------------------------------------------------------
+// Handle pointer up event.
+// ---------------------------------------------------------------------------
+//
+CFepUiBaseCtrl* CPeninputArabicFingerHwrNumSymbolTable::HandlePointerUpEventL(
+    const TPoint& aPoint )
+    {
+    CFepUiBaseCtrl* ctrl = CControlGroup::HandlePointerUpEventL( aPoint );
+
+    if(ctrl)
+	   {
+	   ctrl->UpdateArea(ctrl->Rect(),EFalse);
+	   }
+
+	return ctrl;
+    }
+
+// ---------------------------------------------------------------------------
+// Handle pointer move event.
+// ---------------------------------------------------------------------------
+//
+CFepUiBaseCtrl* CPeninputArabicFingerHwrNumSymbolTable::HandlePointerMoveEventL(
+    const TPoint& aPoint )
+    {
+	CFepUiBaseCtrl* ctrl = CControlGroup::HandlePointerMoveEventL( aPoint );
+	if(ctrl)
+	    {
+		HandlePointerEnter(aPoint);
+		ctrl->UpdateArea(ctrl->Rect(),EFalse);
+		}
+	else
+	    {
+	    HandlePointerLeave(aPoint);
+	    UpdateArea(iRect,EFalse);
+	    }
+	
+    return ctrl;
+    }
+    
+// ---------------------------------------------------------------------------
+// Symbian second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::ConstructL()
+    {
+    BaseConstructL(); 
+	
+    // disable border
+    SetBorderSize( TSize(0,0) );
+    
+	// construct virtual keypad
+	CreateVirtualKeypadL();
+    }
+
+// ---------------------------------------------------------------------------
+// SizeChanged
+// ---------------------------------------------------------------------------
+//	
+void CPeninputArabicFingerHwrNumSymbolTable::SizeChanged(
+                     const TRect aVirtualKeypadRect, const RArray<TRect> /*aBtnRects*/,
+                     const TInt /*aKeypadRow*/, const TInt /*aKeypadCol*/, TBool aIsLandscape)
+    {
+	iIsLandscape = aIsLandscape;
+	
+	// relayout the virtual key pad
+	iNumKeypad->SetRect(aVirtualKeypadRect);
+	
+	}
+	
+// ---------------------------------------------------------------------------
+// create symbol table keypad.
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::CreateVirtualKeypadL()
+    {
+    TFontSpec spec;
+
+    iNumKeypad = CVirtualKeyboard::NewL( 
+        TRect(0,0,0,0),
+        UiLayout(),
+        EHwrCtrlIdNumSymbolTableVkb,
+        spec );
+
+    AddControlL( iNumKeypad );
+    iNumKeypad->AddEventObserver( UiLayout() );
+    
+	iNumKeypad->SetKeySkinId( EKeyBmpNormal, KAknsIIDQsnFrKeypadButtonFrNormal );
+    iNumKeypad->SetKeySkinId( EKeyBmpHighlight, KAknsIIDQsnFrKeypadButtonFrPressed );
+    iNumKeypad->SetKeySkinId( EKeyBmpDim, KAknsIIDQsnFrKeypadButtonFrInactive );
+    iNumKeypad->SetResourceId( KInvalidResId );
+        
+    iNumKeypad->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG68 );
+    iNumKeypad->SetDrawOpaqueBackground( EFalse );    
+    }
+
+void CPeninputArabicFingerHwrNumSymbolTable::OnActivate()
+    {
+    CControlGroup::OnActivate();
+	}
+
+// ---------------------------------------------------------------------------
+//  Read control's background info.
+// ---------------------------------------------------------------------------
+//	
+void CPeninputArabicFingerHwrNumSymbolTable::ConstructFromResourceL()
+    {
+	if ( iResourceId == KInvalidResId )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    TResourceReader reader;
+    CCoeEnv::Static()->CreateResourceReaderLC( reader, iResourceId );
+    
+	const TInt32 bgImageResId = reader.ReadInt32();
+	LoadBackgroundFromResourceL(bgImageResId);
+	
+	CleanupStack::PopAndDestroy( 1 ); //reader
+	
+	
+	CControlGroup::ConstructFromResourceL();
+	}
+	
+// ---------------------------------------------------------------------------
+//  Read control's background info.
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::LoadBackgroundFromResourceL( const TInt aResId )
+    {
+    if ( aResId == 0 )
+        return;
+    
+    if ( BackgroundBmp() )
+        {
+        CFbsBitmap* bkBmp = BackgroundBmp();
+        delete bkBmp;   
+        SetBackgroundBmp( NULL );
+        }
+    if ( BkMaskBmp() )
+        {
+        CFbsBitmap* bkMaskBmp = BkMaskBmp();
+        delete bkMaskBmp;
+        SetBackgroundMaskBmp( NULL );
+        }    
+
+    TResourceReader resReader;
+    CCoeEnv::Static()->CreateResourceReaderLC( resReader, aResId ); 
+     
+    TPtrC bmpFileName = resReader.ReadTPtrC();
+    TInt32 imgMajorSkinId = resReader.ReadInt32();
+
+    TAknsItemID id;
+    TInt skinitemid;
+    
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+    const TInt16 bmpId = resReader.ReadInt16();
+    const TInt16 bmpMskId = resReader.ReadInt16();
+    skinitemid = resReader.ReadInt16();   
+    id.Set( TInt( imgMajorSkinId ), skinitemid );
+    
+    if ( bmpId != KInvalidImg )
+        {
+        CFbsBitmap* backgroundImg = NULL;
+        CFbsBitmap* backgroundMaskImg = NULL;
+        if ( bmpMskId != KInvalidImg )
+            {
+            AknsUtils::CreateIconL( skininstance, id, backgroundImg,
+                    backgroundMaskImg, bmpFileName, bmpId, bmpMskId );
+            }
+        else
+            {
+            AknsUtils::CreateIconL( skininstance, id, backgroundImg,
+                    bmpFileName, bmpId );
+            }
+       
+        SetBackgroundBmp( backgroundImg );
+        SetBackgroundMaskBmp( backgroundMaskImg );           
+        }
+    CleanupStack::PopAndDestroy( 1 ); //reader
+    }
+	
+// ---------------------------------------------------------------------------
+// Load virtual keys image
+// ---------------------------------------------------------------------------
+//	
+void CPeninputArabicFingerHwrNumSymbolTable::LoadVkbKeyImageL(TInt aResId, const TSize& aKeySize)
+    {
+	TResourceReader reader;    
+    CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );      
+    
+    TPtrC bmpFileName = reader.ReadTPtrC();
+    TInt32 imgMajorSkinId = reader.ReadInt32();
+    TAknsItemID id;
+    
+    TSize keySize = aKeySize;
+    
+    for ( TInt index = 0; index <= EKeyBmpLastType ; index += 2 )
+        { 
+        // Get the image ids and mask ids from resource
+        TInt bmpId = reader.ReadInt16(); 
+        TInt bmpMskId = reader.ReadInt16();
+        
+        // read skin item id
+        const TInt skinitemid = reader.ReadInt16();
+        id.Set( TInt( imgMajorSkinId ), skinitemid );
+        
+        if ( bmpId != KInvalidImg )
+            {
+            CFbsBitmap* bmp = NULL;
+            CFbsBitmap* maskbmp = NULL;
+
+            if ( bmpMskId != KInvalidImg )
+                {
+                AknsUtils::CreateIconL( AknsUtils::SkinInstance(),
+                   id, bmp, maskbmp, bmpFileName, bmpId, bmpMskId );
+                
+                // set maskbmp and size
+                AknIconUtils::SetSize( maskbmp, keySize, EAspectRatioNotPreserved );
+                iNumKeypad->SetNonIrregularKeyBitmapL( 
+                TVirtualKeyBmpType( EKeyBmpNormal + index + 1 ), maskbmp );
+                }
+            else
+                {
+                AknsUtils::CreateIconL( AknsUtils::SkinInstance(), id, 
+                    bmp, bmpFileName, bmpId );
+                }
+            // set bmp and size
+            AknIconUtils::SetSize( bmp, keySize, EAspectRatioNotPreserved );
+            iNumKeypad->SetNonIrregularKeyBitmapL( 
+                TVirtualKeyBmpType( EKeyBmpNormal + index ), bmp );
+            }       
+        }
+    // Pop and destroy reader
+    CleanupStack::PopAndDestroy( 1 );        
+	}
+
+// ---------------------------------------------------------------------------
+// Load virtual keys
+// ---------------------------------------------------------------------------
+//	
+void CPeninputArabicFingerHwrNumSymbolTable::LoadVirtualKeypadKeyL(const TInt aResId, const RArray<TRect>& aCellRects)
+    {
+	iNumKeypad->SetResourceId(aResId);
+	
+	TResourceReader reader;
+    CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );
+
+    // construct keys
+    TInt resKeyCount = reader.ReadInt16();
+    TInt existsKeyCount = iNumKeypad->KeyArray().Count();
+    TInt rectCount = aCellRects.Count();
+    
+    for ( TInt i = 0; i < resKeyCount; i++ )
+        {
+        if ( i < existsKeyCount )
+            {
+            CVirtualKey* vk = iNumKeypad->KeyArray()[i];
+            UpdateVkbKeyL( vk, reader, aCellRects[i%rectCount] );
+            }
+        else
+            {
+            CVirtualKey* vk = CreateVkbKeyL( reader, aCellRects[i%rectCount] );
+            CleanupStack::PushL( vk );
+            iNumKeypad->AddKeyL( vk );
+            
+            CleanupStack::Pop( vk );
+            }
+        }
+    
+    CleanupStack::PopAndDestroy( 1 ); // reader
+    
+    iNumKeypad->Draw();
+    iNumKeypad->UpdateArea( iNumKeypad->Rect() );
+	}
+
+// ---------------------------------------------------------------------------
+// create virtual key.
+// ---------------------------------------------------------------------------
+//
+CVirtualKey* CPeninputArabicFingerHwrNumSymbolTable::CreateVkbKeyL( TResourceReader& aReader, 
+    const TRect aKeyRect )
+    {
+    CHBufCArray* keytexts = CHBufCArray::NewL();
+    CleanupStack::PushL( keytexts );
+    
+    for ( TInt i = 0; i <= EPosLast; i++ )
+        {
+        HBufC* unicode = aReader.ReadHBufCL();
+        keytexts->Array().AppendL( unicode );
+        }
+
+    TInt keyscancode = aReader.ReadInt16();
+
+    HBufC* text = keytexts->Array()[0];
+    
+    CVirtualKey* vk = NULL;
+    if ( text )
+        {
+        vk = CVirtualKey::NewL( *text, keyscancode, aKeyRect, aKeyRect, 0 );
+        }
+    else 
+        {
+        vk = CVirtualKey::NewL( KNullDesC, keyscancode, aKeyRect, aKeyRect, 0 );
+        }
+
+    CleanupStack::PopAndDestroy( keytexts ); //keytexts
+
+    
+    TRect innerrect = aKeyRect;
+    innerrect.Shrink( TSize(10, 10) );
+    vk->SetInnerRect( innerrect );
+    
+    return vk;
+    }
+
+// ---------------------------------------------------------------------------
+// update virtual key info.
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::UpdateVkbKeyL( CVirtualKey* aVirtualKey, 
+    TResourceReader& aReader, const TRect aKeyRect )
+    {
+    CHBufCArray* keytexts = CHBufCArray::NewL();
+    CleanupStack::PushL( keytexts );
+    
+    for ( TInt i = 0; i <= EPosLast; i++ )
+        {
+        HBufC* unicode = aReader.ReadHBufCL();
+        keytexts->Array().AppendL( unicode );
+        }
+
+    TInt keyscancode = aReader.ReadInt16();
+
+    HBufC* text = keytexts->Array()[0];
+    if ( text )
+        {
+        aVirtualKey->SetKeyData( *text );
+        }
+    else
+        {
+        aVirtualKey->SetKeyData( KNullDesC );
+        }
+    
+    aVirtualKey->SetKeyScancode( keyscancode );
+
+    CleanupStack::PopAndDestroy( keytexts ); //keytexts
+
+    aVirtualKey->SetRect(aKeyRect);
+    TRect innerrect = aKeyRect;
+    innerrect.Shrink( TSize(10,10) );
+    aVirtualKey->SetInnerRect( innerrect );
+    }
+
+// ---------------------------------------------------------------------------
+// accept editor's number mapping restriction.
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::SetNumericMapping( const TDesC& aNumMapping )
+    {
+    //format of aNumMapping is "0123456789******"
+    
+    //char offset in aNumMapping
+    //cell 0 using aNumMapping[KNumOffsets[0]]
+    //cell 1 using aNumMapping[KNumOffsets[1]]
+    const TInt KNumOffsets[] = 
+        {
+         12,  1,  2, 3,
+         13,  4,  5, 6,
+         14,  7,  8, 9,
+         15,  10, 0, 11
+        };
+    
+    TInt maxMappingItemCount = sizeof(KNumOffsets)/sizeof(TInt);
+    TInt mappingItemCount = aNumMapping.Length();
+    
+    //numberpad
+    TInt keyCount = iNumKeypad->KeyArray().Count();
+    for ( TInt i = 0; i < keyCount; i++ )
+        {
+        CVirtualKey* vk = iNumKeypad->KeyArray()[i];
+        
+        TInt offset = ( i < maxMappingItemCount ) ? KNumOffsets[i] : -1;
+        
+        if ( offset > -1  && offset < mappingItemCount )
+            {
+            TUint16 unicode = aNumMapping[offset];
+            TUint16 mappedCode = MapLatinNumAccordingToNumMode(unicode);
+            TBuf<1> keydata;
+            keydata.Append(mappedCode);
+            vk->SetKeyData(keydata);
+            vk->SetKeyScancode( mappedCode);
+            vk->SetDimmed( EFalse );
+            }
+        else
+            {
+            vk->SetKeyData( KNullDesC );
+            vk->SetKeyScancode( 0xFFFF );
+            vk->SetDimmed( EFalse );
+            }
+        }
+    
+    
+    //sync feedback
+    UpdateAllVirtualKeysFeedback();
+    }
+
+// ---------------------------------------------------------------------------
+// Navigate the symbol page
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::UpdateNumSymbolTable( TInt aNumSctType)
+    {	
+
+    iCurrentNumSCTType = aNumSctType;
+	// Draw the symbol table 
+    Draw();
+	
+	// Update the feedback for the virtual key
+    UpdateAllVirtualKeysFeedback();
+	
+	// Bitblt the whole symbol table to screen
+	UpdateArea(iRect);
+    }
+
+// ---------------------------------------------------------------------------
+//  update feedback state of all virtual keys.
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::UpdateAllVirtualKeysFeedback()
+    {
+    //update sctpad keys
+    TInt keyCount = iNumKeypad->KeyArray().Count();
+    for ( TInt i = 0; i < keyCount; i++ )
+        {
+        CVirtualKey* vk = iNumKeypad->KeyArray()[i];
+        TBool enable = !vk->Dimmed();
+        iNumKeypad->EnableKeyFeedback( vk, enable );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//  Draw new content to the screen
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::Draw()
+    {
+	if(AbleToDraw())
+        {
+		DrawOpaqueMaskBackground( Rect() );
+
+		if( BackgroundBmp() && BackgroundBmp()->SizeInPixels() != Rect().Size() )
+			{
+			AknIconUtils::SetSize(BackgroundBmp(), Rect().Size(), EAspectRatioNotPreserved);
+			}
+        // draw background
+		DrawBackground();    
+		
+        // draw group		
+		CControlGroup::Draw();
+		
+		// bitblt the new content to screen
+		UpdateArea(iRect);
+		}
+	}
+// ---------------------------------------------------------------------------
+//  set native number mode on or off.
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::SetNativeNumMode(
+        const TBool aIsNativeNumMode)
+    {
+    iIsNativeNumMode = aIsNativeNumMode;
+    }
+// ---------------------------------------------------------------------------
+//  map latin number to arabic native number.
+// ---------------------------------------------------------------------------
+//
+TInt16 CPeninputArabicFingerHwrNumSymbolTable:: MapLatinNumAccordingToNumMode(
+        TInt16 aUnicode)
+    {
+    TInt16 ret = aUnicode;
+    if(aUnicode >= 0x30 && aUnicode <= 0x39)
+        {
+        if(iIsNativeNumMode)
+            {
+            ret = aUnicode + 0x0660 - 0x30;
+            }
+        }
+    return ret;
+    }
+// End Of File
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarstatemanager.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarstatemanager.cpp	Tue May 25 13:03:44 2010 +0300
@@ -404,9 +404,10 @@
     RPointerArray<HBufC> candidates = iDataStore.Candidate();
     if ( candidates.Count() > 0 )
         {
-        HBufC* defaultCandiate = candidates[0];
-        iStateManager.HwrLayout().SubmitStringToFep( *defaultCandiate );
-            
+		if(iStateManager.HwrLayout().IsAllowedToSubmitDefaultCandiate())
+		    {
+			iStateManager.HwrLayout().SubmitStringToFep( *candidates[0]);
+			}
         iStateManager.SetState( CPeninputFingerHwrArStateManager::
                 EPeninputFingerHwrArStateCandidateSelecting );  
         
@@ -516,14 +517,21 @@
     
     TPtrC ptr;
     ptr.Set( ( aEventData.Left( aEventData.Length() - 1 ) ) );
-    RPointerArray<HBufC> candidates = iDataStore.Candidate();
-    //the selected char is not same as default
-    //replace the default candidate
-    HBufC* defaultCandidate = candidates[0];
-    if( *defaultCandidate != ptr )
+	if(!iStateManager.HwrLayout().IsAllowedToSubmitDefaultCandiate())
+		{
+		iStateManager.HwrLayout().SubmitStringToFep( ptr);
+		}
+	else
         {
-        iStateManager.HwrLayout().Replace( *defaultCandidate, ptr );         
-        }
+		RPointerArray<HBufC> candidates = iDataStore.Candidate();
+		//the selected char is not same as default
+		//replace the default candidate
+		HBufC* defaultCandidate = candidates[0];
+		if( *defaultCandidate != ptr )
+			{
+			iStateManager.HwrLayout().Replace( *defaultCandidate, ptr, EFalse);         
+			}
+		}	
     iDataStore.SetArabicSymbolL();
     }
 
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp	Tue May 25 13:03:44 2010 +0300
@@ -25,12 +25,12 @@
 
 #include <aknlayoutscalable_apps.cdl.h>
 #include <aknlayoutscalable_avkon.cdl.h>
-#include <aknlayoutdef.h>
-#include <aknutils.h>
-#include <aknsutils.h>
+#include <AknLayoutDef.h>
+#include <AknUtils.h>
+#include <AknsUtils.h>
 #include <akniconutils.h>
 #include <aknfeppeninputenums.h>
-#include <aknfepglobalenums.h>
+#include <AknFepGlobalEnums.h>
 
 #include <peninputlayout.h>
 #include <peninputrepeatbutton.h>
@@ -221,29 +221,8 @@
     {
 	iIsLandscape = aIsLandscape;
 	
-	// relayout the button group
-	TRect spaceBtnRect(aBtnRects[0]);
-	
-	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 
-    // would be bitblited onto are set to be Rect(0.0.0.0.0) [[which should not be that behavior]].
-	// Please theck the codes: AknPenInputDrawUtils::Draw3PiecesColorIcon: this function should be Updated.
-	iSpaceBtn->SetDraw3PieceFrameInfo(
-									  TDraw3PiecesFrame(KAknsIIDQgnIndiInputSpaceL,
-									  KAknsIIDQgnIndiInputSpaceMiddle,
-									  KAknsIIDQgnIndiInputSpaceR,
-									  pieceInnerRect));
-	TRect enterBtnRect(aBtnRects[1]);
-	
-	MoveIconButton(iEnterBtn,enterBtnRect,pdx,KSymbolButtonInnerPadding);
-	
-	TRect pageBtnRect(aBtnRects[2]);
+	// relayout the button
+	TRect pageBtnRect(aBtnRects[0]);
 
 	if(aIsLandscape)
 	    {
@@ -303,15 +282,6 @@
 
 void CPeninputArabicFingerHwrSymbolTable::CreateButtonGroupL()
     {
-    iEnterBtn     = CreateEventBtnL(EHwrCtrlIdBtnEnter,R_AKN_FEP_HWR_ENTER);
-	iSpaceBtn     = CreateEventBtnL(EHwrCtrlIdBtnSpace,R_AKN_FEP_HWR_SPACE);
-	// Create 3-pieces color icon for space button
-	CPenInput3PiecesColorIcons* colorIcons = 
-				CPenInput3PiecesColorIcons::NewL( R_AKN_FEP_VKB_SPACE_ICON1,
-												  R_AKN_FEP_VKB_SPACE_ICON2,
-												  R_AKN_FEP_VKB_SPACE_ICON3 );
-	iSpaceBtn->Set3PiecesColorIcons( colorIcons );											  
-	
 	// create the page button for portrait
 	i3Page1Btn  = CreateEventBtnL(EHwrCtrlId3Page1Btn, R_AKN_FEP_ARABIC_3PAGE_HWR_SCT_PAGE_1);
     i3Page2Btn  = CreateEventBtnL(EHwrCtrlId3Page2Btn, R_AKN_FEP_ARABIC_3PAGE_HWR_SCT_PAGE_2);
@@ -574,7 +544,7 @@
 
     
     TRect innerrect = aKeyRect;
-    innerrect.Shrink( TSize(10, 10) );
+    innerrect.Shrink( TSize(2, 2) );
     vk->SetInnerRect( innerrect );
     
     return vk;
@@ -614,7 +584,7 @@
 
     aVirtualKey->SetRect(aKeyRect);
     TRect innerrect = aKeyRect;
-    innerrect.Shrink( TSize(10,10) );
+    innerrect.Shrink( TSize(2,2) );
     aVirtualKey->SetInnerRect( innerrect );
     }
 
@@ -721,15 +691,17 @@
     {
 	if(AbleToDraw())
         {
-		DrawOpaqueMaskBackground( Rect() );
-
+        //Draw button area background.
+//		DrawOpaqueMaskBackground( Rect() );
+//	    DrawOpaqueMaskBackground();
+        DrawOpaqueMaskBackground(iMutiPageKeypad->Rect());
 		if( BackgroundBmp() && BackgroundBmp()->SizeInPixels() != Rect().Size() )
 			{
 			AknIconUtils::SetSize(BackgroundBmp(), Rect().Size(), EAspectRatioNotPreserved);
 			}
         // draw background
-		DrawBackground();    
-		
+//		DrawBackground();    
+        DrawBackground(iMutiPageKeypad->Rect());
         // draw group		
 		CControlGroup::Draw();
 		
@@ -737,5 +709,4 @@
 		UpdateArea(iRect);
 		}
 	}
-
 // End Of File
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp	Tue May 25 13:03:44 2010 +0300
@@ -21,11 +21,11 @@
 
 #include <aknlayoutscalable_apps.cdl.h>
 #include <aknlayoutscalable_avkon.cdl.h>
-#include <aknlayoutdef.h>
-#include <aknutils.h>
-#include <aknsutils.h>
+#include <AknLayoutDef.h>
+#include <AknUtils.h>
+#include <AknsUtils.h>
 #include <akniconutils.h>
-#include <aknfepglobalenums.h>
+#include <AknFepGlobalEnums.h>
 #include <aknfeppeninputenums.h>
 
 #include <peninputfingerhwrarwnd.rsg>
@@ -44,6 +44,7 @@
 #include "peninputfingerhwrarlayout.h"
 #include "peninputfingerhwrardatastore.h"
 #include "peninputfingerhwrarsymboltable.h"
+#include "peninputfingerhwrarnumsymboltable.h"
 #include "peninputfingerhwrarindicator.h"
 #include "peninputfingerhwrarwritingwnd.h"
 
@@ -85,9 +86,12 @@
 //
 CPeninputFingerHwrArWnd::~CPeninputFingerHwrArWnd()
     {
-    #ifdef RD_TACTILE_FEEDBACK    
-	UiLayout()->DeRegisterFeedbackArea(reinterpret_cast<TInt>(iWritingBox),
+    #ifdef RD_TACTILE_FEEDBACK
+    if(UiLayout())
+        {
+		UiLayout()->DeRegisterFeedbackArea(reinterpret_cast<TInt>(iWritingBox),
 	                                 iWritingBox->Rect());
+		}
 	#endif								 
     delete iLafManager;
     }
@@ -141,6 +145,38 @@
         }    
 
     CleanupStack::PopAndDestroy(); // reader
+
+    // read keypad image info
+    if ( iNumSymbolTable )
+        {
+        TSize keysize = iLafManager->VirtualSctpadCellSize().Size();
+        iNumSymbolTable->LoadVkbKeyImageL(R_FINGER_HWR_NUMPAD_IMAGE, keysize );
+        
+        RArray<TRect> rects;
+        CleanupClosePushL( rects );
+        iLafManager->GetVirtualKeyRects( rects );
+        LoadNumSymbolVirtualKeysL( R_FINGER_HWR_NUMPAD, rects );
+        CleanupStack::PopAndDestroy(); //rects
+        }
+    
+    if ( iSymbolTable )
+        {
+        TSize keysize = iLafManager->VirtualSctpadCellSize().Size();
+        iSymbolTable->LoadVkbKeyImageL(R_FINGER_HWR_SCTPAD_IMAGE, keysize );
+        
+        RArray<TRect> rects;
+        CleanupClosePushL( rects );
+        iLafManager->GetVirtualKeyRects( rects );
+        if(iLafManager->IsLandscape())
+            {
+            LoadSymbolVirtualKeysL(R_ARABIC_FINGER_HWR_LANDSCAPE_SYMBOL_TABLE, rects);
+            }
+        else
+            {
+            LoadSymbolVirtualKeysL(R_ARABIC_FINGER_HWR_PORTRAIT_SYMBOL_TABLE, rects);
+            }        
+        CleanupStack::PopAndDestroy(); //rects
+        }
     
     if (!iFirstTimeConstruct)
     	{
@@ -191,12 +227,6 @@
             iLafManager->CandidateLTPos(), 
             3/*KCandidateCountPerRow*/,
             2 );
-    iNumCandidateList->SizeChanged( iLafManager->CandidateUnitWidth(),
-            iLafManager->CandidateUnitHeight(), 
-            iLafManager->CandidateUnitWidth(), 
-            iLafManager->CandidateLTPos(), 
-            3/*KCandidateCountPerRow*/,
-            1 );
     iContextField->SetTextMargin ( iLafManager->IcfLeftMargin(),
             iLafManager->IcfRightMargin(),
             iLafManager->IcfTopMargin(),
@@ -434,14 +464,6 @@
     {
     return iCandidateList;
     }
-// ---------------------------------------------------------------------------
-// retrieve the number candicate list control.
-// ---------------------------------------------------------------------------
-//
-CFepCtrlDropdownList* CPeninputFingerHwrArWnd::NumCandidateList()
-    {
-    return iNumCandidateList;
-    }
 
 // ---------------------------------------------------------------------------
 // Open the candidate list
@@ -449,34 +471,24 @@
 //	
 void CPeninputFingerHwrArWnd::OpenCandidateList()
     {
-	CPeninputFingerHwrArLayout* hwrLayout = NULL;
-	hwrLayout = static_cast<CPeninputFingerHwrArLayout*>( UiLayout() );
-	CPeninputFingerHwrArDataStore& datastore = hwrLayout->DataStore();
-	
-	const RPointerArray<HBufC>& candidates = datastore.Candidate();
-	
-	if(candidates.Count() > 0)
+    CPeninputFingerHwrArLayout* hwrLayout = NULL;
+    hwrLayout = static_cast<CPeninputFingerHwrArLayout*>( UiLayout() );
+    CPeninputFingerHwrArDataStore& datastore = hwrLayout->DataStore();
+    
+    const RPointerArray<HBufC>& candidates = datastore.Candidate();
+    
+    if(candidates.Count() > 0)
         {
-		CFepCtrlDropdownList::TListType unexpandable = CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble;
-	
-		if ( datastore.PrimaryRange() == ERangeNative )
-			{
-			iCandidateList->Hide( EFalse );
-			TRAP_IGNORE(iCandidateList->SetCandidatesL( candidates, unexpandable ));
-			iCandidateList->SetHighlightCell( 0, datastore.Highlight() ); 		   
-			}
-		else
-			{
-			iNumCandidateList->Hide( EFalse );
-			TRAP_IGNORE(iNumCandidateList->SetCandidatesL( candidates, unexpandable ));
-			iNumCandidateList->SetHighlightCell( 0, datastore.Highlight() );         
-			}
-			
-		iArrowLeftBtn->Hide(ETrue);
-		iArrowRightBtn->Hide(ETrue);
-		iArrowUpBtn->Hide(ETrue);
-		iArrowDownBtn->Hide(ETrue);
-		}	
+        CFepCtrlDropdownList::TListType unexpandable = CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble;
+    
+        iCandidateList->Hide( EFalse );
+        TRAP_IGNORE(iCandidateList->SetCandidatesL( candidates, unexpandable ));
+        iCandidateList->SetHighlightCell( 0, datastore.Highlight() ); 		   
+        iArrowLeftBtn->Hide(ETrue);
+        iArrowRightBtn->Hide(ETrue);
+        iSpaceBtn->Hide(ETrue);
+        iEnterBtn->Hide(ETrue);
+        }	
 	}
 
 // ---------------------------------------------------------------------------
@@ -486,15 +498,12 @@
 void CPeninputFingerHwrArWnd::CloseCandidateList()
     {
 	iCandidateList->ResetAndClear(CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble);
-	iNumCandidateList->ResetAndClear(CFepCtrlDropdownList::EListExpandableMultiRowWithoutIconWithBubble);
 	// hide all the dropdown list in standby state
 	iCandidateList->Hide( ETrue );
-	iNumCandidateList->Hide( ETrue );          
-    
     iArrowLeftBtn->Hide(EFalse);
     iArrowRightBtn->Hide(EFalse);
-    iArrowUpBtn->Hide(EFalse);
-    iArrowDownBtn->Hide(EFalse);
+    iSpaceBtn->Hide(EFalse);
+    iEnterBtn->Hide(EFalse);
 	}
 
 // ---------------------------------------------------------------------------
@@ -505,8 +514,8 @@
    {
    iArrowLeftBtn->SetDimmed( aDimArrow );   
    iArrowRightBtn->SetDimmed( aDimArrow );   
-   iArrowUpBtn->SetDimmed( aDimArrow );   
-   iArrowDownBtn->SetDimmed( aDimArrow ); 
+   iSpaceBtn->SetDimmed( aDimArrow );   
+   iEnterBtn->SetDimmed( aDimArrow ); 
    }
 
 // ---------------------------------------------------------------------------
@@ -544,11 +553,11 @@
     //create candidate lists
     CreateCandidateListL();
     
-    //create number candidate lists.
-    CreateNumCandidateListL();
-    
     //create virtual sct pad
     CreateSymbolTableL();
+    
+    //create number mode virtual sct pad
+    CreateNumSymbolTableL();
 
     //create control buttons
     CreateButtonsL();   
@@ -675,58 +684,6 @@
     }
     
 // ---------------------------------------------------------------------------
-// create candidate lists.
-// ---------------------------------------------------------------------------
-//
-void CPeninputFingerHwrArWnd::CreateNumCandidateListL()
-    {
-    TDropdownListDrawInfo candiDrawInfo( 
-            KAknsIIDQsnFrFunctionButtonInactive, 
-            KAknsIIDQsnFrFunctionButtonNormal,
-            KAknsIIDQsnFrFunctionButtonPressed,
-            KAknsIIDQsnFrItutButtonCandiSideL,
-            KAknsIIDQsnFrItutButtonCandiMiddle,
-            KAknsIIDQsnFrItutButtonCandiSideR,
-            KAknsIIDQsnFrItutButtonCandiPressedSideL,
-            KAknsIIDQsnFrItutButtonCandiPressedMiddle,
-            KAknsIIDQsnFrItutButtonCandiPressedSideR,
-            TRgb( 194, 221, 242 ),
-            ETrue );
-
-    TInt unitWidth = iLafManager->CandidateUnitWidth();
-    TInt unitHeight = iLafManager->CandidateUnitHeight();
-    TPoint ltPosition = iLafManager->CandidateLTPos();
-    const CFont *font = iLafManager->CandidateFont();
-    TInt horizontalMargin = iLafManager->CandidateHorizontalMargin();
-    TInt verticalMargin = iLafManager->CandidateVerticalMargin();
-
-    iNumCandidateList = CFepCtrlDropdownList::NewL(UiLayout(),
-            EHwrCtrlIdNumCandidateList,
-            R_FSHWR_CANDIDATE_DROP_DOWN_LIST,                                            
-            ltPosition,                                               
-            font ,
-            TSize(unitWidth,unitHeight),
-            unitWidth,
-            3,1,
-            unitHeight,
-            0,
-            0,
-            CFepCtrlDropdownList::ECandFromRToL,
-            EFalse);            
-    AddControlL( iNumCandidateList );
-    iNumCandidateList->SetCellMargin( horizontalMargin, verticalMargin );
-    iNumCandidateList->SetFont( font );
-    
-    // set the needed events
-    iNumCandidateList->SetEventIdForCandidateSelected( EHwrEventCandidateSelected );
-    iNumCandidateList->AddEventObserver( UiLayout() );
-    
-    // hide the candidate list
-    iNumCandidateList->Hide( ETrue );
-    iNumCandidateList->SetDropdownListImgID( candiDrawInfo );
-
-    }
-// ---------------------------------------------------------------------------
 // create writing box.
 // ---------------------------------------------------------------------------
 //
@@ -762,10 +719,14 @@
         EHwrEventNavKeyClicked, EKeyLeftArrow );
     iArrowRightBtn = CreateRepBtnL( EHwrCtrlIdArrowRight, R_AKN_FEP_HWR_ARROWRIGHT, 
         EHwrEventNavKeyClicked, EKeyRightArrow );
-    iArrowUpBtn = CreateRepBtnL( EHwrCtrlIdArrowUp, R_AKN_FEP_HWR_ARROWUP, 
-        EHwrEventNavKeyClicked, EKeyUpArrow );
-    iArrowDownBtn = CreateRepBtnL( EHwrCtrlIdArrowDown, R_AKN_FEP_HWR_ARROWDOWN, 
-        EHwrEventNavKeyClicked, EKeyDownArrow );
+    iEnterBtn = CreateEventBtnL(EHwrCtrlIdBtnEnter,R_AKN_FEP_HWR_ENTER);
+    iSpaceBtn = CreateEventBtnL(EHwrCtrlIdBtnSpace,R_AKN_FEP_HWR_SPACE);
+    // Create 3-pieces color icon for space button
+    CPenInput3PiecesColorIcons* colorIcons = 
+                CPenInput3PiecesColorIcons::NewL( R_AKN_FEP_VKB_SPACE_ICON1,
+                                                  R_AKN_FEP_VKB_SPACE_ICON2,
+                                                  R_AKN_FEP_VKB_SPACE_ICON3 );
+    iSpaceBtn->Set3PiecesColorIcons( colorIcons );                                                
 	iSymbolTableBtn = CreateEventBtnL( EHwrCtrlIdSymbolButton, R_AKN_FEP_HWR_SYMBOL_TABLE_BUTTON );	
     }
 
@@ -784,6 +745,20 @@
     }
 
 // ---------------------------------------------------------------------------
+// create virtual number mode sct pad.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArWnd::CreateNumSymbolTableL()
+    {
+    iNumSymbolTable = CPeninputArabicFingerHwrNumSymbolTable::NewL(UiLayout(),EHwrCtrlIdNumSymbolTableVkbGroup);
+    iNumSymbolTable->Hide(ETrue);
+    iNumSymbolTable->SetResourceId(R_FINGERHWR_ARABIC_SYMBOLTABLE);
+    iNumSymbolTable->ConstructFromResourceL();
+    AddControlL( iNumSymbolTable );
+    iNumSymbolTable->AddEventObserver( UiLayout() );
+    }
+
+// ---------------------------------------------------------------------------
 // EventButton creation helper.
 // ---------------------------------------------------------------------------
 //
@@ -842,6 +817,23 @@
     }
 
 // ---------------------------------------------------------------------------
+// load virtual number mode sct keys.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArWnd::LoadNumSymbolVirtualKeysL( const TInt aResId, 
+    const RArray<TRect>& aCellRects )
+    {
+    TAknTextLineLayout txtlayout = iLafManager->NumpadKeyTxtLayout();
+    iNumSymbolTable->KeyPad()->SetTextLineLayout( txtlayout );
+    
+    TInt fontid = txtlayout.FontId();
+    const CFont* font = AknLayoutUtils::FontFromId( fontid );
+    iNumSymbolTable->KeyPad()->SetFont( font );
+    
+    iNumSymbolTable->LoadVirtualKeypadKeyL(aResId,aCellRects);
+    }
+
+// ---------------------------------------------------------------------------
 //  relayout full ui, reset all controls position. 
 // ---------------------------------------------------------------------------
 //
@@ -884,18 +876,31 @@
 	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 );
-		
+    rect = iLafManager->CtrlRect( iSpaceBtn->ControlId() );
+    MoveIconButton( iSpaceBtn, rect, pdx, pdy, ETrue );
+
+    TRect pieceInnerRect = rect;
+    pieceInnerRect.Shrink(pdx*2,pdy);
+    
+    // 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 
+    // would be bitblited onto are set to be Rect(0.0.0.0.0) [[which should not be that behavior]].
+    // Please theck the codes: AknPenInputDrawUtils::Draw3PiecesColorIcon: this function should be Updated.
+    iSpaceBtn->SetDraw3PieceFrameInfo(
+                                      TDraw3PiecesFrame(KAknsIIDQgnIndiInputSpaceL,
+                                      KAknsIIDQgnIndiInputSpaceMiddle,
+                                      KAknsIIDQgnIndiInputSpaceR,
+                                      pieceInnerRect));
+    
+    rect = iLafManager->CtrlRect( iEnterBtn->ControlId() );
+    MoveIconButton( iEnterBtn, rect, pdx, pdy, ETrue );
+
     // load vkb key image
     TSize keysize = iLafManager->VirtualSctpadCellSize().Size();
     iSymbolTable->LoadVkbKeyImageL(R_FINGER_HWR_SCTPAD_IMAGE, keysize );
@@ -927,6 +932,31 @@
 	iSymbolTable->SizeChanged(iLafManager->GetVirtualKeyRect(),
 	                          iLafManager->GetSymBtnArray(), rows, cols,
 							  iLafManager->IsLandscape());
+	//number mode symbol table
+    // load number mode vkb key image
+    TSize numkeysize = iLafManager->VirtualSctpadCellSize().Size();
+    iNumSymbolTable->LoadVkbKeyImageL(R_FINGER_HWR_NUMPAD_IMAGE, numkeysize );
+    
+    // get the key rect
+    RArray<TRect> numrects;
+    CleanupClosePushL( numrects );
+    iLafManager->GetNumVirtualKeyRects( numrects );
+    
+    // load keys
+    LoadNumSymbolVirtualKeysL(R_FINGER_HWR_NUMPAD, numrects);
+        
+    CleanupStack::PopAndDestroy();//rects
+    
+    //move virtual Sctpad
+    TInt numpadrows = iLafManager->VirtualNumSctpadRowCount();
+    TInt numpadcols = iLafManager->VirtualNumSctpadColCount();       
+    
+    rect = iLafManager->CtrlRect(iNumSymbolTable->ControlId());
+    iNumSymbolTable->SetRect(rect);
+    
+    iNumSymbolTable->SizeChanged(iLafManager->GetVirtualNumKeyRect(),
+                              iLafManager->GetSymBtnArray(), numpadrows, numpadcols,
+                              iLafManager->IsLandscape());
     }
 
 
@@ -938,14 +968,14 @@
     {
 	// hide following controls
     iCandidateList->Hide( ETrue );
-    iNumCandidateList->Hide( ETrue );
     iSymbolTable->Hide( ETrue);
+    iNumSymbolTable->Hide(ETrue);
     
 	// show following controls
     iArrowLeftBtn->Hide( EFalse );
     iArrowRightBtn->Hide( EFalse );
-    iArrowUpBtn->Hide( EFalse );
-    iArrowDownBtn->Hide( EFalse );
+    iSpaceBtn->Hide( EFalse );
+    iEnterBtn->Hide( EFalse );
     iOptionBtn->Hide( EFalse );
     iSymbolTableBtn->SetHighlight( EFalse);
     iContextField->SetReady(ETrue);
@@ -958,18 +988,30 @@
 //
 void CPeninputFingerHwrArWnd::SwitchToSymbolTableView()
     {
+    CPeninputFingerHwrArLayout* hwrLayout = NULL;
+    hwrLayout = static_cast<CPeninputFingerHwrArLayout*>( UiLayout() );    
+    CPeninputFingerHwrArDataStore& datastore = hwrLayout->DataStore();
+    TBool IsNumberOnly = datastore.IsNumberOnlyMode();
 	// show following controls
     iWritingBox->Hide( EFalse );
-    iSymbolTable->Hide( EFalse );
+    if(IsNumberOnly)
+        {
+        iSymbolTable->Hide( ETrue );
+        iNumSymbolTable->Hide(EFalse);
+        }
+    else
+        {
+        iSymbolTable->Hide( EFalse );
+        iNumSymbolTable->Hide(ETrue);
+        }
     iOptionBtn->Hide( EFalse );
 	
 	// hide follwing controls
 	iCandidateList->Hide( ETrue );
-    iNumCandidateList->Hide( ETrue );
     iArrowLeftBtn->Hide( ETrue );
     iArrowRightBtn->Hide( ETrue );
-    iArrowUpBtn->Hide( ETrue );
-    iArrowDownBtn->Hide( ETrue );
+    iSpaceBtn->Hide( ETrue );
+    iEnterBtn->Hide( ETrue );
     
 	// set the symboltable button highlighted
     iSymbolTableBtn->SetHighlight( ETrue );
@@ -978,8 +1020,16 @@
 	// so set this control to be not ready
     iContextField->SetReady(EFalse);
     
-    iSymbolTable->OpenSymbolTable();
-    iSymbolTable->BringToTop();
+    if(IsNumberOnly)
+        {
+        iNumSymbolTable->OpenSymbolTable();
+        iNumSymbolTable->BringToTop();    
+        }
+    else
+        {
+        iSymbolTable->OpenSymbolTable();
+        iSymbolTable->BringToTop();
+        }
     }
 
 
@@ -1256,39 +1306,26 @@
     {
     if (aShow > 0)
         {
-    	TRect outrect,innerrect;                  
+        TRect outrect,innerrect;                  
         iCandidateList->ShowBubble(ETrue);
-
-     	// Set priview popup size
+    
+        // Set priview popup size
         iCandidateList->SetBubbleBitmapParam(NULL,NULL,KAknsIIDQsnFrInputCharPreview);
-
-    	outrect = iLafManager->PreviewBubbleRect();  
-    	innerrect = iLafManager->PreviewBubbleInnerRect();
-    	iCandidateList->SetTextFormat(iLafManager->PreviewBubbleTextLayout());
-    	iCandidateList->SetBubbleTextFont(iLafManager->PreviewBubbleFont());
-    	iCandidateList->SetBubbleSize(TSize(outrect.Width(),outrect.Height()));  // Read laf
-    	iCandidateList->SetFrameDiff(innerrect.iTl.iX - outrect.iTl.iX,
-    	               innerrect.iTl.iY - outrect.iTl.iY,
-    	               outrect.iBr.iX - innerrect.iBr.iX,
-    	               outrect.iBr.iY - innerrect.iBr.iY);
-    	
-        iNumCandidateList->ShowBubble(ETrue);
-
-        // Set priview popup size
-        iNumCandidateList->SetBubbleBitmapParam(NULL,NULL,KAknsIIDQsnFrInputCharPreview);
-        iNumCandidateList->SetTextFormat(iLafManager->PreviewBubbleTextLayout());
-        iNumCandidateList->SetBubbleTextFont(iLafManager->PreviewBubbleFont());
-        iNumCandidateList->SetBubbleSize(TSize(outrect.Width(),outrect.Height()));  // Read laf
-        iNumCandidateList->SetFrameDiff(innerrect.iTl.iX - outrect.iTl.iX,
+    
+        outrect = iLafManager->PreviewBubbleRect();  
+        innerrect = iLafManager->PreviewBubbleInnerRect();
+        iCandidateList->SetTextFormat(iLafManager->PreviewBubbleTextLayout());
+        iCandidateList->SetBubbleTextFont(iLafManager->PreviewBubbleFont());
+        iCandidateList->SetBubbleSize(TSize(outrect.Width(),outrect.Height()));  // Read laf
+        iCandidateList->SetFrameDiff(innerrect.iTl.iX - outrect.iTl.iX,
                        innerrect.iTl.iY - outrect.iTl.iY,
                        outrect.iBr.iX - innerrect.iBr.iX,
                        outrect.iBr.iY - innerrect.iBr.iY);
- 
+        
         }
     else
         {
         iCandidateList->ShowBubble(EFalse);           
-        iNumCandidateList->ShowBubble(EFalse);           
         }
     }
 
@@ -1349,7 +1386,7 @@
 //	
 void CPeninputFingerHwrArWnd::OpenSymbolTable()
 	{
-    if(!iSymbolTable->IsPopup())
+    if(!iSymbolTable->IsPopup() && !iNumSymbolTable->IsPopup())
     	{
     	SwitchToSymbolTableView();  
         }
@@ -1367,7 +1404,13 @@
 	    iSymbolTable->CloseSymbolTable();
 	    iSymbolTable->BringToBack();
 	    SwitchToStandbyView();		
-	    }	
+	    }
+	else if(iNumSymbolTable->IsPopup())
+	    {
+        iNumSymbolTable->CloseSymbolTable();
+        iNumSymbolTable->BringToBack();
+        SwitchToStandbyView();      	    
+	    }
     }
 
 // --------------------------------------------------------------------------
@@ -1377,7 +1420,8 @@
 //	    
 TBool CPeninputFingerHwrArWnd::IsSymbolTableShowingUp()
 	{
-    return iSymbolTable->IsPopup();
+    TBool ret = iSymbolTable->IsPopup() | iNumSymbolTable->IsPopup();  
+    return ret;
     }
 
 // --------------------------------------------------------------------------
@@ -1387,7 +1431,7 @@
 //	
 TBool CPeninputFingerHwrArWnd::IsCandidateShowup()
     {
-	if(!iCandidateList->Hiden() || !iNumCandidateList->Hiden())
+	if(!iCandidateList->Hiden())
 	    {
 		return ETrue;
 		}
@@ -1423,5 +1467,30 @@
 	
 	return isFound;
 	}
-	
+
+// ---------------------------------------------------------------------------
+// accept editor's number mapping restriction.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArWnd::SetNumericMapping( const TDesC& aNumMapping )
+    {
+    iNumSymbolTable->SetNumericMapping(aNumMapping);
+    }
+// ---------------------------------------------------------------------------
+//  set native number mode on or off.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArWnd::SetNativeNumMode(const TBool aIsNativeNumMode)
+    {
+    iNumSymbolTable->SetNativeNumMode(aIsNativeNumMode);
+    }
+// ---------------------------------------------------------------------------
+//  set icf language.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArWnd::SetIcfLanguage( TInt aLang )
+    {
+    iContextField->SetLanguageId(aLang);
+    }
+
 //  End Of File
--- a/textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputgenericitutwindow.cpp	Tue May 25 13:03:44 2010 +0300
@@ -1250,7 +1250,9 @@
 					iDataMgr->RequestData( ESpellIndiPaneWithoutTextRect ));
 			TRect iconRect = TItutDataConverter::AnyToRect( 
 					iDataMgr->RequestData( ESpellIndiIconWithoutTextRect ));
-			TSize offset( 0, 6 );
+			TSize offset;
+	        offset.iHeight = iconRect.iTl.iY - bubbleRect.iTl.iY;
+	        offset.iWidth = iconRect.iTl.iX - bubbleRect.iTl.iX;
 			TSize size( iconRect.Width(), iconRect.Height());
 			
 			iICF->MsgBubbleCtrl()->SetRect( bubbleRect );
@@ -1856,7 +1858,6 @@
     
     // reconstruct shift icon when skin changed
     TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ReConstructL());
-    TRAP_IGNORE(iStandardItutKp->StarIcon()->ReConstructL());
     if ( iDataMgr->IsPortraitWest())
         {
         TRAP_IGNORE(iStandardItutKp->StarIcon()->ReConstructL());
@@ -2152,7 +2153,9 @@
                 iDataMgr->RequestData( EIndiPaneWithTextRect ));
         TRect iconRect = TItutDataConverter::AnyToRect( 
                 iDataMgr->RequestData( EIndiIconWithTextRect ));
-        TSize offset( 60, 6 );
+        TSize offset;
+        offset.iHeight = iconRect.iTl.iY - bubbleRect.iTl.iY;
+        offset.iWidth = iconRect.iTl.iX - bubbleRect.iTl.iX;
         TSize size( iconRect.Width(), iconRect.Height());
         
         iICF->MsgBubbleCtrl()->SetRect( bubbleRect );
@@ -2170,7 +2173,9 @@
                 iDataMgr->RequestData( EIndiPaneWithoutTextRect ));
         TRect iconRect = TItutDataConverter::AnyToRect( 
                 iDataMgr->RequestData( EIndiIconWithoutTextRect ));
-        TSize offset( 0, 6 );
+        TSize offset;
+        offset.iHeight = iconRect.iTl.iY - bubbleRect.iTl.iY;
+        offset.iWidth = iconRect.iTl.iX - bubbleRect.iTl.iX;
         TSize size( iconRect.Width(), iconRect.Height());
         
         iICF->MsgBubbleCtrl()->SetRect( bubbleRect );
--- a/textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputitutwesternuistatespelling.cpp	Tue May 25 13:03:44 2010 +0300
@@ -359,7 +359,9 @@
                 iOwner->DataMgr()->RequestData( ESpellIndiPaneWithoutTextRect ));
         TRect iconRect = TItutDataConverter::AnyToRect( 
                 iOwner->DataMgr()->RequestData( ESpellIndiIconWithoutTextRect ));
-        TSize offset( 0, 6 );
+        TSize offset;
+        offset.iHeight = iconRect.iTl.iY - bubbleRect.iTl.iY;
+        offset.iWidth = iconRect.iTl.iX - bubbleRect.iTl.iX;
         TSize size( iconRect.Width(), iconRect.Height());
         
         iICF->MsgBubbleCtrl()->SetRect( bubbleRect );
--- a/textinput/peninputgenericitut/srcdata/peninputitutconfig_chinese.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputgenericitut/srcdata/peninputitutconfig_chinese.rss	Tue May 25 13:03:44 2010 +0300
@@ -912,7 +912,7 @@
 
     colormajorskinid=EAknsMajorSkin;
     textcolorgrp=EAknsMinorQsnTextColors;
-    textcoloridx=59;
+    textcoloridx=64;
 
     bordercolormajorskinid=EAknsMajorSkin;
     bordercolorgrp=EAknsMinorQsnOtherColors;
@@ -979,7 +979,7 @@
 
     colormajorskinid=EAknsMajorSkin;
     textcolorgrp=EAknsMinorQsnTextColors;
-    textcoloridx=59;
+    textcoloridx=64;
 
     bordercolormajorskinid=EAknsMajorSkin;
     bordercolorgrp=EAknsMinorQsnOtherColors;
@@ -1051,7 +1051,7 @@
 
     colormajorskinid=EAknsMajorSkin;
     textcolorgrp=EAknsMinorQsnTextColors;
-    textcoloridx=59;
+    textcoloridx=64;
 
     bordercolormajorskinid=EAknsMajorSkin;
     bordercolorgrp=EAknsMinorQsnOtherColors;
@@ -1120,7 +1120,7 @@
 
     colormajorskinid=EAknsMajorSkin;
     textcolorgrp=EAknsMinorQsnTextColors;
-    textcoloridx=59;
+    textcoloridx=64;
 
     bordercolormajorskinid=EAknsMajorSkin;
     bordercolorgrp=EAknsMinorQsnOtherColors;
--- a/textinput/peninputgenericvkb/inc/peninputgenericvkblayout.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputgenericvkb/inc/peninputgenericvkblayout.h	Tue May 25 13:03:44 2010 +0300
@@ -194,6 +194,8 @@
      * @return pointer of a HBufC storing the string in it
      */ 
     HBufC* ReadTextInfoHBufCL( TUint16* aStartPtr, TInt aLength );
+    
+    TBool TranslateMirrorUnicode( TUint16 aInputCode, TUint16& aOutputCode );
         
 private:
 
--- a/textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h	Tue May 25 13:03:44 2010 +0300
@@ -342,7 +342,7 @@
      * @param aText The text to be displayed in ICF
      * @return None
      */
-	void ShowTooltipL( const TDesC& aText );
+	void ShowTooltipL( const TDesC& aText, TInt aLangCode = ELangTest );
 	
     /**
      * Hide tooltip of ICF
--- a/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp	Tue May 25 13:03:44 2010 +0300
@@ -48,6 +48,8 @@
 const TUint16 thaiUnicodeNew[KNumberOfDottedChar] = {0xF731,0xF733,0xF734,0xF735,0xF736,0xF737,0xF738,0xF739, 
                               0xF73A,0xF747,0xF748,0xF749,0xF74A,0xF74B,0xF74C,0xF74D}; 
 
+const TInt KNumberOfMirrorChar = 6; 
+const TUint16 mirrorUnicode[KNumberOfMirrorChar] = {0x0029,0x005D,0x003E,0x003C,0x005B,0x0028};
 
 _LIT(KDisplaySpace, "\x0020");
 _LIT(KEmptyString, "");
@@ -221,6 +223,7 @@
             break;
         case ECmdPenInputLanguage:
             {
+            iDataMgr->SetData( EPeninputDataTypeInputLanguage, aData );
             vkbWindow->SetSwitchlistLanguage(*aData);
             vkbWindow->SetDeadKey();
             if ( iLayoutType == EPluginInputModeFSQ )
@@ -493,6 +496,9 @@
                     break;
                     }
                 }
+
+            isDottedChar = TranslateMirrorUnicode( inputCode, outputCode );
+
             if (isDottedChar)
                 {
                 number->Des().Append( outputCode );                    
@@ -505,6 +511,29 @@
         }
     }
 
+TBool CPeninputGenericVkbLayout::TranslateMirrorUnicode( TUint16 aInputCode, TUint16& aOutputCode )
+    {
+    TBool isMirrorChar = EFalse;
+    TInt langCode = *( ( TInt* )(iDataMgr->RequestData( EPeninputDataTypeInputLanguage )));
+    if (( langCode != ELangArabic ) &&
+        ( langCode != ELangHebrew ) &&
+        ( langCode != ELangFarsi ) &&
+        ( langCode != ELangUrdu ))
+        {
+        return isMirrorChar;
+        }
+    for (TInt i = 0; i < KNumberOfMirrorChar; i++)
+        {
+        if (mirrorUnicode[i] == aInputCode)
+            {
+            aOutputCode = mirrorUnicode[KNumberOfMirrorChar - i - 1];
+            isMirrorChar = ETrue;
+            break;
+            }
+        }
+    return isMirrorChar;
+    }
+
 // ---------------------------------------------------------------------------
 // Handle show tooltip command.
 // ---------------------------------------------------------------------------
@@ -531,7 +560,7 @@
         if (tooltipText)
             {
             CleanupStack::PushL(tooltipText);
-            vkbWindow->ShowTooltipL(*tooltipText);
+            vkbWindow->ShowTooltipL(*tooltipText, *( ( TInt* )(iDataMgr->RequestData( EPeninputDataTypeInputLanguage ))));
             CleanupStack::PopAndDestroy(tooltipText);
             }        
         }     
--- a/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp	Tue May 25 13:03:44 2010 +0300
@@ -36,6 +36,7 @@
 #include <peninputdataprovider.h>
 #include <peninputclientlayoutinfo.h>
 #include <peninputlayoutchoicelist.h>
+#include <peninputlongpressbutton.h>
 
 #include <aknlayoutscalable_apps.cdl.h>
 #include <peninputlayoutbubblectrl.h>
@@ -167,6 +168,81 @@
                 }
             }
             break;
+        case EPeninputLayoutEventMultiRangeLongPress:
+            {
+            const TInt range = CPeninputDataConverter::AnyToInt(
+                iLayoutContext->RequestData(EPeninputDataTypeCurrentRange));
+            
+            const TInt langId = IntContext( EPeninputDataTypeInputLanguage );
+
+            if ( aCtrl->ControlId() == EPeninutWindowCtrlIdMultiRangeBtn )
+                {
+            
+                if ( range == ERangeAccent )
+                    {
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
+                        {
+                        ChangeRange(ERangeNative);
+                        }
+                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
+                        {
+                        ChangeRange(ERangeEnglish);
+                        }
+                    }
+                else if ( range == ERangeNative )
+                    {            
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNativeNumber ) )
+                        {
+                        
+                        if ( langId != ELangArabic && langId != ELangFarsi 
+                                && langId != ELangUrdu && langId != ELangThai )
+                            {
+                                ChangeRange(ERangeNativeNumber);
+                            }
+                        }
+                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNumber ) )
+                        {
+                        if ( langId != ELangArabic && langId != ELangFarsi 
+                                && langId != ELangUrdu && langId != ELangThai )
+                            {
+                                ChangeRange(ERangeNumber);
+                            }                       
+                        }
+                    }
+                else if ( range == ERangeEnglish )
+                    {
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNumber ) )
+                        {
+                        ChangeRange(ERangeNumber);
+                        }
+                    }
+                else if ( range == ERangeNativeNumber )
+                    {
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
+                        {
+                        ChangeRange(ERangeNative);
+                        }                   
+                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
+                        {
+                        ChangeRange(ERangeEnglish);
+                        }
+                    }
+                else if ( range == ERangeNumber )
+                    {
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
+                        {
+                        ChangeRange(ERangeNative);
+                        }                   
+                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
+                        {
+                        ChangeRange(ERangeEnglish);
+                        }                   
+                    }
+
+                TRAP_IGNORE( UpdateRangeCtrlsL() );
+                }
+            }
+            break;
         case EPeninputLayoutVkbEventResetShift: 
             {
             HandleShiftAndCapslockBtnClicked();
@@ -1150,8 +1226,12 @@
         resId = numberRangeResId; 
         }
         
-    rangeBtn->SetResourceId( resId );
-    rangeBtn->ConstructFromResourceL();
+    if( rangeBtn->ResourceId() != resId )
+    	{
+		rangeBtn->SetResourceId( resId );
+		rangeBtn->ConstructFromResourceL(); 
+    	}
+
     rangeBtn->SetDimmed( count < 1 );    
     }
 
@@ -1496,11 +1576,22 @@
         }
     else
         {
-        button = CAknFepCtrlEventButton::NewL( UiLayout(), aControlId, 
-            aEventId, aUnicode,
-			  KAknsIIDQsnFrFunctionButtonNormal,
-			  KAknsIIDQsnFrFunctionButtonPressed,
-			  KAknsIIDQsnFrFunctionButtonInactive );
+        if ( aControlId == EPeninutWindowCtrlIdMultiRangeBtn )
+            {
+            button = CAknFepCtrlLongPressButton::NewL( UiLayout(), aControlId, 
+                aEventId, aUnicode,
+                KAknsIIDQsnFrFunctionButtonNormal,
+                KAknsIIDQsnFrFunctionButtonPressed,
+                KAknsIIDQsnFrFunctionButtonInactive );                
+            }
+        else
+            {
+            button = CAknFepCtrlEventButton::NewL( UiLayout(), aControlId, 
+                aEventId, aUnicode,
+                KAknsIIDQsnFrFunctionButtonNormal,
+                KAknsIIDQsnFrFunctionButtonPressed,
+                KAknsIIDQsnFrFunctionButtonInactive );        
+            }
         }
         
     CleanupStack::PushL( button );  
@@ -2479,7 +2570,7 @@
 // Show tooltip of ICF
 // --------------------------------------------------------------------------
 //
-void CPeninputGenericVkbWindow::ShowTooltipL( const TDesC& aText )
+void CPeninputGenericVkbWindow::ShowTooltipL( const TDesC& aText, TInt aLangCode )
     {
     CFepLayoutMultiLineIcf* icf = static_cast<CFepLayoutMultiLineIcf*>
                                 (Control(EPeninputWindowCtrlIdMultiLineICF));    
@@ -2506,7 +2597,7 @@
     tooltipRect.iBr 
            = innerRect.iBr + TPoint( KTooltipRightMargin, KTooltipBottomMargin );
     // Set tooltip rect in terms of inner rect
-    icf->ShowTooltipL( aText, tooltipRect );
+    icf->ShowTooltipL( aText, tooltipRect, aLangCode );
     }
 	
 // --------------------------------------------------------------------------
@@ -2801,7 +2892,9 @@
         TAknTextLineLayout textLine = iLafMgr->IndiText();
         TRect bubbleRect = iLafMgr->IndiPaneRectWithText();
         TRect iconRect = iLafMgr->IndiIconRectWithText();
-        TSize offset( 60, 6 );
+        TSize offset;
+        offset.iHeight = iconRect.iTl.iY - bubbleRect.iTl.iY;
+        offset.iWidth = iconRect.iTl.iX - bubbleRect.iTl.iX;
         TSize size( iconRect.Width(), iconRect.Height());
         
         icf->MsgBubbleCtrl()->SetRect( bubbleRect );
@@ -2819,7 +2912,9 @@
         {
         TRect bubbleRect = iLafMgr->IndiPaneRectWithoutText();
         TRect iconRect = iLafMgr->IndiIconRectWithoutText();
-        TSize offset( 0, 6 );
+        TSize offset;
+        offset.iHeight = iconRect.iTl.iY - bubbleRect.iTl.iY;
+        offset.iWidth = iconRect.iTl.iX - bubbleRect.iTl.iX;
         TSize size( iconRect.Width(), iconRect.Height());
         
         icf->MsgBubbleCtrl()->SetRect( bubbleRect );
--- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_50.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_50.rss	Tue May 25 13:03:44 2010 +0300
@@ -775,8 +775,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x200C>;
-                    scancode=0x200C;
+                    unicode=<0x0631>;
+                    scancode=0x0631;
                     beginrow=2;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -784,8 +784,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x200D>;
-                    scancode=0x200D;
+                    unicode=<0x0630>;
+                    scancode=0x0630;
                     beginrow=2;
                     begincolumn=5;
                     highlightbmpindex=0;
--- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_94.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_94.rss	Tue May 25 13:03:44 2010 +0300
@@ -739,8 +739,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x200C>;
-                    scancode=0x200C;
+                    unicode=<0x0642>;
+                    scancode=0x0642;
                     beginrow=2;
                     begincolumn=0;
                     highlightbmpindex=0;
@@ -748,8 +748,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x200D>;
-                    scancode=0x200D;
+                    unicode=<0x0641>;
+                    scancode=0x0641;
                     beginrow=2;
                     begincolumn=1;
                     highlightbmpindex=0;
@@ -766,8 +766,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x200E>;
-                    scancode=0x200E;
+                    unicode=<0x0633>;
+                    scancode=0x0633;
                     beginrow=2;
                     begincolumn=3;
                     highlightbmpindex=0;
@@ -793,8 +793,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x200F>;
-                    scancode=0x200F;
+                    unicode=<0x0639>;
+                    scancode=0x0639;
                     beginrow=2;
                     begincolumn=6;
                     highlightbmpindex=0;
--- a/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Tue May 25 13:03:44 2010 +0300
@@ -1683,7 +1683,9 @@
         TRect iconRect = TItutDataConverter::AnyToRect( 
                 iDataMgr->RequestData( EIndiIconWithoutTextRect ));
         
-        TSize offset( 0, 6 );
+        TSize offset;
+        offset.iHeight = iconRect.iTl.iY - bubbleRect.iTl.iY;
+        offset.iWidth = iconRect.iTl.iX - bubbleRect.iTl.iX;
         TSize size( iconRect.Width(), iconRect.Height());
         
         iICF->MsgBubbleCtrl()->SetRect( bubbleRect );
--- a/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp	Tue May 25 13:03:44 2010 +0300
@@ -57,6 +57,7 @@
 #include "peninputsplitqwertylayout.h"
 
 #include <peninputaknvkbpreviewbubblerenderer.h>
+#include <peninputlongpressbutton.h>
 
 // Constants
 const TInt KPeninputVkbWndInvalidIndex = -1;
@@ -481,7 +482,82 @@
     
     switch ( aEventType )
         {
-        case EEventButtonUp:
+        case EPeninputLayoutEventMultiRangeLongPress:
+            {
+            const TInt range = CPeninputDataConverter::AnyToInt(
+                iLayoutContext->RequestData(EPeninputDataTypeCurrentRange));
+            
+            const TInt langId = CPeninputDataConverter::AnyToInt(
+                iLayoutContext->RequestData(EPeninputDataTypeInputLanguage));
+
+            if ( aCtrl->ControlId() == EPeninutWindowCtrlIdRangeBtn )
+                {
+                if ( range == ERangeAccent )
+                    {
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
+                        {
+                        ChangeRange(ERangeNative);
+                        }
+                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
+                        {
+                        ChangeRange(ERangeEnglish);
+                        }
+                    }
+                else if ( range == ERangeNative )
+                    {            
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNativeNumber ) )
+                        {
+                        
+                        if ( langId != ELangArabic && langId != ELangFarsi 
+                                && langId != ELangUrdu && langId != ELangThai )
+                            {
+                                ChangeRange(ERangeNativeNumber);
+                            }
+                        }
+                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNumber ) )
+                        {
+                        if ( langId != ELangArabic && langId != ELangFarsi 
+                                && langId != ELangUrdu && langId != ELangThai )
+                            {
+                                ChangeRange(ERangeNumber);
+                            }                       
+                        }
+                    }
+                else if ( range == ERangeEnglish )
+                    {
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNumber ) )
+                        {
+                        ChangeRange(ERangeNumber);
+                        }
+                    }
+                else if ( range == ERangeNativeNumber )
+                    {
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
+                        {
+                        ChangeRange(ERangeNative);
+                        }                   
+                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
+                        {
+                        ChangeRange(ERangeEnglish);
+                        }
+                    }
+                else if ( range == ERangeNumber )
+                    {
+                    if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeNative ) )
+                        {
+                        ChangeRange(ERangeNative);
+                        }                   
+                    else if ( ConfigInfo()->RangeBarInfo()->FindRange( ERangeEnglish ) )
+                        {
+                        ChangeRange(ERangeEnglish);
+                        }                   
+                    }
+
+                TRAP_IGNORE( UpdateRangeCtrlsL() );
+                }
+            }
+            break;
+        case EPeninputLayoutEventMultiRange:
             {
             if ( ctrlId == EPeninutWindowCtrlIdRangeBtn )
                 {
@@ -1293,12 +1369,13 @@
 //
 void CPeninputSplitQwertyWindow::AddRangeBarL()
     {
-    CAknFepCtrlCommonButton* button = CAknFepCtrlCommonButton::NewL(
-                                        UiLayout(), 
-                                        EPeninutWindowCtrlIdRangeBtn,
-                                        KAknsIIDQsnFrFunctionButtonNormal,
-                                        KAknsIIDQsnFrFunctionButtonPressed,
-                                        KAknsIIDQsnFrFunctionButtonInactive );
+    CAknFepCtrlLongPressButton* button = CAknFepCtrlLongPressButton::NewL( 
+            UiLayout(), 
+            EPeninutWindowCtrlIdRangeBtn, 
+            0xffff, 0,
+            KAknsIIDQsnFrFunctionButtonNormal,
+            KAknsIIDQsnFrFunctionButtonPressed,
+            KAknsIIDQsnFrFunctionButtonInactive );                
 
     CleanupStack::PushL( button ); 
     button->SetResourceId( R_PENINPUT_LAYOUT_VKB_RANGE_DEFAULT );
--- a/textinput/peninputvkbcn/ctrlsrc/peninputvkbcompositionfield.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputvkbcn/ctrlsrc/peninputvkbcompositionfield.cpp	Tue May 25 13:03:44 2010 +0300
@@ -783,7 +783,7 @@
 
     UpdateTextL();
     Draw();
-    UpdateArea(Rect(),EFalse);
+    //UpdateArea(Rect(),EFalse);
     }
     
 // ---------------------------------------------------------
--- a/textinput/peninputvkbcn/ctrlsrc/peninputvkbwindow.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputvkbcn/ctrlsrc/peninputvkbwindow.cpp	Tue May 25 13:03:44 2010 +0300
@@ -206,6 +206,7 @@
 //
 void CAknFepVkbWindow::ChangeImLayout(TInt aRange, TBool aChangeVkb)
     {
+	UiLayout()->DisableLayoutDrawing(ETrue);   
     TInt imLayout = iDataProvider->RequestData(EAknFepDataTypeIMLayout);
 
     if ( iArrowLeftButton )
@@ -219,6 +220,7 @@
     
     iClientArea->ChangeImLayout(aRange, aChangeVkb);
     SizeChangedForTitle();
+    UiLayout()->DisableLayoutDrawing(EFalse);
     Draw();
     }
 
--- a/textinput/peninputvkbcn/src/peninputvkblayout.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputvkbcn/src/peninputvkblayout.cpp	Tue May 25 13:03:44 2010 +0300
@@ -254,6 +254,7 @@
         case ECmdPenInputWindowClose:
 			iVkbWindow->Hide(ETrue);
             LayoutOwner()->Hide(ETrue);            
+            iVkbWindow->HideTooltipOnFSQ();
             break;
         case ECmdPenInputRange:
             SetCurrentRange(*data);
@@ -605,6 +606,13 @@
             
         case EVkbEventCompFieldNoChars:       
             SendEventToVkbControl(EVkbEventComposition2Standby,NULL);            
+            SendEventToVkbControl( aEventType, aCtrl, aEventData );
+            if ( iUiStateMgr )
+            	{
+				iUiStateMgr->SetCurrentUiState( iUiStateMgr->UiStateStandbycn());
+				ForceEditGainFocus( EInputContextFieldGetFocus );
+            	}
+            break;
         case EVkbEventClearContent:
             SendEventToVkbControl(aEventType,aCtrl,aEventData);
             break;
--- a/textinput/peninputvkbcn/src/peninputvkbuistatecompositionwithchars.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputvkbcn/src/peninputvkbuistatecompositionwithchars.cpp	Tue May 25 13:03:44 2010 +0300
@@ -124,27 +124,9 @@
 // -----------------------------------------------------------------------------
 //
 TBool CAknFepVkbUiStateCompositionWithChars::HandleBackEvent(TInt /*aEventType*/,
-                                                             const TDesC& aEventData)
-    {
-    TInt lengthPendown = iContext->RequestData(EAknFepDataTypeLengthWhenButtondownOnBack);
-    
-    TInt* data = (TInt*) aEventData.Ptr();
-    
-    //Get the flag of pen up or timer out, true when timer out, false when pen up
-    data++;
-    
-    if ( 1 >= iContext->CompositionFieldStringLength() ) // if no chars
-        {
-        iContext->SendEventToVkbControl(EVkbEventComposition2Standby,NULL);
-        
-        if ( *data == EFalse )  // pen up
-            {
-            iUiStateMgr->SetCurrentUiState(iUiStateMgr->UiStateStandbycn());                       
-            iContext->ForceEditGainFocus(EInputContextFieldGetFocus);              
-            }            
-        }
-    return EFalse;  // If no chars, needn't send to composition again
-        
+                                                             const TDesC& /*aEventData*/)
+    {    
+    return EFalse;  // If no chars, needn't send to composition again        
     }
     
 // -----------------------------------------------------------------------------
--- a/textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp	Tue May 25 13:03:44 2010 +0300
@@ -15,8 +15,8 @@
 *
 */
 
-#include <PeninputVkbKrWindowConfigInfo_65.rsg>
-#include <PeninputVkbKrWindowKr.rsg>
+#include <peninputvkbkrwindowconfiginfo_65.rsg>
+#include <peninputvkbkrwindowkr.rsg>
 
 #include <aknlayoutscalable_apps.cdl.h>
 #include <aknlayoutscalable_avkon.cdl.h>
--- a/textinput/ptienginev2/languages/102072F3.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102072F3.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818A5.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818A5.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818A6.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818A6.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818A7.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818A7.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818A8.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818A8.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818A9.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818A9.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818AA.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818AA.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818AB.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818AB.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818AC.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818AC.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818AD.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818AD.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818AE.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818AE.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818AF.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818AF.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818B0.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818B0.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818B1.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818B1.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818B2.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818B2.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818B9.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818B9.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818BA.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818BA.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818BB.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818BB.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/102818BC.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/102818BC.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B72.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B72.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B74.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B74.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B76.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B76.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B78.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B78.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B7A.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B7A.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B7C.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B7C.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B7E.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B7E.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B80.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B80.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B82.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B82.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B84.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B84.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B88.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B88.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B89.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B89.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B8D.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B8D.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B8E.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B8E.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B8F.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B8F.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B90.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B90.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B92.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B92.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B93.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B93.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B94.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B94.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B95.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B95.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B96.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B96.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10281B97.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10281B97.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10282545.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10282545.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10282547.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10282547.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10282549.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10282549.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/1028255C.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/1028255C.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10282562.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10282562.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/10282568.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/10282568.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/2000B17D.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/2000B17D.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/2001FDFA.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/2001FDFA.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/2002BC83.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/2002BC83.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/languages/2002BC85.rss	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/languages/2002BC85.rss	Tue May 25 13:03:44 2010 +0300
@@ -26,8 +26,8 @@
 
 
 
-#include <Eikon.rh>
-#include <ecom/RegistryInfo.rh>
+#include <eikon.rh>
+#include <ecom/registryinfo.rh>
 
 
 RESOURCE REGISTRY_INFO theInfo
--- a/textinput/ptienginev2/src/PtiDefaultCore.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/src/PtiDefaultCore.cpp	Tue May 25 13:03:44 2010 +0300
@@ -22,7 +22,7 @@
 #include "PtiLanguage.h"
 #include "PtiEngine.h"
 #include "PtiKeyMappings.h"
-#include <PtiEngine.rsg>
+#include <ptiengine.rsg>
 #include "PtiDefaultNumberModeMappingdata.h"
 
 #include <data_caging_path_literals.hrh> 
--- a/textinput/ptienginev2/src/PtiEngineImpl.cpp	Tue May 11 16:31:42 2010 +0300
+++ b/textinput/ptienginev2/src/PtiEngineImpl.cpp	Tue May 25 13:03:44 2010 +0300
@@ -23,7 +23,7 @@
 #include "PtiEngineImpl.h"
 #include "PtiDefaultCore.h"
 #include "PtiLanguage.h"
-#include <PtiEngine.rsg>
+#include <ptiengine.rsg>
 #include "PtiUserDicEntry.h"
 #include "PtiEngine.h"
 #include "PtiKeyMappings.h"
@@ -149,6 +149,8 @@
             aMainCode = ELangSpanish;
             break;
         case ELangEnglish_Taiwan:
+        case ELangEnglish_HongKong:
+        case ELangEnglish_Prc:
             aMainCode = ELangEnglish;
             break;
         default: