Revision: 201001
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 18 Jan 2010 20:10:36 +0200
changeset 2 08c6ee43b396
parent 1 5315654608de
child 3 fb3763350a08
Revision: 201001 Kit: 201003
group/bld.inf
idlehomescreen/data/qhd_tch/group/bld.inf
idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/00/profile.css
idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/37/profile.css
idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/50/profile.css
idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/57/profile.css
idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/94/profile.css
idlehomescreen/data/qhd_tch/shortcut2_2001f484/gfx/shortcut2logo.svg
idlehomescreen/data/qhd_tch/shortcut2_2001f484/group/bld.inf
idlehomescreen/data/qhd_tch/shortcut2_2001f484/hsps/00/manifest.dat
idlehomescreen/data/qhd_tch/shortcut2_2001f484/hsps/00/shortcut2configuration.dtd
idlehomescreen/data/qhd_tch/shortcut2_2001f484/hsps/00/widgetconfiguration.xml
idlehomescreen/data/qhd_tch/shortcut2_2001f484/loc/shortcut2configuration.loc
idlehomescreen/data/qhd_tch/shortcut2_2001f484/rom/shortcut2.iby
idlehomescreen/data/qhd_tch/shortcut2_2001f484/rom/shortcut2_customer.iby
idlehomescreen/data/qhd_tch/shortcut2_2001f484/rom/shortcut2_resources.iby
idlehomescreen/data/qhd_tch/shortcut2_2001f484/rom/shortcut2_variant.iby
idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/00/shortcut2.css
idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/00/shortcut2.dat
idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/00/shortcut2.xml
idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/37/shortcut2.css
idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/50/shortcut2.css
idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/57/shortcut2.css
idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/94/shortcut2.css
idlehomescreen/data/qhd_tch/shortcut_2001f483/gfx/shortcut1logo.png
idlehomescreen/data/qhd_tch/shortcut_2001f483/group/bld.inf
idlehomescreen/data/qhd_tch/shortcut_2001f483/hsps/00/manifest.dat
idlehomescreen/data/qhd_tch/shortcut_2001f483/hsps/00/shortcutconfiguration.dtd
idlehomescreen/data/qhd_tch/shortcut_2001f483/hsps/00/widgetconfiguration.xml
idlehomescreen/data/qhd_tch/shortcut_2001f483/loc/shortcutconfiguration.loc
idlehomescreen/data/qhd_tch/shortcut_2001f483/rom/shortcut.iby
idlehomescreen/data/qhd_tch/shortcut_2001f483/rom/shortcut_customer.iby
idlehomescreen/data/qhd_tch/shortcut_2001f483/rom/shortcut_resources.iby
idlehomescreen/data/qhd_tch/shortcut_2001f483/rom/shortcut_variant.iby
idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/00/Shortcut.css
idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/00/Shortcut.xml
idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/00/shortcut.dat
idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/37/Shortcut.css
idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/50/Shortcut.css
idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/57/Shortcut.css
idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/94/Shortcut.css
idlehomescreen/data/qhd_tch/templateview_20026f50/loc/templateview.loc
idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/00/templateview.css
idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/00/templateview.xml
idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/00/view.dtd
idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/37/templateview.css
idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/50/templateview.css
idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/57/templateview.css
idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/94/templateview.css
idlehomescreen/data/qhd_tch/view_2001f48b/loc/View.loc
idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/00/View.css
idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/00/View.dtd
idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/00/View.xml
idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/37/View.css
idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/50/View.css
idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/57/View.css
idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/94/View.css
idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/00/double_row_icon_widget.css
idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/37/double_row_icon_widget.css
idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/50/double_row_icon_widget.css
idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/57/double_row_icon_widget.css
idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/94/double_row_icon_widget.css
idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/00/double_row_widget.css
idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/37/double_row_widget.css
idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/50/double_row_widget.css
idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/57/double_row_widget.css
idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/94/double_row_widget.css
idlehomescreen/data/vga_tch/group/bld.inf
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/group/bld.inf
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/hsps/00/manifest.dat
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/hsps/00/shortcut2configuration.dtd
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/hsps/00/widgetconfiguration.xml
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/loc/shortcut2configuration.loc
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/rom/shortcut2.iby
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/rom/shortcut2_customer.iby
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/rom/shortcut2_resources.iby
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/rom/shortcut2_variant.iby
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/00/shortcut2.css
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/00/shortcut2.dat
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/00/shortcut2.xml
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/37/shortcut2.css
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/50/shortcut2.css
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/57/shortcut2.css
idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/94/shortcut2.css
idlehomescreen/data/vga_tch/shortcut_2001f490/group/bld.inf
idlehomescreen/data/vga_tch/shortcut_2001f490/hsps/00/manifest.dat
idlehomescreen/data/vga_tch/shortcut_2001f490/hsps/00/shortcutconfiguration.dtd
idlehomescreen/data/vga_tch/shortcut_2001f490/hsps/00/widgetconfiguration.xml
idlehomescreen/data/vga_tch/shortcut_2001f490/loc/Shortcut.loc
idlehomescreen/data/vga_tch/shortcut_2001f490/loc/shortcutconfiguration.loc
idlehomescreen/data/vga_tch/shortcut_2001f490/rom/shortcut.iby
idlehomescreen/data/vga_tch/shortcut_2001f490/rom/shortcut_customer.iby
idlehomescreen/data/vga_tch/shortcut_2001f490/rom/shortcut_resources.iby
idlehomescreen/data/vga_tch/shortcut_2001f490/rom/shortcut_variant.iby
idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/00/Shortcut.css
idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/00/Shortcut.dat
idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/00/Shortcut.dtd
idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/00/Shortcut.xml
idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/37/Shortcut.css
idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/50/Shortcut.css
idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/57/Shortcut.css
idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/94/Shortcut.css
idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/00/single_row_icon_widget.css
idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/37/single_row_icon_widget.css
idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/50/single_row_icon_widget.css
idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/57/single_row_icon_widget.css
idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/94/single_row_icon_widget.css
idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/00/single_row_widget.css
idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/37/single_row_widget.css
idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/50/single_row_widget.css
idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/57/single_row_widget.css
idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/94/single_row_widget.css
idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/00/triple_row_icon_widget.css
idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/37/triple_row_icon_widget.css
idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/50/triple_row_icon_widget.css
idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/57/triple_row_icon_widget.css
idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/94/triple_row_icon_widget.css
idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/00/triple_row_widget.css
idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/37/triple_row_widget.css
idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/50/triple_row_widget.css
idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/57/triple_row_widget.css
idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/94/triple_row_widget.css
idlehomescreen/data/vga_tch/view1_2001fdb9/loc/view.loc
idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/00/view.dtd
idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/37/view.css
idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/50/view.css
idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/57/view.css
idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/94/view.css
idlehomescreen/data/vga_tch/wideimage_10009dff/xuikon/00/wideimage.css
idlehomescreen/hscontentcontrol/group/hscontentcontrol.mmp
idlehomescreen/hscontentcontrol/inc/hscontentcontrolfactory.h
idlehomescreen/hscontentcontrol/inc/hscontentcontroluninstallmonitor.h
idlehomescreen/hscontentcontrol/inc/hscontentcontroluninstallobserver.h
idlehomescreen/hscontentcontrol/src/hscontentcontrolfactory.cpp
idlehomescreen/hscontentcontrol/src/hscontentcontroluninstallmonitor.cpp
idlehomescreen/inc/xndomattribute.h
idlehomescreen/inc/xndomdocument.h
idlehomescreen/inc/xndomlist.h
idlehomescreen/inc/xndomnode.h
idlehomescreen/inc/xndomproperty.h
idlehomescreen/inc/xndompropertyvalue.h
idlehomescreen/inc/xndomstringpool.h
idlehomescreen/inc/xndomstringpooloptimizer.h
idlehomescreen/inc/xnnewsticker.h
idlehomescreen/inc/xnproperty.h
idlehomescreen/inc/xnviewmanager.h
idlehomescreen/widgetmanager/data/20026F53.rss
idlehomescreen/widgetmanager/data/widgetmanagerview.loc
idlehomescreen/widgetmanager/group/widgetmanager.mmp
idlehomescreen/widgetmanager/inc/wmcommon.h
idlehomescreen/widgetmanager/inc/wmconfiguration.h
idlehomescreen/widgetmanager/inc/wmcrkeys.h
idlehomescreen/widgetmanager/inc/wmdetailsdlg.h
idlehomescreen/widgetmanager/inc/wmimageconverter.h
idlehomescreen/widgetmanager/inc/wmlistbox.h
idlehomescreen/widgetmanager/inc/wmmaincontainer.h
idlehomescreen/widgetmanager/inc/wmplugin.h
idlehomescreen/widgetmanager/inc/wmportalbutton.h
idlehomescreen/widgetmanager/inc/wmresourceloader.h
idlehomescreen/widgetmanager/inc/wmwidgetdata.h
idlehomescreen/widgetmanager/inc/wmwidgetdata.inl
idlehomescreen/widgetmanager/sis/Create_update_sisx.bat
idlehomescreen/widgetmanager/sis/widgetmanager_urel.pkg
idlehomescreen/widgetmanager/src/wmconfiguration.cpp
idlehomescreen/widgetmanager/src/wmdetailsdlg.cpp
idlehomescreen/widgetmanager/src/wmimageconverter.cpp
idlehomescreen/widgetmanager/src/wmlistbox.cpp
idlehomescreen/widgetmanager/src/wmmaincontainer.cpp
idlehomescreen/widgetmanager/src/wmmaincontainerview.cpp
idlehomescreen/widgetmanager/src/wmplugin.cpp
idlehomescreen/widgetmanager/src/wmportalbutton.cpp
idlehomescreen/widgetmanager/src/wmresourceloader.cpp
idlehomescreen/widgetmanager/src/wmwidgetdata.cpp
idlehomescreen/widgetmanager/src/wmwidgetloaderao.cpp
idlehomescreen/widgetmanager/tsrc/wmunittest/conf/ui_wmunittest.cfg
idlehomescreen/widgetmanager/tsrc/wmunittest/group/wmunittest.mmp
idlehomescreen/widgetmanager/tsrc/wmunittest/inc/wmunittest.h
idlehomescreen/widgetmanager/tsrc/wmunittest/src/wmunittest_converter.cpp
idlehomescreen/widgetmanager/tsrc/wmunittest/src/wmunittest_plugin.cpp
idlehomescreen/widgetmanager/tsrc/wmunittest/src/wmunittest_sortorder.cpp
idlehomescreen/xmluicontroller/conf/activeidle2.confml
idlehomescreen/xmluicontroller/conf/activeidle2_10275102.crml
idlehomescreen/xmluicontroller/src/aieventhandler.cpp
idlehomescreen/xmluicontroller/src/aixmluiutils.cpp
idlehomescreen/xmluicontroller/src/databuffertransactionelement.cpp
idlehomescreen/xmluicontroller/src/imagetransactionelement.cpp
idlehomescreen/xmluicontroller/src/texttransactionelement.cpp
idlehomescreen/xmluirendering/dom/bwins/xn3domdocumentu.def
idlehomescreen/xmluirendering/dom/eabi/xn3domdocumentu.def
idlehomescreen/xmluirendering/dom/group/xndomdocument.mmp
idlehomescreen/xmluirendering/dom/src/xndomattribute.cpp
idlehomescreen/xmluirendering/dom/src/xndomdocument.cpp
idlehomescreen/xmluirendering/dom/src/xndomlist.cpp
idlehomescreen/xmluirendering/dom/src/xndomnode.cpp
idlehomescreen/xmluirendering/dom/src/xndomproperty.cpp
idlehomescreen/xmluirendering/dom/src/xndompropertyvalue.cpp
idlehomescreen/xmluirendering/dom/src/xndomstringpool.cpp
idlehomescreen/xmluirendering/dom/src/xndomstringpooloptimizer.cpp
idlehomescreen/xmluirendering/ecomelement/xndomvisitor/src/xndomvisitor.cpp
idlehomescreen/xmluirendering/renderingplugins/xnmenufactory/src/xnmenuadapter.cpp
idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/group/xnnewstickerfactory.mmp
idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/inc/xnnewstickeradapter.h
idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/inc/xnnewstickercontrol.h
idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/inc/xnnewstickersvgcontrol.h
idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewsticker.cpp
idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickeradapter.cpp
idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickercontrol.cpp
idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickerfactory.cpp
idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickersvgcontrol.cpp
idlehomescreen/xmluirendering/renderingplugins/xnvolumecontrolfactory/src/xnvolumecontroladapter.cpp
idlehomescreen/xmluirendering/uiengine/group/xnlayoutengine.mmp
idlehomescreen/xmluirendering/uiengine/inc/xnbackgroundmanager.h
idlehomescreen/xmluirendering/uiengine/inc/xnbgcontrol.h
idlehomescreen/xmluirendering/uiengine/inc/xneditor.h
idlehomescreen/xmluirendering/uiengine/inc/xnviewdata.h
idlehomescreen/xmluirendering/uiengine/src/xnappuiadapter.cpp
idlehomescreen/xmluirendering/uiengine/src/xnbackgroundmanager.cpp
idlehomescreen/xmluirendering/uiengine/src/xnbgcontrol.cpp
idlehomescreen/xmluirendering/uiengine/src/xncomponentfactory.cpp
idlehomescreen/xmluirendering/uiengine/src/xncomposer.cpp
idlehomescreen/xmluirendering/uiengine/src/xncontroladapterimpl.cpp
idlehomescreen/xmluirendering/uiengine/src/xneditmode.cpp
idlehomescreen/xmluirendering/uiengine/src/xneditor.cpp
idlehomescreen/xmluirendering/uiengine/src/xnextrenderingpluginwrapper.cpp
idlehomescreen/xmluirendering/uiengine/src/xnfocuscontrol.cpp
idlehomescreen/xmluirendering/uiengine/src/xnkeyeventdispatcher.cpp
idlehomescreen/xmluirendering/uiengine/src/xnlistquerydialogadapter.cpp
idlehomescreen/xmluirendering/uiengine/src/xnnodeimpl.cpp
idlehomescreen/xmluirendering/uiengine/src/xnnodepluginif.cpp
idlehomescreen/xmluirendering/uiengine/src/xnodtparser.cpp
idlehomescreen/xmluirendering/uiengine/src/xnplugindata.cpp
idlehomescreen/xmluirendering/uiengine/src/xnproperty.cpp
idlehomescreen/xmluirendering/uiengine/src/xnuiengine.rss
idlehomescreen/xmluirendering/uiengine/src/xnuiengineappif.cpp
idlehomescreen/xmluirendering/uiengine/src/xnuiengineimpl.cpp
idlehomescreen/xmluirendering/uiengine/src/xnuienginepluginif.cpp
idlehomescreen/xmluirendering/uiengine/src/xnviewadapter.cpp
idlehomescreen/xmluirendering/uiengine/src/xnviewdata.cpp
idlehomescreen/xmluirendering/uiengine/src/xnviewmanager.cpp
idlehomescreen/xmluirendering/uiengine/src/xnwallpaperview.cpp
idlehomescreen/xmluirendering/uiengine/src/xnwidgetextensionadapter.cpp
menufw/menufwui/matrixmenu/src/mmappui.cpp
menufw/menufwui/mmwidgets/bwins/mmwidgetsu.def
menufw/menufwui/mmwidgets/eabi/mmwidgetsu.def
menufw/menufwui/mmwidgets/inc/mmwidgetcontainer.h
menufw/menufwui/mmwidgets/src/mmgrid.cpp
menufw/menufwui/mmwidgets/src/mmlistbox.cpp
menufw/menufwui/mmwidgets/src/mmwidgetcontainer.cpp
menufw/menusuites/foldersuite/data/matrixmenudata.xml
taskswitcher/contextengine/group/bld.inf
taskswitcher/contextengine/hgctxutils/BWINS/hgcontextservicesutilsu.def
taskswitcher/contextengine/hgctxutils/EABI/hgcontextservicesutilsu.def
taskswitcher/contextengine/hgctxutils/group/bld.inf
taskswitcher/contextengine/hgctxutils/group/hgcontextservicesutils.mmp
taskswitcher/contextengine/hgctxutils/inc/hgcenreplistener.h
taskswitcher/contextengine/hgctxutils/inc/hgproplistener.h
taskswitcher/contextengine/hgctxutils/src/hgcenreplistener.cpp
taskswitcher/contextengine/hgctxutils/src/hgproplistener.cpp
taskswitcher/contextengine/hgfswpreviewprovider/bwins/hgpreviewprovideru.def
taskswitcher/contextengine/hgfswpreviewprovider/eabi/hgpreviewprovideru.def
taskswitcher/contextengine/hgfswpreviewprovider/group/bld.inf
taskswitcher/contextengine/hgfswpreviewprovider/group/previewprovider.mmp
taskswitcher/contextengine/hgfswpreviewprovider/inc/hgfastswappreviewproviderlogging.h
taskswitcher/contextengine/hgfswpreviewprovider/inc/hgpreviewobserver.h
taskswitcher/contextengine/hgfswpreviewprovider/inc/hgpreviewprovider.h
taskswitcher/contextengine/hgfswpreviewprovider/inc/previewmsg.h
taskswitcher/contextengine/hgfswpreviewprovider/inc/previewproviderlogging.h
taskswitcher/contextengine/hgfswpreviewprovider/rom/hgfastswappreviewprovider.iby
taskswitcher/contextengine/hgfswpreviewprovider/src/previewprovider.cpp
taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/group/bld.inf
taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/group/previewprovidercrp.mmp
taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/inc/previewprovidercrp.h
taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/inc/previewprovidercrplogging.h
taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/src/20016BEC.rss
taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/src/previewprovidercrp.cpp
taskswitcher/contextengine/hgfswserver/client/bwins/hgfswclientu.def
taskswitcher/contextengine/hgfswserver/client/eabi/hgfswclientu.def
taskswitcher/contextengine/hgfswserver/client/group/bld.inf
taskswitcher/contextengine/hgfswserver/client/group/hgfswclient.mmp
taskswitcher/contextengine/hgfswserver/client/inc/clientlogging.h
taskswitcher/contextengine/hgfswserver/client/inc/hgfswclient.h
taskswitcher/contextengine/hgfswserver/client/inc/hgfswclientimpl.h
taskswitcher/contextengine/hgfswserver/client/inc/hgfswclientobserver.h
taskswitcher/contextengine/hgfswserver/client/src/hgfswclient.cpp
taskswitcher/contextengine/hgfswserver/client/src/hgfswclientimpl.cpp
taskswitcher/contextengine/hgfswserver/engine/bwins/hgfswengineu.def
taskswitcher/contextengine/hgfswserver/engine/eabi/hgfswengineu.def
taskswitcher/contextengine/hgfswserver/engine/group/bld.inf
taskswitcher/contextengine/hgfswserver/engine/group/hgfswengine.mmp
taskswitcher/contextengine/hgfswserver/engine/inc/enginelogging.h
taskswitcher/contextengine/hgfswserver/engine/inc/hgfsalwaysshownapplist.h
taskswitcher/contextengine/hgfswserver/engine/inc/hgfshiddenapplist.h
taskswitcher/contextengine/hgfswserver/engine/inc/hgfswengine.h
taskswitcher/contextengine/hgfswserver/engine/inc/hgfswiconcache.h
taskswitcher/contextengine/hgfswserver/engine/inc/hgfswidgetlist.h
taskswitcher/contextengine/hgfswserver/engine/inc/hgfswobservers.h
taskswitcher/contextengine/hgfswserver/engine/src/hgfsalwaysshownapplist.cpp
taskswitcher/contextengine/hgfswserver/engine/src/hgfshiddenapplist.cpp
taskswitcher/contextengine/hgfswserver/engine/src/hgfswengine.cpp
taskswitcher/contextengine/hgfswserver/engine/src/hgfswiconcache.cpp
taskswitcher/contextengine/hgfswserver/engine/src/hgfswidgetlist.cpp
taskswitcher/contextengine/hgfswserver/group/bld.inf
taskswitcher/contextengine/hgfswserver/inc/hgfswcommon.h
taskswitcher/contextengine/hgfswserver/rom/hgfswserver.iby
taskswitcher/contextengine/hgfswserver/server/group/bld.inf
taskswitcher/contextengine/hgfswserver/server/group/hgfswserver.mmp
taskswitcher/contextengine/hgfswserver/server/inc/hgfswappui.h
taskswitcher/contextengine/hgfswserver/server/inc/hgfswserver.h
taskswitcher/contextengine/hgfswserver/server/inc/hgfswsession.h
taskswitcher/contextengine/hgfswserver/server/inc/serverlogging.h
taskswitcher/contextengine/hgfswserver/server/src/hgfswappui.cpp
taskswitcher/contextengine/hgfswserver/server/src/hgfswserver.cpp
taskswitcher/contextengine/hgfswserver/server/src/hgfswsession.cpp
taskswitcher/contextengine/hgfswserver/utils/bwins/hgfswutilsu.def
taskswitcher/contextengine/hgfswserver/utils/eabi/hgfswutilsu.def
taskswitcher/contextengine/hgfswserver/utils/group/bld.inf
taskswitcher/contextengine/hgfswserver/utils/group/hgfswutils.mmp
taskswitcher/contextengine/hgfswserver/utils/inc/hgfswentry.h
taskswitcher/contextengine/hgfswserver/utils/inc/utilslogging.h
taskswitcher/contextengine/hgfswserver/utils/src/hgfswentry.cpp
taskswitcher/contextengine/rom/hgcontextservices.iby
taskswitcher/contextengine/sis/stubs/createstubs.bat
taskswitcher/contextengine/sis/stubs/hgctxsrv_stub.pkg
taskswitcher/contextengine/sis/stubs/hgctxsrv_stub.sis
taskswitcher/contextengine/trace/hglogging.h
taskswitcher/contextengine/trace/hglogutils.h
taskswitcher/group/bld.inf
taskswitcher/teleportui/group/bld.inf
taskswitcher/teleportui/hgteleportapp/data/hgteleport.rss
taskswitcher/teleportui/hgteleportapp/data/hgteleport_reg.rss
taskswitcher/teleportui/hgteleportapp/group/backup_registration.xml
taskswitcher/teleportui/hgteleportapp/group/bld.inf
taskswitcher/teleportui/hgteleportapp/group/hgteleportapp.mmp
taskswitcher/teleportui/hgteleportapp/inc/hgteleportapplication.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportapplogging.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportappui.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportappview.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportcommands.hrh
taskswitcher/teleportui/hgteleportapp/inc/hgteleportdatachangeobserver.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportdevicestate.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportdocument.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleporteventcontroler.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleporteventcontrolerobserver.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportfastswaparea.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportfastswapgrid.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportphysics.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportphysicsengine.h
taskswitcher/teleportui/hgteleportapp/inc/hgteleportuid.hrh
taskswitcher/teleportui/hgteleportapp/loc/taskswitcher.loc
taskswitcher/teleportui/hgteleportapp/src/hgteleport.cpp
taskswitcher/teleportui/hgteleportapp/src/hgteleportapplication.cpp
taskswitcher/teleportui/hgteleportapp/src/hgteleportappui.cpp
taskswitcher/teleportui/hgteleportapp/src/hgteleportappview.cpp
taskswitcher/teleportui/hgteleportapp/src/hgteleportdevicestate.cpp
taskswitcher/teleportui/hgteleportapp/src/hgteleportdocument.cpp
taskswitcher/teleportui/hgteleportapp/src/hgteleporteventcontroler.cpp
taskswitcher/teleportui/hgteleportapp/src/hgteleportfastswaparea.cpp
taskswitcher/teleportui/hgteleportapp/src/hgteleportfastswapgrid.cpp
taskswitcher/teleportui/hgteleportapp/src/hgteleportphysics.cpp
taskswitcher/teleportui/hgteleportapp/src/hgteleportphysicsengine.cpp
taskswitcher/teleportui/hgteleportappecom/data/hgteleportappecom.rss
taskswitcher/teleportui/hgteleportappecom/group/bld.inf
taskswitcher/teleportui/hgteleportappecom/group/hgteleportappecom.mmp
taskswitcher/teleportui/hgteleportappecom/inc/hgteleportappecom.h
taskswitcher/teleportui/hgteleportappecom/inc/hgteleportappecomconst.hrh
taskswitcher/teleportui/hgteleportappecom/inc/hgteleportappecomlogging.h
taskswitcher/teleportui/hgteleportappecom/src/hgteleportappecom.cpp
taskswitcher/teleportui/hgteleportappecom/src/proxy.cpp
taskswitcher/teleportui/inc/hggraphicids.h
taskswitcher/teleportui/inc/hggraphictab.h
taskswitcher/teleportui/rom/hgteleport.iby
taskswitcher/teleportui/rom/hgteleportresources.iby
taskswitcher/teleportui/sis/stubs/createstubs.bat
taskswitcher/teleportui/sis/stubs/teleport_stub.pkg
taskswitcher/teleportui/sis/stubs/teleport_stub.sis
taskswitcher/teleportui/sis/teleport.pkg
taskswitcher/teleportui/trace/hglogging.h
taskswitcher/teleportui/trace/hglogutils.h
--- a/group/bld.inf	Thu Jan 07 12:39:41 2010 +0200
+++ b/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -20,6 +20,7 @@
 #include "../homescreen_plat/group/bld.inf"
 #include "../idlehomescreen/group/bld.inf"
 #include "../menufw/group/bld.inf"
+#include "../taskswitcher/group/bld.inf"
 
 PRJ_PLATFORMS
 
--- a/idlehomescreen/data/qhd_tch/group/bld.inf	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -15,8 +15,6 @@
 *
 */
 
-//#include "../shortcut_2001f483/group/bld.inf"
-//#include "../shortcut2_2001f484/group/bld.inf"
 #include "../desktop_20026f4f/group/bld.inf"
 #include "../empty_2001f47f/group/bld.inf"
 #include "../onerow_2001f480/group/bld.inf"
--- a/idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/00/profile.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/00/profile.css	Mon Jan 18 20:10:36 2010 +0200
@@ -81,7 +81,7 @@
 
 image#SatIdleModeIcon
 {
-    display: block;
+    display: none;
     width: 18px;
     height: 20px;
     position: static;
--- a/idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/37/profile.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/37/profile.css	Mon Jan 18 20:10:36 2010 +0200
@@ -80,7 +80,7 @@
 
 image#SatIdleModeIcon
 {
-    display: block;
+    display: none;
     width: 18px;
     height: 20px;
     position: static;
--- a/idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/50/profile.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/50/profile.css	Mon Jan 18 20:10:36 2010 +0200
@@ -80,7 +80,7 @@
 
 image#SatIdleModeIcon
 {
-    display: block;
+    display: none;
     width: 18px;
     height: 20px;
     position: static;
--- a/idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/57/profile.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/57/profile.css	Mon Jan 18 20:10:36 2010 +0200
@@ -80,7 +80,7 @@
 
 image#SatIdleModeIcon
 {
-    display: block;
+    display: none;
     width: 18px;
     height: 20px;
     position: static;
--- a/idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/94/profile.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/profile_2001cb7c/xuikon/94/profile.css	Mon Jan 18 20:10:36 2010 +0200
@@ -80,7 +80,7 @@
 
 image#SatIdleModeIcon
 {
-    display: block;
+    display: none;
     width: 18px;
     height: 20px;
     position: static;
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/gfx/shortcut2logo.svg	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="32px"
-   height="32px"
-   id="svg2466"
-   sodipodi:version="0.32"
-   inkscape:version="0.46"
-   sodipodi:docname="drawing.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <defs
-     id="defs2468">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 16 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="32 : 16 : 1"
-       inkscape:persp3d-origin="16 : 10.666667 : 1"
-       id="perspective2474" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="15.938205"
-     inkscape:cx="9.927765"
-     inkscape:cy="10.627086"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1680"
-     inkscape:window-height="1031"
-     inkscape:window-x="0"
-     inkscape:window-y="0" />
-  <metadata
-     id="metadata2471">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <image
-       y="5.765738"
-       x="-0.030936712"
-       id="image2462"
-       height="18.19879"
-       width="31.139833"
-       sodipodi:absref="Y:\HS_Domain\homescreen\idlehomescreen\data\qhd_tch\shortcut2_2001f484\gfx\shortcut2logo.png"
-       xlink:href="Y:\HS_Domain\homescreen\idlehomescreen\data\qhd_tch\shortcut2_2001f484\gfx\shortcut2logo.png"
-       transform="matrix(1,0,2.5955691e-2,0.9996631,0,0)" />
-  </g>
-</svg>
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/group/bld.inf	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/*
-* Copyright (c) 2002-2008 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: 
-* The information required for building
-*
-*/
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-// Support for productization and Carbide.Ui customization
-//********************************************************
-../hsps/00/manifest.dat /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/hsps/manifest.dat
-../hsps/00/widgetconfiguration.xml /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/hsps/widgetconfiguration.xml
-../hsps/00/shortcut2configuration.dtd /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/hsps/shortcut2configuration.dtd
-
-../xuikon/00/shortcut2.dat /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/xuikon/shortcut2_2001f484.dat
-../xuikon/00/shortcut2.css /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/xuikon/shortcut2.css
-../xuikon/00/shortcut2.xml /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/xuikon/shortcut2.xml
-
-// logo icon
-../gfx/shortcut2logo.svg /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/hsps/shortcut2logo.svg
-
-// Arabic languages
-//*****************
-../xuikon/37/shortcut2.css /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/xuikon/37/shortcut2.css
-../xuikon/50/shortcut2.css /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/xuikon/50/shortcut2.css
-../xuikon/57/shortcut2.css /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/xuikon/57/shortcut2.css
-../xuikon/94/shortcut2.css /epoc32/data/Z/resource/homescreen/shortcut2_2001f484/xuikon/94/shortcut2.css
-
-
-// Support for S60 localization
-//*****************************
-#ifndef __SHORTCUT2CONFIGURATION_LOC__
-#define __SHORTCUT2CONFIGURATION_LOC__
- ../loc/shortcut2configuration.loc APP_LAYER_LOC_EXPORT_PATH(shortcut2configuration.loc)
-#endif // __SHORTCUT2CONFIGURATION_LOC__
-
-// Support for S60 builds
-//***********************
-../rom/shortcut2_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(shortcut2_2001f484_resources.iby)
-../rom/shortcut2_customer.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(shortcut2_2001f484_customer.iby)
-../rom/shortcut2_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(shortcut2_2001f484_variant.iby)
-../rom/shortcut2.iby CORE_APP_LAYER_IBY_EXPORT_PATH(shortcut2_2001f484.iby)
-
-
-// Dtd-localization
-//*****************
-PRJ_EXTENSIONS
-START EXTENSION tools/dtd
-OPTION SWITCH_LOC_FILE_NAME shortcut2_2001f484
-OPTION DTD_TYPE widget
-OPTION LOC_FOLDERS yes
-END
-
-
-PRJ_MMPFILES
-
-PRJ_TESTMMPFILES
-
-//  End of File  
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/hsps/00/manifest.dat	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-<?xml version="1.0"?>
-
-<package version="1.0">
-
-
-
-  <family>qhd_tch</family>
-
-
-
-  <type>widget</type>
-
-
-
-  <!-- interface uid -->
-
-	<interfaceuid>0x2001f48a</interfaceuid>
-
-
-
-	<!-- vendor uid  -->
-
-	<provideruid>0x101fb657</provideruid>
-
-
-
-	<!-- uid -->
-
-	<configurationuid>0x2001f484</configurationuid>
-
-	
-
-	<!-- description -->
-
-	<fullname>&amp;qtn_shortcut2_configuration_name;</fullname>
-
-	<shortname>sc2</shortname>
-
-	<version>1.0</version>
-
-
-
-	<!-- configuration -->
-
-	<filexml>widgetconfiguration.xml</filexml>
-
-	
-
-	<!-- Name of the localization files -->
-
-	<filedtd>shortcut2configuration.dtd</filedtd>
-
-	
-
-	<!-- Locale independent/common resources -->
-
-	
-        <description>&amp;qtn_shortcut2_configuration_desc;</description>
-        <filelogo>shortcut2logo.svg</filelogo>
-
-	
-
-	<!-- Locale specific resources -->
-
-	<localization>
-		<fileresource tag="xuikon">shortcut2.o0000</fileresource>
-	</localization>
-
-
-
-</package>
\ No newline at end of file
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/hsps/00/shortcut2configuration.dtd	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-============================================================================
-<FileName: "shortcut1configuration.dtd">
-
-<FileDescription: "Localization strings for HSPS shortcut1 configuration">
-<FileVersion    : >
-
-<Copyright:
-"Copyright © 2005 Nokia Corporation.
-This material, including documentation and any related 
-computer programs, is protected by copyright controlled by 
-Nokia Corporation. All rights are reserved. Copying, 
-including reproducing, storing,  adapting or translating, any 
-or all of this material requires the prior written consent of 
-Nokia Corporation. This material also contains confidential 
-information which may not be disclosed to others without the 
-prior written consent of Nokia Corporation.">
-============================================================================
--->
-
-<!--  LOCALISATION STRINGS  -->
-
-<!--
-qtn_shortcut2_configuration_name.attributes
-qtn_shortcut2_configuration_name.layout "list_single_pane_t1_cp2"
-qtn_shortcut2_configuration_name.release "TB9.2"
-qtn_shortcut2_configuration_name.description "Shortcut 2"
-qtn_shortcut2_configuration_name.parents ""
--->
-<!ENTITY qtn_shortcut2_configuration_name "Shortcut 2">
-<!ENTITY qtn_shortcut2_configuration_desc  "RnD shortcut 2 description.">
-
-<!-- End of File-->
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/hsps/00/widgetconfiguration.xml	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-<configuration>
-    <control>
-        <settings/>
-    </control>
-</configuration>
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/loc/shortcut2configuration.loc	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Localization strings for Shortcuts 2 plugin configuration (HSPS)
-*
-*/
-
-// d: Shortcuts
-// l: list_single_pane_t1_cp2
-// w:
-// r: TB9.2
-#define qtn_shortcut2_configuration_name  "Shortcut 2"
-#define qtn_shortcut2_configuration_desc  "localized RnD shortcut 2 description."
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/rom/shortcut2.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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: 
-* Shortcut2 widget HSPS-plugin IBY file. 
-*
-*/
-
-#ifndef __SHORTCUT2_2001F484_IBY__
-#define __SHORTCUT2_2001F484_IBY__
-
-#if defined(__LAYOUT_360_640_TOUCH) || defined(__LAYOUT_640_360_TOUCH)          
-
-// Enabled by DTD-localization tools
-data=ZPRIVATE\200159c0\install\shortcut2_2001f484\hsps\00\manifest.dat \private\200159c0\install\shortcut2_2001f484\hsps\00\manifest.dat
-
-#endif // __LAYOUT_360_640_TOUCH || __LAYOUT_640_360_TOUCH
-
-#endif // __SHORTCUT2_2001F484_IBY__
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/rom/shortcut2_customer.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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: 
-* Shortcut2 widget HSPS-plugin language specific IBY file.  
-*
-*/
-
-#ifndef __SHORTCUT2_2001F484_CUSTOMER_IBY__
-#define __SHORTCUT2_2001F484_CUSTOMER_IBY__
-
-#if defined(__LAYOUT_360_640_TOUCH) || defined(__LAYOUT_640_360_TOUCH)          
-
-// Enabled by DTD-localization tools, language specific
-data=ZPRIVATE\200159c0\install\shortcut2_2001f484\xuikon\00\shortcut2.o0000 \private\200159c0\install\shortcut2_2001f484\xuikon\00\shortcut2.o0000
-data=ZPRIVATE\200159c0\install\shortcut2_2001f484\hsps\00\shortcut2configuration.dtd \private\200159c0\install\shortcut2_2001f484\hsps\00\shortcut2configuration.dtd
-
-#endif // __LAYOUT_360_640_TOUCH || __LAYOUT_640_360_TOUCH
-
-#endif // __SHORTCUT2_2001F484_CUSTOMER_IBY__
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/rom/shortcut2_resources.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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: 
-* Shortcut2 widget HSPS-plugin language specific IBY file.
-*
-*/
-
-#ifndef __SHORTCUT2_2001F484_RESOURCES_IBY__
-#define __SHORTCUT2_2001F484_RESOURCES_IBY__
-
-#if defined(__LAYOUT_360_640_TOUCH) || defined(__LAYOUT_640_360_TOUCH)
-
-// Enabled by DTD-localization tools, language specific
-#if defined (__LOCALES_37_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut2_2001f484\xuikon\37\shortcut2.o0037 \private\200159c0\install\shortcut2_2001f484\xuikon\37\shortcut2.o0037
-#endif
-#if defined  (__LOCALES_50_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut2_2001f484\xuikon\50\shortcut2.o0050 \private\200159c0\install\shortcut2_2001f484\xuikon\50\shortcut2.o0050
-#endif
-#if defined  (__LOCALES_57_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut2_2001f484\xuikon\57\shortcut2.o0057 \private\200159c0\install\shortcut2_2001f484\xuikon\57\shortcut2.o0057
-#endif
-#if defined  (__LOCALES_94_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut2_2001f484\xuikon\94\shortcut2.o0094 \private\200159c0\install\shortcut2_2001f484\xuikon\94\shortcut2.o0094
-#endif
-
-data=ZPRIVATE\200159c0\install\shortcut2_2001f484\hsps\00\shortcut2configuration.dtd \private\200159c0\install\shortcut2_2001f484\hsps\00\shortcut2configuration.dtd
-data=ZPRIVATE\200159c0\install\shortcut2_2001f484\hsps\00\shortcut2logo.svg \private\200159c0\install\shortcut2_2001f484\hsps\00\shortcut2logo.svg
-
-#endif // __LAYOUT_360_640_TOUCH || __LAYOUT_640_360_TOUCH
-
-#endif // __SHORTCUT2_2001F484_RESOURCES_IBY__
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/rom/shortcut2_variant.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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: 
-* Shortcut2 widget HSPS-plugin variant specific IBY file.  
-*
-*/
-
-#ifndef __SHORTCUT2_2001F484_VARIANT_IBY__
-#define __SHORTCUT2_2001F484_VARIANT_IBY__
-
-#if defined(__LAYOUT_360_640_TOUCH) || defined(__LAYOUT_640_360_TOUCH)          
-
-// Enabled by variation tools, variant specific
-data=ZPRIVATE\200159c0\install\shortcut2_2001f484\hsps\00\widgetconfiguration.xml \private\200159c0\install\shortcut2_2001f484\hsps\00\widgetconfiguration.xml
-
-#endif // __LAYOUT_360_640_TOUCH || __LAYOUT_640_360_TOUCH
-
-#endif  // __SHORTCUT2_2001F484_VARIANT_IBY__
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/00/shortcut2.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-widget#shortcutPluginContainer 
-{
-    block-progression: rl;
-    direction: ltr;
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 3px;
-    background-color: none;
-}
-
-button.shortcutButton 
-{
-    width: 74px;
-    margin-right: 3px;
-    nav-index: appearance;
-}
-
-button.shortcutButton:focus 
-{
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
-    focus-background:"SKIN(268458534 9896)";
-}
-
-button.shortcutButton:hold
-{
-    background-color: "SKIN(268458534 9956)";
-}
-
-image.shortcutIcon 
-{
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 350px;
-    height: 33px;
-    border-style: solid; 
-    border-width: 5px; 
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 6px;
-    padding-top: 3px;
-    padding-bottom: 3px;
-    padding-right: 6px;
-}
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/00/shortcut2.dat	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<data>
-	<AppUid>2001CB4F</AppUid>
-	<Provideruid>101FB657</Provideruid>
-	<ThemeUid>11001552</ThemeUid>
-	<ThemeFullName>Shortcut2</ThemeFullName>
-	<ThemeShortName>Shortcut2</ThemeShortName>
-	<ThemeVersion>1.0</ThemeVersion>
-	<FileXML>shortcut2.xml</FileXML>
-	<FileCSS>shortcut2.css</FileCSS>
-</data>
\ No newline at end of file
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/00/shortcut2.xml	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xmluiml xmlns="http://www.series60.com/xml/xmluiml/1" version="1.0">
-    <widget id="shortcutPluginContainer" >
-        <!-- Data plugin(s) in this widget -->
-        <contentsource name="Shortcut" value="0x102750FA" />
-                
-            <!-- Shortcut #5, Calendar -->
-            <property class="Settings/Shortcut" name="0x00000005" value="localapp:0x10005901"/>
-            <!-- Shortcut #6, New message -->
-            <property class="Settings/Shortcut" name="0x00000006" value="localapp:msg?new=msg"/>
-            <!-- Shortcut #7, Music Player -->        
-            <property class="Settings/Shortcut" name="0x00000007" value="localapp:0x102072C3"/>
-            <!-- Shortcut #8, Radio -->
-            <property class="Settings/Shortcut" name="0x00000008" value="localapp:0x10207A89"/>
-                
-        <!-- #5 -->
-        <button id="shortcutButton5" class="shortcutButton" focusable="true" _s60-initial-focus="1">
-            <actions>
-                <action>
-                    <trigger name="stylus">
-                        <property name="eventtype" value="downup" />
-                    </trigger>
-                    <trigger name="activate"/>
-                    <trigger name="keyevent">
-                        <!-- EStdKeyEnter (enum from e32keys.h) -->
-                        <property name="scancode" value="3"/>                       
-                        <property name="eventtype" value="1"/>
-                    </trigger>
-                    <event name="Shortcut/LaunchByIndex(0x00000005)"/>
-                </action>
-            </actions>
-            <image id="Shortcut_shortcutIcon5" class="shortcutIcon" >
-                <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000005"/>
-            </image>
-            <tooltip id="shortcutTooltip5" class="shortcutTooltip" >
-                <text id="Shortcut_shortcutTooltipText5" class="shortcutTooltipText" >
-                    <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000005"/>
-                </text>
-            </tooltip>        
-        </button>        
-        <!-- #6 -->
-        <button id="shortcutButton6" class="shortcutButton" focusable="true">
-            <actions>
-                <action>
-                    <trigger name="stylus">
-                        <property name="eventtype" value="downup" />
-                    </trigger>
-                    <trigger name="activate"/>
-                    <trigger name="keyevent">
-                        <!-- EStdKeyEnter (enum from e32keys.h) -->
-                        <property name="scancode" value="3"/>                       
-                        <property name="eventtype" value="1"/>                      
-                    </trigger>        
-                    <event name="Shortcut/LaunchByIndex(0x00000006)"/>
-                </action>
-            </actions>
-            <image id="Shortcut_shortcutIcon6" class="shortcutIcon" >
-                <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000006"/>
-            </image>
-            <tooltip id="Shortcut_shortcutTooltip6" class="shortcutTooltip" >
-                <text id="Shortcut_shortcutTooltipText6" class="shortcutTooltipText" >
-                    <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000006"/>
-                </text>
-            </tooltip>
-        </button>        
-        <!-- #7 -->
-        <button id="shortcutButton7" class="shortcutButton" focusable="true">
-            <actions>
-                <action>
-                    <trigger name="stylus">
-                        <property name="eventtype" value="downup" />
-                    </trigger>
-                    <trigger name="activate"/>
-                    <trigger name="keyevent">
-                        <!-- EStdKeyEnter (enum from e32keys.h) -->
-                        <property name="scancode" value="3"/>               
-                        <property name="eventtype" value="1"/>                              
-                    </trigger>        
-                    <event name="Shortcut/LaunchByIndex(0x00000007)"/>
-                </action>
-            </actions>
-            <image id="Shortcut_shortcutIcon7" class="shortcutIcon" >
-                <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000007"/>
-            </image>
-            <tooltip id="shortcutTooltip7" class="shortcutTooltip" >
-                <text id="Shortcut_shortcutTooltipText7" class="shortcutTooltipText" >
-                    <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000007"/>
-                </text>
-            </tooltip>
-        </button>        
-        <!-- #8 -->
-        <button id="shortcutButton8" class="shortcutButton" focusable="true">
-            <actions>
-                <action>
-                    <trigger name="stylus">
-                        <property name="eventtype" value="downup" />
-                    </trigger>
-                    <trigger name="activate"/>
-                    <trigger name="keyevent">
-                        <!-- EStdKeyEnter (enum from e32keys.h) -->
-                        <property name="scancode" value="3"/>               
-                        <property name="eventtype" value="1"/>                              
-                    </trigger>        
-                    <event name="Shortcut/LaunchByIndex(0x00000008)"/>
-                </action>
-            </actions>
-            <image id="Shortcut_shortcutIcon8" class="shortcutIcon" >
-                <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000008"/>
-            </image>
-            <tooltip id="Shortcut_shortcutTooltip8" class="shortcutTooltip" >
-                <text id="Shortcut_shortcutTooltipText8" class="shortcutTooltipText" >
-                    <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000008"/>
-                </text>
-            </tooltip>
-        </button>
-        <menuextension>
-            <menuitem target="hs_widget_menuitem_settings">
-                <actions>
-                    <action>
-                        <trigger name="activate"/>
-                        <event name="Shortcut/ShowSettings(0x00000005,0x00000006,0x00000007,0x00000008)"/>
-                    </action>
-                </actions>
-            </menuitem>     
-        </menuextension>        
-    </widget>
-</xmluiml>
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/37/shortcut2.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-widget#shortcutPluginContainer 
-{
-    block-progression: rl;
-    direction: rtl;
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 3px;
-    background-color: none;
-}
-
-button.shortcutButton 
-{
-    width: 74px;
-    margin-right: 3px;
-    nav-index: appearance;
-}
-
-button.shortcutButton:focus 
-{
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
-    focus-background:"SKIN(268458534 9896)";
-}
-
-button.shortcutButton:hold
-{
-    background-color: "SKIN(268458534 9956)";
-}
-
-image.shortcutIcon 
-{
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 350px;
-    height: 33px;
-    border-style: solid; 
-    border-width: 5px; 
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 6px;
-    padding-top: 3px;
-    padding-bottom: 3px;
-    padding-right: 6px;
-}
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/50/shortcut2.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-widget#shortcutPluginContainer 
-{
-    block-progression: rl;
-    direction: rtl;
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 3px;
-    background-color: none;
-}
-
-button.shortcutButton 
-{
-    width: 74px;
-    margin-right: 3px;
-    nav-index: appearance;
-}
-
-button.shortcutButton:focus 
-{
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
-    focus-background:"SKIN(268458534 9896)";
-}
-
-button.shortcutButton:hold
-{
-    background-color: "SKIN(268458534 9956)";
-}
-
-image.shortcutIcon 
-{
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 350px;
-    height: 33px;
-    border-style: solid; 
-    border-width: 5px; 
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 6px;
-    padding-top: 3px;
-    padding-bottom: 3px;
-    padding-right: 6px;
-}
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/57/shortcut2.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-widget#shortcutPluginContainer 
-{
-    block-progression: rl;
-    direction: rtl;
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 3px;
-    background-color: none;
-}
-
-button.shortcutButton 
-{
-    width: 74px;
-    margin-right: 3px;
-    nav-index: appearance;
-}
-
-button.shortcutButton:focus 
-{
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
-    focus-background:"SKIN(268458534 9896)";
-}
-
-button.shortcutButton:hold
-{
-    background-color: "SKIN(268458534 9956)";
-}
-
-image.shortcutIcon 
-{
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 350px;
-    height: 33px;
-    border-style: solid; 
-    border-width: 5px; 
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 6px;
-    padding-top: 3px;
-    padding-bottom: 3px;
-    padding-right: 6px;
-}
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
--- a/idlehomescreen/data/qhd_tch/shortcut2_2001f484/xuikon/94/shortcut2.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-widget#shortcutPluginContainer 
-{
-    block-progression: rl;
-    direction: rtl;
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 3px;
-    background-color: none;
-}
-
-button.shortcutButton 
-{
-    width: 74px;
-    margin-right: 3px;
-    nav-index: appearance;
-}
-
-button.shortcutButton:focus 
-{
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
-    focus-background:"SKIN(268458534 9896)";
-}
-
-button.shortcutButton:hold
-{
-    background-color: "SKIN(268458534 9956)";
-}
-
-image.shortcutIcon 
-{
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 350px;
-    height: 33px;
-    border-style: solid; 
-    border-width: 5px; 
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 6px;
-    padding-top: 3px;
-    padding-bottom: 3px;
-    padding-right: 6px;
-}
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
Binary file idlehomescreen/data/qhd_tch/shortcut_2001f483/gfx/shortcut1logo.png has changed
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/group/bld.inf	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
-* Copyright (c) 2002-2008 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: 
-* The information required for building 
-*
-*/
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-// Support for productization and Carbide.Ui customization
-//********************************************************
-../hsps/00/manifest.dat /epoc32/data/Z/resource/homescreen/shortcut_2001f483/hsps/manifest.dat
-../hsps/00/widgetconfiguration.xml /epoc32/data/Z/resource/homescreen/shortcut_2001f483/hsps/widgetconfiguration.xml
-../hsps/00/shortcutconfiguration.dtd /epoc32/data/Z/resource/homescreen/shortcut_2001f483/hsps/shortcutconfiguration.dtd
-
-../xuikon/00/shortcut.dat /epoc32/data/Z/resource/homescreen/shortcut_2001f483/xuikon/shortcut_2001f483.dat
-../xuikon/00/shortcut.css /epoc32/data/Z/resource/homescreen/shortcut_2001f483/xuikon/shortcut.css
-../xuikon/00/shortcut.xml /epoc32/data/Z/resource/homescreen/shortcut_2001f483/xuikon/shortcut.xml
-
-// logo icon
-../gfx/shortcut1logo.png /epoc32/data/Z/resource/homescreen/shortcut_2001f483/hsps/shortcut1logo.png
-
-// Arabic languages
-//*****************
-../xuikon/37/shortcut.css /epoc32/data/Z/resource/homescreen/shortcut_2001f483/xuikon/37/shortcut.css
-../xuikon/50/shortcut.css /epoc32/data/Z/resource/homescreen/shortcut_2001f483/xuikon/50/shortcut.css
-../xuikon/57/shortcut.css /epoc32/data/Z/resource/homescreen/shortcut_2001f483/xuikon/57/shortcut.css
-../xuikon/94/shortcut.css /epoc32/data/Z/resource/homescreen/shortcut_2001f483/xuikon/94/shortcut.css
-
-
-// Support for S60 localization
-//*****************************
-#ifndef __SHORTCUTCONFIGURATION_LOC__
-#define __SHORTCUTCONFIGURATION_LOC__
-../loc/shortcutconfiguration.loc APP_LAYER_LOC_EXPORT_PATH(shortcutconfiguration.loc)
-#endif // __SHORTCUTCONFIGURATION_LOC__
-
-// Support for S60 builds
-//***********************
-../rom/shortcut_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(shortcut_2001f483_resources.iby)
-../rom/shortcut_customer.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(shortcut_2001f483_customer.iby)
-../rom/shortcut_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(shortcut_2001f483_variant.iby)
-../rom/shortcut.iby CORE_APP_LAYER_IBY_EXPORT_PATH(shortcut_2001f483.iby)
-
-
-// Dtd-localization
-//*****************
-PRJ_EXTENSIONS
-START EXTENSION tools/dtd
-OPTION SWITCH_LOC_FILE_NAME shortcut_2001f483
-OPTION DTD_TYPE widget
-OPTION LOC_FOLDERS yes
-END
-
-
-PRJ_MMPFILES
-
-PRJ_TESTMMPFILES
-
-//  End of File  
-
-
-
-
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/hsps/00/manifest.dat	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<package version="1.0">
-
-  <family>qhd_tch</family>
-
-  <type>widget</type>
-
-  <!-- interface uid -->
-	<interfaceuid>0x2001f48a</interfaceuid>
-
-	<!-- vendor uid  -->
-	<provideruid>0x101fb657</provideruid>
-
-	<!-- uid -->
-	<configurationuid>0x2001f483</configurationuid>
-
-	<!-- description -->
-	<fullname>&amp;qtn_shortcut1_configuration_name;</fullname>
-	<shortname>sc</shortname>
-	<version>1.0</version>
-
-	<!-- configuration -->
-	<filexml>widgetconfiguration.xml</filexml>
-	
-	<!-- Name of the localization files -->
-	<filedtd>shortcutconfiguration.dtd</filedtd>
-	
-	<!-- Locale independent/common resources -->
-	
-        <description>&amp;qtn_shortcut1_configuration_desc;</description>
-        <filelogo>shortcut1logo.png</filelogo>
-
-	
-	<!-- Locale specific resources -->
-	<localization>
-        <fileresource tag="xuikon">shortcut.o0000</fileresource>
-	</localization>
-
-</package>
\ No newline at end of file
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/hsps/00/shortcutconfiguration.dtd	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-============================================================================
-<FileName: "shortcutconfiguration.dtd">
-<PartOf  : "shortcutconfiguration">
-
-<FileDescription: "Localization strings for the configuration">
-<FileVersion    : >
-
-<Copyright:
-"Copyright © 2007 Nokia Corporation.
-This material, including documentation and any related
-computer programs, is protected by copyright controlled by
-Nokia Corporation. All rights are reserved. Copying,
-including reproducing, storing,  adapting or translating, any
-or all of this material requires the prior written consent of
-Nokia Corporation. This material also contains confidential
-information which may not be disclosed to others without the
-prior written consent of Nokia Corporation.">
-============================================================================
--->
-
-<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
-
-<!--
-qtn_shortcut1_configuration_name.attributes
-qtn_shortcut1_configuration_name.layout "list_single_pane_t1_cp2"
-qtn_shortcut1_configuration_name.release "TB9.2"
-qtn_shortcut1_configuration_name.description "Shortcut 1"
-qtn_shortcut1_configuration_name.parents ""
--->
-<!ENTITY qtn_shortcut1_configuration_name  "Shortcut 1">
-<!ENTITY qtn_shortcut1_configuration_desc  "RnD shortcut 1 description.">
\ No newline at end of file
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/hsps/00/widgetconfiguration.xml	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-<configuration>
-    <control>
-        <settings/>
-    </control>
-</configuration>
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/loc/shortcutconfiguration.loc	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Localization strings for Shortcut1 plugin configuration (HSPS)
-*
-*/
-
-
-// d: Shortcuts
-// l: list_single_pane_t1_cp2
-// w:
-// r: TB9.2
-#define qtn_shortcut1_configuration_name  "Shortcut 1"
-#define qtn_shortcut1_configuration_desc  "localized RnD shortcut 1 description."
-
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/rom/shortcut.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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: 
-* Shortcut widget HSPS-plugin IBY file. 
-*
-*/
-
-#ifndef __SHORTCUT_2001F483_IBY__
-#define __SHORTCUT_2001F483_IBY__
-
-#if defined(__LAYOUT_360_640_TOUCH) || defined(__LAYOUT_640_360_TOUCH)          
-
-// Enabled by DTD-localization tools
-data=ZPRIVATE\200159c0\install\shortcut_2001f483\hsps\00\manifest.dat \private\200159c0\install\shortcut_2001f483\hsps\00\manifest.dat
-
-#endif // __LAYOUT_360_640_TOUCH || __LAYOUT_640_360_TOUCH 
-
-#endif // __SHORTCUT_2001F483_IBY__
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/rom/shortcut_customer.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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: 
-* Shortcut widget HSPS-plugin language specific IBY file.  
-*
-*/
-
-#ifndef __SHORTCUT_2001F483_CUSTOMER_IBY__
-#define __SHORTCUT_2001F483_CUSTOMER_IBY__
-
-#if defined(__LAYOUT_360_640_TOUCH) || defined(__LAYOUT_640_360_TOUCH)          
-
-// Enabled by DTD-localization tools, language specific
-data=ZPRIVATE\200159c0\install\shortcut_2001f483\xuikon\00\shortcut.o0000 \private\200159c0\install\shortcut_2001f483\xuikon\00\shortcut.o0000
-data=ZPRIVATE\200159c0\install\shortcut_2001f483\hsps\00\shortcutconfiguration.dtd \private\200159c0\install\shortcut_2001f483\hsps\00\shortcutconfiguration.dtd
-
-#endif // __LAYOUT_360_640_TOUCH || __LAYOUT_640_360_TOUCH
-
-#endif // __SHORTCUT_2001F483_CUSTOMER_IBY__
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/rom/shortcut_resources.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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: 
-* Shortcut widget HSPS-plugin language specific IBY file.  
-*
-*/
-
-#ifndef __SHORTCUT_2001F483_RESOURCES_IBY__
-#define __SHORTCUT_2001F483_RESOURCES_IBY__
-
-#if defined(__LAYOUT_360_640_TOUCH) || defined(__LAYOUT_640_360_TOUCH)          
-
-// Enabled by DTD-localization tools, language specific
-#if defined (__LOCALES_37_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut_2001f483\xuikon\37\shortcut.o0037 \private\200159c0\install\shortcut_2001f483\xuikon\37\shortcut.o0037
-#endif
-#if defined  (__LOCALES_50_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut_2001f483\xuikon\50\shortcut.o0050 \private\200159c0\install\shortcut_2001f483\xuikon\50\shortcut.o0050
-#endif
-#if defined  (__LOCALES_57_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut_2001f483\xuikon\57\shortcut.o0057 \private\200159c0\install\shortcut_2001f483\xuikon\57\shortcut.o0057
-#endif
-#if defined  (__LOCALES_94_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut_2001f483\xuikon\94\shortcut.o0094 \private\200159c0\install\shortcut_2001f483\xuikon\94\shortcut.o0094
-#endif
-
-data=ZPRIVATE\200159c0\install\shortcut_2001f483\hsps\00\shortcutconfiguration.dtd \private\200159c0\install\shortcut_2001f483\hsps\00\shortcutconfiguration.dtd
-data=ZPRIVATE\200159c0\install\shortcut_2001f483\hsps\00\shortcut1logo.png \private\200159c0\install\shortcut_2001f483\hsps\00\shortcut1logo.png
-
-#endif // __LAYOUT_360_640_TOUCH || __LAYOUT_640_360_TOUCH
-
-#endif // __SHORTCUT_2001F483_RESOURCES_IBY__
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/rom/shortcut_variant.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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: 
-* Shortcut widget HSPS-plugin variant specific IBY file.  
-*
-*/
-
-#ifndef __SHORTCUT_2001F483_VARIANT_IBY__
-#define __SHORTCUT_2001F483_VARIANT_IBY__
-
-#if defined(__LAYOUT_360_640_TOUCH) || defined(__LAYOUT_640_360_TOUCH)          
-
-// Enabled by variation tools, variant specific
-data=ZPRIVATE\200159c0\install\shortcut_2001f483\hsps\00\widgetconfiguration.xml \private\200159c0\install\shortcut_2001f483\hsps\00\widgetconfiguration.xml
-
-#endif // __LAYOUT_360_640_TOUCH || __LAYOUT_640_360_TOUCH
-
-#endif  // __SHORTCUT_2001F483_VARIANT_IBY__
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/00/Shortcut.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-widget#shortcutPluginContainer 
-{
-    block-progression: rl;
-    direction: ltr;
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 3px;
-    background-color: none;
-}
-
-button.shortcutButton 
-{
-    width: 74px;
-    margin-right: 3px;
-    nav-index: appearance;
-}
-
-button.shortcutButton:focus 
-{
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
-    focus-background:"SKIN(268458534 9896)";
-}
-
-button.shortcutButton:hold
-{
-    background-color: "SKIN(268458534 9956)";
-}
-
-image.shortcutIcon 
-{
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 350px;
-    height: 33px;
-    border-style: solid; 
-    border-width: 5px; 
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 6px;
-    padding-top: 3px;
-    padding-bottom: 3px;
-    padding-right: 6px;
-}
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/00/Shortcut.xml	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xmluiml xmlns="http://www.series60.com/xml/xmluiml/1" version="1.0">
-    <widget id="shortcutPluginContainer">
-        <!-- Data plugin(s) in this widget -->
-        <contentsource name="Shortcut" value="0x102750FA" />
-
-            <!-- Shortcut #1, Phonebook -->
-            <property class="Settings/Shortcut" name="0x00000001" value="localapp:0x101F4CCE"/>
-            <!-- Shortcut #2, Messaging -->
-            <property class="Settings/Shortcut" name="0x00000002" value="localapp:0x100058C5"/>
-            <!-- Shortcut #3, Browser -->        
-            <property class="Settings/Shortcut" name="0x00000003" value="localapp:0x10008D39"/>
-            <!-- Shortcut #4, Photos -->
-            <property class="Settings/Shortcut" name="0x00000004" value="localapp:0x200009EE"/>    
-
-        <!-- #1 -->
-        <button id="shortcutButton1" class="shortcutButton" focusable="true" _s60-initial-focus="1">
-            <actions>
-                <action>
-                    <trigger name="stylus">
-                        <property name="eventtype" value="downup" />
-                    </trigger>
-                    <trigger name="activate"/>
-                    <trigger name="keyevent">
-                        <!-- EStdKeyEnter (enum from e32keys.h) -->
-                        <property name="scancode" value="3"/>                       
-                        <property name="eventtype" value="1"/>
-                    </trigger>
-                    <event name="Shortcut/LaunchByIndex(0x00000001)"/>
-                </action>
-            </actions>
-            <image id="Shortcut_shortcutIcon1" class="shortcutIcon" >
-                <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000001"/>
-            </image>
-            <tooltip id="shortcutTooltip1" class="shortcutTooltip" >
-                <text id="Shortcut_shortcutTooltipText1" class="shortcutTooltipText" >
-                    <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000001"/>
-                </text>
-            </tooltip>
-        </button>
-        <!-- #2 -->
-        <button id="shortcutButton2" class="shortcutButton" focusable="true">
-            <actions>
-                <action>
-                    <trigger name="stylus">
-                        <property name="eventtype" value="downup" />
-                    </trigger>
-                    <trigger name="activate"/>
-                    <trigger name="keyevent">
-                        <!-- EStdKeyEnter (enum from e32keys.h) -->
-                        <property name="scancode" value="3"/>                       
-                        <property name="eventtype" value="1"/>                      
-                    </trigger>
-                    <event name="Shortcut/LaunchByIndex(0x00000002)"/>
-                </action>
-            </actions>
-            <image id="Shortcut_shortcutIcon2" class="shortcutIcon" >
-                <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000002"/>
-            </image>
-            <tooltip id="shortcutTooltip2" class="shortcutTooltip" >
-                <text id="Shortcut_shortcutTooltipText2" class="shortcutTooltipText" >
-                    <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000002"/>
-                </text>             
-            </tooltip>
-        </button>
-        <!-- #3 -->
-        <button id="shortcutButton3" class="shortcutButton" focusable="true">
-            <actions>
-                <action>
-                    <trigger name="stylus">
-                        <property name="eventtype" value="downup" />
-                    </trigger>
-                    <trigger name="activate"/>
-                    <trigger name="keyevent">
-                        <!-- EStdKeyEnter (enum from e32keys.h) -->
-                        <property name="scancode" value="3"/>               
-                        <property name="eventtype" value="1"/>                              
-                    </trigger>
-                    <event name="Shortcut/LaunchByIndex(0x00000003)"/>
-                </action>
-            </actions>
-            <image id="Shortcut_shortcutIcon3" class="shortcutIcon" >
-                <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000003"/>
-            </image>
-            <tooltip id="shortcutTooltip3" class="shortcutTooltip" >
-                <text id="Shortcut_shortcutTooltipText3" class="shortcutTooltipText" >
-                    <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000003"/>
-                </text>
-            </tooltip>
-        </button>
-        <!-- #4 -->
-        <button id="shortcutButton4" class="shortcutButton" focusable="true">
-            <actions>
-                <action>
-                    <trigger name="stylus">
-                        <property name="eventtype" value="downup" />
-                    </trigger>
-                    <trigger name="activate"/>
-                    <trigger name="keyevent">
-                        <!-- EStdKeyEnter (enum from e32keys.h) -->
-                        <property name="scancode" value="3"/>                       
-                        <property name="eventtype" value="1"/>                      
-                    </trigger>
-                    <event name="Shortcut/LaunchByIndex(0x00000004)"/>
-                </action>
-            </actions>
-            <image id="Shortcut_shortcutIcon4" class="shortcutIcon" >
-                <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000004"/>
-            </image>
-            <tooltip id="shortcutTooltip4" class="shortcutTooltip" >
-                <text id="Shortcut_shortcutTooltipText4" class="shortcutTooltipText" >
-                    <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000004"/>
-                </text>
-            </tooltip>
-        </button>
-        <menuextension>
-            <menuitem target="hs_widget_menuitem_settings">
-                <actions>
-                    <action>
-                        <trigger name="activate"/>
-                        <event name="Shortcut/ShowSettings(0x00000001,0x00000002,0x00000003,0x00000004)"/>
-                    </action>
-                </actions>
-            </menuitem>     
-        </menuextension>
-    </widget>
-</xmluiml>
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/00/shortcut.dat	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<data>
-	<AppUid>2001CB4F</AppUid>
-	<Provideruid>101FB657</Provideruid>
-	<ThemeUid>11001551</ThemeUid>
-	<ThemeFullName>Shortcut</ThemeFullName>
-	<ThemeShortName>Shortcut</ThemeShortName>
-	<ThemeVersion>1.0</ThemeVersion>
-	<FileXML>Shortcut.xml</FileXML>
-	<FileCSS>Shortcut.css</FileCSS>
-</data>
\ No newline at end of file
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/37/Shortcut.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-widget#shortcutPluginContainer 
-{
-    block-progression: rl;
-    direction: rtl;
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 3px;
-    background-color: none;
-}
-
-button.shortcutButton 
-{
-    width: 74px;
-    margin-right: 3px;
-    nav-index: appearance;
-}
-
-button.shortcutButton:focus 
-{
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
-    focus-background:"SKIN(268458534 9896)";
-}
-
-button.shortcutButton:hold
-{
-    background-color: "SKIN(268458534 9956)";
-}
-
-image.shortcutIcon 
-{
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 350px;
-    height: 33px;
-    border-style: solid; 
-    border-width: 5px; 
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 6px;
-    padding-top: 3px;
-    padding-bottom: 3px;
-    padding-right: 6px;
-}
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/50/Shortcut.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-widget#shortcutPluginContainer 
-{
-    block-progression: rl;
-    direction: rtl;
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 3px;
-    background-color: none;
-}
-
-button.shortcutButton 
-{
-    width: 74px;
-    margin-right: 3px;
-    nav-index: appearance;
-}
-
-button.shortcutButton:focus 
-{
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
-    focus-background:"SKIN(268458534 9896)";
-}
-
-button.shortcutButton:hold
-{
-    background-color: "SKIN(268458534 9956)";
-}
-
-image.shortcutIcon 
-{
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 350px;
-    height: 33px;
-    border-style: solid; 
-    border-width: 5px; 
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 6px;
-    padding-top: 3px;
-    padding-bottom: 3px;
-    padding-right: 6px;
-}
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/57/Shortcut.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-widget#shortcutPluginContainer 
-{
-    block-progression: rl;
-    direction: rtl;
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 3px;
-    background-color: none;
-}
-
-button.shortcutButton 
-{
-    width: 74px;
-    margin-right: 3px;
-    nav-index: appearance;
-}
-
-button.shortcutButton:focus 
-{
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
-    focus-background:"SKIN(268458534 9896)";
-}
-
-button.shortcutButton:hold
-{
-    background-color: "SKIN(268458534 9956)";
-}
-
-image.shortcutIcon 
-{
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 350px;
-    height: 33px;
-    border-style: solid; 
-    border-width: 5px; 
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 6px;
-    padding-top: 3px;
-    padding-bottom: 3px;
-    padding-right: 6px;
-}
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
--- a/idlehomescreen/data/qhd_tch/shortcut_2001f483/xuikon/94/Shortcut.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-widget#shortcutPluginContainer 
-{
-    block-progression: rl;
-    direction: rtl;
-    padding-top: 5px;
-    padding-bottom: 5px;
-    padding-left: 3px;
-    background-color: none;
-}
-
-button.shortcutButton 
-{
-    width: 74px;
-    margin-right: 3px;
-    nav-index: appearance;
-}
-
-button.shortcutButton:focus 
-{
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
-    focus-background:"SKIN(268458534 9896)";
-}
-
-button.shortcutButton:hold
-{
-    background-color: "SKIN(268458534 9956)";
-}
-
-image.shortcutIcon 
-{
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 350px;
-    height: 33px;
-    border-style: solid; 
-    border-width: 5px; 
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 6px;
-    padding-top: 3px;
-    padding-bottom: 3px;
-    padding-right: 6px;
-}
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
--- a/idlehomescreen/data/qhd_tch/templateview_20026f50/loc/templateview.loc	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/templateview_20026f50/loc/templateview.loc	Mon Jan 18 20:10:36 2010 +0200
@@ -260,3 +260,9 @@
 // w:
 // r: TB9.2
 #define qtn_hs_edit_widget_catalog "Widget Catalog"
+
+// d: Deletes the current Home screen page and focus goes to the next available Home screen page in Edit mode
+// l: list_single_pane_t1_cp2
+// w:
+// r: TB9.2
+#define qtn_hs_page_edit_options_delete "Delete page"
--- a/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/00/templateview.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/00/templateview.css	Mon Jan 18 20:10:36 2010 +0200
@@ -26,9 +26,6 @@
 
     _s60-longtap: true;
 
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
-
     nav-index: appearance;
 }
 
--- a/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/00/templateview.xml	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/00/templateview.xml	Mon Jan 18 20:10:36 2010 +0200
@@ -276,8 +276,7 @@
                     </action>
                 </actions>
             </softkey>
-            <!-- <softkey id="rsk" type="right" mode="mode_callinactive" label="&text_softkey_call;"> -->
-            <softkey id="rsk" type="right" mode="mode_callinactive" label="#Call">
+            <softkey id="rsk" type="right" mode="mode_callinactive" label="&text_softkey_call;">
                 <actions>
                     <action>                        
                         <trigger name="activate"/>
--- a/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/00/view.dtd	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/00/view.dtd	Mon Jan 18 20:10:36 2010 +0200
@@ -299,22 +299,22 @@
 <!ENTITY text_softkey_cancel "Cancel">
 
 <!--
-qtn_hs_web_online.attributes
-qtn_hs_web_online.layout "list_single_pane_t1_cp2"
-qtn_hs_web_online.release "TB9.2"
-qtn_hs_web_online.description "Online"
-qtn_hs_web_online.grammar "Online"
-qtn_hs_web_online.parents "list_single_pane_cp2"
+qtn_hs_online.attributes
+qtn_hs_online.layout "list_single_pane_t1_cp2"
+qtn_hs_online.release "TB9.2"
+qtn_hs_online.description "Online"
+qtn_hs_online.grammar "Online"
+qtn_hs_online.parents "list_single_pane_cp2"
 -->
 <!ENTITY qtn_hs_online "Switch Home to online">
 
 <!--
-qtn_hs_web_offline.attributes
-qtn_hs_web_offline.layout "list_single_pane_t1_cp2"
-qtn_hs_web_offline.release "TB9.2"
-qtn_hs_web_offline.description "Offline"
-qtn_hs_web_offline.grammar "Offline"
-qtn_hs_web_offline.parents "list_single_pane_cp2"
+qtn_hs_offline.attributes
+qtn_hs_offline.layout "list_single_pane_t1_cp2"
+qtn_hs_offline.release "TB9.2"
+qtn_hs_offline.description "Offline"
+qtn_hs_offline.grammar "Offline"
+qtn_hs_offline.parents "list_single_pane_cp2"
 -->
 <!ENTITY qtn_hs_offline "Switch Home to offline">
 
@@ -373,20 +373,20 @@
 <!ENTITY qtn_hs_edit_replace "Replace">
 
 <!--
-qtn_hs_edit_replace.attributes
-qtn_hs_edit_replace.layout "list_single_pane_t1_cp2"
-qtn_hs_edit_replace.release "TB9.2"
-qtn_hs_edit_replace.description "deletes current home screen page"
-qtn_hs_edit_replace.parents ""
+qtn_hs_page_options_delete.attributes
+qtn_hs_page_options_delete.layout "list_single_pane_t1_cp2"
+qtn_hs_page_options_delete.release "TB9.2"
+qtn_hs_page_options_delete.description "deletes current home screen page"
+qtn_hs_page_options_delete.parents ""
 -->
 <!ENTITY qtn_hs_page_options_delete "Delete page">
 
 <!--
-qtn_hs_edit_replace.attributes
-qtn_hs_edit_replace.layout "list_single_pane_t1_cp2"
-qtn_hs_edit_replace.release "TB9.2"
-qtn_hs_edit_replace.description "creates new home screen page"
-qtn_hs_edit_replace.parents ""
+qtn_hs_page_options_new.attributes
+qtn_hs_page_options_new.layout "list_single_pane_t1_cp2"
+qtn_hs_page_options_new.release "TB9.2"
+qtn_hs_page_options_new.description "creates new home screen page"
+qtn_hs_page_options_new.parents ""
 -->
 <!ENTITY qtn_hs_page_options_new "New page">
 
@@ -409,11 +409,20 @@
 <!ENTITY text_softkey_call "Call">
 
 <!--
-qtn_hs_add_widget.attributes
-qtn_hs_add_widget.layout "list_single_pane_t1_cp2"
-qtn_hs_add_widget.release "TB9.2"
-qtn_hs_add_widget.description "Added new option menu item to Edit mode for opening the widget catalog"
-qtn_hs_add_widget.grammar "Widget Catalog"
-qtn_hs_add_widget.parents "list_single_pane_cp2"
+qtn_hs_edit_widget_catalog.attributes
+qtn_hs_edit_widget_catalog.layout "list_single_pane_t1_cp2"
+qtn_hs_edit_widget_catalog.release "TB9.2"
+qtn_hs_edit_widget_catalog.description "Added new option menu item to Edit mode for opening the widget catalog"
+qtn_hs_edit_widget_catalog.grammar "Widget Catalog"
+qtn_hs_edit_widget_catalog.parents "list_single_pane_cp2"
 -->
 <!ENTITY qtn_hs_edit_widget_catalog "Widget Catalog">
+
+<!--
+qtn_hs_page_edit_options_delete.attributes
+qtn_hs_page_edit_options_delete.layout "list_single_pane_t1_cp2"
+qtn_hs_page_edit_options_delete.release "TB9.2"
+qtn_hs_page_edit_options_delete.description "Deletes the current Home screen page and focus goes to the next available Home screen page in Edit mode"
+qtn_hs_page_edit_options_delete.parents ""
+-->
+<!ENTITY qtn_hs_page_edit_options_delete "Delete page">
--- a/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/37/templateview.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/37/templateview.css	Mon Jan 18 20:10:36 2010 +0200
@@ -27,9 +27,6 @@
 
     _s60-longtap: true;
 
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
-
     nav-index: appearance;
 }
 
--- a/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/50/templateview.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/50/templateview.css	Mon Jan 18 20:10:36 2010 +0200
@@ -27,9 +27,6 @@
 
     _s60-longtap: true;
 
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
-
     nav-index: appearance;
 }
 
--- a/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/57/templateview.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/57/templateview.css	Mon Jan 18 20:10:36 2010 +0200
@@ -27,9 +27,6 @@
 
     _s60-longtap: true;
 
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
-
     nav-index: appearance;
 }
 
--- a/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/94/templateview.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/templateview_20026f50/xuikon/94/templateview.css	Mon Jan 18 20:10:36 2010 +0200
@@ -27,9 +27,6 @@
 
     _s60-longtap: true;
 
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
-
     nav-index: appearance;
 }
 
--- a/idlehomescreen/data/qhd_tch/view_2001f48b/loc/View.loc	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/view_2001f48b/loc/View.loc	Mon Jan 18 20:10:36 2010 +0200
@@ -260,3 +260,9 @@
 // w:
 // r: TB9.2
 #define qtn_hs_edit_widget_catalog "Widget Catalog"
+
+// d: Deletes the current Home screen page and focus goes to the next available Home screen page in Edit mode
+// l: list_single_pane_t1_cp2
+// w:
+// r: TB9.2
+#define qtn_hs_page_edit_options_delete "Delete page"
--- a/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/00/View.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/00/View.css	Mon Jan 18 20:10:36 2010 +0200
@@ -26,9 +26,6 @@
  
     _s60-longtap: true;
 
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
-
     nav-index: appearance;
 }
 
--- a/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/00/View.dtd	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/00/View.dtd	Mon Jan 18 20:10:36 2010 +0200
@@ -299,22 +299,22 @@
 <!ENTITY text_softkey_cancel "Cancel">
 
 <!--
-qtn_hs_web_online.attributes
-qtn_hs_web_online.layout "list_single_pane_t1_cp2"
-qtn_hs_web_online.release "TB9.2"
-qtn_hs_web_online.description "Online"
-qtn_hs_web_online.grammar "Online"
-qtn_hs_web_online.parents "list_single_pane_cp2"
+qtn_hs_online.attributes
+qtn_hs_online.layout "list_single_pane_t1_cp2"
+qtn_hs_online.release "TB9.2"
+qtn_hs_online.description "Online"
+qtn_hs_online.grammar "Online"
+qtn_hs_online.parents "list_single_pane_cp2"
 -->
 <!ENTITY qtn_hs_online "Switch Home to online">
 
 <!--
-qtn_hs_web_offline.attributes
-qtn_hs_web_offline.layout "list_single_pane_t1_cp2"
-qtn_hs_web_offline.release "TB9.2"
-qtn_hs_web_offline.description "Offline"
-qtn_hs_web_offline.grammar "Offline"
-qtn_hs_web_offline.parents "list_single_pane_cp2"
+qtn_hs_offline.attributes
+qtn_hs_offline.layout "list_single_pane_t1_cp2"
+qtn_hs_offline.release "TB9.2"
+qtn_hs_offline.description "Offline"
+qtn_hs_offline.grammar "Offline"
+qtn_hs_offline.parents "list_single_pane_cp2"
 -->
 <!ENTITY qtn_hs_offline "Switch Home to offline">
 
@@ -373,20 +373,20 @@
 <!ENTITY qtn_hs_edit_replace "Replace">
 
 <!--
-qtn_hs_edit_replace.attributes
-qtn_hs_edit_replace.layout "list_single_pane_t1_cp2"
-qtn_hs_edit_replace.release "TB9.2"
-qtn_hs_edit_replace.description "deletes current home screen page"
-qtn_hs_edit_replace.parents ""
+qtn_hs_page_options_delete.attributes
+qtn_hs_page_options_delete.layout "list_single_pane_t1_cp2"
+qtn_hs_page_options_delete.release "TB9.2"
+qtn_hs_page_options_delete.description "deletes current home screen page"
+qtn_hs_page_options_delete.parents ""
 -->
 <!ENTITY qtn_hs_page_options_delete "Delete page">
 
 <!--
-qtn_hs_edit_replace.attributes
-qtn_hs_edit_replace.layout "list_single_pane_t1_cp2"
-qtn_hs_edit_replace.release "TB9.2"
-qtn_hs_edit_replace.description "creates new home screen page"
-qtn_hs_edit_replace.parents ""
+qtn_hs_page_options_new.attributes
+qtn_hs_page_options_new.layout "list_single_pane_t1_cp2"
+qtn_hs_page_options_new.release "TB9.2"
+qtn_hs_page_options_new.description "creates new home screen page"
+qtn_hs_page_options_new.parents ""
 -->
 <!ENTITY qtn_hs_page_options_new "New page">
 
@@ -409,11 +409,20 @@
 <!ENTITY text_softkey_call "Call">
 
 <!--
-qtn_hs_widget_catalog.attributes
-qtn_hs_widget_catalog.layout "list_single_pane_t1_cp2"
-qtn_hs_widget_catalog.release "TB9.2"
-qtn_hs_widget_catalog.description "Added new option menu item to Edit mode for opening the widget catalog"
-qtn_hs_widget_catalog.grammar "Widget catalog"
-qtn_hs_widget_catalog.parents "list_single_pane_cp2"
+qtn_hs_edit_widget_catalog.attributes
+qtn_hs_edit_widget_catalog.layout "list_single_pane_t1_cp2"
+qtn_hs_edit_widget_catalog.release "TB9.2"
+qtn_hs_edit_widget_catalog.description "Added new option menu item to Edit mode for opening the widget catalog"
+qtn_hs_edit_widget_catalog.grammar "Widget Catalog"
+qtn_hs_edit_widget_catalog.parents "list_single_pane_cp2"
 -->
 <!ENTITY qtn_hs_edit_widget_catalog "Widget Catalog">
+
+<!--
+qtn_hs_page_edit_options_delete.attributes
+qtn_hs_page_edit_options_delete.layout "list_single_pane_t1_cp2"
+qtn_hs_page_edit_options_delete.release "TB9.2"
+qtn_hs_page_edit_options_delete.description "Deletes the current Home screen page and focus goes to the next available Home screen page in Edit mode"
+qtn_hs_page_edit_options_delete.parents ""
+-->
+<!ENTITY qtn_hs_page_edit_options_delete "Delete page">
--- a/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/00/View.xml	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/00/View.xml	Mon Jan 18 20:10:36 2010 +0200
@@ -276,8 +276,7 @@
                     </action>
                 </actions>
             </softkey>
-            <!-- <softkey id="rsk" type="right" mode="mode_callinactive" label="&text_softkey_call;"> -->
-            <softkey id="rsk" type="right" mode="mode_callinactive" label="#Call">
+            <softkey id="rsk" type="right" mode="mode_callinactive" label="&text_softkey_call;">
                 <actions>
                     <action>                        
                         <trigger name="activate"/>
--- a/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/37/View.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/37/View.css	Mon Jan 18 20:10:36 2010 +0200
@@ -27,9 +27,6 @@
 
     _s60-longtap: true;
 
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
-
     nav-index: appearance;
 }
 
--- a/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/50/View.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/50/View.css	Mon Jan 18 20:10:36 2010 +0200
@@ -27,9 +27,6 @@
 
     _s60-longtap: true;
 
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
-
     nav-index: appearance;
 }
 
--- a/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/57/View.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/57/View.css	Mon Jan 18 20:10:36 2010 +0200
@@ -27,9 +27,6 @@
 
     _s60-longtap: true;
 
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
-
     nav-index: appearance;
 }
 
--- a/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/94/View.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/qhd_tch/view_2001f48b/xuikon/94/View.css	Mon Jan 18 20:10:36 2010 +0200
@@ -27,9 +27,6 @@
 
     _s60-longtap: true;
 
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
-
     nav-index: appearance;
 }
 
--- a/idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/00/double_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/00/double_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#double_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/37/double_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/37/double_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#double_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/50/double_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/50/double_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#double_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/57/double_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/57/double_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#double_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/94/double_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/double_row_icon_widget_2001fdbd/xuikon/94/double_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#double_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/00/double_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/00/double_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -9,8 +9,6 @@
 }    
 
 box#double_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/37/double_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/37/double_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -10,8 +10,6 @@
 }    
 
 box#double_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/50/double_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/50/double_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -10,8 +10,6 @@
 }    
 
 box#double_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/57/double_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/57/double_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -10,8 +10,6 @@
 }    
 
 box#double_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/94/double_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/double_row_widget_2001fdc2/xuikon/94/double_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -10,8 +10,6 @@
 }    
 
 box#double_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/group/bld.inf	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -19,8 +19,6 @@
 #include "../double_row_icon_widget_2001fdbd/group/bld.inf"
 #include "../double_row_widget_2001fdc2/group/bld.inf"
 #include "../root_2001f48f/group/bld.inf"
-//#include "../shortcut2_2001fdbb/group/bld.inf"
-//#include "../shortcut_2001f490/group/bld.inf"
 #include "../single_row_icon_widget_2001fdc0/group/bld.inf"
 #include "../single_row_widget_2001fdc1/group/bld.inf"
 #include "../triple_row_icon_widget_2001fdbe/group/bld.inf"
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/group/bld.inf	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
-* Copyright (c) 2002-2008 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:  The information required for building
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-// Support for productization and Carbide.Ui customization
-//********************************************************
-../hsps/00/manifest.dat /epoc32/data/Z/resource/homescreen/shortcut2_2001fdbb/hsps/manifest.dat
-../hsps/00/widgetconfiguration.xml /epoc32/data/Z/resource/homescreen/shortcut2_2001fdbb/hsps/widgetconfiguration.xml
-../hsps/00/shortcut2configuration.dtd /epoc32/data/Z/resource/homescreen/shortcut2_2001fdbb/hsps/shortcut2configuration.dtd
-
-../xuikon/00/shortcut2.dat /epoc32/data/Z/resource/homescreen/shortcut2_2001fdbb/xuikon/shortcut2_2001fdbb.dat
-../xuikon/00/shortcut2.css /epoc32/data/Z/resource/homescreen/shortcut2_2001fdbb/xuikon/shortcut2.css
-../xuikon/00/shortcut2.xml /epoc32/data/Z/resource/homescreen/shortcut2_2001fdbb/xuikon/shortcut2.xml
-
-// Arabic languages
-//*****************
-../xuikon/37/shortcut2.css /epoc32/data/Z/resource/homescreen/shortcut2_2001fdbb/xuikon/37/shortcut2.css
-../xuikon/50/shortcut2.css /epoc32/data/Z/resource/homescreen/shortcut2_2001fdbb/xuikon/50/shortcut2.css
-../xuikon/57/shortcut2.css /epoc32/data/Z/resource/homescreen/shortcut2_2001fdbb/xuikon/57/shortcut2.css
-../xuikon/94/shortcut2.css /epoc32/data/Z/resource/homescreen/shortcut2_2001fdbb/xuikon/94/shortcut2.css
-
-
-// Support for S60 localization
-//*****************************
-#ifndef __SHORTCUT2CONFIGURATION_LOC__
-#define __SHORTCUT2CONFIGURATION_LOC__
-../loc/shortcut2configuration.loc APP_LAYER_LOC_EXPORT_PATH(shortcut2configuration.loc)
-#endif // __SHORTCUT2CONFIGURATION_LOC__
-
-// Support for S60 builds
-//***********************
-../rom/shortcut2_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(shortcut2_2001fdbb_resources.iby)
-../rom/shortcut2_customer.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(shortcut2_2001fdbb_customer.iby)
-../rom/shortcut2_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(shortcut2_2001fdbb_variant.iby)
-../rom/shortcut2.iby CORE_APP_LAYER_IBY_EXPORT_PATH(shortcut2_2001fdbb.iby)
-
-
-// Dtd-localization
-//*****************
-PRJ_EXTENSIONS
-START EXTENSION tools/dtd
-OPTION SWITCH_LOC_FILE_NAME shortcut2_2001fdbb
-OPTION DTD_TYPE widget
-OPTION LOC_FOLDERS yes
-END
-
-
-PRJ_MMPFILES
-
-PRJ_TESTMMPFILES
-
-//  End of File  
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/hsps/00/manifest.dat	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<package version="1.0">
-
-    <family>vga_tch</family>
-
-    <type>widget</type>
-
-    <!-- interface uid -->
-    <interfaceuid>0x2001f48a</interfaceuid>
-
-    <!-- vendor uid  -->
-    <provideruid>0x101fb657</provideruid>
-
-    <!-- uid -->
-    <configurationuid>0x2001fdbb</configurationuid>
-    
-    <!-- description -->
-    <fullname>&amp;qtn_hs_sc2_widget;</fullname>
-    <shortname>sc2</shortname>
-    <version>1.0</version>
-
-    <!-- configuration -->
-    <filexml>widgetconfiguration.xml</filexml>
-    
-    <!-- Name of the localization files -->
-    <filedtd>shortcut2configuration.dtd</filedtd>
-    
-    <!-- Locale independent/common resources -->
-    
-    
-    <!-- Locale specific resources -->
-    <localization>
-        <fileresource>shortcut2.o0000</fileresource>
-    </localization>
-
-</package>
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/hsps/00/shortcut2configuration.dtd	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-============================================================================
-<FileName: "shortcut1configuration.dtd">
-
-<FileDescription: "Localization strings for HSPS shortcut1 configuration">
-<FileVersion    : >
-
-<Copyright:
-"Copyright © 2005 Nokia Corporation.
-This material, including documentation and any related 
-computer programs, is protected by copyright controlled by 
-Nokia Corporation. All rights are reserved. Copying, 
-including reproducing, storing,  adapting or translating, any 
-or all of this material requires the prior written consent of 
-Nokia Corporation. This material also contains confidential 
-information which may not be disclosed to others without the 
-prior written consent of Nokia Corporation.">
-============================================================================
--->
-
-<!--  LOCALISATION STRINGS  -->
-
-<!--
-qtn_shortcut2_configuration_name.attributes
-qtn_shortcut2_configuration_name.layout "list_single_pane_t1_cp2"
-qtn_shortcut2_configuration_name.release "TB9.2"
-qtn_shortcut2_configuration_name.description "Shortcut 2"
-qtn_shortcut2_configuration_name.parents ""
--->
-<!ENTITY qtn_shortcut2_configuration_name "Shortcut 2">
-
-<!-- End of File-->
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/hsps/00/widgetconfiguration.xml	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-<configuration>
-    <control>
-        <settings/>
-    </control>
-</configuration>
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/loc/shortcut2configuration.loc	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Localization strings for Shortcuts 2 plugin configuration (HSPS)
-*
-*/
-
-// d: Shortcuts
-// l: list_single_pane_t1_cp2
-// w:
-// r: TB9.2
-#define qtn_shortcut2_configuration_name  "Shortcut 2"
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/rom/shortcut2.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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:  Shortcut2 widget HSPS-plugin IBY file.
-*
-*/
-
-#ifndef __SHORTCUT2_2001FDBB_IBY__
-#define __SHORTCUT2_2001FDBB_IBY__
-
-#if defined (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-// Enabled by DTD-localization tools
-data=ZPRIVATE\200159c0\install\shortcut2_2001fdbb\hsps\00\manifest.dat \private\200159c0\install\shortcut2_2001fdbb\hsps\00\manifest.dat
-
-#endif // (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-#endif // __SHORTCUT2_2001FDBB_IBY__
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/rom/shortcut2_customer.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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:  Shortcut2 widget HSPS-plugin language specific IBY file.
-*
-*/
-
-
-#ifndef __SHORTCUT2_2001FDBB_CUSTOMER_IBY__
-#define __SHORTCUT2_2001FDBB_CUSTOMER_IBY__
-
-#if defined (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-// Enabled by DTD-localization tools, language specific
-data=ZPRIVATE\200159c0\install\shortcut2_2001fdbb\xuikon\00\shortcut2.o0000 \private\200159c0\install\shortcut2_2001fdbb\xuikon\00\shortcut2.o0000
-data=ZPRIVATE\200159c0\install\shortcut2_2001fdbb\hsps\00\shortcut2configuration.dtd \private\200159c0\install\shortcut2_2001fdbb\hsps\00\shortcut2configuration.dtd
-
-#endif // (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-#endif // __SHORTCUT2_2001FDBB_CUSTOMER_IBY__
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/rom/shortcut2_resources.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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:  Shortcut2 widget HSPS-plugin language specific IBY file.
-*
-*/
-
-
-#ifndef __SHORTCUT2_2001FDBB_RESOURCES_IBY__
-#define __SHORTCUT2_2001FDBB_RESOURCES_IBY__
-
-#if defined (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-// Enabled by DTD-localization tools, language specific
-#if defined (__LOCALES_37_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut2_2001fdbb\xuikon\37\shortcut2.o0037 \private\200159c0\install\shortcut2_2001fdbb\xuikon\37\shortcut2.o0037
-#endif
-#if defined  (__LOCALES_50_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut2_2001fdbb\xuikon\50\shortcut2.o0050 \private\200159c0\install\shortcut2_2001fdbb\xuikon\50\shortcut2.o0050
-#endif
-#if defined  (__LOCALES_57_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut2_2001fdbb\xuikon\57\shortcut2.o0057 \private\200159c0\install\shortcut2_2001fdbb\xuikon\57\shortcut2.o0057
-#endif
-#if defined  (__LOCALES_94_IBY__)
-data=ZPRIVATE\200159c0\install\shortcut2_2001fdbb\xuikon\94\shortcut2.o0094 \private\200159c0\install\shortcut2_2001fdbb\xuikon\94\shortcut2.o0094
-#endif
-
-data=ZPRIVATE\200159c0\install\shortcut2_2001fdbb\hsps\00\shortcut2configuration.dtd \private\200159c0\install\shortcut2_2001fdbb\hsps\00\shortcut2configuration.dtd
-
-#endif // (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-#endif // __SHORTCUT2_2001FDBB_RESOURCES_IBY__
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/rom/shortcut2_variant.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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:  Shortcut2 widget HSPS-plugin variant specific IBY file.
-*
-*/
-
-
-#ifndef __SHORTCUT2_2001FDBB_VARIANT_IBY__
-#define __SHORTCUT2_2001FDBB_VARIANT_IBY__
-
-#if defined (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-// Enabled by variation tools, variant specific
-data=ZPRIVATE\200159c0\install\shortcut2_2001fdbb\hsps\00\widgetconfiguration.xml \private\200159c0\install\shortcut2_2001fdbb\hsps\00\widgetconfiguration.xml
-
-#endif // (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-#endif  // __SHORTCUT2_2001FDBB_VARIANT_IBY__
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/00/shortcut2.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-widget#shortcutPlugin2
-{ 
-    width: auto;
-    height: 70px;
-    
-    block-progression: rl;
-    direction: ltr;  
-}
-
-button.shortcutButton 
-{ 
-    width: 70px;
-    height: auto;
-    
-    nav-index: appearance;
-    
-    margin-left: 4px;
-    margin-right: 4px;
-    
-    background-color: "SKIN(268458534 9906)";            
-}
-
-button#shortcutButton7
-{  
-    margin-left: 0px;
-}
-
-button#shortcutButton12
-{
-    margin-right: 0px;  
-}
-
-button.shortcutButton:focus 
-{
-    focus-background: "SKIN(268458534 5120 9)";	
-}
-
-image.shortcutIcon 
-{ 
-    width: auto;
-    height: auto;
-    
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 430px;
-    height: 5.5u;
-    
-    border-style: solid; 
-    border-width: 5px; 
-    
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
-/*********************
-	xSP
-**********************/
-tooltip.shortcutTooltipXsp 
-{ 
-    width: 15.0u;
-    height: adaptive;
-    border-style: solid; 
-    border-width: 5px; 
-    /* delay comes from the xSP server */
-    _s60-start-delay: 0;
-    _s60-display-time: 60000000; /* 6 sec */
-    background-color:"SKIN(268458534 8480)";
-    overflow: visible;
-    display: none;    
-    block-progression: tb;
-    padding-bottom: 1u;
-    padding-right: 2u;
-    padding-left: 2u;
-    padding-top: 1u;
-    _s60-position-hint: aboveleft; 
-}
-
-text.shortcutTextCaptionXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;
-    font-weight: bold;
-    text-align: center;
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible;
-    display: block;
-    visibility:visible;
-}
-
-text.shortcutTextXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;	
-    text-align: left;	
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible; 
-    display: block;
-    visibility:visible;
-}
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/00/shortcut2.dat	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-<data>
-	<AppUid>2001CB4F</AppUid>
-	<Provideruid>101FB657</Provideruid>
-	<ThemeUid>11001552</ThemeUid>
-	<ThemeFullName>Shortcut2</ThemeFullName>
-	<ThemeShortName>shortcut2</ThemeShortName>
-	<ThemeVersion>1.0</ThemeVersion>
-	<FileXML>shortcut2.xml</FileXML>
-	<FileCSS>shortcut2.css</FileCSS>
-</data>
\ No newline at end of file
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/00/shortcut2.xml	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--<!DOCTYPE xmluiml SYSTEM "Shortcut.dtd">-->
-<xmluiml xmlns="http://www.series60.com/xml/xmluiml/1" version="1.0">
-  <widget id="shortcutPlugin2">
-
-    <contentsource name="Shortcut" value="0x102750FA"/>
-  
-    <!-- Always visible shortcuts -->
-    <!-- NOTE: these indexes start from 1 -->
-    <!-- Shortcut #7, Music player -->
-    <property class="Settings/Shortcut" name="0x00000007" value="localapp:0x102072C3"/>
-    <!-- Shortcut #8, Radio -->
-    <property class="Settings/Shortcut" name="0x00000008" value="localapp:0x10207A89"/>
-    <!-- Shortcut #9, Notepad -->
-    <property class="Settings/Shortcut" name="0x00000009" value="localapp:0x10005907"/>
-    <!-- Shortcut #10, Video & TV -->
-    <property class="Settings/Shortcut" name="0x0000000A" value="localapp:0x102750E2"/>
-    <!-- Shortcut #11, Calculator -->
-    <property class="Settings/Shortcut" name="0x0000000B" value="localapp:0x10005902"/>
-    <!-- Shortcut #12, Bluetooth -->
-    <property class="Settings/Shortcut" name="0x0000000C" value="localapp:0x10005951"/>
-          
-    <!-- #1 -->
-    <button id="shortcutButton7" class="shortcutButton" focusable="true" _s60-initial-focus="1">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->
-                    <property name="scancode" value="3"/>
-                    <property name="eventtype" value="1"/>
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x00000007)"/>
-            </action>  
-        </actions>
-        <image id="Shortcut_shortcutIcon7" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000007"/>
-        </image>
-        <tooltip id="shortcutTooltip7" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText7" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000007"/>
-            </text>
-        </tooltip>
-        <tooltip id="shortcutTooltip7Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton7" value="ShowTooltips"/>
-
-            <text id="PopupText7_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x00000007"/>
-            </text>                
-            <text id="PopupText7_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x00000007"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip7Xsp" value="display: block;"/>       
-                <property class="policy/Content" name="shortcutTooltip7" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip7Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip7" value="display: block;"/>
-            </text>
-            <text id="PopupText7_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x00000007"/>
-                <property class="policy/emptyContent" name="PopupText7_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText7_b" value="display:block;"/>
-            </text>
-            <text id="PopupText7_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x00000007"/>
-                <property class="policy/emptyContent" name="PopupText7_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText7_c" value="display:block;"/>
-            </text>
-        </tooltip>
-    </button>
-    <!-- #2 -->
-    <button id="shortcutButton8" class="shortcutButton" focusable="true">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->
-                    <property name="scancode" value="3"/>                       
-                    <property name="eventtype" value="1"/>                      
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x00000008)"/>
-            </action>               
-        </actions>
-        <image id="Shortcut_shortcutIcon8" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000008"/>
-        </image>
-        <tooltip id="shortcutTooltip8" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText8" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000008"/>
-            </text>             
-        </tooltip>
-        <tooltip id="shortcutTooltip8Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton8" value="ShowTooltips"/>
-
-            <text id="PopupText8_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x00000008"/>
-            </text>                
-            <text id="PopupText8_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x00000008"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip8Xsp" value="display: block;"/>       
-                <property class="policy/Content" name="shortcutTooltip8" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip8Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip8" value="display: block;"/>
-            </text>
-            <text id="PopupText8_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x00000008"/>
-                <property class="policy/emptyContent" name="PopupText8_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText8_b" value="display:block;"/>
-            </text>
-            <text id="PopupText8_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x00000008"/>
-                <property class="policy/emptyContent" name="PopupText8_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText8_c" value="display:block;"/>
-            </text>
-        </tooltip>          
-    </button>
-    <!-- #3 -->
-    <button id="shortcutButton9" class="shortcutButton" focusable="true">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->
-                    <property name="scancode" value="3"/>               
-                    <property name="eventtype" value="1"/>                              
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x00000009)"/>
-            </action>               
-        </actions>
-        <image id="Shortcut_shortcutIcon9" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000009"/>
-        </image>
-        <tooltip id="shortcutTooltip9" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText9" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000009"/>
-            </text>
-        </tooltip>
-        <tooltip id="shortcutTooltip9Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton9" value="ShowTooltips"/>
-
-            <text id="PopupText9_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x00000009"/>
-            </text>                
-            <text id="PopupText9_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x00000009"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip9Xsp" value="display: block;"/>       
-                <property class="policy/Content" name="shortcutTooltip9" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip9Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip9" value="display: block;"/>
-            </text>
-            <text id="PopupText9_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x00000009"/>
-                <property class="policy/emptyContent" name="PopupText9_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText9_b" value="display:block;"/>
-            </text>
-            <text id="PopupText9_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x00000009"/>
-                <property class="policy/emptyContent" name="PopupText9_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText9_c" value="display:block;"/>
-            </text>
-        </tooltip>          
-    </button>
-    <!-- #4 -->
-    <button id="shortcutButton10" class="shortcutButton" focusable="true">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->
-                    <property name="scancode" value="3"/>                       
-                    <property name="eventtype" value="1"/>                      
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x0000000A)"/>                          
-            </action>               
-        </actions>
-        <image id="Shortcut_shortcutIcon10" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x0000000A"/>
-        </image>
-        <tooltip id="shortcutTooltip10" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText10" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x0000000A"/>
-            </text>
-        </tooltip>
-        <tooltip id="shortcutTooltip10Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton10" value="ShowTooltips"/>
-
-            <text id="PopupText10_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x0000000A"/>
-            </text>                
-            <text id="PopupText10_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x0000000A"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip10Xsp" value="display: block;"/>      
-                <property class="policy/Content" name="shortcutTooltip10" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip10Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip10" value="display: block;"/>
-            </text>
-            <text id="PopupText10_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x0000000A"/>
-                <property class="policy/emptyContent" name="PopupText10_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText10_b" value="display:block;"/>
-            </text>
-            <text id="PopupText10_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x0000000A"/>
-                <property class="policy/emptyContent" name="PopupText10_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText10_c" value="display:block;"/>
-            </text>
-        </tooltip>  
-    </button>
-    <!-- #5 -->
-    <button id="shortcutButton11" class="shortcutButton" focusable="true">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->
-                    <property name="scancode" value="3"/>
-                    <property name="eventtype" value="1"/>
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x0000000B)"/>
-            </action>               
-        </actions>
-        <image id="Shortcut_shortcutIcon11" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x0000000B"/>
-        </image>
-        <tooltip id="shortcutTooltip11" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText11" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x0000000B"/>
-            </text>
-        </tooltip>
-        <tooltip id="shortcutTooltip11Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton11" value="ShowTooltips"/>
-
-            <text id="PopupText11_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x0000000B"/>
-            </text>                
-            <text id="PopupText11_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x0000000B"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip11Xsp" value="display: block;"/>      
-                <property class="policy/Content" name="shortcutTooltip11" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip11Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip11" value="display: block;"/>
-            </text>
-            <text id="PopupText11_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x0000000B"/>
-                <property class="policy/emptyContent" name="PopupText11_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText11_b" value="display:block;"/>
-            </text>
-            <text id="PopupText11_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x0000000B"/>
-                <property class="policy/emptyContent" name="PopupText11_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText11_c" value="display:block;"/>
-            </text>
-        </tooltip>          
-    </button>
-    <!-- #6 -->
-    <button id="shortcutButton12" class="shortcutButton" focusable="true">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->             
-                    <property name="scancode" value="3"/> 
-                    <property name="eventtype" value="1"/>
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x0000000C)"/>
-            </action>               
-        </actions>
-        <image id="Shortcut_shortcutIcon12" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x0000000C"/>
-        </image>
-        <tooltip id="shortcutTooltip12" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText12" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x0000000C"/>
-            </text>
-        </tooltip>
-        <tooltip id="shortcutTooltip12Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton12" value="ShowTooltips"/>
-
-            <text id="PopupText12_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x0000000C"/>
-            </text>                
-            <text id="PopupText12_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x0000000C"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip12Xsp" value="display: block;"/>      
-                <property class="policy/Content" name="shortcutTooltip12" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip12Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip12" value="display: block;"/>
-            </text>
-            <text id="PopupText12_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x0000000C"/>
-                <property class="policy/emptyContent" name="PopupText12_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText12_b" value="display:block;"/>
-            </text>
-            <text id="PopupText12_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x0000000C"/>
-                <property class="policy/emptyContent" name="PopupText12_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText12_c" value="display:block;"/>
-            </text>
-        </tooltip>  
-    </button>
-    <menuextension>
-        <softkey type="middle" target="hs_widget_msk_open"/>
-        <menuitem target="hs_widget_menuitem_open">
-            <actions>
-                <action>
-                    <trigger name="activate"/>
-                    <event name="system/activateselecteditem"/>
-                </action>
-            </actions>
-        </menuitem>
-        <menuitem target="hs_widget_menuitem_settings">
-            <actions>
-                <action>
-                    <trigger name="activate"/>
-                    <event name="Shortcut/ShowSettings(0x00000007,0x00000008,0x00000009,0x0000000A,0x0000000B,0x0000000C)"/>
-                </action>
-            </actions>
-        </menuitem>
-    </menuextension>
-  </widget>
-</xmluiml>
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/37/shortcut2.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-widget#shortcutPlugin2
-{ 
-    width: auto;
-    height: 70px;
-    
-    block-progression: rl;
-    direction: rtl;  
-}
-
-button.shortcutButton 
-{ 
-    width: 70px;
-    height: auto;
-    
-    nav-index: appearance;
-    
-    margin-left: 4px;
-    margin-right: 4px;
-    
-    background-color: "SKIN(268458534 9906)";            
-}
-
-button#shortcutButton7
-{  
-    margin-left: 0px;
-}
-
-button#shortcutButton12
-{
-    margin-right: 0px;  
-}
-
-button.shortcutButton:focus 
-{
-    focus-background: "SKIN(268458534 5120 9)";	
-}
-
-image.shortcutIcon 
-{ 
-    width: auto;
-    height: auto;
-    
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 430px;
-    height: 5.5u;
-    
-    border-style: solid; 
-    border-width: 5px; 
-    
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
-/*********************
-	xSP
-**********************/
-tooltip.shortcutTooltipXsp 
-{ 
-    width: 15.0u;
-    height: adaptive;
-    border-style: solid; 
-    border-width: 5px; 
-    /* delay comes from the xSP server */
-    _s60-start-delay: 0;
-    _s60-display-time: 60000000; /* 6 sec */
-    background-color:"SKIN(268458534 8480)";
-    overflow: visible;
-    display: none;    
-    block-progression: tb;
-    padding-bottom: 1u;
-    padding-right: 2u;
-    padding-left: 2u;
-    padding-top: 1u;
-}
-
-text.shortcutTextCaptionXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;
-    font-weight: bold;
-    text-align: center;
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible;
-    display: block;
-    visibility:visible;
-}
-
-text.shortcutTextXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;	
-    text-align: left;	
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible; 
-    display: block;
-    visibility:visible;
-}
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/50/shortcut2.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-widget#shortcutPlugin2
-{ 
-    width: auto;
-    height: 70px;
-    
-    block-progression: rl;
-    direction: rtl;  
-}
-
-button.shortcutButton 
-{ 
-    width: 70px;
-    height: auto;
-    
-    nav-index: appearance;
-    
-    margin-left: 4px;
-    margin-right: 4px;
-    
-    background-color: "SKIN(268458534 9906)";            
-}
-
-button#shortcutButton7
-{  
-    margin-left: 0px;
-}
-
-button#shortcutButton12
-{
-    margin-right: 0px;  
-}
-
-button.shortcutButton:focus 
-{
-    focus-background: "SKIN(268458534 5120 9)";	
-}
-
-image.shortcutIcon 
-{ 
-    width: auto;
-    height: auto;
-    
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 430px;
-    height: 5.5u;
-    
-    border-style: solid; 
-    border-width: 5px; 
-    
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
-/*********************
-	xSP
-**********************/
-tooltip.shortcutTooltipXsp 
-{ 
-    width: 15.0u;
-    height: adaptive;
-    border-style: solid; 
-    border-width: 5px; 
-    /* delay comes from the xSP server */
-    _s60-start-delay: 0;
-    _s60-display-time: 60000000; /* 6 sec */
-    background-color:"SKIN(268458534 8480)";
-    overflow: visible;
-    display: none;    
-    block-progression: tb;
-    padding-bottom: 1u;
-    padding-right: 2u;
-    padding-left: 2u;
-    padding-top: 1u;
-}
-
-text.shortcutTextCaptionXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;
-    font-weight: bold;
-    text-align: center;
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible;
-    display: block;
-    visibility:visible;
-}
-
-text.shortcutTextXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;	
-    text-align: left;	
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible; 
-    display: block;
-    visibility:visible;
-}
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/57/shortcut2.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-widget#shortcutPlugin2
-{ 
-    width: auto;
-    height: 70px;
-    
-    block-progression: rl;
-    direction: rtl;  
-}
-
-button.shortcutButton 
-{ 
-    width: 70px;
-    height: auto;
-    
-    nav-index: appearance;
-    
-    margin-left: 4px;
-    margin-right: 4px;
-    
-    background-color: "SKIN(268458534 9906)";            
-}
-
-button#shortcutButton7
-{  
-    margin-left: 0px;
-}
-
-button#shortcutButton12
-{
-    margin-right: 0px;  
-}
-
-button.shortcutButton:focus 
-{
-    focus-background: "SKIN(268458534 5120 9)";	
-}
-
-image.shortcutIcon 
-{ 
-    width: auto;
-    height: auto;
-    
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 430px;
-    height: 5.5u;
-    
-    border-style: solid; 
-    border-width: 5px; 
-    
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
-/*********************
-	xSP
-**********************/
-tooltip.shortcutTooltipXsp 
-{ 
-    width: 15.0u;
-    height: adaptive;
-    border-style: solid; 
-    border-width: 5px; 
-    /* delay comes from the xSP server */
-    _s60-start-delay: 0;
-    _s60-display-time: 60000000; /* 6 sec */
-    background-color:"SKIN(268458534 8480)";
-    overflow: visible;
-    display: none;    
-    block-progression: tb;
-    padding-bottom: 1u;
-    padding-right: 2u;
-    padding-left: 2u;
-    padding-top: 1u;
-}
-
-text.shortcutTextCaptionXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;
-    font-weight: bold;
-    text-align: center;
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible;
-    display: block;
-    visibility:visible;
-}
-
-text.shortcutTextXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;	
-    text-align: left;	
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible; 
-    display: block;
-    visibility:visible;
-}
--- a/idlehomescreen/data/vga_tch/shortcut2_2001fdbb/xuikon/94/shortcut2.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-widget#shortcutPlugin2
-{ 
-    width: auto;
-    height: 70px;
-    
-    block-progression: rl;
-    direction: rtl;  
-}
-
-button.shortcutButton 
-{ 
-    width: 70px;
-    height: auto;
-    
-    nav-index: appearance;
-    
-    margin-left: 4px;
-    margin-right: 4px;
-    
-    background-color: "SKIN(268458534 9906)";            
-}
-
-button#shortcutButton7
-{  
-    margin-left: 0px;
-}
-
-button#shortcutButton12
-{
-    margin-right: 0px;  
-}
-
-button.shortcutButton:focus 
-{
-    focus-background: "SKIN(268458534 5120 9)";	
-}
-
-image.shortcutIcon 
-{ 
-    width: auto;
-    height: auto;
-    
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 430px;
-    height: 5.5u;
-    
-    border-style: solid; 
-    border-width: 5px; 
-    
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
-/*********************
-	xSP
-**********************/
-tooltip.shortcutTooltipXsp 
-{ 
-    width: 15.0u;
-    height: adaptive;
-    border-style: solid; 
-    border-width: 5px; 
-    /* delay comes from the xSP server */
-    _s60-start-delay: 0;
-    _s60-display-time: 60000000; /* 6 sec */
-    background-color:"SKIN(268458534 8480)";
-    overflow: visible;
-    display: none;    
-    block-progression: tb;
-    padding-bottom: 1u;
-    padding-right: 2u;
-    padding-left: 2u;
-    padding-top: 1u;
-}
-
-text.shortcutTextCaptionXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;
-    font-weight: bold;
-    text-align: center;
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible;
-    display: block;
-    visibility:visible;
-}
-
-text.shortcutTextXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;	
-    text-align: left;	
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible; 
-    display: block;
-    visibility:visible;
-}
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/group/bld.inf	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
-* Copyright (c) 2002-2008 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:  The information required for building
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-// Support for productization and Carbide.Ui customization
-//********************************************************
-../hsps/00/manifest.dat /epoc32/data/z/resource/homescreen/shortcut_2001f490/hsps/manifest.dat
-../hsps/00/widgetconfiguration.xml /epoc32/data/z/resource/homescreen/shortcut_2001f490/hsps/widgetconfiguration.xml
-../hsps/00/shortcutconfiguration.dtd /epoc32/data/z/resource/homescreen/shortcut_2001f490/hsps/shortcutconfiguration.dtd
-
-../xuikon/00/shortcut.dtd /epoc32/data/z/resource/homescreen/shortcut_2001f490/xuikon/shortcut.dtd
-../xuikon/00/shortcut.dat /epoc32/data/z/resource/homescreen/shortcut_2001f490/xuikon/shortcut_2001f490.dat
-../xuikon/00/shortcut.css /epoc32/data/z/resource/homescreen/shortcut_2001f490/xuikon/shortcut.css
-../xuikon/00/shortcut.xml /epoc32/data/z/resource/homescreen/shortcut_2001f490/xuikon/shortcut.xml
-
-// Arabic languages
-//*****************
-../xuikon/37/shortcut.css /epoc32/data/z/resource/homescreen/shortcut_2001f490/xuikon/37/shortcut.css
-../xuikon/50/shortcut.css /epoc32/data/z/resource/homescreen/shortcut_2001f490/xuikon/50/shortcut.css
-../xuikon/57/shortcut.css /epoc32/data/z/resource/homescreen/shortcut_2001f490/xuikon/57/shortcut.css
-../xuikon/94/shortcut.css /epoc32/data/z/resource/homescreen/shortcut_2001f490/xuikon/94/shortcut.css
-
-
-// Support for S60 localization
-//*****************************
-#ifndef __SHORTCUTCONFIGURATION_LOC__
-#define __SHORTCUTCONFIGURATION_LOC__
-../loc/shortcutconfiguration.loc APP_LAYER_LOC_EXPORT_PATH(shortcutconfiguration.loc)
-#endif // __SHORTCUTCONFIGURATION_LOC__
-
-// Support for S60 builds
-//***********************
-../rom/shortcut_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(shortcut_2001f490_resources.iby)
-../rom/shortcut_customer.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(shortcut_2001f490_customer.iby)
-../rom/shortcut_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(shortcut_2001f490_variant.iby)
-../rom/shortcut.iby CORE_APP_LAYER_IBY_EXPORT_PATH(shortcut_2001f490.iby)
-
-
-// Dtd-localization
-//*****************
-PRJ_EXTENSIONS
-START EXTENSION tools/dtd
-OPTION SWITCH_LOC_FILE_NAME shortcut_2001f490
-OPTION DTD_TYPE widget
-END
-
-
-PRJ_MMPFILES
-
-PRJ_TESTMMPFILES
-
-//  End of File  
-
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/hsps/00/manifest.dat	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<package version="1.0">
-
-    <family>vga_tch</family>
-
-    <type>widget</type>
-
-    <!-- interface uid -->
-    <interfaceuid>0x2001f48a</interfaceuid>
-
-    <!-- vendor uid  -->
-    <provideruid>0x101fb657</provideruid>
-
-    <!-- uid -->
-    <configurationuid>0x2001f490</configurationuid>
-
-    <!-- description -->
-    <fullname>&amp;qtn_hs_sc1_widget;</fullname>
-    <shortname>sc</shortname>
-    <version>1.0</version>
-
-    <!-- configuration -->
-    <filexml>widgetconfiguration.xml</filexml>
-
-    <!-- Name of the localization files -->
-    <filedtd>shortcutconfiguration.dtd</filedtd>
-    
-    <!-- Locale specific resources -->
-    <localization>
-        <fileresource>shortcut.o0000</fileresource>
-    </localization>
-</package>
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/hsps/00/shortcutconfiguration.dtd	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-============================================================================
-<FileName: "shortcutconfiguration.dtd">
-<PartOf  : "shortcutconfiguration">
-
-<FileDescription: "Localization strings for the configuration">
-<FileVersion    : >
-
-<Copyright:
-"Copyright © 2007 Nokia Corporation.
-This material, including documentation and any related
-computer programs, is protected by copyright controlled by
-Nokia Corporation. All rights are reserved. Copying,
-including reproducing, storing,  adapting or translating, any
-or all of this material requires the prior written consent of
-Nokia Corporation. This material also contains confidential
-information which may not be disclosed to others without the
-prior written consent of Nokia Corporation.">
-============================================================================
--->
-
-<!-- NOTE: make sure that there is at last one space character (hex 20) after the entity name -->
-
-<!--
-qtn_shortcut1_configuration_name.attributes
-qtn_shortcut1_configuration_name.layout "list_single_pane_t1_cp2"
-qtn_shortcut1_configuration_name.release "TB9.2"
-qtn_shortcut1_configuration_name.description "Shortcut 1"
-qtn_shortcut1_configuration_name.parents ""
--->
-<!ENTITY qtn_shortcut1_configuration_name  "Shortcut 1">
\ No newline at end of file
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/hsps/00/widgetconfiguration.xml	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-<configuration>
-    <control>
-        <settings/>
-    </control>
-</configuration>
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/loc/Shortcut.loc	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Localization strings for Shortcut1 widget (Xuikon)
-*
-*/
-
-
-// d: Shortcuts
-// l: ai_gene_pane_1_t1
-// w: 
-// r: TB9.1
-#define qtn_hs_sc2_widget  "Shortcuts 2"
-
-// d: Open
-// l: control_pane_t1/opt7
-// w:
-// r: TB9.1
-#define qtn_msk_open "Open"
\ No newline at end of file
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/loc/shortcutconfiguration.loc	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-/*
-* Copyright (c) 2005-2006 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:  Localization strings for Shortcut1 plugin configuration (HSPS)
-*
-*/
-
-
-// d: Shortcuts
-// l: list_single_pane_t1_cp2
-// w:
-// r: TB9.2
-#define qtn_shortcut1_configuration_name  "Shortcut 1"
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/rom/shortcut.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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:  Shortcut widget HSPS-plugin IBY file.
-*
-*/
-
-
-#ifndef __SHORTCUT_2001F490_IBY__
-#define __SHORTCUT_2001F490_IBY__
-
-#if defined (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-// Enabled by DTD-localization tools
-data=ZPRIVATE\200159c0\install\shortcut_2001f490\hsps\00\manifest.dat \private\200159c0\install\shortcut_2001f490\hsps\00\manifest.dat
-
-#endif // (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-#endif // __SHORTCUT_2001F490_IBY__
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/rom/shortcut_customer.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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:  Shortcut widget HSPS-plugin language specific IBY file.
-*
-*/
-
-
-#ifndef __SHORTCUT_2001F490_CUSTOMER_IBY__
-#define __SHORTCUT_2001F490_CUSTOMER_IBY__
-
-#if defined (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-// Enabled by DTD-localization tools, language specific
-data=ZPRIVATE\200159c0\install\shortcut_2001f490\xuikon\00\shortcut.o0000 \private\200159c0\install\shortcut_2001f490\xuikon\00\shortcut.o0000
-data=ZPRIVATE\200159c0\install\shortcut_2001f490\hsps\00\shortcutconfiguration.dtd \private\200159c0\install\shortcut_2001f490\hsps\00\shortcutconfiguration.dtd
-
-#endif // (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-#endif // __SHORTCUT_2001F490_CUSTOMER_IBY__
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/rom/shortcut_resources.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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:  Shortcut widget HSPS-plugin language specific IBY file.
-*
-*/
-
-
-#ifndef __SHORTCUT_2001F490_RESOURCES_IBY__
-#define __SHORTCUT_2001F490_RESOURCES_IBY__
-
-#if defined (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-// Enabled by DTD-localization tools, language specific
-data=ZPRIVATE\200159c0\install\shortcut_2001f490\xuikon\00\shortcut.o0000 \private\200159c0\install\shortcut_2001f490\xuikon\00\shortcut.o0000
-data=ZPRIVATE\200159c0\install\shortcut_2001f490\hsps\00\shortcutconfiguration.dtd \private\200159c0\install\shortcut_2001f490\hsps\00\shortcutconfiguration.dtd
-
-#endif // (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-#endif // __SHORTCUT_2001F490_RESOURCES_IBY__
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/rom/shortcut_variant.iby	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* Copyright (c) 2005-2007 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:  Shortcut widget HSPS-plugin variant specific IBY file.
-*
-*/
-
-
-#ifndef __SHORTCUT_2001F490_VARIANT_IBY__
-#define __SHORTCUT_2001F490_VARIANT_IBY__
-
-#if defined (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-// Enabled by variation tools, variant specific
-data=ZPRIVATE\200159c0\install\shortcut_2001f490\hsps\00\widgetconfiguration.xml \private\200159c0\install\shortcut_2001f490\hsps\00\widgetconfiguration.xml
-
-#endif // (FF_LAYOUT_480_640_VGA3) || defined (FF_LAYOUT_640_480_VGA3) || defined (FF_LAYOUT_480_640_TOUCH_VGA4) || defined (FF_LAYOUT_640_480_TOUCH_VGA4)
-
-#endif  // __SHORTCUT_2001F490_VARIANT_IBY__
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/00/Shortcut.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-widget#shortcutPlugin 
-{ 
-    width: auto;
-    height: 70px;
-    
-    block-progression: rl;
-    direction: ltr;  
-}
-
-button.shortcutButton 
-{ 
-    width: 70px;
-    height: auto;
-    
-    nav-index: appearance;
-    
-    margin-left: 4px;
-    margin-right: 4px;
-    
-    background-color: "SKIN(268458534 9906)";            
-}
-
-button#shortcutButton1
-{  
-    margin-left: 0px;
-}
-
-button#shortcutButton6
-{
-    margin-right: 0px;  
-}
-
-button.shortcutButton:focus 
-{
-    focus-background: "SKIN(268458534 5120 9)";	
-}
-
-image.shortcutIcon 
-{ 
-    width: auto;
-    height: auto;
-    
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 430px;
-    height: 5.5u;
-    
-    border-style: solid; 
-    border-width: 5px; 
-    
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
-/*********************
-	xSP
-**********************/
-tooltip.shortcutTooltipXsp 
-{ 
-    width: 15.0u;
-    height: adaptive;
-    border-style: solid; 
-    border-width: 5px; 
-    /* delay comes from the xSP server */
-    _s60-start-delay: 0;
-    _s60-display-time: 60000000; /* 6 sec */
-    background-color:"SKIN(268458534 8480)";
-    overflow: visible;
-    display: none;    
-    block-progression: tb;
-    padding-bottom: 1u;
-    padding-right: 2u;
-    padding-left: 2u;
-    padding-top: 1u;
-    _s60-position-hint: aboveleft; 
-}
-
-text.shortcutTextCaptionXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;
-    font-weight: bold;
-    text-align: center;
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible;
-    display: block;
-    visibility:visible;
-}
-
-text.shortcutTextXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;	
-    text-align: left;	
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible; 
-    display: block;
-    visibility:visible;
-}
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/00/Shortcut.dat	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<data>
-	<AppUid>2001CB4F</AppUid>
-	<Provideruid>101FB657</Provideruid>
-	<ThemeUid>11001551</ThemeUid>
-	<ThemeFullName>Shortcut</ThemeFullName>
-	<ThemeShortName>shortcut</ThemeShortName>
-	<ThemeVersion>1.0</ThemeVersion>
-	<FileXML>shortcut.xml</FileXML>
-	<FileCSS>shortcut.css</FileCSS>
-	<FileDTD>shortcut.dtd</FileDTD>
-</data>
\ No newline at end of file
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/00/Shortcut.dtd	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-============================================================================
-<FileName: "Shortcut.dtd">
-<PartOf  : "AI3">
-
-<FileDescription: "Localization strings for AI3">
-<FileVersion    : >
-
-<Copyright:
-"Copyright © 2005 Nokia Corporation.
-This material, including documentation and any related
-computer programs, is protected by copyright controlled by
-Nokia Corporation. All rights are reserved. Copying,
-including reproducing, storing,  adapting or translating, any
-or all of this material requires the prior written consent of
-Nokia Corporation. This material also contains confidential
-information which may not be disclosed to others without the
-prior written consent of Nokia Corporation.">
-============================================================================
--->
-
-<!--
-qtn_hs_sc2_widget.attributes
-qtn_hs_sc2_widget.layout "ai_gene_pane_1_t1"
-qtn_hs_sc2_widget.release "TB9.2"
-qtn_hs_sc2_widget.description "Shortcuts 2"
-qtn_hs_sc2_widget.parents "ai_gene_pane_1"
--->
-<!ENTITY qtn_hs_sc2_widget  "Shortcuts 2">
-
-<!--
-qtn_msk_open.attributes
-qtn_msk_open.layout "control_pane_t1/opt7"
-qtn_msk_open.release "TB9.2"
-qtn_msk_open.description "Open"
-qtn_msk_open.grammar "Open"
-qtn_msk_open.parents "control_pane"
--->
-<!ENTITY qtn_msk_open "Open">
-
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/00/Shortcut.xml	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,353 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE xmluiml SYSTEM "Shortcut.dtd">
-<xmluiml xmlns="http://www.series60.com/xml/xmluiml/1" version="1.0">
-  <widget id="shortcutPlugin">
-    <contentsource name="Shortcut" value="0x102750FA"/>
-  
-    <!-- Always visible shortcuts -->
-    <!-- NOTE: these indexes start from 1 -->
-    <!-- Shortcut #1, Phonebook -->
-    <property class="Settings/Shortcut" name="0x00000001" value="localapp:0x101F4CCE"/>
-    <!-- Shortcut #2, Messaging -->
-    <property class="Settings/Shortcut" name="0x00000002" value="localapp:0x100058C5"/>
-    <!-- Shortcut #3, Browser -->
-    <property class="Settings/Shortcut" name="0x00000003" value="localapp:0x10008D39"/>
-    <!-- Shortcut #4, Photos -->
-    <property class="Settings/Shortcut" name="0x00000004" value="localapp:0x200009EE"/>
-    <!-- Shortcut #5, Calendar -->
-    <property class="Settings/Shortcut" name="0x00000005" value="localapp:0x10005901"/>
-    <!-- Shortcut #6, New message -->
-    <property class="Settings/Shortcut" name="0x00000006" value="localapp:0x100058C5?new=msg"/>
-          
-    <!-- #1 -->
-    <button id="shortcutButton1" class="shortcutButton" focusable="true" _s60-initial-focus="1">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->
-                    <property name="scancode" value="3"/>
-                    <property name="eventtype" value="1"/>
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x00000001)"/>
-            </action>  
-        </actions>
-        <image id="Shortcut_shortcutIcon1" class="shortcutIcon">
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000001"/>
-        </image>
-        <tooltip id="shortcutTooltip1" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText1" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000001"/>
-            </text>
-        </tooltip>
-        <tooltip id="shortcutTooltip1Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton1" value="ShowTooltips"/>
-
-            <text id="PopupText1_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x00000001"/>
-            </text>                
-            <text id="PopupText1_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x00000001"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip1Xsp" value="display: block;"/>       
-                <property class="policy/Content" name="shortcutTooltip1" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip1Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip1" value="display: block;"/>
-            </text>
-            <text id="PopupText1_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x00000001"/>
-                <property class="policy/emptyContent" name="PopupText1_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText1_b" value="display:block;"/>
-            </text>
-            <text id="PopupText1_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x00000001"/>
-                <property class="policy/emptyContent" name="PopupText1_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText1_c" value="display:block;"/>
-            </text>
-        </tooltip>
-    </button>
-
-    <!-- #2 -->
-    <button id="shortcutButton2" class="shortcutButton" focusable="true">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->
-                    <property name="scancode" value="3"/>                       
-                    <property name="eventtype" value="1"/>                      
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x00000002)"/>
-            </action>               
-        </actions>
-        <image id="Shortcut_shortcutIcon2" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000002"/>
-        </image>
-        <tooltip id="shortcutTooltip2" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText2" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000002"/>
-            </text>             
-        </tooltip>
-        <tooltip id="shortcutTooltip2Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton2" value="ShowTooltips"/>
-
-            <text id="PopupText2_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x00000002"/>
-            </text>                
-            <text id="PopupText2_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x00000002"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip2Xsp" value="display: block;"/>       
-                <property class="policy/Content" name="shortcutTooltip2" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip2Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip2" value="display: block;"/>
-            </text>
-            <text id="PopupText2_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x00000002"/>
-                <property class="policy/emptyContent" name="PopupText2_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText2_b" value="display:block;"/>
-            </text>
-            <text id="PopupText2_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x00000002"/>
-                <property class="policy/emptyContent" name="PopupText2_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText2_c" value="display:block;"/>
-            </text>
-        </tooltip>          
-    </button>
-
-    <!-- #3 -->
-    <button id="shortcutButton3" class="shortcutButton" focusable="true">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->
-                    <property name="scancode" value="3"/>               
-                    <property name="eventtype" value="1"/>                              
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x00000003)"/>
-            </action>               
-        </actions>
-        <image id="Shortcut_shortcutIcon3" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000003"/>
-        </image>
-        <tooltip id="shortcutTooltip3" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText3" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000003"/>
-            </text>
-        </tooltip>
-        <tooltip id="shortcutTooltip3Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton3" value="ShowTooltips"/>
-
-            <text id="PopupText3_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x00000003"/>
-            </text>                
-            <text id="PopupText3_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x00000003"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip3Xsp" value="display: block;"/>       
-                <property class="policy/Content" name="shortcutTooltip3" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip3Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip3" value="display: block;"/>
-            </text>
-            <text id="PopupText3_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x00000003"/>
-                <property class="policy/emptyContent" name="PopupText3_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText3_b" value="display:block;"/>
-            </text>
-            <text id="PopupText3_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x00000003"/>
-                <property class="policy/emptyContent" name="PopupText3_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText3_c" value="display:block;"/>
-            </text>
-        </tooltip>          
-    </button>
-
-    <!-- #4 -->
-    <button id="shortcutButton4" class="shortcutButton" focusable="true">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->
-                    <property name="scancode" value="3"/>                       
-                    <property name="eventtype" value="1"/>                      
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x00000004)"/>
-            </action>               
-        </actions>
-        <image id="Shortcut_shortcutIcon4" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000004"/>
-        </image>
-        <tooltip id="shortcutTooltip4" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText4" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000004"/>
-            </text>
-        </tooltip>
-        <tooltip id="shortcutTooltip4Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton4" value="ShowTooltips"/>
-
-            <text id="PopupText4_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x00000004"/>
-            </text>                
-            <text id="PopupText4_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x00000004"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip4Xsp" value="display: block;"/>       
-                <property class="policy/Content" name="shortcutTooltip4" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip4Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip4" value="display: block;"/>
-            </text>
-            <text id="PopupText4_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x00000004"/>
-                <property class="policy/emptyContent" name="PopupText4_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText4_b" value="display:block;"/>
-            </text>
-            <text id="PopupText4_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x00000004"/>
-                <property class="policy/emptyContent" name="PopupText4_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText4_c" value="display:block;"/>
-            </text>
-        </tooltip>  
-    </button>
-
-    <!-- #5 -->
-    <button id="shortcutButton5" class="shortcutButton" focusable="true">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->
-                    <property name="scancode" value="3"/>
-                    <property name="eventtype" value="1"/>
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x00000005)"/>
-            </action>               
-        </actions>
-        <image id="Shortcut_shortcutIcon5" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000005"/>
-        </image>
-        <tooltip id="shortcutTooltip5" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText3" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000005"/>
-            </text>
-        </tooltip>
-        <tooltip id="shortcutTooltip5Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton5" value="ShowTooltips"/>
-
-            <text id="PopupText5_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x00000005"/>
-            </text>                
-            <text id="PopupText5_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x00000005"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip5Xsp" value="display: block;"/>       
-                <property class="policy/Content" name="shortcutTooltip5" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip5Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip5" value="display: block;"/>
-            </text>
-            <text id="PopupText5_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x00000005"/>
-                <property class="policy/emptyContent" name="PopupText5_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText5_b" value="display:block;"/>
-            </text>
-            <text id="PopupText5_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x00000005"/>
-                <property class="policy/emptyContent" name="PopupText5_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText5_c" value="display:block;"/>
-            </text>
-        </tooltip>          
-    </button>
-
-    <!-- #6 -->
-    <button id="shortcutButton6" class="shortcutButton" focusable="true">
-        <actions>
-            <action>
-                <trigger name="stylus">
-                    <property name="eventtype" value="downup" />
-                </trigger>
-                <trigger name="activate"/>
-                <trigger name="keyevent">
-                    <!-- EStdKeyEnter (enum from e32keys.h) -->             
-                    <property name="scancode" value="3"/> 
-                    <property name="eventtype" value="1"/>
-                </trigger>
-                <event name="Shortcut/LaunchByIndex(0x00000006)"/>
-            </action>               
-        </actions>
-        <image id="Shortcut_shortcutIcon6" class="shortcutIcon" >
-            <property class="Shortcut/ShortcutIcon" name="ordinal" value="0x00000006"/>
-        </image>
-        <tooltip id="shortcutTooltip6" class="shortcutTooltip" >
-            <text id="Shortcut_shortcutTooltipText3" class="shortcutTooltipText" >
-                <property class="Shortcut/ShortcutCaption" name="ordinal" value="0x00000006"/>
-            </text>
-        </tooltip>
-        <tooltip id="shortcutTooltip6Xsp" class="shortcutTooltipXsp" >
-            <property class="policy/ContentChanged" name="shortcutButton6" value="ShowTooltips"/>
-
-            <text id="PopupText6_caption" class="shortcutTextCaptionXsp" >
-                <property class="Shortcut/ShortcutPopupCaptionLine" name="ordinal" value="0x00000006"/>
-            </text>                
-            <text id="PopupText6_a" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup1stLine" name="ordinal" value="0x00000006"/>
-                <!-- show xsp tip and hide normal tip -->
-                <property class="policy/Content" name="shortcutTooltip6Xsp" value="display: block;"/>       
-                <property class="policy/Content" name="shortcutTooltip6" value="display: none;"/>
-
-                <property class="policy/emptyContent" name="shortcutTooltip6Xsp" value="display: none;"/> 
-                <property class="policy/emptyContent" name="shortcutTooltip6" value="display: block;"/>
-            </text>
-            <text id="PopupText6_b" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup2ndLine" name="ordinal" value="0x00000006"/>
-                <property class="policy/emptyContent" name="PopupText6_b" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText6_b" value="display:block;"/>
-            </text>
-            <text id="PopupText6_c" class="shortcutTextXsp" >
-                <property class="Shortcut/ShortcutPopup3rdLine" name="ordinal" value="0x00000006"/>
-                <property class="policy/emptyContent" name="PopupText6_c" value="display:none;"/> 
-                <property class="policy/Content" name="PopupText6_c" value="display:block;"/>
-            </text>
-        </tooltip>  
-    </button>
-    <menuextension>
-        <softkey type="middle" target="hs_widget_msk_open"/>
-        <menuitem target="hs_widget_menuitem_open">
-            <actions>
-                <action>
-                    <trigger name="activate"/>
-                    <event name="system/activateselecteditem"/>
-                </action>
-            </actions>
-        </menuitem>
-        <menuitem target="hs_widget_menuitem_settings">
-            <actions>
-                <action>
-                    <trigger name="activate"/>
-                    <event name="Shortcut/ShowSettings(0x00000001,0x00000002,0x00000003,0x00000004,0x00000005,0x00000006)"/>
-                </action>
-            </actions>
-        </menuitem>
-    </menuextension>
-  </widget>
-</xmluiml>
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/37/Shortcut.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-widget#shortcutPlugin 
-{ 
-    width: auto;
-    height: 70px;
-    
-    block-progression: rl;
-    direction: rtl;  
-}
-
-button.shortcutButton 
-{ 
-    width: 70px;
-    height: auto;
-    
-    nav-index: appearance;
-    
-    margin-left: 4px;
-    margin-right: 4px;
-    
-    background-color: "SKIN(268458534 9906)";            
-}
-
-button#shortcutButton1
-{  
-    margin-left: 0px;
-}
-
-button#shortcutButton6
-{
-    margin-right: 0px;  
-}
-
-button.shortcutButton:focus 
-{
-    focus-background: "SKIN(268458534 5120 9)";	
-}
-
-image.shortcutIcon 
-{ 
-    width: auto;
-    height: auto;
-    
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 430px;
-    height: 5.5u;
-    
-    border-style: solid; 
-    border-width: 5px; 
-    
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
-/*********************
-	xSP
-**********************/
-tooltip.shortcutTooltipXsp 
-{ 
-    width: 15.0u;
-    height: adaptive;
-    border-style: solid; 
-    border-width: 5px; 
-    /* delay comes from the xSP server */
-    _s60-start-delay: 0;
-    _s60-display-time: 60000000; /* 6 sec */
-    background-color:"SKIN(268458534 8480)";
-    overflow: visible;
-    display: none;    
-    block-progression: tb;
-    padding-bottom: 1u;
-    padding-right: 2u;
-    padding-left: 2u;
-    padding-top: 1u;
-}
-
-text.shortcutTextCaptionXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;
-    font-weight: bold;
-    text-align: center;
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible;
-    display: block;
-    visibility:visible;
-}
-
-text.shortcutTextXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;	
-    text-align: left;	
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible; 
-    display: block;
-    visibility:visible;
-}
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/50/Shortcut.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-widget#shortcutPlugin 
-{ 
-    width: auto;
-    height: 70px;
-    
-    block-progression: rl;
-    direction: rtl;  
-}
-
-button.shortcutButton 
-{ 
-    width: 70px;
-    height: auto;
-    
-    nav-index: appearance;
-    
-    margin-left: 4px;
-    margin-right: 4px;
-    
-    background-color: "SKIN(268458534 9906)";            
-}
-
-button#shortcutButton1
-{  
-    margin-left: 0px;
-}
-
-button#shortcutButton6
-{
-    margin-right: 0px;  
-}
-
-button.shortcutButton:focus 
-{
-    focus-background: "SKIN(268458534 5120 9)";	
-}
-
-image.shortcutIcon 
-{ 
-    width: auto;
-    height: auto;
-    
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 430px;
-    height: 5.5u;
-    
-    border-style: solid; 
-    border-width: 5px; 
-    
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
-/*********************
-	xSP
-**********************/
-tooltip.shortcutTooltipXsp 
-{ 
-    width: 15.0u;
-    height: adaptive;
-    border-style: solid; 
-    border-width: 5px; 
-    /* delay comes from the xSP server */
-    _s60-start-delay: 0;
-    _s60-display-time: 60000000; /* 6 sec */
-    background-color:"SKIN(268458534 8480)";
-    overflow: visible;
-    display: none;    
-    block-progression: tb;
-    padding-bottom: 1u;
-    padding-right: 2u;
-    padding-left: 2u;
-    padding-top: 1u;
-}
-
-text.shortcutTextCaptionXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;
-    font-weight: bold;
-    text-align: center;
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible;
-    display: block;
-    visibility:visible;
-}
-
-text.shortcutTextXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;	
-    text-align: left;	
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible; 
-    display: block;
-    visibility:visible;
-}
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/57/Shortcut.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-widget#shortcutPlugin 
-{ 
-    width: auto;
-    height: 70px;
-    
-    block-progression: rl;
-    direction: rtl;  
-}
-
-button.shortcutButton 
-{ 
-    width: 70px;
-    height: auto;
-    
-    nav-index: appearance;
-    
-    margin-left: 4px;
-    margin-right: 4px;
-    
-    background-color: "SKIN(268458534 9906)";            
-}
-
-button#shortcutButton1
-{  
-    margin-left: 0px;
-}
-
-button#shortcutButton6
-{
-    margin-right: 0px;  
-}
-
-button.shortcutButton:focus 
-{
-    focus-background: "SKIN(268458534 5120 9)";	
-}
-
-image.shortcutIcon 
-{ 
-    width: auto;
-    height: auto;
-    
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 430px;
-    height: 5.5u;
-    
-    border-style: solid; 
-    border-width: 5px; 
-    
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
-/*********************
-	xSP
-**********************/
-tooltip.shortcutTooltipXsp 
-{ 
-    width: 15.0u;
-    height: adaptive;
-    border-style: solid; 
-    border-width: 5px; 
-    /* delay comes from the xSP server */
-    _s60-start-delay: 0;
-    _s60-display-time: 60000000; /* 6 sec */
-    background-color:"SKIN(268458534 8480)";
-    overflow: visible;
-    display: none;    
-    block-progression: tb;
-    padding-bottom: 1u;
-    padding-right: 2u;
-    padding-left: 2u;
-    padding-top: 1u;
-}
-
-text.shortcutTextCaptionXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;
-    font-weight: bold;
-    text-align: center;
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible;
-    display: block;
-    visibility:visible;
-}
-
-text.shortcutTextXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;	
-    text-align: left;	
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible; 
-    display: block;
-    visibility:visible;
-}
--- a/idlehomescreen/data/vga_tch/shortcut_2001f490/xuikon/94/Shortcut.css	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-widget#shortcutPlugin 
-{ 
-    width: auto;
-    height: 70px;
-    
-    block-progression: rl;
-    direction: rtl;  
-}
-
-button.shortcutButton 
-{ 
-    width: 70px;
-    height: auto;
-    
-    nav-index: appearance;
-    
-    margin-left: 4px;
-    margin-right: 4px;
-    
-    background-color: "SKIN(268458534 9906)";            
-}
-
-button#shortcutButton1
-{  
-    margin-left: 0px;
-}
-
-button#shortcutButton6
-{
-    margin-right: 0px;  
-}
-
-button.shortcutButton:focus 
-{
-    focus-background: "SKIN(268458534 5120 9)";	
-}
-
-image.shortcutIcon 
-{ 
-    width: auto;
-    height: auto;
-    
-    _s60-aspect-ratio: preserve;
-}
-
-tooltip.shortcutTooltip 
-{ 
-    width: adaptive;
-    max-width: 430px;
-    height: 5.5u;
-    
-    border-style: solid; 
-    border-width: 5px; 
-    
-    _s60-start-delay: 1000000;
-    _s60-display-time: 1000000;
-    
-    background-color:"SKIN(268458534 8480)";
-    display: block;    
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-
-text.shortcutTooltipText 
-{ 
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 23px;
-    width: adaptive;
-    color: "SKIN(268458534 13056 19)";
-}
-
-/*********************
-	xSP
-**********************/
-tooltip.shortcutTooltipXsp 
-{ 
-    width: 15.0u;
-    height: adaptive;
-    border-style: solid; 
-    border-width: 5px; 
-    /* delay comes from the xSP server */
-    _s60-start-delay: 0;
-    _s60-display-time: 60000000; /* 6 sec */
-    background-color:"SKIN(268458534 8480)";
-    overflow: visible;
-    display: none;    
-    block-progression: tb;
-    padding-bottom: 1u;
-    padding-right: 2u;
-    padding-left: 2u;
-    padding-top: 1u;
-}
-
-text.shortcutTextCaptionXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;
-    font-weight: bold;
-    text-align: center;
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible;
-    display: block;
-    visibility:visible;
-}
-
-text.shortcutTextXsp 
-{ 
-    position: static;
-    font-family: EAknLogicalFontSecondaryFont;
-    font-size: 3.5u;	
-    text-align: left;	
-    width: 30u;
-    height: 5u;
-    color: "SKIN(268458534 13056 19)";
-    overflow: visible; 
-    display: block;
-    visibility:visible;
-}
--- a/idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/00/single_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/00/single_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#single_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/37/single_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/37/single_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#single_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/50/single_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/50/single_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#single_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/57/single_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/57/single_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#single_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/94/single_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/single_row_icon_widget_2001fdc0/xuikon/94/single_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#single_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/00/single_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/00/single_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#single_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/37/single_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/37/single_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#single_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/50/single_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/50/single_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#single_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/57/single_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/57/single_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#single_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/94/single_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/single_row_widget_2001fdc1/xuikon/94/single_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#single_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/00/triple_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/00/triple_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#triple_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/37/triple_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/37/triple_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#triple_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/50/triple_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/50/triple_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#triple_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/57/triple_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/57/triple_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#triple_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/94/triple_row_icon_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/triple_row_icon_widget_2001fdbe/xuikon/94/triple_row_icon_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index:appearance;
 }
 box#triple_row_icon_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/00/triple_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/00/triple_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index: appearance;
 }
 box#triple_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/37/triple_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/37/triple_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index: appearance;
 }
 box#triple_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/50/triple_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/50/triple_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index: appearance;
 }
 box#triple_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/57/triple_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/57/triple_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index: appearance;
 }
 box#triple_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/94/triple_row_widget.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/triple_row_widget_2001fdbf/xuikon/94/triple_row_widget.css	Mon Jan 18 20:10:36 2010 +0200
@@ -8,8 +8,6 @@
  		nav-index: appearance;
 }
 box#triple_row_widget:focus{
-	  touchfeedbackdown: basic;
-	  touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/data/vga_tch/view1_2001fdb9/loc/view.loc	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/view1_2001fdb9/loc/view.loc	Mon Jan 18 20:10:36 2010 +0200
@@ -260,3 +260,9 @@
 // w:
 // r: TB9.2
 #define qtn_hs_edit_widget_catalog "Widget Catalog"
+
+// d: Deletes the current Home screen page and focus goes to the next available Home screen page in Edit mode
+// l: list_single_pane_t1_cp2
+// w:
+// r: TB9.2
+#define qtn_hs_page_edit_options_delete "Delete page"
--- a/idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/00/view.dtd	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/00/view.dtd	Mon Jan 18 20:10:36 2010 +0200
@@ -299,22 +299,22 @@
 <!ENTITY text_softkey_cancel "Cancel">
 
 <!--
-qtn_hs_web_online.attributes
-qtn_hs_web_online.layout "list_single_pane_t1_cp2"
-qtn_hs_web_online.release "TB9.2"
-qtn_hs_web_online.description "Online"
-qtn_hs_web_online.grammar "Online"
-qtn_hs_web_online.parents "list_single_pane_cp2"
+qtn_hs_online.attributes
+qtn_hs_online.layout "list_single_pane_t1_cp2"
+qtn_hs_online.release "TB9.2"
+qtn_hs_online.description "Online"
+qtn_hs_online.grammar "Online"
+qtn_hs_online.parents "list_single_pane_cp2"
 -->
 <!ENTITY qtn_hs_online "Switch Home to online">
 
 <!--
-qtn_hs_web_offline.attributes
-qtn_hs_web_offline.layout "list_single_pane_t1_cp2"
-qtn_hs_web_offline.release "TB9.2"
-qtn_hs_web_offline.description "Offline"
-qtn_hs_web_offline.grammar "Offline"
-qtn_hs_web_offline.parents "list_single_pane_cp2"
+qtn_hs_offline.attributes
+qtn_hs_offline.layout "list_single_pane_t1_cp2"
+qtn_hs_offline.release "TB9.2"
+qtn_hs_offline.description "Offline"
+qtn_hs_offline.grammar "Offline"
+qtn_hs_offline.parents "list_single_pane_cp2"
 -->
 <!ENTITY qtn_hs_offline "Switch Home to offline">
 
@@ -373,20 +373,20 @@
 <!ENTITY qtn_hs_edit_replace "Replace">
 
 <!--
-qtn_hs_edit_replace.attributes
-qtn_hs_edit_replace.layout "list_single_pane_t1_cp2"
-qtn_hs_edit_replace.release "TB9.2"
-qtn_hs_edit_replace.description "deletes current home screen page"
-qtn_hs_edit_replace.parents ""
+qtn_hs_page_options_delete.attributes
+qtn_hs_page_options_delete.layout "list_single_pane_t1_cp2"
+qtn_hs_page_options_delete.release "TB9.2"
+qtn_hs_page_options_delete.description "deletes current home screen page"
+qtn_hs_page_options_delete.parents ""
 -->
 <!ENTITY qtn_hs_page_options_delete "Delete page">
 
 <!--
-qtn_hs_edit_replace.attributes
-qtn_hs_edit_replace.layout "list_single_pane_t1_cp2"
-qtn_hs_edit_replace.release "TB9.2"
-qtn_hs_edit_replace.description "creates new home screen page"
-qtn_hs_edit_replace.parents ""
+qtn_hs_page_options_new.attributes
+qtn_hs_page_options_new.layout "list_single_pane_t1_cp2"
+qtn_hs_page_options_new.release "TB9.2"
+qtn_hs_page_options_new.description "creates new home screen page"
+qtn_hs_page_options_new.parents ""
 -->
 <!ENTITY qtn_hs_page_options_new "New page">
 
@@ -409,11 +409,20 @@
 <!ENTITY text_softkey_call "Call">
 
 <!--
-qtn_hs_add_widget.attributes
-qtn_hs_add_widget.layout "list_single_pane_t1_cp2"
-qtn_hs_add_widget.release "TB9.2"
-qtn_hs_add_widget.description "Added new option menu item to Edit mode for opening the widget catalog"
-qtn_hs_add_widget.grammar "Widget Catalog"
-qtn_hs_add_widget.parents "list_single_pane_cp2"
+qtn_hs_edit_widget_catalog.attributes
+qtn_hs_edit_widget_catalog.layout "list_single_pane_t1_cp2"
+qtn_hs_edit_widget_catalog.release "TB9.2"
+qtn_hs_edit_widget_catalog.description "Added new option menu item to Edit mode for opening the widget catalog"
+qtn_hs_edit_widget_catalog.grammar "Widget Catalog"
+qtn_hs_edit_widget_catalog.parents "list_single_pane_cp2"
 -->
 <!ENTITY qtn_hs_edit_widget_catalog "Widget Catalog">
+
+<!--
+qtn_hs_page_edit_options_delete.attributes
+qtn_hs_page_edit_options_delete.layout "list_single_pane_t1_cp2"
+qtn_hs_page_edit_options_delete.release "TB9.2"
+qtn_hs_page_edit_options_delete.description "Deletes the current Home screen page and focus goes to the next available Home screen page in Edit mode"
+qtn_hs_page_edit_options_delete.parents ""
+-->
+<!ENTITY qtn_hs_page_edit_options_delete "Delete page">
--- a/idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/37/view.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/37/view.css	Mon Jan 18 20:10:36 2010 +0200
@@ -106,8 +106,6 @@
 
 box.profile_date:focus
 {
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
     background-color: "SKIN(268458534 5120 9)";
 }
 
@@ -353,8 +351,6 @@
 
 box#profile_softindicator:focus
 {
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
     focus-background:"SKIN(268458534 5120 9)";
 }
 
--- a/idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/50/view.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/50/view.css	Mon Jan 18 20:10:36 2010 +0200
@@ -106,8 +106,6 @@
 
 box.profile_date:focus
 {
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
     background-color: "SKIN(268458534 5120 9)";
 }
 
@@ -353,8 +351,6 @@
 
 box#profile_softindicator:focus
 {
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
     focus-background:"SKIN(268458534 5120 9)";
 }
 
--- a/idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/57/view.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/57/view.css	Mon Jan 18 20:10:36 2010 +0200
@@ -106,8 +106,6 @@
 
 box.profile_date:focus
 {
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
     background-color: "SKIN(268458534 5120 9)";
 }
 
@@ -353,8 +351,6 @@
 
 box#profile_softindicator:focus
 {
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
     focus-background:"SKIN(268458534 5120 9)";
 }
 
--- a/idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/94/view.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/view1_2001fdb9/xuikon/94/view.css	Mon Jan 18 20:10:36 2010 +0200
@@ -106,8 +106,6 @@
 
 box.profile_date:focus
 {
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
     background-color: "SKIN(268458534 5120 9)";
 }
 
@@ -353,8 +351,6 @@
 
 box#profile_softindicator:focus
 {
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive;
     focus-background:"SKIN(268458534 5120 9)";
 }
 
--- a/idlehomescreen/data/vga_tch/wideimage_10009dff/xuikon/00/wideimage.css	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/data/vga_tch/wideimage_10009dff/xuikon/00/wideimage.css	Mon Jan 18 20:10:36 2010 +0200
@@ -4,8 +4,6 @@
     }
 
 box#image_container:focus {
-    touchfeedbackdown: basic; 
-    touchfeedbackdrag: sensitive; 
     background-image: "SKIN(268458534 24576)";
     background-color: "SKIN(268458534 5120 9)";
 }
--- a/idlehomescreen/hscontentcontrol/group/hscontentcontrol.mmp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/hscontentcontrol/group/hscontentcontrol.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -32,6 +32,7 @@
 SOURCE            hscontentcontrolfactory.cpp 
 SOURCE            hscontentcontrolui.cpp 
 SOURCE            hscontentcontrolecomlistener.cpp
+SOURCE            hscontentcontroluninstallmonitor.cpp
 
 //By default, the build tools look for the WINSCW def file in a BWINS directory
 //(at the same level as the directory containing the mmp file), 
--- a/idlehomescreen/hscontentcontrol/inc/hscontentcontrolfactory.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/hscontentcontrol/inc/hscontentcontrolfactory.h	Mon Jan 18 20:10:36 2010 +0200
@@ -24,9 +24,11 @@
 
 // User includes
 #include "hscontentcontrolecomobserver.h"
+#include "hscontentcontroluninstallobserver.h"
 
 // Forward declarations
 class CHsContentControlEComListener;
+class CHsContentControlUninstallMonitor;
 
 /**
  *  Content control UI base class
@@ -40,7 +42,8 @@
  *  @since S60 v5.0
  */
 NONSHARABLE_CLASS( CHsContentControlFactory ) : public CBase,
-                                                public MHsContentControlEComObserver
+                                                public MHsContentControlEComObserver,
+                                                public MHsContentControlUninstallObserver
     {
 public: // Constructor and destructor
     /**
@@ -53,12 +56,20 @@
      */
     IMPORT_C ~CHsContentControlFactory();
 
-public: // from MHsContentControlEComObserver
+private: // from MHsContentControlEComObserver
     
     /**
      * Notification of Ecom registry change.
      */
      void HandleEComChangeEvent();
+
+private: // from MHsContentControlUninstallObserver
+    
+    /**
+     * Notification of Uninstall event from SWI.
+     * @param aPkgUid The package UID which is being uninstalled.
+     */
+     void HandleUninstallEvent( const TUid& aPkgUid );
     
 private: // Constructors
     /**
@@ -93,7 +104,7 @@
      * Finds plugin implementation info in the ECOM registry.
      * @param aUid The plugin UID which is to be checked.
      * @param aPluginArray The array of plugins which have been implemented.
-     * @return ImplementationInfo of plugin. 
+     * @return ImplementationInfo of plugin.
      */
     CImplementationInformation* FindPluginImplInfo( 
             const TUid& aUid, const RImplInfoPtrArray& aPlugInArray );
@@ -120,7 +131,12 @@
     /**
      * An object of type CHsContentControlEComListener ( Owned ).
      */
-    CHsContentControlEComListener*  iHsContentControlEComListener; 
+    CHsContentControlEComListener*  iHsContentControlEComListener;
+
+    /**
+     * An object of type CHsContentControlUninstallMonitor ( Owned ).
+     */
+    CHsContentControlUninstallMonitor*  iHsContentControlUninstallMonitor;
     };
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/hscontentcontrol/inc/hscontentcontroluninstallmonitor.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Class to listen SWI uninstall operation.
+*
+*/
+
+#ifndef HSCONTENTCONTROLUNINSTALLMONITOR_H
+#define HSCONTENTCONTROLUNINSTALLMONITOR_H
+
+// System includes
+#include <e32base.h>
+#include <e32property.h>
+
+// User includes
+#include "hscontentcontroluninstallobserver.h"
+
+// Forward declarations
+
+// Class declaration
+/** 
+* @class CHsContentControlUninstallMonitor
+* 
+* @brief An instance of class CHsContentControlUninstallMonitor which listens for 
+*  uninstall event from SWI.
+*  
+* @lib hscontentcontrol.lib
+*/
+NONSHARABLE_CLASS( CHsContentControlUninstallMonitor ) : public CActive
+    {
+public:     // constructors and destructor
+    static CHsContentControlUninstallMonitor* NewL( 
+                MHsContentControlUninstallObserver& aObs );
+    ~CHsContentControlUninstallMonitor();
+
+protected:  // from CActive
+    void DoCancel();
+    void RunL();
+    
+private:    // new functions
+    CHsContentControlUninstallMonitor( 
+            MHsContentControlUninstallObserver& aObs );
+    void ConstructL();
+
+private:     // data
+    MHsContentControlUninstallObserver& iObs;
+    RProperty iSwUninstallKey;
+    };
+
+#endif // HSCONTENTCONTROLUNINSTALLMONITOR_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/hscontentcontrol/inc/hscontentcontroluninstallobserver.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008 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 for getting notified for SWI uninstall event.
+*
+*/
+
+
+#ifndef HSCONTENTCONTROLUNINSTALLOBSERVER_H
+#define HSCONTENTCONTROLUNINSTALLOBSERVER_H
+
+/**
+* MHsContentControlUninstallObserver
+* 
+* @brief The observer of uninstall operations. The derived class needs to implement
+*  the functions below and will be notified by CHsContentControlUninstallMonitor.
+*  
+* @see CHsContentControlUninstallMonitor
+*/
+class MHsContentControlUninstallObserver
+	{
+public:
+    /**
+     * Notification of Uninstall event from SWI.
+     * @param aPkgUid The package UID which is being uninstalled. 
+     */
+    virtual void HandleUninstallEvent( const TUid& aPkgUid ) = 0;
+	};
+
+#endif  // HSCONTENTCONTROLUNINSTALLOBSERVER_H
+
+// End of file
--- a/idlehomescreen/hscontentcontrol/src/hscontentcontrolfactory.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/hscontentcontrol/src/hscontentcontrolfactory.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -22,6 +22,7 @@
 // User include files
 #include "hscontentcontrolfactory.h"
 #include "hscontentcontrolecomlistener.h"
+#include "hscontentcontroluninstallmonitor.h"
 
 // Local constants
 
@@ -78,6 +79,9 @@
             CHsContentControlEComListener::NewL( *this );
     REComSession::ListImplementationsL( 
             KInterfaceUidContentController, iImplArray );
+    
+    iHsContentControlUninstallMonitor = 
+            CHsContentControlUninstallMonitor::NewL( *this );
     }
 
 // ----------------------------------------------------------------------------
@@ -97,7 +101,9 @@
     iImplArray.ResetAndDestroy();
     iImplArray.Close();
     iHsContentControlUis.ResetAndDestroy();
+    
 	delete iHsContentControlEComListener;
+    delete iHsContentControlUninstallMonitor;
     }
 
 // ---------------------------------------------------------------------------------
@@ -157,7 +163,7 @@
         {
         CHsContentControlUi* cc( iHsContentControlUis[ i ] );
         
-        if ( cc->ContentControlType().CompareF( aControlType ) == 0 )                
+        if ( cc->ContentControlType().CompareF( aControlType ) == 0 )
             {
             return cc;
             } 
@@ -180,6 +186,30 @@
     }
 
 // ----------------------------------------------------------------------------
+// CHsContentControlFactory::HandleUninstallEvent()
+// ----------------------------------------------------------------------------
+//
+void CHsContentControlFactory::HandleUninstallEvent( const TUid& aPkgUid )
+    {
+    // ignore event if no plugin loaded.
+    if ( iHsContentControlUis.Count() > 0 )
+        {
+        for( TInt index( iHsContentControlUis.Count() - 1 ); index >= 0; --index )
+            {
+            CHsContentControlUi* cc( iHsContentControlUis[ index ] );
+            // ImplUid of plugin must match Sis pkg uid
+            if ( cc && cc->ImplUid() == aPkgUid )
+                {
+                iHsContentControlUis.Remove( index );
+                delete cc;
+                cc = NULL;
+                break;
+                }
+            }
+        }
+    }
+
+// ----------------------------------------------------------------------------
 // CHsContentControlFactory::CheckPluginChangesL
 // ----------------------------------------------------------------------------
 //
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/hscontentcontrol/src/hscontentcontroluninstallmonitor.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Class to listen SWI uninstall operation.
+*
+*/
+
+#include "hscontentcontroluninstallmonitor.h"
+#include <SWInstallerInternalPSKeys.h>
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CHsContentControlUninstallMonitor::NewL()
+// ---------------------------------------------------------------------------
+//
+CHsContentControlUninstallMonitor* CHsContentControlUninstallMonitor::NewL( 
+        MHsContentControlUninstallObserver& aObs )
+    {
+    CHsContentControlUninstallMonitor* self = 
+        new ( ELeave ) CHsContentControlUninstallMonitor( aObs );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CHsContentControlUninstallMonitor::~CHsContentControlUninstallMonitor()
+// ---------------------------------------------------------------------------
+//
+CHsContentControlUninstallMonitor::~CHsContentControlUninstallMonitor()
+    {
+    Cancel();
+    iSwUninstallKey.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CHsContentControlUninstallMonitor::DoCancel()
+// ---------------------------------------------------------------------------
+//
+void CHsContentControlUninstallMonitor::DoCancel()
+    {
+    if ( IsActive() )
+        {
+        iSwUninstallKey.Cancel();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CHsContentControlUninstallMonitor::RunL()
+// ---------------------------------------------------------------------------
+//
+void CHsContentControlUninstallMonitor::RunL()
+    {
+    iSwUninstallKey.Subscribe( iStatus );
+    SetActive();
+    
+    TInt value = 0;
+    if( iSwUninstallKey.Get( value ) == KErrNone )
+        {
+        TUid uid( KNullUid );
+        uid.iUid = value;
+        iObs.HandleUninstallEvent( uid );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CHsContentControlUninstallMonitor::CHsContentControlUninstallMonitor()
+// ---------------------------------------------------------------------------
+//
+CHsContentControlUninstallMonitor::CHsContentControlUninstallMonitor( 
+    MHsContentControlUninstallObserver& aObs )
+    : CActive( CActive::EPriorityStandard ),
+    iObs( aObs )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// CHsContentControlUninstallMonitor::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CHsContentControlUninstallMonitor::ConstructL()
+    {
+    if ( KErrNone == iSwUninstallKey.Attach( 
+        KPSUidSWInstallerUiNotification, KSWInstallerUninstallation ) )
+        {
+        iSwUninstallKey.Subscribe( iStatus );
+        SetActive();
+        }
+    }
+
+// End of file
--- a/idlehomescreen/inc/xndomattribute.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/inc/xndomattribute.h	Mon Jan 18 20:10:36 2010 +0200
@@ -47,14 +47,14 @@
         */
         IMPORT_C static CXnDomAttribute* NewL( 
             const TDesC8& aName, 
-            CXnDomStringPool& aStringPool );
+            CXnDomStringPool* aStringPool );
         
         /**
         * Two-phased stream constructor.
         */
         static CXnDomAttribute* NewL( 
             RReadStream& aStream, 
-            CXnDomStringPool& aStringPool );
+            CXnDomStringPool* aStringPool );
         /**
         * Destructor.
         */
@@ -103,6 +103,14 @@
         * @return String pool index.
         */
         IMPORT_C TInt16 ValueStringPoolIndex()const;
+        
+        /**
+         * Swap used string pool.
+         * 
+         * @param aStringPool   New string pool to be used.
+         *                      Ownership not transferred!
+         */
+        IMPORT_C void SwapStringPoolL( CXnDomStringPool* aStringPool );        
          
     public: //From CXnDomListItem
         
@@ -133,7 +141,7 @@
         /**
         * C++ default constructor.
         */
-        CXnDomAttribute( CXnDomStringPool& aStringPool );
+        CXnDomAttribute( CXnDomStringPool* aStringPool );
             
         /**
         * By default Symbian 2nd phase constructor is private.
@@ -143,7 +151,7 @@
      
     private:    // Data
         //String pool to get string for references, not owned
-        CXnDomStringPool& iStringPool;
+        CXnDomStringPool* iStringPool;
         
         //Attribute name reference
         TInt16         iNameRef;
--- a/idlehomescreen/inc/xndomdocument.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/inc/xndomdocument.h	Mon Jan 18 20:10:36 2010 +0200
@@ -136,10 +136,10 @@
         IMPORT_C HBufC8* MarshallL();
         
         /**
-        * Get reference to string pool
+        * Get pointer to string pool
         * @return Reference to string pool implementation
         */
-        IMPORT_C CXnDomStringPool& StringPool() const;
+        IMPORT_C CXnDomStringPool* StringPool() const;
 
         /**
         * Read contents from a stream.
--- a/idlehomescreen/inc/xndomlist.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/inc/xndomlist.h	Mon Jan 18 20:10:36 2010 +0200
@@ -54,7 +54,7 @@
         * Two-phased constructor.
         */
         static CXnDomList* NewL( TListType aListType, 
-                CXnDomStringPool& aStringPool,
+                CXnDomStringPool* aStringPool,
                 TInt aGranularity=4);
         
         /**
@@ -62,7 +62,7 @@
         */
         static CXnDomList* NewL( 
             RReadStream& aStream, 
-            CXnDomStringPool& aStringPool );
+            CXnDomStringPool* aStringPool );
         
         /**
         * Destructor.
@@ -168,11 +168,19 @@
         IMPORT_C TInt ItemIndex( const MXnDomListItem& aItem )const;
         
         /**
-        * Get reference to the dom's string pool.
+        * Get pointer to the dom's string pool.
         * @since Series 60 3.1
         * @return Reference to string pool
         */
-        IMPORT_C CXnDomStringPool& StringPool() const;
+        IMPORT_C CXnDomStringPool* StringPool() const;
+
+        /**
+         * Swap used string pool.
+         * 
+         * @param aStringPool   New string pool to be used.
+         *                      Ownership not transferred!
+         */
+        IMPORT_C void SwapStringPoolL( CXnDomStringPool* aStringPool );        
         
         /**
         * Count items in a list.
@@ -220,7 +228,7 @@
         * C++ default constructor.
         */
         CXnDomList( TListType aListType, 
-                    CXnDomStringPool& aStringPool, 
+                    CXnDomStringPool* aStringPool, 
                     TInt aGranularity=4 );
         
         /**
@@ -237,7 +245,7 @@
     
     private:    // Data
         // StringPool, not owned
-        CXnDomStringPool&   iStringPool;
+        CXnDomStringPool*   iStringPool;
         
         
     };
--- a/idlehomescreen/inc/xndomnode.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/inc/xndomnode.h	Mon Jan 18 20:10:36 2010 +0200
@@ -57,19 +57,19 @@
         static CXnDomNode* NewL( 
             const TDesC8& aName, 
             const TDesC8& aNS,
-            CXnDomStringPool& aStringPool );
+            CXnDomStringPool* aStringPool );
               
         /**
         * Two-phased stream constructor.
         */
-        static CXnDomNode* NewL( RReadStream& aStream, CXnDomStringPool& aStringPool );
+        static CXnDomNode* NewL( RReadStream& aStream, CXnDomStringPool* aStringPool );
         
         /**
         * Destructor.
         */
         virtual ~CXnDomNode();
       
-    public: // New functions
+    public: // New functions       
         /**
         * Makes a clone from this node and it's child nodes.
         * @since Series 60 3.1
@@ -79,21 +79,6 @@
         IMPORT_C CXnDomNode* CloneL( CXnDomStringPool& aStringPool );
         
         /**
-        * Makes a clone only from this node.
-        * @since Series 60 3.1
-        * @param aStringPool. A new string pool.
-        * @return Pointer to a clone node. Caller has the ownership.
-        */
-        IMPORT_C CXnDomNode* CloneWithoutKidsL( CXnDomStringPool& aStringPool );
-        
-        /**
-        * Contructs a ref node from this node and its child's.
-        * @since Series 60 3.1
-        * @return Pointer to a ref node. Caller has the ownership.
-        */
-        IMPORT_C CXnDomNode* CreateRefNodeL();
-         
-        /**
         * Get the namespace of this node. 
         * @since Series 60 3.1
         * @return Pointer to the namespace buffer
@@ -235,25 +220,11 @@
         IMPORT_C TInt DescendantCount() const;
         
         /**
-        * Get reference to the dom's string pool.
+        * Get pointer to the dom's string pool.
         * @since Series 60 3.1
         * @return Reference to string pool
         */
-        IMPORT_C CXnDomStringPool& StringPool() const;
-        
-        /**
-        * Mark this node as a reference node.
-        * @since Series 60 3.1
-        * @param aRefNode ETrue if node is a reference node
-        */
-        IMPORT_C void SetRefNode( TBool aRefNode=ETrue );
-        
-        /**
-        * Check if this node is referring to some global node.
-        * @since Series 60 3.1
-        * @return ETrue if this is a reference node.
-        */
-        IMPORT_C TBool IsRefNode() const;
+        IMPORT_C CXnDomStringPool* StringPool() const;
         
         /**
         * Deletes attributes when they are not needed anymore.
@@ -290,16 +261,9 @@
         void InternalizeL( RReadStream& aStream );
         
         /**
-        * Similar to InternalizeL, but does not expect dedicated odt document
-        */
-        void ReadL( RReadStream& aStream );
-        
-        
-        /**
         * Documented in CXnDomListItem::Name
         */
-        IMPORT_C const TDesC8& Name();       
-        
+        IMPORT_C const TDesC8& Name();        
     
     public:          
     
@@ -323,15 +287,6 @@
         * @param aNS New namespace
         */
         IMPORT_C void SetNamespaceL(const TDesC8& aNS);
-
-        /**
-        * Makes a clone from this node and it's child nodes. Sets new namespace.
-        * @since Series 60 3.1
-        * @param aStringPool. A new string pool.
-        * @param aNS. A new namespace.
-        * @return Pointer to a clone node. Caller has the ownership.
-        */
-        IMPORT_C CXnDomNode* CloneL( CXnDomStringPool& aStringPool, const TDesC8& aNS );
         
         /**
         * Set ownership of node and its children
@@ -339,13 +294,21 @@
         * @param aNS. A new namespace.
         * @return void
         */
-        IMPORT_C void SetOwnershipL( const TDesC8& aNS );
+        IMPORT_C void SetOwnershipL( const TDesC8& aNS );        
+
+        /**
+         * Swap used string pool.
+         * 
+         * @param aStringPool   New string pool to be used.
+         *                      Ownership not transferred!
+         */
+        IMPORT_C void SwapStringPoolL( CXnDomStringPool* aStringPool );
         
     private:
         /**
         * C++ default constructor.
         */
-        CXnDomNode( CXnDomStringPool& aStringPool );
+        CXnDomNode( CXnDomStringPool* aStringPool );
         
         /**
         * By default Symbian 2nd phase constructor is private.
@@ -361,7 +324,7 @@
         TInt                iNSRef;
         
         //iStringPool is used to resolve strings based on references
-        CXnDomStringPool&   iStringPool;
+        CXnDomStringPool*   iStringPool;
         
         //Type of the elements content
         TContentType        iContentType;
@@ -384,9 +347,6 @@
         //Node is the owner of the properties
         CXnDomList*         iPropertyList;
         
-        //Flag is set if this node is reference node
-        TBool               iRefNode;
-         
         // Not owned
         CXnNode*            iLayoutNode;
     };
--- a/idlehomescreen/inc/xndomproperty.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/inc/xndomproperty.h	Mon Jan 18 20:10:36 2010 +0200
@@ -67,20 +67,20 @@
         */
         IMPORT_C static CXnDomProperty* NewL( 
             const TDesC8& aName,
-            CXnDomStringPool& aStringPool );
+            CXnDomStringPool* aStringPool );
         
         /**
         * Two-phased stream constructor.
         */
         static CXnDomProperty* NewL( 
             RReadStream& aStream, 
-            CXnDomStringPool& aStringPool );
+            CXnDomStringPool* aStringPool );
         /**
         * Two-phased constructor.
         */
         IMPORT_C static CXnDomProperty* NewL( 
             TInt16 aStringPoolIndex,
-            CXnDomStringPool& aStringPool );
+            CXnDomStringPool* aStringPool );
         /**
         * Destructor.
         */
@@ -131,11 +131,11 @@
         IMPORT_C void SetInherited( TBool aInherited );
         
         /**
-        * Get reference to the dom's string pool.
+        * Get pointer to the dom's string pool.
         * @since Series 60 3.1
         * @return Reference to string pool
         */
-        IMPORT_C CXnDomStringPool& StringPool() const;
+        IMPORT_C CXnDomStringPool* StringPool() const;
         
         /**
         * Get the property's string pool index. 
@@ -144,6 +144,14 @@
         */
         IMPORT_C TInt16 StringPoolIndex()const; 
         
+        /**
+         * Swap used string pool.
+         * 
+         * @param aStringPool   New string pool to be used.
+         *                      Ownership not transferred!
+         */
+        IMPORT_C void SwapStringPoolL( CXnDomStringPool* aStringPool );        
+        
      public:  //Pseudo class utility   
         /**
         * Get value's pseudo class
@@ -186,12 +194,12 @@
         /**
         * C++ default constructor.
         */
-        CXnDomProperty( CXnDomStringPool& aStringPool);
+        CXnDomProperty( CXnDomStringPool* aStringPool);
         
         /**
         * C++ constructor with string pool index.
         */
-        CXnDomProperty( TInt16 aStringPoolIndex, CXnDomStringPool& aStringPool);
+        CXnDomProperty( TInt16 aStringPoolIndex, CXnDomStringPool* aStringPool);
         
         /**
         * By default Symbian 2nd phase constructor is private.
@@ -205,7 +213,7 @@
         
     private:    // Data
         //String pool to get string for references, not owned
-        CXnDomStringPool& iStringPool;
+        CXnDomStringPool* iStringPool;
         
         // Pseudo class type for value
         TPseudoClass    iPseudoClass;
--- a/idlehomescreen/inc/xndompropertyvalue.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/inc/xndompropertyvalue.h	Mon Jan 18 20:10:36 2010 +0200
@@ -94,14 +94,14 @@
         /**
         * Two-phased constructor.
         */
-        IMPORT_C static CXnDomPropertyValue* NewL( CXnDomStringPool& aStringPool );
+        IMPORT_C static CXnDomPropertyValue* NewL( CXnDomStringPool* aStringPool );
         
         /**
         * Two-phased stream constructor.
         */
         static CXnDomPropertyValue* NewL( 
             RReadStream& aStream, 
-            CXnDomStringPool& aStringPool );
+            CXnDomStringPool* aStringPool );
         
         /**
         * Destructor.
@@ -225,6 +225,7 @@
         IMPORT_C void SetStringPoolIndexL( 
             TPrimitiveValueType aValueType,
             TInt16 aStringPoolIndex );
+
         /**
         * Get the property's string pool index. If type is not string,
         * function will leave with KErrNotSupported. 
@@ -232,6 +233,14 @@
         * @return String pool index.
         */
         IMPORT_C TInt16 StringPoolIndexL()const; 
+        
+        /**
+         * Swap used string pool.
+         * 
+         * @param aStringPool   New string pool to be used.
+         *                      Ownership not transferred!
+         */
+        IMPORT_C void SwapStringPoolL( CXnDomStringPool* aStringPool );         
     
     public: //From MXnDomListItem    
         /**
@@ -260,7 +269,7 @@
         /**
         * C++ default constructor.
         */
-        CXnDomPropertyValue( CXnDomStringPool& aStringPool );
+        CXnDomPropertyValue( CXnDomStringPool* aStringPool );
 
         /**
         * By default Symbian 2nd phase constructor is private.
@@ -289,7 +298,7 @@
             } iData;    
        
        //String pool
-       CXnDomStringPool&    iStringPool;
+       CXnDomStringPool*    iStringPool;
        
        // primitive value type
        TPrimitiveValueType  iPrimitiveValueType;
--- a/idlehomescreen/inc/xndomstringpool.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/inc/xndomstringpool.h	Mon Jan 18 20:10:36 2010 +0200
@@ -15,14 +15,13 @@
 *
 */
 
-
-
 #ifndef XN_DOM_STRING_POOL_H
 #define XN_DOM_STRING_POOL_H
 
 //  INCLUDES
 #include <e32base.h>
 #include <s32strm.h>
+#include "xndomstringpooloptimizer.h"
 
 // CLASS DECLARATION
 
@@ -40,17 +39,27 @@
         
         /**
         * Two-phased constructor.
+        * 
+        * @param    aAllowDuplicates        ETrue if duplicates are to be allowed.
+        *                                   Supported for legacy reasons. 
         */
-        static CXnDomStringPool* NewL();
+        static CXnDomStringPool* NewL( const TBool aAllowDuplicates = EFalse );
+
         /**
         * Two-phased stream constructor.
+        * 
+        * @param    aStream                 Stream where string pool is internalized.
+        * @param    aAllowDuplicates        ETrue if duplicates are to be allowed.
+        *                                   Supported for legacy reasons. 
         */
-        static CXnDomStringPool* NewL( RReadStream& aStream );
+        static CXnDomStringPool* NewL( RReadStream& aStream,
+                const TBool aAllowDuplicates = EFalse );
+        
         /**
         * Destructor.
         */
         virtual ~CXnDomStringPool();
-
+        
    public: 
         /**
         * Make a copy from original StringPool.
@@ -58,18 +67,36 @@
         * @return Pointer to a string pool. Ownership is transferred to a caller.
         */
         CXnDomStringPool* CloneL(); 
+        
    public: //Adding
         
         /**
         * Set dom string into string pool.
+        * 
         * @param aString String to add to string pool
         * @return Index (reference) to string pool
         */
-        IMPORT_C TInt AddStringL( const TDesC8& aString ); 
-   
+        TInt AddStringL( const TDesC8& aString ); 
+
+        /**
+        * Set dom string into string pool.
+        * 
+        * @param aString String to add to string pool. OWNERSHIP TRANSFERRED!
+        * @return Index (reference) to string pool
+        */
+        TInt AddStringL( HBufC8* aString );         
+
+        /**
+        * Add all string from another string pool.
+        * 
+        * @param aStringPool    Source string pool.
+        */
+        void AddAllL( CXnDomStringPool& aStringPool );        
+        
    public: //Accessing     
         /**
-        * Get pointer to the node element name.
+        * Get reference to string.
+        * 
         * @param aMap Map object which has index to name string
         * @return Pointer to the name
         */
@@ -77,46 +104,67 @@
         
         /**
         * Get object's data size in bytes.
+        * 
         * @return Data size in bytes
         */
         TInt Size() const;
+
+        /**
+        * Get amount of strings.
+        */
+        TInt Count() const;        
         
         /**
-        * Externalize object
+        * Externalize object.
+        * 
         * @param aStream Output stream
         */
         void ExternalizeL( RWriteStream& aStream ) const;
        
         /**
-        * Internalize object
+        * Internalize object.
+        * 
         * @param aStream Input stream
         */
         void InternalizeL( RReadStream& aStream );          
         
-        /**
-        * Get index offset to string array for shared resources
-        * @return An offset that caller must add to its indexes
-        */
-        TUint Offset() const;
-
    private:
 
         /**
         * C++ default constructor.
+        * 
+        * @param    aAllowDuplicates        ETrue if duplicates are to be allowed.
+        *                                   Supported for legacy reasons.
         */
-        CXnDomStringPool();
+        CXnDomStringPool( const TBool aAllowDuplicates );
 
         /**
-        * By default Symbian 2nd phase constructor is private.
+        * By default Symbian 2nd phase constructor is private. 
         */
-        void ConstructL();
-     
-    private:    
+        void ConstructL();    
+        
+        /**
+        * Add string to string pool and to optimizer also.
+        * 
+        * @param aNewString     String to be added. OWNERSHIP TRANSFERRED.
+        * @param TInt           Index to added string.
+        */
+        TInt DoAddStringL( HBufC8* aNewString ) ;
+        
+    private:            
         //String pool
         RPointerArray<HBufC8>       iStringPool;
-       
-        TUint iStringPoolOffsetCurrent; // Internalize uses 
-        TUint iStringPoolOffsetNext;
+        
+        /**
+         * String pool optimizer.
+         */
+        TXnDomStringPoolOptimizer iStringPoolOptimizer;
+        
+        /**
+         * ETrue if string pool can contain duplicate entries. Must
+         * be supported for legacy reasons while loading xuikon odts.
+         */
+        TBool iAllowDuplicates;
     };
 
 #endif      // XN_DOM_STRING_POOL_H  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/inc/xndomstringpooloptimizer.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2005,2006 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:  Optimizer module for CXnDomStringPool.
+*
+*/
+
+#ifndef XN_DOM_STRING_POOL_OPTIMIZER_H
+#define XN_DOM_STRING_POOL_OPTIMIZER_H
+
+//  INCLUDES
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+*  @ingroup group_domdocument
+*  Optimizer module entry for CXnDomStringPool.
+*
+*  @lib xndomdocument.lib
+*  @since Series 60 5.2
+*/
+class TXnDomStringPoolOptimizerEntry
+    {
+    public: // Construction.
+        /**
+         * Constructor.
+         * 
+         * @param aIndex    Index.
+         * @param aString   String.
+         */
+        TXnDomStringPoolOptimizerEntry( TInt aIndex, const TDesC8& aString ); 
+
+    public: // Data.
+        /**
+         * Index of string in actual string pool.
+         */
+        TInt iIndex;
+        
+        /**
+         * Reference to string in string pool.
+         */
+        const TDesC8& iString;                    
+    };        
+
+/**
+*  @ingroup group_domdocument
+*  Optimizer module for CXnDomStringPool.
+*
+*  @lib xndomdocument.lib
+*  @since Series 60 5.2
+*/
+class TXnDomStringPoolOptimizer
+    {
+    public:
+        /**
+         * Add entry to optimizer list.
+         * 
+         * @param aEntry    Entry to be added.
+         */
+        void AddEntryL( TXnDomStringPoolOptimizerEntry& aEntry );
+        
+        /**
+         * Get index for string.
+         * 
+         * @param   aString     Reference to given string.
+         * @return  TInt        Index to actual string pool for string if found.
+         *                      If string is not found will return KErrNotFound. 
+         */
+        TInt GetIndex( const TDesC8& aString );
+
+        /**
+         * Reset.
+         */
+        void Reset();        
+        
+        /**
+         * Close allocated resources.
+         */
+        void Close();
+
+        /**
+         * Get item count.
+         */
+        TInt Count();        
+
+        /**
+         * Get entry.
+         * 
+         * @param aIndex    Index to Entry.
+         */
+        TXnDomStringPoolOptimizerEntry& Entry( const TInt aIndex );        
+        
+    private:
+        /**
+         * Find entry from alphabetic list.
+         * Uses binary search.
+         * 
+         * @param       aString Reference to string to be searched for.
+         * @param       aLeft   Left limit for binary search
+         * @param       aRight  Right limit for binary search.
+         * 
+         * @return      Index to OPTIMIZER ARRAY. KErrNotFound if
+         *              given string is not found.
+         */
+        TInt FindEntry( const TDesC8& aString,
+                        const TInt aLeft,
+                        const TInt aRight );
+
+        /**
+         * Find a position clue for given string.
+         * 
+         * Will return index that can be used to initiate linear
+         * search. Uses binary search to limit required comparisons
+         * when string pools starts to fill.
+         * 
+         * Note: Returned index is not absolute! it must be
+         * only used as a start index for linear searching.
+         * 
+         * Returned index will be quite close to actual insertion position.
+         * it will be 0 - 2 steps backward from actual position.
+         * 
+         * @param       aString Reference to string.
+         * @param       aLeft   Left limit for binary search
+         * @param       aRight  Right limit for binary search.
+         * 
+         * @return      Index to start searching for position
+         *              for given string.
+         */
+        TInt FindInsertionIndexEstimate( const TDesC8& aString,
+                                         const TInt aLeft,
+                                         const TInt aRight );
+        
+    private: // Data.
+        /**
+         * Array of optimizer entries.
+         */
+        RArray<TXnDomStringPoolOptimizerEntry> iEntries;
+    }; 
+
+#endif      // XN_DOM_STRING_POOL_OPTIMIZER_H  
+            
+// End of File
--- a/idlehomescreen/inc/xnnewsticker.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/inc/xnnewsticker.h	Mon Jan 18 20:10:36 2010 +0200
@@ -96,31 +96,12 @@
     	 */
         virtual const TDesC& Title(TInt aIndex) = 0;
 
-    	/**
-    	 * Set the separator image for all titles.
-    	 * @param aIcon The separator image. This must be mif icon.
-    	 * @return KErrNone if successful, KErrArgument if the icon is not mif.
-    	 */
-        virtual TInt SetSeparatorImageL(CGulIcon* aIcon) = 0;
-
         /**
          * Delete all titles.
          */
         virtual void ClearTitles() = 0;
 
         /**
-         * Append the SVG title to be shown.
-         * @param aByteData The SVG data.
-         */
-        virtual void AppendSvgTitleL(const TDesC8& aByteData) = 0;
-
-        /**
-         * Insert the SVG title to be shown.
-         * @param aByteData The SVG data.
-         */
-        virtual void InsertSvgTitleL(const TDesC8& aByteData, TInt aIndex) = 0;
-
-        /**
          * Set callback interface.
          * @param aCallback The callback interface pointer.
          */
@@ -191,13 +172,6 @@
     	 */
         const TDesC& Title(TInt aIndex);
 
-    	/**
-    	 * Set the separator image for all titles.
-    	 * @param aIcon The separator image. This must be mif icon.
-    	 * @return KErrNone if successful, KErrArgument if the icon is not mif.
-    	 */
-        TInt SetSeparatorImageL(CGulIcon* aIcon);
-
         /**
          * Delete all titles.
          */
--- a/idlehomescreen/inc/xnproperty.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/inc/xnproperty.h	Mon Jan 18 20:10:36 2010 +0200
@@ -46,28 +46,29 @@
         _LIT8(KPCData, "pcdata");
         _LIT8(KFocusable, "focusable");
         _LIT8(KInitialFocus, "_s60-initial-focus");
+        _LIT8(KFocusAppearance, "_s60-focus-appearance");                
         _LIT8(KDisabled, "disabled");
 //        _LIT8(KLocked, "locked");
 //        _LIT8(KStyleLocked, "stylelocked");
         _LIT8(KLongTap, "_s60-longtap");
         _LIT8(KSwipe, "swipe");
-        _LIT8(KSwipeDestination, "swipe_destination");
+        _LIT8(KSwipeDestination, "_s60-swipe-destination");
         _LIT8(KBackgroundMask, "backgroundmask" );
         _LIT8(KStylusStates, "stylusstates");
-        _LIT8(KTouchFeedbackDown, "touchfeedbackdown");
+        /*_LIT8(KTouchFeedbackDown, "touchfeedbackdown");
         _LIT8(KTouchFeedbackUp, "touchfeedbackup");
         _LIT8(KTouchFeedbackDrag, "touchfeedbackdrag");
-        _LIT8(KTouchFeedbackLongTap, "touchfeedbacklongtap");
-        _LIT8(KEventFilter, "eventfilter");        
+        _LIT8(KTouchFeedbackLongTap, "touchfeedbacklongtap");*/
+        _LIT8(KEventFilter, "eventfilter");
         _LIT8(KEffectId, "effectid");
         _LIT8(KKeyMoveMode, "keymovemode");
         _LIT8(KSizeAware, "sizeaware");
         _LIT8(KVisualisationAware, "visualisationaware");
-        namespace touchfeedback
+        /*namespace touchfeedback
             {
             _LIT8(KFeedbackBasic, "basic");
             _LIT8(KFeedbackSensitive, "sensitive");
-            }
+            }*/            
         }
     namespace tooltip
         {
--- a/idlehomescreen/inc/xnviewmanager.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/inc/xnviewmanager.h	Mon Jan 18 20:10:36 2010 +0200
@@ -237,7 +237,9 @@
 
 private:
     TInt ResolveIconIndex( TInt aPageCount, TInt aPageNum ) const;
-        
+
+    void UpdateWallpaperL( CXnViewData& aCurrent, CXnViewData& aNew );
+
 private:
     // data
 
--- a/idlehomescreen/widgetmanager/data/20026F53.rss	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/data/20026F53.rss	Mon Jan 18 20:10:36 2010 +0200
@@ -31,7 +31,10 @@
             implementations = 
                 {
                 IMPLEMENTATION_INFO
-                    {
+                    {                    
+                    // implementation_uid MUST match sis pkg UID, hscontentcontrol uses to monitor 
+                    // uninstallation and releasing dll
+                    
                     implementation_uid = 0x20026F53;
                     version_no = 1;
                     display_name = "Widget Manager";
--- a/idlehomescreen/widgetmanager/data/widgetmanagerview.loc	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/data/widgetmanagerview.loc	Mon Jan 18 20:10:36 2010 +0200
@@ -159,5 +159,5 @@
 // w:
 // r: TB9.2
 //
-#define qtn_wm_widget_details_wrt "This widget uses web content. Only one instance of this widget can be in the Home screen at a time."
+#define qtn_wm_widget_details_wrt "HomeScreen application that uses internet connection to show dynamic updates from web"
 
--- a/idlehomescreen/widgetmanager/group/widgetmanager.mmp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/group/widgetmanager.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -48,6 +48,7 @@
 SOURCE  wmdetailsdlg.cpp
 SOURCE	wmportalbutton.cpp
 SOURCE  wmwidgetloaderao.cpp
+SOURCE  wmconfiguration.cpp
 
 SOURCEPATH		../data
 START RESOURCE  20026F53.rss
@@ -111,5 +112,5 @@
 LIBRARY     featmgr.lib // FeatureManager
 LIBRARY     etext.lib 
 LIBRARY     centralrepository.lib
-
+LIBRARY     bmpanim.lib // AknBitmap animation
 // End of file
--- a/idlehomescreen/widgetmanager/inc/wmcommon.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmcommon.h	Mon Jan 18 20:10:36 2010 +0200
@@ -35,7 +35,8 @@
 // UI component ID's
 enum TWmUiControlIds
     {
-    EOviPortal = 0x1,
+    EPortalOne = 0x1,
+    EPortalTwo,
     ELastPortal,
     EWidgetsList,
     EFindBox,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/widgetmanager/inc/wmconfiguration.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,175 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies)..
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* WidgetManager configuration class
+*
+*/
+
+#ifndef WMCONFIGURATION_H
+#define WMCONFIGURATION_H
+
+// INCLUDE FILES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CRepository;
+class CWmResourceLoader;
+
+/**
+ * Configuration class for Widget Manager
+ * 
+ * @class CWmConfiguration
+ */
+NONSHARABLE_CLASS( CWmConfiguration ) : public CBase
+	{
+	
+public: // constructors and destructor
+	
+    /** Two-phased constructor. */
+	static CWmConfiguration* NewL(
+	        CWmResourceLoader& aResourceLoader );
+
+	/** Destructor */
+	virtual ~CWmConfiguration();
+	
+private:
+    /** constructor */
+    CWmConfiguration(
+            CWmResourceLoader& aResourceLoader );
+    
+    /** 2nd phase constructor */
+    void ConstructL();
+
+public: // API
+
+    /**
+     * portal button methods
+     */
+    enum TMethod
+        {
+        ENone = 0, // no method
+        EHttp, // open browser to a certain page
+        EWidget // open given widget with params
+        };
+
+    /**
+     * Number of portal buttons (1 or more)
+     */
+    TInt PortalButtonCount();
+
+    /**
+     * Label text to be displayed on a portal button
+     * @param aIndex index of the button, starting at 0
+     */
+    const TDesC& PortalButtonText( TInt aIndex );
+    
+    /**
+     * Icon to be displayed on a portal button
+     * Logo syntax follows the widget icon syntax in MHsContentInfo
+     * @param aIndex index of the button, starting at 0
+     */
+    const TDesC& PortalButtonIcon( TInt aIndex );
+    
+    /**
+     * Bundle ID related to this button
+     * parameter is valid if this button launches an application
+     * @param aIndex index of the button, starting at 0
+     */
+    const TDesC& PortalButtonBundleId( TInt aIndex );
+    
+    /**
+     * Portal button action method.
+     * Defines what happens when the portal button is pressed.
+     * @param aIndex index of the button, starting at 0
+     */
+    TMethod PortalButtonPrimaryMethod( TInt aIndex );
+    
+    /**
+     * parameters related to the method.
+     * For EHttp this is the HTTP address
+     * for EWidget the parameters passed to the widget
+     * @param aIndex index of the button, starting at 0
+     */
+    const TDesC& PortalButtonPrimaryParams( TInt aIndex );
+    
+    /**
+     * Secondary method, which is excuted if
+     * primary method fails.
+     * Works like Primary method.
+     * @param aIndex index of the button, starting at 0
+     */
+    TMethod PortalButtonSecondaryMethod( TInt aIndex );
+    
+    /**
+     * Parameters for Secondary method. Like Primary method
+     * Works like Primary params.
+     * @param aIndex index of the button, starting at 0
+     */
+    const TDesC& PortalButtonSecondaryParams( TInt aIndex );
+    
+    
+private: // New functions
+    
+    TInt FindCorrectLanguageId();
+    HBufC* ReadParameterL( TInt aKey );
+    HBufC* ReadLocalisedParameterL( TInt aOffset );
+
+private:
+
+    /**
+     * the central repository
+     */
+    CRepository*            iRepository;
+
+    /**
+     * the resource loader
+     */
+    CWmResourceLoader&      iResourceLoader;
+
+    /**
+     * The index in cenrep that matches current
+     * system language
+     */
+    TInt                    iLanguageIndex;
+
+    /**
+     * OviStore widget bundle ID
+     */
+    HBufC*                  iOviStoreBundleId;
+    
+    /**
+     * OviStore widget client param
+     */
+    HBufC*                  iOviStoreClientParam;
+    
+    /**
+     * Localized Url to start browser
+     */
+    HBufC*                  iOviStoreUrl;
+    
+    /**
+     * Localised OVI store text
+     */
+    HBufC*                  iOviStoreText;
+    
+    /**
+     * OVI store icon
+     */
+    HBufC*                  iOviStoreIcon;
+    
+    };
+
+#endif // WMCONFIGURATION_H
+
+// End of File
--- a/idlehomescreen/widgetmanager/inc/wmcrkeys.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmcrkeys.h	Mon Jan 18 20:10:36 2010 +0200
@@ -35,6 +35,7 @@
  * OperatorButtonText_9     0x28 
  */
 
+const TUint32 KLangGroupSize = 4;
 const TUint32 KOviStoreBrowserUrlOffset = 1;
 const TUint32 OperatorUrlOffset = 2;
 const TUint32 KperatorButtonTextOffset = 3;
--- a/idlehomescreen/widgetmanager/inc/wmdetailsdlg.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmdetailsdlg.h	Mon Jan 18 20:10:36 2010 +0200
@@ -139,7 +139,6 @@
      * ETrue if widget can be added to HS 
      */
     TBool               iCanBeAdded;
-    
 	};
 
 #endif ___WMDETAILSDLG_H__
--- a/idlehomescreen/widgetmanager/inc/wmimageconverter.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmimageconverter.h	Mon Jan 18 20:10:36 2010 +0200
@@ -58,7 +58,8 @@
         EIdle = 0,
         EDecoding,
         EScalingBitmap,
-        EScalingMask
+        EScalingMask,
+        EFailed
         };
 
 public: //contructors/destructors
@@ -84,8 +85,10 @@
      * - mif(<path> <bitmapid> <maskid>)
      * - uid(<application uid>)
      * - <file name>.<png/svg>
+     * 
+     * @return Error code 
      */
-    void HandleIconStringL( TInt aWidth, TInt aHeight, const TDesC& aIconStr );
+    TInt HandleIconString( TInt aWidth, TInt aHeight, const TDesC& aIconStr );
 
     /**
      * Returns converted bitmap. Caller takes ownership
@@ -126,6 +129,13 @@
      */
     TConversionMethod ConversionMethod();
 
+    /**
+     * Image convertion status
+     * 
+     * @return ETrue if processing image, false otherwise.
+     */
+    TBool IsProcessing();
+
 protected: // implementation of CActive
     /**
      * Implements cancellation of an outstanding request.
@@ -152,9 +162,10 @@
     CWmImageConverter(); 
     void ConstructL( MConverterObserver* aObserver );
     void CheckSvgErrorL( MSvgError* aError );
-    
+    void HandleIconStringL( TInt aWidth, TInt aHeight, 
+            const TDesC& aIconStr );
+
 private:
-
     void ScaleBitmap( TInt aWidth, TInt aHeight );
     void ScaleMask( TInt aWidth, TInt aHeight );
     void CreateIconFromUidL( const TUid& aUid );
@@ -172,6 +183,9 @@
                         TInt& aBitmapId, TInt& aMaskId, TDes& aFileName );
     TBool EndsWith( const TDesC& aString, const TDesC& aPattern );
 
+    // helpers
+    TInt ParseNextUint( TLex& aLex, TUint& aValue );
+    
 private: // from MAknIconFileProvider
 
     /** Returns an open file handle to the icon file. */
--- a/idlehomescreen/widgetmanager/inc/wmlistbox.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmlistbox.h	Mon Jan 18 20:10:36 2010 +0200
@@ -244,8 +244,9 @@
      * adding all widget datas to update the listbox correctly!
      * 
      * @param aWidget Data data to add
+     * @param aRedraw listbox update flag 
      */
-    void AddWidgetDataL( CWmWidgetData* aWidgetData );
+    void AddWidgetDataL( CWmWidgetData* aWidgetData, TBool aRedraw = ETrue );
     
     /** 
      * removes widget data from given index in the model
@@ -378,6 +379,11 @@
     RWidgetDataValues   iWidgetDatas;
 
     /** 
+     * array of trashed widget data objects, not visible in list. 
+     */
+    RPointerArray<CWmWidgetData> iTrashedData;
+
+    /** 
      * the currently active item ADD button's rectangle, for push recognition 
      */
     TRect               iButtonRect;
@@ -392,6 +398,8 @@
      */
     TBool               iPressedDown;
 	
+    /** size of logo rect in list item */
+    TSize               iLogoSize;    
 	};
 #include "wmlistbox.inl"
 
--- a/idlehomescreen/widgetmanager/inc/wmmaincontainer.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmmaincontainer.h	Mon Jan 18 20:10:36 2010 +0200
@@ -39,6 +39,7 @@
 class CWmPortalButton;
 class CWmWidgetLoaderAo;
 class CWmMainContainerView;
+class CWmConfiguration;
 
 /**
  * Container class for WmMainContainer
@@ -170,9 +171,9 @@
 	void UninstallWidgetL();
 
     /**
-     * opens OVI portal
+     * opens currently selected portal
      */
-    void OpenOviPortalL();
+    void OpenPortalL();
 
     /**
      * Selection key (middle soft key)
@@ -218,8 +219,9 @@
 	
 	/**
 	 * Moves focus to the OVI button
+	 * @param aIndex 0=first button, 1=second (if it exists)
 	 */
-    void SetFocusToOviButton();
+    void SetFocusToPortalButton( TInt aIndex );
 
     /**
      * Moves focus to the widgets list, alternatively also setting the currently
@@ -240,6 +242,11 @@
      * To set iClosingDown. See above.
      */
     void SetClosingDown( TBool aClosingDown );
+
+    /**
+     * access to WM configuration
+     */
+    CWmConfiguration& Configuration();
     
 protected: // from base class CCoeControl
     
@@ -283,14 +290,21 @@
     void LayoutControls();
     void StartLoadingWidgetsL();
     void RemoveCtrlsFromStack();
+    void UpdateFocusMode();
+    CCoeControl* FindChildControlByPoint( const TPoint& aPoint );
+    void HandleFindSizeChanged();
     TKeyResponse MoveFocusByKeys(
             const TKeyEvent& aKeyEvent, 
             TEventCode aType );
-    void UpdateFocusMode();
-    CCoeControl* FindChildControlByPoint( const TPoint& aPoint );
-    void HandleFindSizeChanged();
-    void FetchRepositoryDataL();
-
+    TKeyResponse HandleButtonKeyEventL( 
+            const TKeyEvent& aKeyEvent, 
+            TEventCode aType );
+    TKeyResponse HandleListKeyEventL( 
+            const TKeyEvent& aKeyEvent, 
+            TEventCode aType );
+    TKeyResponse HandleSearchKeyEventL( 
+            const TKeyEvent& aKeyEvent, 
+            TEventCode aType );
 private:
 
     /**
@@ -319,9 +333,16 @@
     CAknsBasicBackgroundControlContext* iBgContext;
     
     /**
-     * Ovi portal
+     * portal button
+     * (if there is only one button, this is it)
      */
-    CWmPortalButton*             iOviPortal;
+    CWmPortalButton*             iPortalButtonOne;
+
+    /**
+     * portal button
+     * (if there is only one button, this is NULL)
+     */
+    CWmPortalButton*             iPortalButtonTwo;
 
     /** GUI layout modes */
     enum TWmLayout
@@ -340,7 +361,7 @@
     enum TWmFocusMode
         {
         ENowhere,
-        EOvi,
+        EPortal,
         EList,
         EFind
         };
@@ -362,19 +383,9 @@
     TBool                   iClosingDown;
     
     /**
-     * Localized Url to start browser
-     */
-    HBufC*                  iOviStoreUrl;
-    
-    /**
-     * OviStore bundleId
+     * The configuration
      */
-    HBufC*                  iOviStoreClientBundleId;
-    
-    /**
-     * OviStore client param
-     */
-    HBufC*                  iOviStoreClientParam;
+    CWmConfiguration*       iConfiguration;
     
     };
 
--- a/idlehomescreen/widgetmanager/inc/wmplugin.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmplugin.h	Mon Jan 18 20:10:36 2010 +0200
@@ -137,14 +137,22 @@
      * the shared file server reference
      */
     RFs& FileServer();
+    
+    /** prestored action to be executed. */
+    void ExecuteCommandL();
 
 private:
     /** constructor */
     CWmPlugin();
     /** 2nd phase constructor */
     void ConstructL();
-    /** actions that are done when widget manager is closed */
-    void ExecutePostponedCommandL();
+    
+    /**
+     * Sets forwarding numeric keys to phone.
+     * 
+     * @param aEnabled ETrue if numeric keys are forwarded to phone
+     */
+    void ForwardNumericKeysToPhone( TBool aEnabled );
 
 private: // data members
 
@@ -157,7 +165,12 @@
      * main container (not owned)
      */
     CWmMainContainer*  iWmMainContainer;
-    
+
+    /**
+     * main view (not owned)
+     */
+    CWmMainContainerView* iWmMainView;
+
     /**
      * resource loader
      */
@@ -189,6 +202,11 @@
      */
     CHsContentInfo* iPostponedContent;
     
+    /**
+     * ActiveSchedulerWait used to wait while previous view is
+	 * being activated upon deletion.
+     */
+    CActiveSchedulerWait* iWait;
     };
 
 #endif // __WMPLUGIN_
--- a/idlehomescreen/widgetmanager/inc/wmportalbutton.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmportalbutton.h	Mon Jan 18 20:10:36 2010 +0200
@@ -25,6 +25,7 @@
 
 // FORWARD DECLARATIONS
 class CWmMainContainer;
+class CFbsBitmap;
 
 /**
  * Portal button ( ovi, operator ) class for Wm
@@ -32,43 +33,25 @@
  * @class   CWmPortalButton wmportalbutton.h
  */
 NONSHARABLE_CLASS( CWmPortalButton ) : public CAknButton,
-                                       public MConverterObserver 
+                                       public MConverterObserver,
+                                       public MCoeControlObserver
     {
 public:
     /*
      * Two-phased constructor.
      * 
      * @param aParent button title text
-     * @param aText button title text
-     * @param aUrl Url to open in browser when clicked.  
-     * @param aButtonCtrlId type of button 
+     * @param aPortalButtonIndex index of this button (0 or 1)
      */
     static CWmPortalButton* NewL(
             const CCoeControl* aParent,
-            const TDesC& aText = KNullDesC,
-            const TDesC& aUrl = KNullDesC, 
-            TWmUiControlIds aButtonCtrlId = EOviPortal );
+            TInt aPortalButtonIndex = 0 );
     
     /** Destructor */
     virtual ~CWmPortalButton();
                                       
 public: // Functions from base class
-    
-    /**
-     * Handles key events.
-     * 
-     * @see CCoeControl::OfferKeyEventL
-     */
-	TKeyResponse OfferKeyEventL( 
-	        const TKeyEvent& aKeyEvent, TEventCode aType );
-            
-    /**
-	 * Handles pointer events.
-	 * 
-	 * @see CCoeControl::HandlePointerEventL
-	 */
-    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
-    
+
     /*
      * Draws the control.
      * 
@@ -83,43 +66,45 @@
      */
     void SizeChanged();
     
+    /**
+     * Executes action for button pressed
+     */
+    void ExecuteL();
+    
 protected: // from MConverterObserver
 
     /** image conversin completed */
     void NotifyCompletion( TInt aError );
-   
+
+protected: // from MCoeControlObserver
+
+    /** Observes the button's own activity  */
+    void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+    
 protected: // Constructors
     
     /** Constructor for performing 1st stage construction */
     CWmPortalButton( const TInt aFlags,
-            TWmUiControlIds aButtonCtrlId = EOviPortal );
+            TInt aPortalButtonIndex );
     
     /** 2nd phase constructor */
     void ConstructL( 
-            const CCoeControl* aParent,
+            CWmMainContainer* aParent,
             const TDesC& aText = KNullDesC,
-            const TDesC& aUrl = KNullDesC );
+            const TDesC& aIcon = KNullDesC );
     
 private:
 
-    /** 
-	 * Draws text over button
-	 */
+    /** size of button icon, defined in the layout */
+    TSize LayoutIconSize() const;
+    
+    /** Draws text over button */
     void DrawText( CWindowGc& aGc,
                    const TDesC& aText, 
                    TAknTextComponentLayout& aLayout,
                    TInt aMargin ) const;
 
 private: //data members
-    /**
-     * Button text
-     */ 
-    HBufC* iText;
-
-    /**
-     * Url assigned to button
-     */ 
-    HBufC* iUrl;
 
     /**
      * the image converter utility
@@ -132,9 +117,15 @@
     CWmMainContainer* iWmMainContainer;
 
     /** 
-     * Button ctrl id
+     * Button index
      */ 
-    TWmUiControlIds iButtonCtrlId;
+    TInt iPortalButtonIndex;
+
+    /** icon */
+    CFbsBitmap* iButtonIcon;
+    
+    /** icon mask */
+    CFbsBitmap* iButtonIconMask;
  	};
 
 #endif //___WMPORTALBUTTON_H__
--- a/idlehomescreen/widgetmanager/inc/wmresourceloader.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmresourceloader.h	Mon Jan 18 20:10:36 2010 +0200
@@ -77,7 +77,10 @@
     const TDesC& IconFilePath();
 
     /** default no description text */
-    const TDesC& NoDescriptionText();
+    const TDesC& NoDescription();
+
+    /** wrt specific description text */
+    const TDesC& WrtDescription();
     
 private: // internal methods
 
@@ -125,9 +128,15 @@
     CAknInformationNote *iNote;
 
     /**
-     * Default description text
+     * Default no description text
      */    
-    HBufC*      iDescription;
+    HBufC*      iNoDescription;
+
+    /**
+     * Wrt specific description text
+     */    
+    HBufC*      iWrtDescription;
+    
     };
 
 #endif // WMRESOURCELOADER_H_
--- a/idlehomescreen/widgetmanager/inc/wmwidgetdata.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmwidgetdata.h	Mon Jan 18 20:10:36 2010 +0200
@@ -26,6 +26,7 @@
 #include <f32file.h>
 #include <bamdesca.h>
 #include <hscontentinfo.h>
+#include <SWInstApi.h> //installer
 
 #include "wmimageconverter.h"
 
@@ -36,6 +37,7 @@
 class CHsContentInfo;
 class CWmPersistentWidgetOrder;
 class RWidgetRegistryClientSession;
+class CWmResourceLoader;
 
 // CLASS DECLARATION
 /**
@@ -44,7 +46,7 @@
  * handling the list item.
  */
 NONSHARABLE_CLASS( CWmWidgetData )
-    : public CBase
+    : public CActive
     , public MConverterObserver
     {
 
@@ -61,28 +63,57 @@
 public: // construction
     /**
      * static constructor
+     * @param aLogoSize size of logo image.
      * @param aHsContentInfo (takes ownership)
      * @param aRegistryClientSession (does not take ownership)
      */
-    static CWmWidgetData* NewL( 
+    static CWmWidgetData* NewL(
+            const TSize& aLogoSize,
+            CWmResourceLoader& aWmResourceLoader,
             CHsContentInfo* aHsContentInfo,
             RWidgetRegistryClientSession* aRegistryClientSession );
 
     /**
      * static constructor, leaves object in cleanup stack
+     * @param aLogoSize size of logo image.
      * @param aHsContentInfo (takes ownership)
      * @param aRegistryClientSession (does not take ownership)
      */
-    static CWmWidgetData* NewLC( 
+    static CWmWidgetData* NewLC(
+            const TSize& aLogoSize,
+            CWmResourceLoader& aWmResourceLoader,
             CHsContentInfo* aHsContentInfo,
             RWidgetRegistryClientSession* aRegistryClientSession );
         
     /** Destructor. */
     ~CWmWidgetData();
 
+protected: // implementation of CActive
+    /**
+     * Implements cancellation of an outstanding request.
+     * 
+     * @see CActive::DoCancel
+     */
+    void DoCancel();
+    
+    /**
+     * Handles an active object's request completion event.
+     * 
+     * @see CActive::RunL
+     */
+    void RunL();
+    
+    /**
+     * RunError
+     * 
+     * @see CActive::RunError
+     */
+    TInt RunError(TInt aError);
+
 private: // private construction
     /** Constructor for performing 1st stage construction */
-    CWmWidgetData();
+    CWmWidgetData( const TSize& aLogoSize, 
+            CWmResourceLoader& aWmResourceLoader );
 
     /** 2nd phase constructor */
     void ConstructL(
@@ -99,6 +130,27 @@
 
 public: // external handles
 
+    /**
+     * Init uninstallation of widget.
+     */
+    void UnInstallL();
+
+    /** current uninstall animation bitmap */
+    const CFbsBitmap* AnimationBitmap( const TSize& aSize );
+
+    /** current uninstall animation mask */
+    const CFbsBitmap* AnimationMask( const TSize& aSize );
+    
+    /**
+     * @return ETrue if widget is being uninstalled.
+     */
+    TBool IsUninstalling();
+    
+    /**
+     * @return ETrue if logo is being created,false otherwise.
+     */
+    TBool IsPrepairingLogo();
+    
     /** 
      * sets an observer for callbacks 
      *
@@ -113,16 +165,16 @@
             const CWmPersistentWidgetOrder* aPersistentWidgetOrder );
     
     /**
-     * set logo rect size
-     */
-    void SetLogoSize( const TSize& aSize );
-
-    /**
      * Init logo re-creation
      */
     void ReCreateLogo( const TSize& aSize );
     
     /**
+     * returns widget description
+     */
+    const TDesC& Description() const;
+    
+    /**
      * Replaces the content of this widget data. The method is called
      * during widget update. If widget values change, a change event is
      * fired for the observer.
@@ -160,9 +212,6 @@
     /** widget name */
     inline const TDesC& Name() const;
 
-    /** widget description */
-    inline const TDesC& Description() const;
-
     /** widget uid */
     inline TUid Uid() const;
     
@@ -196,7 +245,14 @@
     void NotifyCompletion( TInt aError );
 
 private: // new functions
-
+    
+    /** uninstall animation related*/
+    void VisualizeUninstall();
+    void PrepairAnimL();
+    void DestroyAnimData();
+    static TInt Tick( TAny* aPtr );
+    static TInt CloseSwiSession( TAny* aPtr );
+    
     /** fetches publisher uid from widget registry*/
     void FetchPublisherUidL( 
             RWidgetRegistryClientSession* aRegistryClientSession );
@@ -205,12 +261,14 @@
     TUid UidFromString( const TDesC8& aUidString ) const;
     
     /** Logo icon string handling */
-    static TInt HandleAsyncIconString( TAny* aPtr );
-    void HandleIconStringL( const TDesC& aIconStr );
+    void HandleIconString( const TDesC& aIconStr );
     void FireDataChanged();
 
 private: // data members
     
+    /* reference to resource loader */
+    CWmResourceLoader& iWmResourceLoader;
+    
     /* instance of the CIdle class for async iconStr handling*/
     CIdle*              iIdle;
 
@@ -220,15 +278,12 @@
     /* observes this widget representation (NOT OWNED) */
     MWmWidgetDataObserver* iObserver;
 
-    /* rotating animation index */
-    TInt                iInstallAnimationIndex;
-
     /** the widget logo bitmap */
     CFbsBitmap*         iLogoImage;
 
     /** the widget logo mask */
     CFbsBitmap*         iLogoImageMask;
-    
+
     /** The CHsContentInfo that corresponds to this list row */
     CHsContentInfo*     iHsContentInfo;
 
@@ -246,7 +301,32 @@
     
     /** validity of the widget - used during list refresh */
     TBool               iValid;
+
+    /* Array of uninstall animation bitmaps*/
+    RArray<CFbsBitmap*> iUninstallAnimIcons;
     
+    /** periodic timer for updating animation */
+    CPeriodic*          iPeriodic;
+    
+    /* uninstall animation index */
+    TInt                iAnimationIndex;
+
+    /** uninstallation switch */
+    TBool               iAsyncUninstalling;
+    
+    /** logo changed switch */
+    TBool               iFireLogoChanged;
+
+    /**
+     * silent install launcher.
+     */
+    SwiUI::RSWInstSilentLauncher iInstaller;
+
+    /**
+     * ActiveSchedulerWait used to wait while logo image
+     * is being prepaired.
+     */
+    CActiveSchedulerWait* iWait;
     };
 
 
--- a/idlehomescreen/widgetmanager/inc/wmwidgetdata.inl	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/inc/wmwidgetdata.inl	Mon Jan 18 20:10:36 2010 +0200
@@ -31,10 +31,6 @@
     inline const TDesC& CWmWidgetData::Name() const
         { return iHsContentInfo->Name(); }
 
-    /** widget description */
-    inline const TDesC& CWmWidgetData::Description() const
-        { return iHsContentInfo->Description(); }
-
     /** widget uid */
     inline TUid CWmWidgetData::Uid() const
         { return UidFromString( iHsContentInfo->Uid() ); };
@@ -47,10 +43,6 @@
     inline CWmWidgetData::TWidgetType CWmWidgetData::WidgetType() const
         { return iWidgetType; }
 
-    /** running install animation index */
-    inline TInt CWmWidgetData::InstallAnimationIndex() const
-        { return iInstallAnimationIndex; }
-
     /** the logo bitmap */
     inline const CFbsBitmap* CWmWidgetData::LogoImage()
         { return iLogoImage; }
--- a/idlehomescreen/widgetmanager/sis/Create_update_sisx.bat	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/sis/Create_update_sisx.bat	Mon Jan 18 20:10:36 2010 +0200
@@ -18,6 +18,9 @@
 call elftran.exe -version 1.1 \epoc32\release\armv5\urel\widgetmanager.dll
 call elftran.exe -version 1.1 \epoc32\release\armv5\udeb\widgetmanager.dll
 
+rem make sure cenrep file exists
+call \ext\tools\toolsextensions\ConfigurationTool\cli_build.cmd -master_conf s60 -impl ..\conf -confml ..\conf -no_iby
+
 rem Create wm sis&sisx files
 makesis widgetmanager_udeb.pkg
 signsis widgetmanager_udeb.SIS widgetmanager_udeb.SISX Nokia_RnDCert_02.der Nokia_RnDCert_02.key
@@ -25,4 +28,5 @@
 signsis widgetmanager_urel.SIS widgetmanager_urel.SISX Nokia_RnDCert_02.der Nokia_RnDCert_02.key
 
 rem Create wm stubsis file
-makesis -s widgetmanager_stub.pkg
\ No newline at end of file
+makesis -s widgetmanager_stub.pkg
+
--- a/idlehomescreen/widgetmanager/sis/widgetmanager_urel.pkg	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/sis/widgetmanager_urel.pkg	Mon Jan 18 20:10:36 2010 +0200
@@ -44,4 +44,5 @@
 "\epoc32\data\z\resource\apps\widgetmanager.mif"        -"C:\resource\apps\widgetmanager.mif"
 
 ; cenrep
-"\epoc32\data\z\private\10202be9\20026F53.txt"           -"C:\private\10202be9\20026F53.txt"
\ No newline at end of file
+"\epoc32\data\z\private\10202be9\20026F53.txt"           -"C:\private\10202be9\20026F53.txt"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/widgetmanager/src/wmconfiguration.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,279 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies)..
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* WidgetManager configuration class
+*
+*/
+
+// INCLUDE FILES
+#include <centralrepository.h>
+#include <StringLoader.h>
+#include <aknsconstants.h>
+
+#include <widgetmanagerview.rsg>
+#include <widgetmanager.mbg>
+#include "wmconfiguration.h"
+#include "wmresourceloader.h"
+#include "wmcrkeys.h"
+
+// CONSTANTS
+const TInt KMaxIconDescriptorLength = 256;
+
+// ---------------------------------------------------------
+// CWmConfiguration::NewL
+// ---------------------------------------------------------
+//
+CWmConfiguration* CWmConfiguration::NewL(
+        CWmResourceLoader& aResourceLoader )
+    {
+    CWmConfiguration* self = new (ELeave) CWmConfiguration( aResourceLoader );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CWmConfiguration::CWmConfiguration()
+// ---------------------------------------------------------
+//
+CWmConfiguration::CWmConfiguration(
+        CWmResourceLoader& aResourceLoader )
+    : iResourceLoader( aResourceLoader )
+	{
+    iOviStoreText = NULL;
+    iOviStoreIcon = NULL;
+	iRepository = NULL;
+	iOviStoreBundleId = NULL;
+	iOviStoreClientParam = NULL;
+    iOviStoreUrl = NULL;
+	}
+
+// ---------------------------------------------------------
+// CWmConfiguration::~CWmConfiguration()
+// ---------------------------------------------------------
+//
+CWmConfiguration::~CWmConfiguration()
+	{
+    delete iOviStoreText;
+    delete iOviStoreIcon;
+	delete iRepository;
+    delete iOviStoreBundleId;
+    delete iOviStoreClientParam;
+    delete iOviStoreUrl;
+	}
+
+// ---------------------------------------------------------
+// CWmConfiguration::ConstructL
+// ---------------------------------------------------------
+//
+void CWmConfiguration::ConstructL()
+	{
+	// localised ovistore button text
+    iOviStoreText = StringLoader::LoadL( R_QTN_WM_GO_TO_OVI_STORE );
+
+    // ovistore icon descriptor. It will look something like this:
+    // skin( 0x101f86e3 0x23f6 ):mif( z:\resource\apps\widgetmanager.mif 16388 16389 )
+    TBuf<KMaxIconDescriptorLength> buf;
+    _LIT( KSkinMifIconFormat, "skin( 0x%x 0x%x ):mif( %S %d %d )");
+    buf.Format( KSkinMifIconFormat(),
+             EAknsMajorGeneric, EAknsMinorGenericQgnMenuOviStore,
+             &iResourceLoader.IconFilePath(),
+             EMbmWidgetmanagerQgn_menu_ovistore,
+             EMbmWidgetmanagerQgn_menu_ovistore_mask );
+    iOviStoreIcon = buf.AllocL();
+
+    // read data from repository
+    TRAP_IGNORE(
+        iRepository = CRepository::NewL( 
+                TUid::Uid( KCrWidgetManagerm ) );
+    
+        iLanguageIndex = FindCorrectLanguageId();
+        iOviStoreBundleId = ReadParameterL( KOviStoreBunbleId );
+        iOviStoreClientParam = ReadParameterL( KOviStoreClientParam );
+        iOviStoreUrl = ReadLocalisedParameterL( KOviStoreBrowserUrlOffset );
+        );
+	}
+
+// ---------------------------------------------------------
+// CWmConfiguration::FindCorrectLanguageId
+// ---------------------------------------------------------
+//
+TInt CWmConfiguration::FindCorrectLanguageId()
+    {
+    TInt languageIndex = KErrNotFound; // the correct language
+    TInt englishIndex = KErrNotFound; // english
+    TInt anyIndex = KErrNotFound; // backup - any existing
+    TLanguage sysLang = User::Language();
+    
+    //read language id's from cenrep, find a match
+    for( TUint32 i=KLangId0; i<=KLangId9 && languageIndex<0; i+=KLangGroupSize )
+        {
+        TInt crLang = 0;
+        if ( iRepository->Get( i, crLang ) == KErrNone )
+            {
+            if ( crLang == sysLang && languageIndex < 0 )
+                { languageIndex = i; }
+            if ( crLang == ELangEnglish && englishIndex < 0 )
+                { englishIndex = i; }
+            if ( crLang > 0 && anyIndex < 0 )
+                { anyIndex = i; }
+            }
+        }
+    
+    // if correct language was not found, use english
+    if ( languageIndex < 0 ) languageIndex = englishIndex;
+    // if english was not found, use any configured language
+    if ( languageIndex < 0 ) languageIndex = anyIndex;
+    // if there are no languages configured, we're in trouble...
+    if ( languageIndex < 0 ) languageIndex = 0;
+    
+    return languageIndex;
+    }
+
+// ---------------------------------------------------------
+// CWmConfiguration::ReadParameterL
+// ---------------------------------------------------------
+//
+HBufC* CWmConfiguration::ReadParameterL( TInt aKey )
+    {
+    TBuf<NCentralRepositoryConstants::KMaxUnicodeStringLength> buf;
+    TInt err = iRepository->Get( aKey, buf );
+
+    HBufC* heapBuffer = NULL;
+    if ( err == KErrNone )
+        {
+        heapBuffer = HBufC::NewL( buf.Length() );
+        heapBuffer->Des().Copy( buf );
+        }
+    return heapBuffer;
+    }
+
+// ---------------------------------------------------------
+// CWmConfiguration::ReadLocalisedParameterL
+// ---------------------------------------------------------
+//
+HBufC* CWmConfiguration::ReadLocalisedParameterL(
+        TInt aOffset )
+    {
+    TBuf<NCentralRepositoryConstants::KMaxUnicodeStringLength> buf;
+    TInt err = KErrNone;
+    
+    err = iRepository->Get( iLanguageIndex + aOffset, buf );
+    if ( err != KErrNone || buf.Length() == 0 )
+        {
+        // This language is empty. Try default language (index 0)
+        err = iRepository->Get( KLangId0 + aOffset, buf );
+        }
+
+    // construct string in heap
+    HBufC* heapBuffer = NULL;
+    if ( err == KErrNone )
+        {
+        heapBuffer = buf.AllocL();
+        }
+    return heapBuffer;
+    }
+
+// ---------------------------------------------------------
+// CWmConfiguration::PortalButtonCount
+// ---------------------------------------------------------
+//
+TInt CWmConfiguration::PortalButtonCount()
+	{
+	return 1;
+	}
+
+// ---------------------------------------------------------
+// CWmConfiguration::PortalButtonText
+// ---------------------------------------------------------
+//
+const TDesC& CWmConfiguration::PortalButtonText( TInt aIndex )
+    {
+    if ( aIndex == 0 && iOviStoreText ) return *iOviStoreText;
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------
+// CWmConfiguration::PortalButtonIcon
+// ---------------------------------------------------------
+//
+const TDesC& CWmConfiguration::PortalButtonIcon( TInt aIndex )
+    {
+    if ( aIndex == 0 && iOviStoreIcon ) return *iOviStoreIcon;
+    return KNullDesC;
+    }
+
+// ---------------------------------------------------------
+// CWmConfiguration::PortalButtonBundleId
+// ---------------------------------------------------------
+//
+const TDesC&
+    CWmConfiguration::PortalButtonBundleId( TInt aIndex )
+    {
+    if ( aIndex == 0 && iOviStoreBundleId ) return *iOviStoreBundleId;
+    return KNullDesC;
+    }
+
+
+// ---------------------------------------------------------
+// CWmConfiguration::PortalButtonPrimaryMethod
+// ---------------------------------------------------------
+//
+CWmConfiguration::TMethod
+    CWmConfiguration::PortalButtonPrimaryMethod( TInt aIndex )
+    {
+    if ( aIndex == 0 && iOviStoreClientParam ) return EWidget;
+    return ENone;
+    }
+
+// ---------------------------------------------------------
+// CWmConfiguration::PortalButtonPrimaryParams
+// ---------------------------------------------------------
+//
+const TDesC&
+    CWmConfiguration::PortalButtonPrimaryParams( TInt aIndex )
+    {
+    if ( aIndex == 0 && iOviStoreClientParam ) return *iOviStoreClientParam;
+    return KNullDesC;
+    }
+
+
+// ---------------------------------------------------------
+// CWmConfiguration::PortalButtonSecondaryMethod
+// ---------------------------------------------------------
+//
+CWmConfiguration::TMethod
+    CWmConfiguration::PortalButtonSecondaryMethod( TInt aIndex )
+    {
+    if ( aIndex == 0 && iOviStoreUrl ) return EHttp;
+    return ENone;
+    }
+
+// ---------------------------------------------------------
+// CWmConfiguration::PortalButtonSecondaryParams
+// ---------------------------------------------------------
+//
+const TDesC&
+    CWmConfiguration::PortalButtonSecondaryParams( TInt aIndex )
+    {
+    if ( aIndex == 0 && iOviStoreUrl ) return *iOviStoreUrl;
+    return KNullDesC;
+    }
+
+
+
+
+// End of File
+
--- a/idlehomescreen/widgetmanager/src/wmdetailsdlg.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/src/wmdetailsdlg.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -239,7 +239,14 @@
     TCharFormatMask charFormatMask;
     CParaFormat paraFormat;
     TParaFormatMask paraFormatMask;
-    paraFormat.iHorizontalAlignment = CParaFormat::EJustifiedAlign;
+    if ( Layout_Meta_Data::IsMirrored() )
+        {
+        paraFormat.iHorizontalAlignment = CParaFormat::ERightAlign;
+        }
+    else
+        {
+        paraFormat.iHorizontalAlignment = CParaFormat::ELeftAlign;
+        }
     charFormat.iFontPresentation.iTextColor = color;
     paraFormatMask.SetAttrib(EAttAlignment);
     charFormatMask.SetAttrib(EAttFontTypeface);
--- a/idlehomescreen/widgetmanager/src/wmimageconverter.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/src/wmimageconverter.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -90,20 +90,47 @@
     Cancel();
     delete iImageDecoder;
     iFs.Close(); 
-    if (iBitmap) 
+    if ( iBitmap ) 
         {
         delete iBitmap;
         iBitmap = NULL;
-        }    
-    if (iMask) 
+        }
+    if ( iMask )
         {
         delete iMask; 
         iMask = NULL;
-        }    
+        }
     delete iScaler;
     }
 
 // ---------------------------------------------------------
+// CWmImageConverter::HandleIconString
+// ---------------------------------------------------------
+//
+TInt CWmImageConverter::HandleIconString( 
+                            TInt aWidth, TInt aHeight, 
+                            const TDesC& aIconStr )
+    {
+    TInt err( KErrNone );
+    TRAP( err, HandleIconStringL( aWidth, aHeight, aIconStr ); );
+    if ( KErrNone != err )
+        {
+        iState = EFailed;
+        if ( iBitmap ) 
+            {
+            delete iBitmap;
+            iBitmap = NULL;
+            }
+        if ( iMask )
+            {
+            delete iMask; 
+            iMask = NULL;
+            }
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------
 // CWmImageConverter::HandleIconStringL
 // ---------------------------------------------------------
 //
@@ -111,6 +138,8 @@
                             TInt aWidth, TInt aHeight, 
                             const TDesC& aIconStr )
     {
+    iConversionMethod = EUnrecognized;
+    iState = EDecoding;
     if ( aIconStr.Length() )
         {
         TAknsItemID skinItemId;
@@ -120,7 +149,7 @@
         TInt maskId( KErrNotFound );
         TUid appUid;
         iFilename = KNullDesC;
-        iScaleNeeded = EFalse;    
+        iScaleNeeded = EFalse;
         iSize.SetSize( aWidth, aHeight );
         
         if ( ResolveSkinIdAndMifId( 
@@ -154,10 +183,13 @@
             }
         else
             {
-            iConversionMethod = EUnrecognized;
             User::Leave( KErrArgument );
             }
         }
+    else
+        {            
+        User::Leave( KErrArgument );
+        }
     }
 
 // ---------------------------------------------------------
@@ -193,7 +225,7 @@
                     break;
                     }
                 }
-            }      
+            }
         CApaMaskedBitmap* maskedBmp = CApaMaskedBitmap::NewLC();
         User::LeaveIfError( lsSession.GetAppIcon( aUid, size, *maskedBmp ) );
         iBitmap = static_cast<CFbsBitmap*>( maskedBmp );  // ownership transfered
@@ -212,6 +244,7 @@
         // scale or notify
         if ( size == iSize )
             {
+            iState = EIdle;
             iObserver->NotifyCompletion( KErrNone );
             }
         else
@@ -253,10 +286,12 @@
             }
 
         // notify observer
+        iState = EIdle;
         iObserver->NotifyCompletion( err );
         }
     else
         {
+        iState = EIdle;
         User::Leave( KErrArgument );
         }
     }
@@ -315,6 +350,7 @@
     
     iBitmap = bitmap;
     iMask = mask;
+    iState = EIdle;
     iObserver->NotifyCompletion( KErrNone );
     }
 
@@ -336,7 +372,7 @@
 //
 void CWmImageConverter::CreateIconFromOtherL( const TDesC& aFileName )
     {
-    if ( IsActive() || iState != EIdle )
+    if ( IsActive() )
         {
         User::Leave( KErrNotReady );
         }
@@ -364,8 +400,8 @@
         {
         iScaleNeeded = ETrue;
         }
+
     // start conversion to bitmap
-    iState = EDecoding;
     iImageDecoder->Convert( &iStatus, *iBitmap, *iMask );
     SetActive();
     }
@@ -376,11 +412,13 @@
 //
 void CWmImageConverter::DoCancel()
     {
-    if( iState == EDecoding )
+    if( iState == EDecoding && 
+       iConversionMethod == EImageIcon )
         {
-        iImageDecoder->Cancel();        
+        iImageDecoder->Cancel();
+        iState = EIdle;
         if ( iObserver )
-            {
+            {            
             iObserver->NotifyCompletion( KErrCancel );
             }
         }    
@@ -388,16 +426,16 @@
         iState == EScalingMask )
         {
         iScaler->Cancel();
+        iState = EIdle;
         if ( iObserver )
-            {
+            {            
             iObserver->NotifyCompletion( KErrCancel );
             }
         }    
     else
         {
         // State is EIdle, do nothing
-        }
-    iState = EIdle;
+        }    
     iScaleNeeded = EFalse;
     }
 
@@ -529,9 +567,9 @@
          iBitmap &&
         ( iState == EDecoding || iState == EIdle ) )
         {
+        iState = EScalingBitmap;
         // the maintain aspect ratio is by default set to true
-        iScaler->Scale( &iStatus, *iBitmap, TSize( aWidth,aHeight ), EFalse );
-        iState = EScalingBitmap;
+        iScaler->Scale( &iStatus, *iBitmap, TSize( aWidth,aHeight ), EFalse );        
         SetActive();
         }
     }
@@ -546,9 +584,9 @@
         iState == EScalingBitmap &&
         iMask )
         {
+        iState = EScalingMask;
         // the maintain aspect ratio is by default set to true
-        iScaler->Scale( &iStatus, *iMask, TSize(aWidth,aHeight), EFalse );
-        iState = EScalingMask;
+        iScaler->Scale( &iStatus, *iMask, TSize(aWidth,aHeight), EFalse );        
         SetActive();
         }
     }
@@ -607,33 +645,17 @@
     TInt pos = aPath.FindF( KUid );
     if( pos == 0 )
         {
-        // Skip skin token
+        // Skip uid token
         pos += KUid().Length();
 
         // Initialize lexer
         TLex lex( aPath.Mid( pos ) );
-
+        lex.SkipSpaceAndMark();
+        
         // Check left parenthesis
         if ( lex.Get() == KLeftParenthesis )
             {
-            lex.SkipSpaceAndMark();
-            lex.SkipCharacters();
-            
-            TPtrC mtoken = lex.MarkedToken();
-            pos = mtoken.FindF( KHexPrefix );
-            if ( pos == 0 )
-                {
-                TLex lex( mtoken.Mid( KHexPrefix().Length() ) );
-                TUint id = 0;
-                error = lex.Val( id, EHex );
-                aUid = TUid::Uid( (TInt)id );
-                }
-            else
-                {
-                TInt id( 0 );
-                error = lex.Val( id );
-                aUid.iUid = id;
-                }
+            error = ParseNextUint( lex, (TUint&)aUid.iUid );
             }
         }
     
@@ -657,37 +679,16 @@
 
         // Initialize lexer
         TLex lex( aPath.Mid( pos ) );
+        lex.SkipSpaceAndMark();
         
-        lex.SkipSpaceAndMark();
         // Check left parenthesis
         if ( lex.Get() == KLeftParenthesis )
            {
-           pos++;
-           TLex lex( aPath.Mid( pos ) );
-           lex.SkipSpaceAndMark();
-           
-           TPtrC mtoken = lex.MarkedToken();
-           pos = mtoken.FindF( KHexPrefix );
-           if ( pos == 0 )
-              {
-              TUint majorId( 0 );
-              TUint minorId( 0 );              
-              lex.Assign( mtoken.Mid( KHexPrefix().Length() ) );
-              error = lex.Val( majorId, EHex );
-              lex.SkipSpace();
-              lex.SkipAndMark( KHexPrefix().Length() );
-              error |= lex.Val( minorId, EHex );
-              aItemId.Set( majorId, minorId );
-              }
-          else
-              {
-              TInt majorId(0);
-              TInt minorId(0);
-              error = lex.Val( majorId );
-              lex.SkipSpace();
-              error |= lex.Val( minorId );                      
-              aItemId.Set( majorId, minorId );
-              }
+           TUint majorId = 0;
+           TUint minorId = 0;
+           error = ParseNextUint( lex, majorId );
+           error |= ParseNextUint( lex, minorId );
+           aItemId.Set( majorId, minorId );
            }        
         }
 
@@ -711,7 +712,8 @@
         pos += KMif().Length();
         // Initialize lexer
         TLex lex( aPath.Mid( pos ) );
-
+        lex.SkipSpaceAndMark();
+        
         // Check left parenthesis
         if ( lex.Get() == KLeftParenthesis )
            {
@@ -721,22 +723,15 @@
            aFileName.Copy(lex.MarkedToken());
            if( aFileName.Length()!= 0)
                {
-               // Resolve bitmap id  
-               lex.SkipSpace();
-               error = lex.Val( aBitmapId );
-               
-               // Resolve mask id
-               // dont return error if it is not found, that is ok
-               lex.SkipSpace();
-               lex.Val( aMaskId );
-               }
-           else
-               {
-               error = KErrNotFound;
+               TUint bitmap, mask;
+               error = ParseNextUint( lex, bitmap );
+               ParseNextUint( lex, mask ); // mask is not mandatory
+               aBitmapId = bitmap;
+               aMaskId = mask;
                }
            }        
         }    
-    return (error == KErrNone );
+    return ( error == KErrNone );
     }
 
 // ---------------------------------------------------------------------------
@@ -796,7 +791,7 @@
             itemData->SetMask( NULL );
             CleanupStack::PopAndDestroy( itemData );
             }
-        else 
+        else
             {
             // look in imagetable
             CAknsImageTableItemData* iconData = NULL;
@@ -827,7 +822,8 @@
                     }
                 iBitmap = bitmap;
                 iMask = mask;
-                // notify observer
+                iState = EIdle;
+                // notify observer                    
                 iObserver->NotifyCompletion( KErrNone );
                 return;
                 }
@@ -855,23 +851,51 @@
         }
     else
         {
+        iState = EIdle;
         User::Leave( KErrArgument );
         }
     
     iBitmap = bitmap;
     iMask = mask;
-            
+
     TInt err = AknIconUtils::SetSize( iBitmap , iSize, EAspectRatioNotPreserved );
     if ( KErrNone == err )
         {
         err = AknIconUtils::SetSize( iMask , iSize, EAspectRatioNotPreserved );
         }
-
+    
+    iState = EIdle;
     // notify observer
     iObserver->NotifyCompletion( err );
     }
 
 // ---------------------------------------------------------------------------
+// CWmImageConverter::ParseNextUint()
+// ---------------------------------------------------------------------------
+//
+TInt CWmImageConverter::ParseNextUint( TLex& aLex, TUint& aValue )
+    {
+    TInt error = KErrNone;
+    aLex.SkipSpaceAndMark();
+    aLex.SkipCharacters();
+
+    TPtrC mtoken = aLex.MarkedToken();
+    TInt pos = mtoken.FindF( KHexPrefix );
+    if ( pos == 0 )
+        {
+		TLex innerLex( mtoken.Mid( KHexPrefix().Length() ) );
+        error = innerLex.Val( aValue, EHex );
+        }
+    else
+        {
+        TLex innerLex( mtoken );
+        error = innerLex.Val( aValue, EDecimal );
+        }
+
+    return error;
+    }
+
+// ---------------------------------------------------------------------------
 // CWmImageConverter::SetLogoSize()
 // ---------------------------------------------------------------------------
 //
@@ -896,7 +920,13 @@
 void CWmImageConverter::RetrieveIconFileHandleL( 
     RFile& aFile, const TIconFileType /*aType*/ )
     {
-	User::LeaveIfError( aFile.Open( iFs, iFilename, EFileShareAny ) );
+	TInt err = aFile.Open( iFs, iFilename, 
+	        EFileRead | EFileShareReadersOnly );
+	if ( KErrNone != err )
+	    {
+        iState = EIdle;
+        User::Leave( err );
+	    }
     }
 
 // ---------------------------------------------------------------------------
@@ -908,6 +938,15 @@
     // finishes using the icon file. No actions needed here.
     }
 
+// ---------------------------------------------------------------------------
+// CWmImageConverter::IsProcessing
+// ---------------------------------------------------------------------------
+//
+TBool CWmImageConverter::IsProcessing()
+    {
+    return ( ( ( iState != EIdle && iState != EFailed ) ||
+            IsActive() ) ? ETrue : EFalse );
+    }
 
 // End of file
 
--- a/idlehomescreen/widgetmanager/src/wmlistbox.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/src/wmlistbox.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -99,7 +99,7 @@
             EMbmWidgetmanagerQgn_menu_hswidget,
             EMbmWidgetmanagerQgn_menu_hswidget_mask
             );
-	
+
     AknsUtils::CreateColorIconL(
             skin,
             KAknsIIDQgnIndiWmAdd,
@@ -232,11 +232,11 @@
     logoLayout.LayoutRect( itemRect,
              AknLayoutScalable_Apps::listrow_wgtman_pane_g1().LayoutLine() );
 
-    if ( !bitmap )
+    if ( !bitmap && !wData.IsPrepairingLogo() )
         {
         logoLayout.DrawImage( gc, iDefaultLogoImage, iDefaultLogoImageMask );
         }
-    else
+    else if( bitmap && mask )
         {
         logoLayout.DrawImage( gc, bitmap, mask );
         }
@@ -255,14 +255,13 @@
 
     TAknTextLineLayout titleTextLayout = 
               AknLayoutScalable_Apps::listrow_wgtman_pane_t1().LayoutLine();
-    TAknTextLineLayout descTextLayout =
-            AknLayoutScalable_Apps::listrow_wgtman_pane_t2().LayoutLine();
 
     TAknLayoutText textLayout;
     textLayout.LayoutText( itemRect, titleTextLayout );
     textLayout.DrawText( gc, wData.Name(), ETrue, textColor );
     
-    if ( wData.HsContentInfo().CanBeAdded() )
+    if ( !wData.IsUninstalling() &&
+        wData.HsContentInfo().CanBeAdded() )
         {
         // DRAW ADD BUTTON
         TAknLayoutRect addButtonLayout;
@@ -280,11 +279,31 @@
             }        
         }
 
-    gc.SetPenSize(TSize(1,1));
-
-    // DRAW DESCRIPTION TEXT
-    textLayout.LayoutText( itemRect, descTextLayout );
-    textLayout.DrawText( gc, wData.Description(), ETrue, textColor );
+    if ( !wData.IsUninstalling() )
+        {
+        TAknTextLineLayout descTextLayout =
+            AknLayoutScalable_Apps::listrow_wgtman_pane_t2().LayoutLine();
+        gc.SetPenSize(TSize(1,1));
+        // DRAW DESCRIPTION TEXT
+        textLayout.LayoutText( itemRect, descTextLayout );
+        textLayout.DrawText( gc, wData.Description(), ETrue, textColor );
+        }
+    else
+        {
+        // draw animation
+        TAknLayoutRect animationLayout;
+        animationLayout.LayoutRect( itemRect,
+             AknLayoutScalable_Apps::wait_bar_pane_cp09().LayoutLine() );
+        TSize size = animationLayout.Rect().Size();
+        CFbsBitmap* animBitmap = 
+                const_cast<CFbsBitmap*>(wData.AnimationBitmap( size ));
+        CFbsBitmap* animMask = 
+                const_cast<CFbsBitmap*>(wData.AnimationMask( size ));
+        if ( animBitmap && animMask )
+            {
+            animationLayout.DrawImage( gc, animBitmap, animMask );
+            }
+        }
     gc.DiscardFont();
     }
 
@@ -400,6 +419,7 @@
     {
     iFindPaneIsVisible = EFalse;
 	iPressedDown = EFalse;
+	iLogoSize = TSize( 0, 0);
     }
 
 // ---------------------------------------------------------
@@ -409,6 +429,7 @@
 CWmListBox::~CWmListBox()
     {
     iWidgetDatas.ResetAndDestroy();
+    iTrashedData.ResetAndDestroy();
     }
 
 // ---------------------------------------------------------
@@ -456,13 +477,13 @@
 // CWmListBox::AddWidgetDataL
 // ---------------------------------------------------------
 //
-void CWmListBox::AddWidgetDataL( CWmWidgetData* aWidgetData )
+void CWmListBox::AddWidgetDataL( CWmWidgetData* aWidgetData,
+        TBool aRedraw )
     {
     aWidgetData->SetObserver( this );
-    aWidgetData->SetLogoSize( LogoSize() );
     iWidgetDatas.InsertInOrderAllowRepeatsL( aWidgetData,
             SortOrder(EStoredOrder) );
-    HandleItemAdditionL();
+    if ( aRedraw ) { HandleItemAdditionL(); }
     }
 
 // ---------------------------------------------------------
@@ -476,12 +497,24 @@
     // remove widget data
     CWmWidgetData* data = iWidgetDatas[realIndex];
     iWidgetDatas.Remove( realIndex );
-    delete data;
-
     // reorganise
     TRAP_IGNORE(
         AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
             this, realIndex, current ) );
+    
+    // widgetlist changed notification comes too early before even
+    // uninstall is completed. in wk04_2010 there is going to be fix 
+    // available for this issue. add data object to trashed array so
+    // that its not visible in list and is destroyed later.
+    if ( data->IsUninstalling() && data->IsActive() )
+        {
+        iTrashedData.Append( data );
+        }
+    else
+        {
+        // delete now
+        delete data;
+        }
     }
 
 // ---------------------------------------------------------
@@ -519,6 +552,9 @@
             cellData,
             this );
     CleanupStack::Pop(); // cellData
+
+    // enable extended drawing
+    EnableExtendedDrawingL();
     }
 
 // ---------------------------------------------------------
@@ -527,10 +563,11 @@
 //
 void CWmListBox::HandleLayoutChanged()
     {
-	TSize ls = LogoSize();
+    iLogoSize = TSize( 0, 0);
+	iLogoSize = LogoSize();
     for ( TInt i=0; i<iWidgetDatas.Count(); i++)
         {
-        iWidgetDatas[i]->ReCreateLogo( ls );
+        iWidgetDatas[i]->ReCreateLogo( iLogoSize );
         }
     }
 
@@ -561,7 +598,7 @@
         if ( index >= 0 )
             {
             // redraw item.
-            RedrawItem( RealIndex( index ) );			
+            RedrawItem( RealIndex( index ) );
             }
         }
     else
@@ -677,15 +714,22 @@
 //
 TSize CWmListBox::LogoSize()
     {
-    TAknLayoutRect rowLayoutRect;
-    rowLayoutRect.LayoutRect( Rect(),
-            AknLayoutScalable_Apps::listrow_wgtman_pane().LayoutLine() );
-    TAknLayoutRect logoLayoutRect;
-    logoLayoutRect.LayoutRect( rowLayoutRect.Rect(),
-            AknLayoutScalable_Apps::listrow_wgtman_pane_g1().LayoutLine() );
-    return logoLayoutRect.Rect().Size();
+    TSize size( iLogoSize );    
+    if ( size.iWidth == 0 || size.iHeight == 0 )
+        {
+        TAknLayoutRect rowLayoutRect;
+        rowLayoutRect.LayoutRect( Rect(),
+                AknLayoutScalable_Apps::listrow_wgtman_pane().LayoutLine() );
+        TAknLayoutRect logoLayoutRect;
+        logoLayoutRect.LayoutRect( rowLayoutRect.Rect(),
+                AknLayoutScalable_Apps::listrow_wgtman_pane_g1().LayoutLine() );
+        size = logoLayoutRect.Rect().Size();
+        iLogoSize = size;
+        }
+    return size;
     }
 
+
 // ---------------------------------------------------------
 // CWmListBox::DefaultLogo
 // ---------------------------------------------------------
--- a/idlehomescreen/widgetmanager/src/wmmaincontainer.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/src/wmmaincontainer.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -36,7 +36,6 @@
 #include <aknlayoutscalable_apps.cdl.h>
 #include <AknLayout.lag>
 #include <AknsSkinInstance.h>
-#include <apgicnfl.h>
 #include <AknIconUtils.h>
 #include <AknsDrawUtils.h>
 #include <aknenv.h>
@@ -49,16 +48,11 @@
 #include <avkon.rsg>
 #include <coecobs.h>
 #include <coecntrl.h>
-#include <SWInstApi.h> //installer
-#include <widgetregistryclient.h> // widgetreqistry
-#include <schemehandler.h> // for starting the OVI client
 #include <featmgr.h>     // FeatureManager
 #include <hlplch.h>      // HlpLauncher
 #include <csxhelp/hmsc.hlp.hrh>
 #include <aisystemuids.hrh>
-#include <centralrepository.h>
 
-#include "wmcrkeys.h"
 #include "wmcommon.h"
 #include "wmplugin.h"
 #include "wmmaincontainer.h"
@@ -70,12 +64,11 @@
 #include "wmdetailsdlg.h"
 #include "wmportalbutton.h"
 #include "wmwidgetloaderao.h"
+#include "wmconfiguration.h"
 
 // CONSTANTS
 const TInt KTextLimit = 40; // Text-limit for find-field
 const TInt KMinWidgets = 1; // minimum number of widgets to show findpane
-_LIT8( KWrtMime, "application/x-nokia-widget");
-_LIT( KBrowserPrefix, "4 ");
 
 // ---------------------------------------------------------
 // CWmMainContainer::CWmMainContainer()
@@ -98,17 +91,15 @@
 //
 CWmMainContainer::~CWmMainContainer()
 	{
-    delete iOviStoreUrl;
-    delete iOviStoreClientBundleId;
-    delete iOviStoreClientParam;
-        
     RemoveCtrlsFromStack();
     Components().ResetAndDestroy();
     delete iWidgetLoader;
     iWidgetsList = NULL;
-    iOviPortal = NULL;
+    iPortalButtonOne = NULL;
+    iPortalButtonTwo = NULL;
     iFindbox = NULL;
 	delete iBgContext;
+	delete iConfiguration;
 	}
 
 // ---------------------------------------------------------
@@ -176,9 +167,9 @@
 	iBgContext = CAknsBasicBackgroundControlContext::NewL( 
 	        KAknsIIDQsnBgScreen, ScreenRect() , ETrue);
 
-	// Read needed values from cenrep
-	TRAP_IGNORE( FetchRepositoryDataL(); );
-	
+    // load configuration
+    iConfiguration = CWmConfiguration::NewL( iWmPlugin.ResourceLoader() );
+    
 	// set up controls
 	InitializeControlsL( aRect );
 
@@ -189,68 +180,6 @@
 	}
 
 // ---------------------------------------------------------
-// CWmMainContainer::FetchRepositoryDataL
-// ---------------------------------------------------------
-//
-void CWmMainContainer::FetchRepositoryDataL()
-    {
-    iOviStoreUrl = NULL;
-    iOviStoreClientBundleId = NULL;
-    iOviStoreClientParam = NULL;
-    
-    CRepository *repository = CRepository::NewLC( 
-            TUid::Uid( KCrWidgetManagerm ) );
-    TInt err = KErrNone;
-    
-    //read localized data from cenrep
-    TLanguage sysLang = User::Language();
-    for( TUint32 i = KLangId0; i <= KLangId9; i+=4 )
-        {
-        TInt crLang = 0;
-        err = repository->Get( i, crLang );
-
-        if ( sysLang == crLang && err == KErrNone )
-            {
-            // system langauge matches langauge in cenrep
-            iOviStoreUrl = HBufC::NewL( 
-                    NCentralRepositoryConstants::KMaxUnicodeStringLength );
-            TPtr ptr( iOviStoreUrl->Des() );
-            
-            // get localized ovi store url
-            err = repository->Get( i + KOviStoreBrowserUrlOffset, ptr );
-            if ( err != KErrNone )
-                {
-                delete iOviStoreUrl;
-                iOviStoreUrl = NULL;
-                }
-            }
-        }
-    
-    //read other data from cenrep
-    iOviStoreClientBundleId = HBufC::NewL( 
-            NCentralRepositoryConstants::KMaxUnicodeStringLength );
-    TPtr ptr( iOviStoreClientBundleId->Des() );
-    err = repository->Get( KOviStoreBunbleId, ptr );
-    if ( err != KErrNone )
-        {
-        delete iOviStoreClientBundleId;
-        iOviStoreClientBundleId = NULL;
-        }
-    
-    iOviStoreClientParam = HBufC::NewL( 
-            NCentralRepositoryConstants::KMaxUnicodeStringLength );
-    ptr.Set( iOviStoreClientParam->Des() );
-    err = repository->Get( KOviStoreClientParam, ptr );
-    if ( err != KErrNone )
-        {
-        delete iOviStoreClientParam;
-        iOviStoreClientParam = NULL;
-        }
-        
-    CleanupStack::PopAndDestroy( repository );
-    }
-	
-// ---------------------------------------------------------
 // CWmMainContainer::SizeChanged
 // ---------------------------------------------------------
 //
@@ -293,8 +222,9 @@
         iLayout = EPortrait;
 	    }
 	
-    // layout Ovi button
-    AknLayoutUtils::LayoutControl( iOviPortal, rect, btnPane );
+    // portal button layout
+	// todo: 2-button layout
+    AknLayoutUtils::LayoutControl( iPortalButtonOne, rect, btnPane );
     
     if( iFindbox && iFindPaneIsVisible )
         {
@@ -316,80 +246,117 @@
 // ---------------------------------------------------------
 //
 TKeyResponse CWmMainContainer::OfferKeyEventL( 
-		const TKeyEvent& aKeyEvent, 
-		TEventCode aType )
-	{
+        const TKeyEvent& aKeyEvent, 
+        TEventCode aType )
+    {
+    TKeyResponse keyResponse( EKeyWasNotConsumed );
+
+    // This is a bug fix for ou1cimx1#217716 & ou1cimx1#217667.
+    // For some weird reason homescreen is genarating one extra EEventKey 
+    // when using Nokia SU-8W bluetooth keyboard & backspace key. This if is to 
+    // ignore that event. Extra event allways has iModifiers set to 
+    // EModifierAutorepeatable.
+    if ( aType == EEventKey && 
+             aKeyEvent.iScanCode == EStdKeyBackspace && 
+             aKeyEvent.iModifiers == EModifierAutorepeatable )
+        {
+        return EKeyWasNotConsumed;
+        }
+    
+    // Handle search keyevent
+    keyResponse = HandleSearchKeyEventL( aKeyEvent, aType );
+    
+    // Move focus between controls
+    if ( keyResponse == EKeyWasNotConsumed )
+        {
+        keyResponse = MoveFocusByKeys( aKeyEvent, aType );
+        }
+    
+    // Handle list keyevent
+    if ( keyResponse == EKeyWasNotConsumed )
+        {
+        keyResponse = HandleListKeyEventL( aKeyEvent, aType );
+        }
+    
+    // Handle buttons keyevent
+    if ( keyResponse == EKeyWasNotConsumed )
+        {
+        keyResponse = HandleButtonKeyEventL( aKeyEvent, aType );
+        }
+    
+    // Update ui if needed 
+    if ( keyResponse == EKeyWasConsumed )
+        {
+        DrawDeferred();
+        }
+    
+    // Do not let UI framework forward the keys to child controls as
+    // we have already done that.
+    return EKeyWasConsumed;
+    }
+
+TKeyResponse CWmMainContainer::HandleSearchKeyEventL( 
+        const TKeyEvent& aKeyEvent, 
+        TEventCode aType )
+    {
     TKeyResponse keyResponse( EKeyWasNotConsumed );
     
-    if ( iFindbox )
+    // open search field with alpha digit numbers
+    if ( aType == EEventKeyDown && !iFindPaneIsVisible && 
+            aKeyEvent.iScanCode < EStdKeyF1 &&
+        TChar( aKeyEvent.iScanCode ).IsAlphaDigit() )
         {
-        // open search field with alpha digit numbers
-        if ( aType == EEventKeyDown && !iFindPaneIsVisible && 
-        aKeyEvent.iScanCode < EStdKeyF1 &&
-            TChar(aKeyEvent.iScanCode).IsAlphaDigit() )
-            {
-            ActivateFindPaneL();
-            
-            if ( iFindPaneIsVisible )
-                {
-                return EKeyWasConsumed;
-                }
-            }
+        ActivateFindPaneL();
         
         if ( iFindPaneIsVisible )
             {
-            // deactive the FindPane when Back has been pressed
-            if ( aType == EEventKeyDown && 
-                aKeyEvent.iScanCode == EStdKeyBackspace )
-                {
-                TBuf<KTextLimit> searchText;
-                iFindbox->GetSearchText( searchText );
-                if ( searchText == KNullDesC )
-                    {
-                    DeactivateFindPaneL();
-                    return EKeyWasConsumed;
-                    }
-                }
-            
-            // Cancel-selected need to unfocus findbox 
-            // to receive event in ProcessCommand
-            if ( aType == EEventKeyDown 
-            && aKeyEvent.iScanCode == EStdKeyDevice1 )
-                {
-                iFindbox->SetFocus( EFalse );
-                UpdateFocusMode();
-                return EKeyWasConsumed;
-                }
-
-            if ( aKeyEvent.iScanCode == EStdKeyNo ||
-                aKeyEvent.iCode == EKeyNo )
-                {
-                DeactivateFindPaneL();
-                return EKeyWasConsumed;
-                }
-
-            // find items with all event codes (that's the reason why there is EEventKey instead of aType)
-            TBool needsRefresh( EFalse );
+            return EKeyWasConsumed;
+            }
+        }
+    
+    if ( iFindPaneIsVisible && aType == EEventKey )
+        {
+        if ( aKeyEvent.iScanCode == EStdKeyNo || aKeyEvent.iCode == EKeyNo )
+            {
+            DeactivateFindPaneL();
+            return EKeyWasConsumed;
+            }
+        
+        TBool needsRefresh( EFalse );
+       
+        if ( iFindbox->TextLength() == 0 
+                && aKeyEvent.iScanCode == EStdKeyBackspace )
+            {
+            // if lenght is 0 and backspace is pressed AknFind will deactivate
+            // searchbox so we don't want to pass this event to AknFind
+            keyResponse = EKeyWasConsumed;
+            }
+        else
+            {
             keyResponse = AknFind::HandleFindOfferKeyEventL( 
-                                                aKeyEvent, EEventKey, this, 
-                                iWidgetsList, iFindbox, ETrue, needsRefresh );            
-            if ( needsRefresh )
-                {
-                DrawNow();
-                }
+                    aKeyEvent, aType, this, 
+                    iWidgetsList, iFindbox, ETrue, needsRefresh );
+            }
+        if ( needsRefresh )
+            {
+            DrawNow();
             }
         }
 
-    // check special cases for movement between controls
-    if ( keyResponse == EKeyWasNotConsumed && !iFindPaneIsVisible )
-         {
-         keyResponse = MoveFocusByKeys( aKeyEvent, aType );
-         }
+    return keyResponse;
+    }
 
+TKeyResponse CWmMainContainer::HandleListKeyEventL( 
+        const TKeyEvent& aKeyEvent, 
+        TEventCode aType )
+    {
+    TKeyResponse keyResponse( EKeyWasNotConsumed );
+    
     // pass key event except backpace or delete key event to widgets list if focused
-    if ( keyResponse == EKeyWasNotConsumed && iWidgetsList->IsFocused() )
+    if ( iWidgetsList->IsFocused() )
         {
-        if ( (aType == EEventKey) && (aKeyEvent.iCode == EKeyBackspace || aKeyEvent.iCode == EKeyDelete))
+        if ( ( aType == EEventKey ) && ( aKeyEvent.iCode == EKeyBackspace 
+                || aKeyEvent.iCode == EKeyDelete ) )
             {
             if( CanDoUninstall() )
                 {
@@ -402,30 +369,41 @@
                     iWmPlugin.ResourceLoader().InfoPopupL(
                          R_QTN_WM_UNINST_NOT_ALLOWED, data->Name() );
                 }
+            keyResponse = EKeyWasConsumed;
             }
         else 
             {
-			//passing to listbox handler
+            //passing to listbox handler
             keyResponse = iWidgetsList->OfferKeyEventL( 
                     aKeyEvent, aType );
             }
         }
+    
+    return keyResponse;
+    }
 
-    // pass key event to OVI portal if focused
-    if ( keyResponse == EKeyWasNotConsumed && iOviPortal->IsFocused() )
+TKeyResponse CWmMainContainer::HandleButtonKeyEventL( 
+        const TKeyEvent& aKeyEvent, 
+        TEventCode aType )
+    {
+    TKeyResponse keyResponse( EKeyWasNotConsumed );
+    
+    // pass key event to portal button if focused
+    if ( iPortalButtonOne->IsFocused() )
         {
-        keyResponse = iOviPortal->OfferKeyEventL( 
+        keyResponse = iPortalButtonOne->OfferKeyEventL(
                             aKeyEvent, aType );
         }
 
-    if ( keyResponse == EKeyWasConsumed )
-        DrawDeferred();
-
-	// Do not let UI framework forward the keys to child controls as
-	// we have already done that.
-    return EKeyWasConsumed;
-	}
-
+    // pass key event to the other portal button if exists and focused
+    if ( iPortalButtonTwo && iPortalButtonTwo->IsFocused() )
+        {
+        keyResponse = iPortalButtonTwo->OfferKeyEventL(
+                            aKeyEvent, aType );
+        }
+    
+    return keyResponse;
+    }
 
 // ---------------------------------------------------------
 // CWmMainContainer::MoveFocusByKeys
@@ -448,7 +426,7 @@
             {
             // widget list top -> up -> ovi button (portrait)
             if ( aType == EEventKey )
-                SetFocusToOviButton();
+                SetFocusToPortalButton( 0 );
             keyResponse = EKeyWasConsumed;
             }
         else if ( iLayout == EPortrait &&
@@ -458,7 +436,7 @@
             {
             // widget list bottom -> down -> ovi button (portrait)
             if ( aType == EEventKey )
-                SetFocusToOviButton();
+                SetFocusToPortalButton( 0 );
             keyResponse = EKeyWasConsumed;
             }
         else if ( iLayout == ELandscape &&
@@ -466,7 +444,7 @@
             {
             // widget list -> right -> ovi button (landscape)
             if ( aType == EEventKey )
-                SetFocusToOviButton();
+                SetFocusToPortalButton( 0 );
             keyResponse = EKeyWasConsumed;
             }
         else if ( iLayout == ELandscapeMirrored &&
@@ -474,19 +452,19 @@
             {
             // widget list -> left -> ovi button (landscape mirrored)
             if ( aType == EEventKey )
-                SetFocusToOviButton();
+                SetFocusToPortalButton( 0 );
             keyResponse = EKeyWasConsumed;
             }
         }
-    else if ( iOviPortal->IsFocused() )
+    else if ( iPortalButtonOne->IsFocused() )
         {
         // ------------------------------------
-        // focus is in the OVI PORTAL BUTTON
+        // focus is in the FIRST PORTAL BUTTON
         // ------------------------------------
         if ( iLayout == EPortrait &&
                 aKeyEvent.iScanCode == EStdKeyDownArrow )
             {
-            // ovi button -> down -> widget list top (portrait)
+            // left portal -> down -> widget list top
             if ( aType == EEventKey )
                 SetFocusToWidgetList( 0 );
             keyResponse = EKeyWasConsumed;
@@ -494,15 +472,24 @@
         else if ( iLayout == EPortrait &&
                 aKeyEvent.iScanCode == EStdKeyUpArrow )
             {
-            // obi button -> up -> widget list bottom (portrait)
+            // left portal -> up -> widget list bottom
             if ( aType == EEventKey )
                 SetFocusToWidgetList( iWidgetsList->Model()->NumberOfItems()-1 );
             keyResponse = EKeyWasConsumed;
             }
+        else if ( iLayout == EPortrait &&
+                aKeyEvent.iScanCode == EStdKeyRightArrow &&
+                iConfiguration->PortalButtonCount() > 1 )
+            {
+            // left portal -> right -> right portal
+            if ( aType == EEventKey )
+                SetFocusToPortalButton( 1 );
+            keyResponse = EKeyWasConsumed;
+            }
         else if ( iLayout == ELandscape &&
                 aKeyEvent.iScanCode == EStdKeyLeftArrow )
             {
-            // ovi button -> left -> widget list (landscape)
+            // upper portal -> left -> widget list
             if ( aType == EEventKey )
                 SetFocusToWidgetList();
             keyResponse = EKeyWasConsumed;
@@ -510,11 +497,77 @@
         else if ( iLayout == ELandscapeMirrored &&
                 aKeyEvent.iScanCode == EStdKeyRightArrow )
             {
-            // ovi button -> right -> widget list (landscape mirrored)
+            // upper portal -> right -> widget list (mirrored)
             if ( aType == EEventKey )
                 SetFocusToWidgetList();
             keyResponse = EKeyWasConsumed;
             }
+        else if ( ( iLayout == ELandscape ||
+                iLayout == ELandscapeMirrored ) &&
+                aKeyEvent.iScanCode == EStdKeyDownArrow &&
+                iConfiguration->PortalButtonCount() > 1 )
+            {
+            // upper portal -> down -> lower portal
+            if ( aType == EEventKey )
+                SetFocusToPortalButton( 1 );
+            keyResponse = EKeyWasConsumed;
+            }
+        }
+    else if ( iPortalButtonTwo && iPortalButtonTwo->IsFocused() )
+        {
+        // ------------------------------------
+        // focus is in the SECOND PORTAL BUTTON
+        // ------------------------------------
+        if ( iLayout == EPortrait &&
+                aKeyEvent.iScanCode == EStdKeyDownArrow )
+            {
+            // right portal -> down -> widget list top
+            if ( aType == EEventKey )
+                SetFocusToWidgetList( 0 );
+            keyResponse = EKeyWasConsumed;
+            }
+        else if ( iLayout == EPortrait &&
+                aKeyEvent.iScanCode == EStdKeyUpArrow )
+            {
+            // right portal -> up -> widget list bottom
+            if ( aType == EEventKey )
+                SetFocusToWidgetList( iWidgetsList->Model()->NumberOfItems()-1 );
+            keyResponse = EKeyWasConsumed;
+            }
+        else if ( iLayout == EPortrait &&
+                aKeyEvent.iScanCode == EStdKeyRightArrow &&
+                iConfiguration->PortalButtonCount() > 1 )
+            {
+            // right portal -> right -> left portal
+            if ( aType == EEventKey )
+                SetFocusToPortalButton( 0 );
+            keyResponse = EKeyWasConsumed;
+            }
+        else if ( iLayout == ELandscape &&
+                aKeyEvent.iScanCode == EStdKeyLeftArrow )
+            {
+            // lower portal -> left -> widget list
+            if ( aType == EEventKey )
+                SetFocusToWidgetList();
+            keyResponse = EKeyWasConsumed;
+            }
+        else if ( iLayout == ELandscapeMirrored &&
+                aKeyEvent.iScanCode == EStdKeyRightArrow )
+            {
+            // lower portal -> right -> widget list (mirrored)
+            if ( aType == EEventKey )
+                SetFocusToWidgetList();
+            keyResponse = EKeyWasConsumed;
+            }
+        else if ( ( iLayout == ELandscape ||
+                iLayout == ELandscapeMirrored ) &&
+                aKeyEvent.iScanCode == EStdKeyUpArrow )
+            {
+            // lower portal -> up -> upper portal
+            if ( aType == EEventKey )
+                SetFocusToPortalButton( 0 );
+            keyResponse = EKeyWasConsumed;
+            }
         }
     else
         {
@@ -537,13 +590,24 @@
     }
 
 // ---------------------------------------------------------
-// CWmMainContainer::SetFocusToOviButton
+// CWmMainContainer::SetFocusToPortalButton
 // ---------------------------------------------------------
 //
-void CWmMainContainer::SetFocusToOviButton()
+void CWmMainContainer::SetFocusToPortalButton( TInt aIndex )
     {
-    iWidgetsList->SetFocus(EFalse);
-    iOviPortal->SetFocus(ETrue);
+    if ( aIndex != 0 && iPortalButtonTwo )
+        {
+        iWidgetsList->SetFocus(EFalse);
+        iPortalButtonOne->SetFocus(EFalse);
+        iPortalButtonTwo->SetFocus(ETrue);
+        }
+    else
+        {
+        iWidgetsList->SetFocus(EFalse);
+        if ( iPortalButtonTwo )
+            iPortalButtonTwo->SetFocus(EFalse);
+        iPortalButtonOne->SetFocus(ETrue);
+        }
     DrawDeferred();
     UpdateFocusMode();
     }
@@ -554,12 +618,14 @@
 //
 void CWmMainContainer::SetFocusToWidgetList( TInt aIndex )
     {
-    iOviPortal->SetFocus(EFalse);
-    iWidgetsList->SetFocus(ETrue);
+    iPortalButtonOne->SetFocus(EFalse);
+    if ( iPortalButtonTwo )
+        iPortalButtonTwo->SetFocus(EFalse);
     if ( aIndex >= 0 && aIndex < iWidgetsList->Model()->NumberOfItems() )
         {
         iWidgetsList->SetCurrentItemIndex( aIndex );
         }
+    iWidgetsList->SetFocus(ETrue);
     DrawDeferred();
     UpdateFocusMode();
     }
@@ -570,10 +636,15 @@
 //
 void CWmMainContainer::UpdateFocusMode()
     {
-    if ( iOviPortal->IsFocused() )
+    if ( iPortalButtonOne->IsFocused() )
         {
-        // OVI BUTTON is focused 
-        iFocusMode = EOvi;
+        // PORTAL BUTTON is focused
+        iFocusMode = EPortal;
+        }
+    else if ( iPortalButtonTwo && iPortalButtonTwo->IsFocused() )
+        {
+        // SECOND PORTAL BUTTON is focused
+        iFocusMode = EPortal;
         }
     else if( ( iFindPaneIsVisible ) && 
         ( iFindbox->IsFocused() || iWidgetsList->IsFocused() ) )
@@ -669,13 +740,16 @@
 //
 void CWmMainContainer::InitializeControlsL( const TRect& /*aRect*/ )
 	{
-	// Create OVI STORE button
-    HBufC* oviText = StringLoader::LoadLC( R_QTN_WM_GO_TO_OVI_STORE );    
-    iOviPortal = CWmPortalButton::NewL( this, *oviText );
-    CleanupStack::PopAndDestroy( oviText );
-    
-    iOviPortal->SetMopParent( this );    
-    AddControlL( iOviPortal, EOviPortal );
+	// Create portal buttons
+    iPortalButtonOne = CWmPortalButton::NewL( this, 0 );
+    iPortalButtonOne->SetMopParent( this );    
+    AddControlL( iPortalButtonOne, EPortalOne );
+    if ( iConfiguration->PortalButtonCount() > 1 )
+        {
+        iPortalButtonTwo = CWmPortalButton::NewL( this, 1 );
+        iPortalButtonTwo->SetMopParent( this );    
+        AddControlL( iPortalButtonTwo, EPortalTwo );
+        }
     
     // Create widget list box
     iWidgetsList = CWmListBox::NewL(
@@ -807,7 +881,7 @@
 //
 TBool CWmMainContainer::PortalSelected()
     {    
-    return ( iFocusMode == EOvi );
+    return ( iFocusMode == EPortal );
     }
 
 // ---------------------------------------------------------
@@ -864,7 +938,7 @@
     if ( WidgetSelected() )
         {
         CWmWidgetData* data = iWidgetsList->WidgetData();        
-        if ( data->WidgetType() == CWmWidgetData::ECps &&
+        if ( data && data->WidgetType() == CWmWidgetData::ECps &&
             data->PublisherUid() != KNullUid )
             {
             retVal = ETrue;
@@ -930,12 +1004,36 @@
 
         // set add to homescreen to be executed later
         iWmPlugin.SetPostponedCommandL(
-                CWmPlugin::EAddToHomescreen, data->HsContentInfo() );
+            CWmPlugin::EAddToHomescreen,
+            data->HsContentInfo() );
 
-        iWmPlugin.Deactivate();
+        // check if we can add any widgets to hs. 
+        TBool hsContentFull = ETrue;
+        for ( TInt i=0; i<iWidgetsList->WidgetDataCount(); i++ )
+            {
+            CHsContentInfo& info = iWidgetsList->WidgetData(i).HsContentInfo();
+            if ( info.CanBeAdded() ) 
+                {
+                hsContentFull = EFalse;
+                break;
+                }
+            }
+        
+        // do not deactivate wm if wrt widget already exists on hs,
+        // instead of that show popup info note.
+        if ( CWmWidgetData::ECps == data->WidgetType() &&
+            !data->HsContentInfo().CanBeAdded() &&
+            !hsContentFull )
+            {
+            iWmPlugin.ExecuteCommandL();
+            }
+        else
+            {
+            iWmPlugin.Deactivate();
+            }
         }
     }
-	
+
 // ---------------------------------------------------------------------------
 // CWmMainContainer::LaunchWidgetL
 // ---------------------------------------------------------------------------
@@ -1076,90 +1174,25 @@
     {
     if ( CanDoUninstall() )
         {
-        CWmWidgetData* data = iWidgetsList->WidgetData();
-        
-        SwiUI::RSWInstLauncher installer;
-        User::LeaveIfError( installer.Connect() );
-        
-        installer.Uninstall( data->PublisherUid(), KWrtMime );
-        installer.Close();
+        iWidgetsList->WidgetData()->UnInstallL();
         }
     }
 
 // ---------------------------------------------------------------------------
-// CWmMainContainer::OpenOviPortalL
+// CWmMainContainer::OpenPortalL
 // ---------------------------------------------------------------------------
 //
-void CWmMainContainer::OpenOviPortalL()
+void CWmMainContainer::OpenPortalL()
     {
     if ( !iClosingDown )
         {
-        RApaLsSession session;
-        User::LeaveIfError( session.Connect() );
-        CleanupClosePushL( session );
-        TApaAppInfo appInfo;
-        TUid launchUid;
-
-        // Get ovi store uid    
-        RWidgetRegistryClientSession widgetSession;
-        User::LeaveIfError( widgetSession.Connect() );    
-        CleanupClosePushL( widgetSession );
-        
-        launchUid.iUid = widgetSession.GetWidgetUidL( *iOviStoreClientBundleId );    
-        CleanupStack::PopAndDestroy( &widgetSession );
-
-        TInt err = session.GetAppInfo( appInfo, launchUid );
-        if ( err == KErrNone )
-            {
-            CApaCommandLine* commandLine = CApaCommandLine::NewLC();
-            commandLine->SetExecutableNameL(appInfo.iFullName); 
-            HBufC8* buf8 = HBufC8::NewLC( iOviStoreClientParam->Des().Length() );
-            buf8->Des().Copy( *iOviStoreClientParam );
-                    
-            //cmdLine->SetOpaqueDataL( *buf8 );
-            commandLine->SetTailEndL( *buf8 );
-            err = session.StartApp( *commandLine );
-            CleanupStack::PopAndDestroy( buf8 );
-            CleanupStack::PopAndDestroy( commandLine );
-            }
-        else
-            {
-            if( iOviStoreUrl )
-                {
-                // Ovi store not found start browser
-                const TUid KOSSBrowserUidValue = { 0x10008D39 };
-                HBufC* param = HBufC::NewLC( iOviStoreUrl->Length() + 
-                        KBrowserPrefix().Length() );
-                
-                param->Des().Copy( KBrowserPrefix );
-                param->Des().Append( *iOviStoreUrl );
-                
-                TUid id( KOSSBrowserUidValue );
-                
-                TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
-                TApaTask task = taskList.FindApp(id);
-                if( task.Exists() )
-                    {
-                    task.BringToForeground();
-                    HBufC8* param8 = HBufC8::NewLC(param->Length());
-                    param8->Des().Append(*param);
-                    task.SendMessage(TUid::Uid(0), *param8); // UID not used
-                    CleanupStack::PopAndDestroy(param8);
-                    }
-                else
-                    {
-                    if( !session.Handle() )
-                        {
-                        User::LeaveIfError( session.Connect() );
-                        }
-                    TThreadId thread;
-                    User::LeaveIfError(session.StartDocument(*param, KOSSBrowserUidValue, thread));
-                      
-                    }
-                CleanupStack::PopAndDestroy( param );
-                }
-            }
-        CleanupStack::PopAndDestroy( &session );
+        // execute whichever of the portal buttons happens to be active
+        if ( iPortalButtonOne->IsFocused() )
+            iPortalButtonOne->ExecuteL();
+        else if ( iPortalButtonTwo && iPortalButtonTwo->IsFocused() )
+            iPortalButtonTwo->ExecuteL();
+        else if ( !iPortalButtonTwo )
+            iPortalButtonOne->ExecuteL();
         }
     }
 
@@ -1172,7 +1205,7 @@
     if ( WidgetSelected() )
         AddWidgetToHomeScreenL();
     else if ( PortalSelected() )
-        OpenOviPortalL();
+        OpenPortalL();
     else
         SetFocusToWidgetList();
     }
@@ -1245,10 +1278,8 @@
         const CFbsBitmap* mask = ( data->LogoImageMask() ) ? 
                     data->LogoImageMask() : iWidgetsList->DefaultMask();
         
-        TPtrC description = ( data->Description().Length() > 0 ) ? 
-            data->Description() : iWmPlugin.ResourceLoader().NoDescriptionText();
         CWmDetailsDlg* dlg = CWmDetailsDlg::NewL(
-                data->Name(), description, 
+                data->Name(), data->Description(), 
                 data->HsContentInfo().CanBeAdded(),
                 logo, mask, iBgContext );
 
@@ -1278,6 +1309,15 @@
     }
 
 // ----------------------------------------------------
+// CWmMainContainer::Configuration
+// ----------------------------------------------------
+//
+CWmConfiguration& CWmMainContainer::Configuration()
+    {
+    return *iConfiguration;
+    }
+
+// ----------------------------------------------------
 // CWmMainContainer::HandleFindSizeChanged
 // ----------------------------------------------------
 //
--- a/idlehomescreen/widgetmanager/src/wmmaincontainerview.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/src/wmmaincontainerview.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -306,7 +306,7 @@
     {
     if ( iWmMainContainer && iWmMainContainer->PortalSelected() )
         {       
-        iWmMainContainer->OpenOviPortalL();
+        iWmMainContainer->OpenPortalL();
         }
     return ETrue;
     }
--- a/idlehomescreen/widgetmanager/src/wmplugin.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/src/wmplugin.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -20,6 +20,8 @@
 #include <bautils.h>
 #include <coemain.h>
 #include <aknViewAppUi.h>
+#include <e32property.h>
+#include <activeidle2domainpskeys.h>
 
 #include "wmcommon.h"
 #include "widgetmanager.hrh"
@@ -49,15 +51,35 @@
 //
 CWmPlugin::~CWmPlugin()
     {
+    iPostponedCommand = ENone;
     if ( iViewAppUi )
         {
-        Deactivate();
-        iViewAppUi->RemoveView( TUid::Uid( EWmMainContainerViewId ) );
-        }
-    iWmMainContainer = NULL;
+        if ( iWmMainContainer && IsActive() )
+            {
+            iWmMainContainer->SetClosingDown( ETrue );
+            TRAPD( err, iViewAppUi->ActivateLocalViewL(
+                            iPreviousViewUid.iViewUid ); );
+            if ( KErrNone == err )
+                {
+                iWait->Start();
+                // remove view from appui
+                iViewAppUi->RemoveView( 
+                        TUid::Uid( EWmMainContainerViewId ) );
+                }
+            else
+                {
+                TRAP_IGNORE( iViewAppUi->DeactivateActiveViewL(); );
+                iViewAppUi->RemoveFromViewStack( 
+                        *iWmMainView, iWmMainContainer );
+                delete iWmMainContainer;
+                iWmMainContainer = NULL;
+                }
+            }
+        }    
     delete iResourceLoader;
     delete iEffectManager;
     delete iPostponedContent;
+    delete iWait;
     }
 
 // ---------------------------------------------------------
@@ -76,6 +98,7 @@
 void CWmPlugin::ConstructL()
     {
     iWmMainContainer = NULL;
+    iWmMainView = NULL;
 
     // store static view app ui
     CEikonEnv* eikonEnv = CEikonEnv::Static();
@@ -88,12 +111,16 @@
     iResourceLoader = CWmResourceLoader::NewL( *eikonEnv );
     iEffectManager = CWmEffectManager::NewL( *eikonEnv );
     
+    // wait object
+    iWait = new (ELeave) CActiveSchedulerWait();
+    
     // main view
     CWmMainContainerView* mainView =
             CWmMainContainerView::NewL( *this );
     CleanupStack::PushL( mainView );
 	iViewAppUi->AddViewL( mainView );	
 	CleanupStack::Pop( mainView );
+	iWmMainView = mainView;
     }
 
 // ---------------------------------------------------------
@@ -152,6 +179,9 @@
     iWmMainContainer = aWmMainContainer;
     iEffectManager->UiRendered();
     iWmMainContainer->SetClosingDown( EFalse );
+    
+    // Don't forward numeric keys to phone
+    ForwardNumericKeysToPhone( EFalse );
     }
 
 // ---------------------------------------------------------
@@ -160,11 +190,35 @@
 //
 void CWmPlugin::MainViewDeactivated()
     {
+    // Forward numeric keys to phone
+    ForwardNumericKeysToPhone( ETrue );
+    
     iPreviousViewUid.iViewUid = KNullUid;
     iWmMainContainer = NULL;
-    iEffectManager->UiRendered();
+    if ( iEffectManager && !iWait->IsStarted() )
+        {
+        iEffectManager->UiRendered();
+        }
+
+    TRAP_IGNORE( ExecuteCommandL(); );
+
+    if ( iWait->IsStarted() ) { iWait->AsyncStop(); }
+    }
 
-    TRAP_IGNORE( ExecutePostponedCommandL(); );
+// ---------------------------------------------------------
+// CWmPlugin::ForwardNumericKeysToPhone
+// ---------------------------------------------------------
+//
+void CWmPlugin::ForwardNumericKeysToPhone( TBool aEnabled )
+    {
+    TInt value = aEnabled ? 
+        EPSAiForwardNumericKeysToPhone : 
+        EPSAiDontForwardNumericKeysToPhone;
+    
+    RProperty::Set(
+        KPSUidAiInformation,
+        KActiveIdleForwardNumericKeysToPhone,
+        value );
     }
 
 // ---------------------------------------------------------
@@ -181,10 +235,10 @@
     }
 
 // ---------------------------------------------------------
-// CWmPlugin::ExecutePostponedCommandL
+// CWmPlugin::ExecuteCommandL
 // ---------------------------------------------------------
 //
-void CWmPlugin::ExecutePostponedCommandL()
+void CWmPlugin::ExecuteCommandL()
     {
     if ( iPostponedCommand == EAddToHomescreen )
         {
@@ -257,7 +311,7 @@
 //
 void CWmPlugin::NotifyWidgetListChanged()
     {
-    if ( iWmMainContainer )
+    if ( iWmMainContainer && !iWmMainContainer->ClosingDown() )
         {
         iWmMainContainer->HandleWidgetListChanged();
         }
--- a/idlehomescreen/widgetmanager/src/wmportalbutton.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/src/wmportalbutton.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -27,12 +27,20 @@
 #include <gulicon.h>
 #include <avkon.mbg>
 #include <widgetmanager.mbg>
+#include <apgcli.h>
+#include <apgtask.h>
+#include <widgetregistryclient.h> // widgetreqistry
+
 
 #include "wmportalbutton.h"
 #include "wmcommon.h"
 #include "wmplugin.h"
 #include "wmresourceloader.h"
 #include "wmmaincontainer.h"
+#include "wmconfiguration.h"
+
+// CONSTANTS
+_LIT( KBrowserPrefix, "4 ");
 
 // MEMBER FUNCTIONS
 
@@ -42,14 +50,21 @@
 //
 CWmPortalButton* CWmPortalButton::NewL( 
         const CCoeControl* aParent,
-        const TDesC& aText,
-        const TDesC& aUrl,
-        TWmUiControlIds aButtonCtrlId )
+        TInt aPortalButtonIndex )
 	{
  	CWmPortalButton* self = new (ELeave) CWmPortalButton( 
-                KAknButtonTextInsideFrame, aButtonCtrlId );
-    CleanupStack::PushL( self );
-    self->ConstructL( aParent,aText, aUrl );
+                KAknButtonTextInsideFrame, aPortalButtonIndex );
+
+ 	CleanupStack::PushL( self );
+    
+    CWmMainContainer* mainContainer =
+        static_cast <CWmMainContainer*>( 
+            const_cast <CCoeControl*>( aParent ) );
+
+    self->ConstructL( mainContainer,
+            mainContainer->Configuration().PortalButtonText( aPortalButtonIndex ),
+            mainContainer->Configuration().PortalButtonIcon( aPortalButtonIndex ) );
+    
     CleanupStack::Pop( self );
     return self;
 	}
@@ -59,9 +74,13 @@
 // ---------------------------------------------------------
 //
 CWmPortalButton::~CWmPortalButton()
-    {
-    delete iText;
-    delete iUrl;
+    {    
+    delete iButtonIcon;
+    delete iButtonIconMask;
+    
+    // if MAknIconFileProvider was used to create image from icon string
+    // then it'll try accessing imageconverter after bitmap deletion
+    // for de-reference open file count, so it should be deleted last.
     delete iImageConverter;
     }
 
@@ -71,10 +90,12 @@
 //
 CWmPortalButton::CWmPortalButton( 
                         const TInt aFlags,
-                        TWmUiControlIds aButtonCtrlId )
+                        TInt aPortalButtonIndex )
     :CAknButton( aFlags ),
-    iButtonCtrlId( aButtonCtrlId )
+    iPortalButtonIndex( aPortalButtonIndex )
     {
+    iButtonIcon = NULL;
+    iButtonIconMask = NULL;
     }
 
 // ---------------------------------------------------------
@@ -82,14 +103,15 @@
 // ---------------------------------------------------------
 //
 void CWmPortalButton::ConstructL( 
-        const CCoeControl* aParent,
-        const TDesC& aText, const TDesC& aUrl )
+        CWmMainContainer* aParent,
+        const TDesC& aText,
+        const TDesC& aIcon )
     {
     if (  !aParent )
         {
         User::Leave( KErrArgument );
         }
-    else if ( iButtonCtrlId != EOviPortal )
+    else if ( iPortalButtonIndex != 0 )
         {
         // operator button not supported until layout available.
         User::Leave( KErrNotSupported );
@@ -98,32 +120,15 @@
     SetContainerWindowL( *aParent );
     
     // Obtain pointer to main container.
-    iWmMainContainer = 
-            static_cast <CWmMainContainer*>( 
-                const_cast <CCoeControl*>( aParent ) );
-    
-    CGulIcon* icon = AknsUtils::CreateGulIconL(
-            AknsUtils::SkinInstance(), KAknsIIDQgnMenuOviStore,
-            iWmMainContainer->WmPlugin().ResourceLoader().IconFilePath(),
-            EMbmWidgetmanagerQgn_menu_ovistore,
-            EMbmWidgetmanagerQgn_menu_ovistore_mask );
+    iWmMainContainer = aParent;
     
-    CleanupStack::PushL( icon );
-    CAknButton::ConstructL( icon, NULL, NULL, NULL,
-                            aText, KNullDesC, 0 );
-    CleanupStack::Pop( icon ); // ownership taken
-    
-    TAknsItemID frameId = ((iButtonCtrlId == EOviPortal) ? 
-        KAknsIIDQgnHomeWmButton : KAknsIIDQsnFrButtonNormal);
-    TAknsItemID frameCenterId = ((iButtonCtrlId == EOviPortal) ? 
-        KAknsIIDQgnHomeWmButtonCenter : KAknsIIDQsnFrButtonCenterNormal );
-    TAknsItemID framePressedId = ((iButtonCtrlId == EOviPortal) ? 
-        KAknsIIDQgnHomeWmButtonPressed : KAknsIIDQsnFrButtonPressed );
-    TAknsItemID framePressedCenterId = ((iButtonCtrlId == EOviPortal) ? 
-        KAknsIIDQgnHomeWmButtonPressedCenter : KAknsIIDQsnFrButtonCenterPressed );
+    // construct the button
+    CAknButton::ConstructL( NULL, NULL, NULL, NULL, aText, KNullDesC, 0 );
 
-    iText = aText.AllocL();
-    iUrl = aUrl.AllocL();
+    TAknsItemID frameId = KAknsIIDQgnHomeWmButton;
+    TAknsItemID frameCenterId = KAknsIIDQgnHomeWmButtonCenter;
+    TAknsItemID framePressedId = KAknsIIDQgnHomeWmButtonPressed;
+    TAknsItemID framePressedCenterId = KAknsIIDQgnHomeWmButtonPressedCenter;
 
     SetFocusing( ETrue );
     SetBackgroundIds( frameId,
@@ -143,67 +148,176 @@
 						KAknsIIDDefault,
 						KAknsIIDDefault );
     
+    // start image converter for the icon
+    iImageConverter = CWmImageConverter::NewL( this );
+    TSize iconsize( LayoutIconSize() );
+    iImageConverter->HandleIconString(
+            iconsize.iWidth, iconsize.iHeight, aIcon );
+    // observe our own press events
+    SetObserver( this );
+    
     // ready to be drawn
     ActivateL();
     }
 
+// ---------------------------------------------------------------------------
+// Runs HTTP method: (starts browser or brongs browser to foreground)
+// ---------------------------------------------------------------------------
+//
+void TryRunHttpL( const TDesC& aParam )
+    {
+    RApaLsSession session;
+    User::LeaveIfError( session.Connect() );
+    CleanupClosePushL( session );
+
+    // browser start parameters
+    const TUid KOSSBrowserUidValue = { 0x10008D39 };
+    HBufC* param = HBufC::NewLC( aParam.Length() + 
+            KBrowserPrefix().Length() );
+    
+    param->Des().Copy( KBrowserPrefix );
+    param->Des().Append( aParam );
+    
+    TUid id( KOSSBrowserUidValue );
+    
+    TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
+    TApaTask task = taskList.FindApp( id );
+    if( task.Exists() )
+        {
+        task.BringToForeground();
+        HBufC8* param8 = HBufC8::NewLC(param->Length());
+        param8->Des().Append(*param);
+        task.SendMessage(TUid::Uid(0), *param8); // UID not used
+        CleanupStack::PopAndDestroy(param8);
+        }
+    else
+        {
+        if( !session.Handle() )
+            {
+            User::LeaveIfError( session.Connect() );
+            }
+        TThreadId thread;
+        User::LeaveIfError(session.StartDocument(*param, KOSSBrowserUidValue, thread));
+        }
+    
+    CleanupStack::PopAndDestroy( param );
+    CleanupStack::PopAndDestroy( &session );
+    }
+
+// ---------------------------------------------------------------------------
+// Runs WIDGET method: (launches given widget with parameters)
+// ---------------------------------------------------------------------------
+//
+void TryRunWidgetL( const TDesC& aParam, const TDesC& aBundleId )
+    {
+    RApaLsSession session;
+    User::LeaveIfError( session.Connect() );
+    CleanupClosePushL( session );
+    TApaAppInfo appInfo;
+    TUid launchUid;
+    
+    // Get widget uid    
+    RWidgetRegistryClientSession widgetSession;
+    User::LeaveIfError( widgetSession.Connect() );    
+    CleanupClosePushL( widgetSession );
+    launchUid.iUid = widgetSession.GetWidgetUidL( aBundleId );
+    CleanupStack::PopAndDestroy( &widgetSession );
+
+    // prepare widget start params
+    User::LeaveIfError( session.GetAppInfo( appInfo, launchUid ) );
+    CApaCommandLine* commandLine = CApaCommandLine::NewLC();
+    commandLine->SetExecutableNameL( appInfo.iFullName );
+    HBufC8* buf8 = HBufC8::NewLC( aParam.Length() );
+    buf8->Des().Copy( aParam );
+
+    // do the launch
+    commandLine->SetTailEndL( *buf8 );
+    User::LeaveIfError( session.StartApp( *commandLine ) );
+    
+    CleanupStack::PopAndDestroy( buf8 );
+    CleanupStack::PopAndDestroy( commandLine );
+    CleanupStack::PopAndDestroy( &session );
+    }
+
+// ---------------------------------------------------------------------------
+// Tries to open a portal with given method and parameters.
+// this method may be called twice on a portal button, if a primary
+// method fails.
+// ---------------------------------------------------------------------------
+//
+void TryOpenPortalL(
+        CWmConfiguration::TMethod aMethod, const TDesC& aParam,
+        const TDesC& aBundleId )
+    {
+    // open portal according to the method.
+    if ( aMethod == CWmConfiguration::EHttp )
+        { TryRunHttpL( aParam ); }
+    else if ( aMethod == CWmConfiguration::EWidget )
+        { TryRunWidgetL( aParam, aBundleId ); }
+    else
+        { /* do nothing */ }
+    }
+
+// ---------------------------------------------------------------------------
+// Opens a portal. Called when user presses a portal button. tries the
+// primary method, and if if fails, tries the secondary. If it fails,
+// gives up.
+// ---------------------------------------------------------------------------
+//
+void OpenPortalL(
+        CWmConfiguration& aConfiguration, TInt aPortalIndex )
+    {
+    TRAPD( err,
+        TryOpenPortalL(
+            aConfiguration.PortalButtonPrimaryMethod( aPortalIndex ),
+            aConfiguration.PortalButtonPrimaryParams( aPortalIndex ),
+            aConfiguration.PortalButtonBundleId( aPortalIndex ) ); );
+    if ( err != KErrNone )
+        {
+        // if secondary method fails, leave will be propagated.
+        TryOpenPortalL(
+            aConfiguration.PortalButtonSecondaryMethod( aPortalIndex ),
+            aConfiguration.PortalButtonSecondaryParams( aPortalIndex ),
+            aConfiguration.PortalButtonBundleId( aPortalIndex ) );
+        }
+    }
+
 // ---------------------------------------------------------
-// CWmPortalButton::HandlePointerEventL
+// CWmPortalButton::ExecuteL
 // ---------------------------------------------------------
 //
-void CWmPortalButton::HandlePointerEventL( 
-        const TPointerEvent& aPointerEvent )
-	{
-	CAknButton::HandlePointerEventL( aPointerEvent);
-	
-	if ( AknLayoutUtils::PenEnabled() )
-		{
-        switch ( aPointerEvent.iType )
-            {
-            case TPointerEvent::EButton1Down:
-                {
-                break;	
-                }
-            case TPointerEvent::EButton1Up:
-                {
-                if ( iWmMainContainer && 
-                    iButtonCtrlId == EOviPortal )
-                    {
-                    iWmMainContainer->OpenOviPortalL();
-                    }
-                break;
-                }
-            default:
-                break;
-            }
-       }	
-	}
-	
+void CWmPortalButton::ExecuteL()
+    {
+    OpenPortalL( iWmMainContainer->Configuration(), iPortalButtonIndex );
+    }
+
 // ---------------------------------------------------------
-// CWmPortalButton::OfferKeyEventL
+// CWmPortalButton::HandleControlEventL
 // ---------------------------------------------------------
 //
-TKeyResponse CWmPortalButton::OfferKeyEventL( 
-		const TKeyEvent& aKeyEvent, 
-		TEventCode aType )
+void CWmPortalButton::HandleControlEventL( CCoeControl* /*aControl*/,
+        TCoeEvent aEventType )
     {
-    TKeyResponse keyResponse( EKeyWasNotConsumed );    
-    keyResponse = CAknButton::OfferKeyEventL( aKeyEvent, aType );
-    
-    if ( ( aType == EEventKey ) &&
-       ( aKeyEvent.iScanCode == EStdKeyDevice3 ||
-        aKeyEvent.iScanCode == EStdKeyEnter ) )
+    // execute portal action when button pressed (short or long press)
+    if ( aEventType == EEventStateChanged ||
+        aEventType == ELongPressEndedEvent )
         {
-        if ( iWmMainContainer && 
-            iButtonCtrlId == EOviPortal )
-            {
-            iWmMainContainer->OpenOviPortalL();
-            }
+        ExecuteL();
+        }
+    }
 
-        keyResponse = EKeyWasConsumed;
-        }
-
-    return keyResponse;
+// ---------------------------------------------------------
+// CWmPortalButton::LayoutIconSize
+// ---------------------------------------------------------
+//
+TSize CWmPortalButton::LayoutIconSize() const
+    {
+    TBool landscape = Layout_Meta_Data::IsLandscapeOrientation();
+    TAknLayoutRect imageLayout;
+    imageLayout.LayoutRect( Rect(),
+        AknLayoutScalable_Apps::wgtman_btn_pane_g1(
+            landscape ? 1 : 0).LayoutLine() );
+    return imageLayout.Rect().Size();
     }
 
 // ---------------------------------------------------------
@@ -214,17 +328,19 @@
     {    
     CAknButton::SizeChanged();
 
-    TBool landscape = Layout_Meta_Data::IsLandscapeOrientation();
-    TRect rect = Rect();
-    TAknLayoutRect imageLayout;
-    if ( iButtonCtrlId == EOviPortal )
+    SetTextVerticalAlignment( CAknButton::ECenter );
+    
+    // resize icon
+    if ( iButtonIcon && iButtonIconMask )
         {
-        imageLayout.LayoutRect( rect,
-                AknLayoutScalable_Apps::wgtman_btn_pane_g1(
-                                    landscape ? 1 : 0).LayoutLine() );
+        TSize size = LayoutIconSize();
+        AknIconUtils::SetSize( 
+            iButtonIcon, size, EAspectRatioPreserved );
+        AknIconUtils::SetSize( 
+            iButtonIconMask, size, EAspectRatioPreserved );
         }
-    SetTextVerticalAlignment( CAknButton::ECenter );
-    SetIconSize( imageLayout.Rect().Size() );
+        
+    TBool landscape = Layout_Meta_Data::IsLandscapeOrientation();
     SetTextAndIconAlignment( 
             landscape ? CAknButton::EIconOverText : CAknButton::EIconBeforeText );
     }
@@ -235,21 +351,28 @@
 //
 void CWmPortalButton::NotifyCompletion( TInt aError )
     {
-    if ( KErrNone != aError )
+    if ( KErrNone == aError )
         {
-        // no image available. Do nothing.
+        // take ownership of icon
+        delete iButtonIcon;
+        iButtonIcon = NULL;
+        iButtonIcon = iImageConverter->Bitmap();
+        delete iButtonIconMask;
+        iButtonIconMask = NULL;
+        iButtonIconMask = iImageConverter->Mask();
+        if ( iButtonIcon && iButtonIconMask )
+            {
+            TSize size = LayoutIconSize();
+            AknIconUtils::SetSize( 
+                    iButtonIcon, size, EAspectRatioPreserved );
+            AknIconUtils::SetSize( 
+                    iButtonIconMask, size, EAspectRatioPreserved );
+            DrawDeferred();            
+            }
         }
     else
-        {        
-        CGulIcon* icon = NULL;
-        TRAPD( err, icon = CGulIcon::NewL( 
-                iImageConverter->Bitmap(), iImageConverter->Mask() ) );
-        if ( KErrNone == err && icon )
-            {
-            // Ownership transfered
-            State()->SetIcon( icon );
-            DrawDeferred();            
-            }
+        {
+        // no image available. Do nothing.
         }
     }
 
@@ -269,17 +392,13 @@
     CWindowGc& gc = SystemGc();
     MAknsSkinInstance* skin = AknsUtils::SkinInstance();
 
- 	TAknsItemID frameId = ( ( iButtonCtrlId == EOviPortal) ? 
- 	    KAknsIIDQgnHomeWmButton : KAknsIIDQsnFrButtonNormal );
-    TAknsItemID frameCenterId = ( ( iButtonCtrlId == EOviPortal) ? 
-        KAknsIIDQgnHomeWmButtonCenter : KAknsIIDQsnFrButtonCenterNormal );
+ 	TAknsItemID frameId = ( KAknsIIDQgnHomeWmButton );
+    TAknsItemID frameCenterId = ( KAknsIIDQgnHomeWmButtonCenter );
  	
     if ( iButtonPressed )
     	{
-        frameId = ( ( iButtonCtrlId == EOviPortal) ? 
-            KAknsIIDQgnHomeWmButtonPressed : KAknsIIDQsnFrButtonPressed );
-        frameCenterId = ( ( iButtonCtrlId == EOviPortal) ? 
-            KAknsIIDQgnHomeWmButtonPressedCenter : KAknsIIDQsnFrButtonCenterPressed );
+        frameId = ( KAknsIIDQgnHomeWmButtonPressed );
+        frameCenterId = ( KAknsIIDQgnHomeWmButtonPressedCenter );
     	}
     else if ( IsDimmed() )
         {
@@ -310,27 +429,27 @@
         {
         TBool landscape = Layout_Meta_Data::IsLandscapeOrientation();
         
-        const CGulIcon* icon = state->Icon();
-        CFbsBitmap* bitmap = const_cast<CFbsBitmap*>(icon->Bitmap());
-        CFbsBitmap* mask = const_cast<CFbsBitmap*>(icon->Mask());
-        // draw image
-        if ( state->Icon() && bitmap && mask )
+        
+        // draw image if one exists
+        if ( iButtonIcon && iButtonIconMask )
             {
             TAknLayoutRect imageLayout;
-            if ( iButtonCtrlId == EOviPortal )
+            // todo: 2-button layout
+            if ( iWmMainContainer->Configuration().PortalButtonCount() == 1 )
                 {
                 imageLayout.LayoutRect( rect,
                         AknLayoutScalable_Apps::wgtman_btn_pane_g1(
                                 landscape ? 1 : 0).LayoutLine() );
                 }
-            imageLayout.DrawImage( gc, bitmap, mask );
+            imageLayout.DrawImage( gc, iButtonIcon, iButtonIconMask );
             }
         
         // draw text if portrait        
         if ( !landscape )
             {
             TAknTextComponentLayout leftLayout;
-            if ( iButtonCtrlId == EOviPortal )
+            // todo: 2-button layout
+            if ( iWmMainContainer->Configuration().PortalButtonCount() == 1 )
                 {
                 leftLayout = AknLayoutScalable_Apps::wgtman_btn_pane_t1( 
                                                     landscape ? 1 : 0  );
--- a/idlehomescreen/widgetmanager/src/wmresourceloader.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/src/wmresourceloader.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -67,7 +67,8 @@
     {
     UnloadResources();
     delete iNote;
-    delete iDescription;
+    delete iNoDescription;
+    delete iWrtDescription;
     }
 
 // ---------------------------------------------------------
@@ -81,8 +82,11 @@
     LoadResourcesL();
     DetermineIconFilePath();
     
-    iDescription = StringLoader::LoadL( 
+    iNoDescription = StringLoader::LoadL( 
             R_QTN_WM_DETAILS_NO_DESCRIPTION, &iEnv  );
+    
+    iWrtDescription = StringLoader::LoadL( 
+            R_QTN_WM_WIDGET_DETAILS_WRT, &iEnv  );
     }
 
 // ---------------------------------------------------------
@@ -209,13 +213,22 @@
     }
 
 // ---------------------------------------------------------
-// CWmResourceLoader::NoDescriptionText
+// CWmResourceLoader::NoDescription
 // ---------------------------------------------------------
 //
-const TDesC& CWmResourceLoader::NoDescriptionText()
+const TDesC& CWmResourceLoader::NoDescription()
     {
-    return *iDescription;
+    return *iNoDescription;
     }
-    
+
+// ---------------------------------------------------------
+// CWmResourceLoader::WrtDescription
+// ---------------------------------------------------------
+//
+const TDesC& CWmResourceLoader::WrtDescription()
+    {
+    return *iWrtDescription;
+    }
+
 // end of file
 
--- a/idlehomescreen/widgetmanager/src/wmwidgetdata.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/src/wmwidgetdata.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -23,24 +23,34 @@
 #include <s32file.h>
 #include <hscontentinfo.h>
 #include <widgetregistryclient.h> // widgetreqistry
-#include <StringLoader.h>
 #include <eikenv.h>
+#include <avkon.mbg>
+#include <avkon.rsg>
+#include <AknsDrawUtils.h>
+#include <AknBitmapAnimation.h>
+#include <barsread.h>
 
 #include "wmwidgetdata.h"
 #include "wmwidgetdataobserver.h"
 #include "wmpersistentwidgetorder.h"
+#include "wmresourceloader.h"
 #include "wmcommon.h"
-#include <widgetmanagerview.rsg>
+
+// CONSTANTS
+_LIT8( KWrtMime, "application/x-nokia-widget");
 
 // ---------------------------------------------------------
 // CWmWidgetData::NewL
 // ---------------------------------------------------------
 //
-CWmWidgetData* CWmWidgetData::NewL( 
+CWmWidgetData* CWmWidgetData::NewL(
+        const TSize& aLogoSize,
+        CWmResourceLoader& aWmResourceLoader,
         CHsContentInfo* aHsContentInfo,
         RWidgetRegistryClientSession* aRegistryClientSession )
     {
     CWmWidgetData* self = CWmWidgetData::NewLC( 
+            aLogoSize, aWmResourceLoader,
             aHsContentInfo, aRegistryClientSession );
     CleanupStack::Pop(); // self;
     return self;
@@ -50,11 +60,14 @@
 // CWmWidgetData::NewLC
 // ---------------------------------------------------------
 //
-CWmWidgetData* CWmWidgetData::NewLC( 
+CWmWidgetData* CWmWidgetData::NewLC(
+        const TSize& aLogoSize,
+        CWmResourceLoader& aWmResourceLoader,
         CHsContentInfo* aHsContentInfo,
         RWidgetRegistryClientSession* aRegistryClientSession )
     {
-    CWmWidgetData* self = new ( ELeave ) CWmWidgetData();
+    CWmWidgetData* self = new ( ELeave ) CWmWidgetData( 
+            aLogoSize, aWmResourceLoader );
     CleanupStack::PushL(self);
     self->ConstructL( aHsContentInfo, aRegistryClientSession );
     return self;
@@ -64,16 +77,23 @@
 // CWmWidgetData::CWmWidgetData
 // ---------------------------------------------------------
 //
-CWmWidgetData::CWmWidgetData()
+CWmWidgetData::CWmWidgetData( const TSize& aLogoSize, 
+        CWmResourceLoader& aWmResourceLoader )
+    : CActive( EPriorityStandard ),
+    iWmResourceLoader( aWmResourceLoader )
     {
     iIdle = NULL;
     iLogoImage = NULL;    
     iLogoImageMask = NULL;
     iHsContentInfo = NULL;
     iWidgetType = CWmWidgetData::EUnknown;
-    iInstallAnimationIndex = KErrNotFound;
     iPublisherUid = KNullUid;
-    iLogoSize = TSize( 0, 0 );
+    iLogoSize = aLogoSize;
+    iPeriodic = NULL;
+    iAnimationIndex = 0;
+    iAsyncUninstalling = EFalse;
+    iFireLogoChanged = EFalse;
+    CActiveScheduler::Add( this );
     }
 
 // ---------------------------------------------------------
@@ -88,8 +108,13 @@
 
     // start decoding the icon
     iImageConverter = CWmImageConverter::NewL( this );
-    iIdle = CIdle::NewL( CActive::EPriorityLow );
-    iIdle->Start( TCallBack( HandleAsyncIconString, this ) );
+    iIdle = CIdle::NewL( CActive::EPriorityStandard );
+    iWait = new (ELeave) CActiveSchedulerWait();
+    iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard );
+
+    // start logo handling
+    iImageConverter->SetLogoSize( iLogoSize );
+    HandleIconString( HsContentInfo().IconPath() );
     }
 
 // ---------------------------------------------------------
@@ -124,12 +149,20 @@
 //
 CWmWidgetData::~CWmWidgetData()
     {
+    Cancel();
     if ( iIdle && iIdle->IsActive() )
         {
         iIdle->Cancel();
         }
     delete iIdle;
+    if ( iWait && iWait->IsStarted() )
+        {
+        iWait->AsyncStop();
+        }
+    delete iWait;
     SetObserver( NULL );
+    DestroyAnimData();
+    delete iPeriodic;
     delete iLogoImage;
     delete iLogoImageMask;
     delete iImageConverter;
@@ -219,15 +252,24 @@
         {
         iLogoImage = iImageConverter->Bitmap();
         iLogoImageMask = iImageConverter->Mask();
-        FireDataChanged();
+
+        if ( iWait && iWait->IsStarted() )
+            {
+            iWait->AsyncStop();
+            }
+        if ( iFireLogoChanged ) 
+            {
+            iFireLogoChanged = EFalse;
+            FireDataChanged(); 
+            }
         }
     }
 
 // ---------------------------------------------------------
-// CWmWidgetData::HandleIconStringL
+// CWmWidgetData::HandleIconString
 // ---------------------------------------------------------
 //
-void CWmWidgetData::HandleIconStringL( const TDesC& aIconStr )
+void CWmWidgetData::HandleIconString( const TDesC& aIconStr )
     {
     HBufC* iconStr = NULL;
     if ( aIconStr.Length() == 0 && 
@@ -236,12 +278,13 @@
         // workaround for wrt widgets icon
         _LIT( KUidTag, "uid(0x%x)" );
         const TInt KLength = 32;
-        iconStr = HBufC::NewLC( KLength );
-        iconStr->Des().Format( KUidTag, iPublisherUid.iUid );
+        TBuf<KLength> uidBuf;
+        uidBuf.Format( KUidTag, iPublisherUid.iUid );
+        iconStr = uidBuf.Alloc();
         }
     else
         {
-        iconStr = aIconStr.AllocLC();
+        iconStr = aIconStr.Alloc();
         }
 
     TSize size( iLogoSize );
@@ -251,10 +294,21 @@
         {
         size = iLogoSize;
         }
-    iImageConverter->HandleIconStringL( 
+    TInt err = iImageConverter->HandleIconString( 
             size.iWidth, size.iHeight, *iconStr );
     
-    CleanupStack::PopAndDestroy( iconStr );    
+    delete iconStr;
+    iconStr = NULL;
+    
+    // handle result
+    if ( KErrNone == err && IsPrepairingLogo() )
+        {
+        iWait->Start();
+        }
+    else if ( KErrNone != err && iFireLogoChanged )
+        {
+        FireDataChanged(); // draw default icon
+        }
     }
 
 // ---------------------------------------------------------
@@ -314,12 +368,7 @@
         if ( widgetUid != 0 )
             {
             // WRT widget
-            iPublisherUid = TUid::Uid( widgetUid );
-            
-            HBufC* desc = StringLoader::LoadLC( R_QTN_WM_WIDGET_DETAILS_WRT, 
-                    CEikonEnv::Static() );
-            iHsContentInfo->SetDescriptionL( *desc );
-            CleanupStack::PopAndDestroy( desc );
+            iPublisherUid = TUid::Uid( widgetUid );            
             }
         else
             {
@@ -327,33 +376,21 @@
             }
         }
     }
-// ----------------------------------------------------
-// CWmWidgetData::SetLogoSize
-// ----------------------------------------------------
-//
-void CWmWidgetData::SetLogoSize( const TSize& aSize )
-    {
-    iLogoSize = aSize;
-    if ( iImageConverter )
-        {
-        iImageConverter->SetLogoSize( aSize );
-        }
-    }
 
 // ---------------------------------------------------------
-// CWmWidgetData::HandleAsyncIconString
+// CWmWidgetData::Description
 // ---------------------------------------------------------
 //
-TInt CWmWidgetData::HandleAsyncIconString( TAny* aPtr )
+const TDesC& CWmWidgetData::Description() const
     {
-    CWmWidgetData* self = static_cast< CWmWidgetData* >( aPtr );    
-    if ( self->iIdle->IsActive() )
-      { 
-      self->iIdle->Cancel(); 
-      }
-    TRAP_IGNORE( self->HandleIconStringL( 
-            self->HsContentInfo().IconPath() ); );
-    return KErrNone;
+    if ( iHsContentInfo->Description().Length() <= 0 &&
+        &iWmResourceLoader )
+        {
+        return ( ( iPublisherUid != KNullUid ) ? 
+            iWmResourceLoader.WrtDescription() : 
+            iWmResourceLoader.NoDescription() );
+        }
+    return iHsContentInfo->Description(); 
     }
 
 // ---------------------------------------------------------
@@ -361,19 +398,20 @@
 // ---------------------------------------------------------
 //
 void CWmWidgetData::ReCreateLogo( const TSize& aSize )
-    {
-    iLogoSize = aSize;
-    
+    {    
     delete iLogoImage;
     iLogoImage = NULL;
     delete iLogoImageMask;
     iLogoImageMask = NULL;
-
-    if ( iIdle && !iIdle->IsActive() )
+    
+    if ( iWait && iWait->IsStarted() )
         {
-        // start decoding the icon
-        iIdle->Start( TCallBack( HandleAsyncIconString, this ) );
+        iWait->AsyncStop();
         }
+    
+    iFireLogoChanged = ETrue;
+    iLogoSize = aSize;
+    HandleIconString( HsContentInfo().IconPath() );
     }
 
 // ---------------------------------------------------------
@@ -412,5 +450,274 @@
 
     return !( sameAppearance && sameLogo );
     }
+
+// ---------------------------------------------------------
+// CWmWidgetData::IsPrepairingLogo
+// ---------------------------------------------------------
+//
+TBool CWmWidgetData::IsPrepairingLogo()
+    {
+    TBool prepairing( EFalse );            
+    if ( !iLogoImage )
+        {
+        prepairing = iImageConverter->IsProcessing();
+        }
+    return prepairing;
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::UnInstallL
+// ---------------------------------------------------------
+//
+void CWmWidgetData::UnInstallL()
+    {
+    if ( IsUninstalling() || IsActive() )
+        {
+        User::Leave( KErrInUse );
+        }
+
+    DestroyAnimData();
+    
+    TInt err = iInstaller.Connect();
+    if ( KErrNone == err )
+        {
+        CleanupClosePushL( iInstaller );
+        PrepairAnimL();
+        CleanupStack::Pop( &iInstaller );
+        SwiUI::TUninstallOptions optionsUninstall;
+        optionsUninstall.iBreakDependency = SwiUI::EPolicyAllowed;
+        optionsUninstall.iKillApp = SwiUI::EPolicyAllowed;
+        SwiUI::TUninstallOptionsPckg uninstallOptionsPkg( optionsUninstall );
+        iInstaller.SilentUninstall( iStatus, iPublisherUid, 
+                                uninstallOptionsPkg, KWrtMime );
+        VisualizeUninstall();
+        SetActive();
+        }
+    else
+        {
+        // do normal uninstall
+        iAsyncUninstalling = EFalse;
+        SwiUI::RSWInstLauncher installer;
+        User::LeaveIfError( installer.Connect() );
+        CleanupClosePushL( installer );
+        User::LeaveIfError( installer.Uninstall( iPublisherUid, KWrtMime ) );
+        CleanupStack::PopAndDestroy( &installer );
+        }
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::VisualizeUninstall
+// ---------------------------------------------------------
+//
+void CWmWidgetData::VisualizeUninstall()
+    {
+    iAsyncUninstalling = ETrue;
+    iAnimationIndex = 0;
+    const TInt tickInterval = 400000;
+    iPeriodic->Start(
+            tickInterval,tickInterval,TCallBack(Tick, this));
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::PrepairAnimL
+// ---------------------------------------------------------
+//
+void CWmWidgetData::PrepairAnimL()
+    {
+    TInt resourceId = R_QGN_GRAF_WAIT_BAR_ANIM;
+    CAknBitmapAnimation* aknAnimation = CAknBitmapAnimation::NewL();
+    CleanupStack::PushL( aknAnimation );
+    aknAnimation->SetScaleModeForAnimationFrames(EAspectRatioNotPreserved);
+    TAknsItemID iid;
+    iid.Set(EAknsMajorAvkon, resourceId );
+    if ( !aknAnimation ->ConstructFromSkinL( iid ) )
+        {
+        TResourceReader readerForAnimation;
+        CCoeEnv::Static()->CreateResourceReaderLC( readerForAnimation,resourceId );
+        aknAnimation->ConstructFromResourceL( readerForAnimation );
+        CleanupStack::PopAndDestroy();
+        }
+    TInt endFrame = aknAnimation ->BitmapAnimData()->FrameArray().Count()-1;
+    for ( TInt i=0; i<=endFrame; i++ )
+        {
+        aknAnimation ->BitmapAnimData()->FrameArray().At(i)->SetBitmapsOwnedExternally( ETrue );
+        CFbsBitmap* bitmap  = aknAnimation ->BitmapAnimData()->FrameArray().At(i)->Bitmap();
+        CFbsBitmap* bitmapMask = aknAnimation ->BitmapAnimData()->FrameArray().At(i)->Mask();
+        if ( bitmap && bitmapMask )
+            {
+            iUninstallAnimIcons.AppendL( bitmap );
+            iUninstallAnimIcons.AppendL( bitmapMask );
+            }
+        }
+    CleanupStack::PopAndDestroy( aknAnimation );
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::DestroyAnimData
+// ---------------------------------------------------------
+//
+void CWmWidgetData::DestroyAnimData()
+    {
+    if ( iPeriodic && iPeriodic->IsActive() )
+        {
+        iPeriodic->Cancel();
+        }
+        
+    for( TInt i=0; i < iUninstallAnimIcons.Count(); i++ )
+        {
+        CFbsBitmap* bitmap = iUninstallAnimIcons[i];
+        delete bitmap; bitmap = NULL;
+        }
+    iUninstallAnimIcons.Close();    
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::Tick
+// ---------------------------------------------------------
+//
+TInt CWmWidgetData::Tick( TAny* aPtr )
+    {
+    CWmWidgetData* self = static_cast< CWmWidgetData* >( aPtr );
+    self->iAnimationIndex += 2;
+    if ( self->iAnimationIndex >= self->iUninstallAnimIcons.Count() -1 )
+        {
+        self->iAnimationIndex = 0; // restart from beginging
+        }
+    self->FireDataChanged();
+    return 1;
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::CloseSwiSession
+// ---------------------------------------------------------
+//
+TInt CWmWidgetData::CloseSwiSession( TAny* aPtr )
+    {
+    CWmWidgetData* self = static_cast< CWmWidgetData* >( aPtr );
+    if ( self->iIdle->IsActive() )
+      {
+      self->iIdle->Cancel(); 
+      }
+
+    self->iInstaller.Close();
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::AnimationBitmap
+// ---------------------------------------------------------
+//
+const CFbsBitmap* CWmWidgetData::AnimationBitmap( const TSize& aSize )
+    {
+    CFbsBitmap* bitmap = NULL;
+    if ( iUninstallAnimIcons.Count() )
+        {
+        TInt index = iAnimationIndex;
+        if ( index >= iUninstallAnimIcons.Count() - 1 )
+            {
+            index = 0;
+            }
+        bitmap = iUninstallAnimIcons[index];
+        if ( bitmap->SizeInPixels() != aSize )
+            {
+            AknIconUtils::SetSize( bitmap, aSize, 
+                    EAspectRatioNotPreserved );
+            }               
+        }
+    return bitmap;
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::AnimationMask
+// ---------------------------------------------------------
+//
+const CFbsBitmap* CWmWidgetData::AnimationMask( const TSize& aSize )
+    {
+    CFbsBitmap* mask = NULL;
+    if ( iUninstallAnimIcons.Count() )
+        {
+        TInt index = iAnimationIndex+1;
+        if ( index >= iUninstallAnimIcons.Count() )
+            {
+            index = 1;
+            }
+        mask = iUninstallAnimIcons[index];
+        if ( mask && mask->SizeInPixels() != aSize )
+            {
+            AknIconUtils::SetSize( mask, aSize,
+                    EAspectRatioNotPreserved );
+            }
+        }    
+    return mask;
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::IsUninstalling
+// ---------------------------------------------------------
+//
+TBool CWmWidgetData::IsUninstalling()
+    {
+    return iAsyncUninstalling;
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::DoCancel
+// ---------------------------------------------------------
+//
+void CWmWidgetData::DoCancel()
+    {
+    if ( IsActive() && iAsyncUninstalling )
+        {
+        iInstaller.CancelAsyncRequest( 
+                SwiUI::ERequestSilentUninstall );
+
+		// close session
+		iInstaller.Close();
+        }
+    iAsyncUninstalling = EFalse;
+    iAnimationIndex = 0;
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::RunL
+// ---------------------------------------------------------
+//
+void CWmWidgetData::RunL()
+    {
+    iAsyncUninstalling = EFalse;
+    iAnimationIndex = 0;
+
+    DestroyAnimData();
+    FireDataChanged();
+
+    // close SWI session
+    if ( iIdle && iIdle->IsActive() )
+        {
+        iIdle->Cancel();
+        }
+    iIdle->Start( TCallBack( CloseSwiSession, this ) );
+    }
+
+// ---------------------------------------------------------
+// CWmWidgetData::RunError
+// ---------------------------------------------------------
+//
+TInt CWmWidgetData::RunError(TInt /*aError*/)
+    {
+    iAsyncUninstalling = EFalse;
+    iAnimationIndex = 0;
+    DestroyAnimData();
+    FireDataChanged();
+    
+    // close SWI session
+    if ( iIdle && iIdle->IsActive() )
+        {
+        iIdle->Cancel();
+        }
+    iIdle->Start( TCallBack( CloseSwiSession, this ) );
+
+    return KErrNone;
+    }
+
 // End of file
 
--- a/idlehomescreen/widgetmanager/src/wmwidgetloaderao.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/src/wmwidgetloaderao.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -123,20 +123,23 @@
 //
 void CWmWidgetLoaderAo::DoLoadWidgetsL()
     {
-    // 1. mark all the existing widgets initially non-valid
-    for( TInt i=0; i<iWidgetsList.WidgetDataCount(); ++i )
-        iWidgetsList.WidgetData(i).SetValid( EFalse );
-
-    // 2. load the widgets array
+    // 1. load the widgets array
     MHsContentController& controller = iWmPlugin.ContentController();    
     CHsContentInfoArray* contentInfoArray = CHsContentInfoArray::NewL();
     CleanupStack::PushL( contentInfoArray );
     controller.WidgetListL( *contentInfoArray );
     
-    // 3. load the widget order
+    // 2. load the widget order
     iWidgetOrder = CWmPersistentWidgetOrder::NewL( iWmPlugin.FileServer() );
     TRAPD( loadError, iWidgetOrder->LoadL() );
 
+    // 3. prepare the widget data list
+    for( TInt i=0; i<iWidgetsList.WidgetDataCount(); ++i )
+        {
+        iWidgetsList.WidgetData(i).SetPersistentWidgetOrder( iWidgetOrder );
+        iWidgetsList.WidgetData(i).SetValid( EFalse );
+        }
+
     // 4. loop through the content array and compare it against the existing
     // widget data.
     TInt widgetsAdded = 0;
@@ -178,7 +181,15 @@
             ++widgetsRemoved;
             }
         }
-    if ( widgetsRemoved > 0 )
+    
+    // update listbox
+    if ( widgetsAdded > 0 )
+        {
+        iWidgetsList.HandleItemAdditionL();
+        }
+    
+    if ( widgetsRemoved > 0 || widgetsAdded > 0 ||
+        widgetsChanged > 0 )
         {
         iWidgetsList.DrawDeferred();
         }
@@ -203,7 +214,7 @@
         {
         iWidgetOrder->StoreL( iWidgetsList.WidgetDataArray() );
         }
-    
+
     }
 
 // ---------------------------------------------------------
@@ -240,10 +251,12 @@
     CleanupStack::Pop( aContentInfo );
     
     CWmWidgetData* widgetData = CWmWidgetData::NewLC( 
+            iWidgetsList.LogoSize(),
+            iWmPlugin.ResourceLoader(),
             aContentInfo, iWidgetRegistry );
     widgetData->SetPersistentWidgetOrder( iWidgetOrder );
     widgetData->SetValid( ETrue );
-    iWidgetsList.AddWidgetDataL( widgetData );
+    iWidgetsList.AddWidgetDataL( widgetData, EFalse );
     CleanupStack::Pop( widgetData );
     }
 
@@ -262,7 +275,11 @@
         iWidgetRegistry = NULL;
         }
     
-    // delete widget order
+    // delete widget order and references to it
+    for( TInt i=0; i<iWidgetsList.WidgetDataCount(); ++i )
+        {
+        iWidgetsList.WidgetData(i).SetPersistentWidgetOrder( NULL );
+        }
     delete iWidgetOrder;
     iWidgetOrder = NULL;
     }
--- a/idlehomescreen/widgetmanager/tsrc/wmunittest/conf/ui_wmunittest.cfg	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/tsrc/wmunittest/conf/ui_wmunittest.cfg	Mon Jan 18 20:10:36 2010 +0200
@@ -607,7 +607,7 @@
 delete test
 [Endtest] 
 
-// Tests malformed icon string
+// Tests malformed icon string formats
 [Test]
 title malformed image formats
 create wmunittest test
@@ -625,19 +625,23 @@
 test ImageConverterWaitResult FAIL
 test ImageConverterConvert "c:/testframework/wmunittest/wmlogo/logo.jpg"
 test ImageConverterWaitResult FAIL
-test ImageConverterConvert "skin (0x10005a26 0x1000 )"
+test ImageConverterConvert "skin[0x10005a26 0x1000]"
+test ImageConverterWaitResult FAIL
+test ImageConverterConvert "skin(0x10005a26)"
 test ImageConverterWaitResult FAIL
-test ImageConverterConvert "mif ( c:\testframework\wmunittest\wmlogo\logo.mif 16384 16385)"
+test ImageConverterConvert "mif(c:\testframework\wmunittest\wmlogo\logo.mif)"
 test ImageConverterWaitResult FAIL
-test ImageConverterConvert "skin( 0x100056c6 0x86 ):mif ( c:\testframework\wmunittest\wmlogo\logo.mif 16384 16385 )"
+test ImageConverterConvert "mif(c:\testframework\wmunittest\wmlogo\logo.mif XXX YYY)"
 test ImageConverterWaitResult FAIL
-test ImageConverterConvert "skin ( 0x101f84b7 0x1000594D ) : mif ( c:\testframework\wmunittest\wmlogo\logo.mif 16384 16385 )"
+test ImageConverterConvert "mif  ( 16384 16385)"
 test ImageConverterWaitResult FAIL
-test ImageConverterConvert " uid(0x10005901 )"
+test ImageConverterConvert "skin( 0x100056c6 0x86 ):mif ( c:\testframework\wmunittest\wmlogo\logo.mif )"
 test ImageConverterWaitResult FAIL
-test ImageConverterConvert "uid (268458241  )"
+test ImageConverterConvert "    uid(0x10005901)"
 test ImageConverterWaitResult FAIL
-test ImageConverterConvert "uid (0x10005901)"
+test ImageConverterConvert "uidaan(0x10005901)"
+test ImageConverterWaitResult FAIL
+test ImageConverterConvert "uid (%%%)"
 test ImageConverterWaitResult FAIL
 test ImageConverterDelete
 test HeapCheck
@@ -645,16 +649,31 @@
 [Endtest] 
 
 
-// Tests image converter with skin syntax
-// this test will never pass on STIF because STIF AppUI does
+// the SKIN test will never pass on STIF because STIF AppUI does
 // not have EAknEnableSkin flag defined in its BaseConstructL
 // therefore commented out.
+
 /*
+// Tests image converter with skin syntax
 [Test]
 title Image converter skin
 create wmunittest test
 test HeapSet
 test ImageConverterCreate
+test ImageConverterConvert "skin(270501603 4145)"
+test ImageConverterWaitResult OK
+test ImageConverterConversionMethod ESkinIcon
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
+
+// Tests image converter with skin syntax (hex)
+[Test]
+title Image converter skin (hex)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
 test ImageConverterConvert "skin(0x101F86E3 0x100d)"
 test ImageConverterWaitResult OK
 test ImageConverterConversionMethod ESkinIcon
@@ -662,6 +681,20 @@
 test HeapCheck
 delete test
 [Endtest]
+
+// Tests image converter with skin syntax (padded with spaces)
+[Test]
+title Image converter skin (padded)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test ImageConverterConvert "skin ( 270501603 4145 ) "
+test ImageConverterWaitResult OK
+test ImageConverterConversionMethod ESkinIcon
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
 */
 
 // Tests image converter skin method with null skin item ids
@@ -691,6 +724,34 @@
 delete test
 [Endtest] 
 
+// Tests image converter with skin/mif syntax (hex)
+[Test]
+title Image converter skin/mif (hex)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test ImageConverterConvert "skin(0x101F86E3 0x1031):mif(c:\testframework\wmunittest\wmlogo\logo.mif 0x4000 0x4001)"
+test ImageConverterWaitResult OK
+test ImageConverterConversionMethod ESkinAndMifIcon
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest] 
+
+// Tests image converter with skin/mif syntax (padded with spaces)
+[Test]
+title Image converter skin/mif (padded)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test ImageConverterConvert "skin (  0x101F86E3 0x1031  ) :mif ( c:\testframework\wmunittest\wmlogo\logo.mif   0x4000  0x4001 ) "
+test ImageConverterWaitResult OK
+test ImageConverterConversionMethod ESkinAndMifIcon
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest] 
+
 // Tests image converter mif method
 [Test]
 title Image converter mif
@@ -705,6 +766,49 @@
 delete test
 [Endtest]
 
+// Tests image converter mif method, mask missing
+[Test]
+title Image converter mif (no mask)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test ImageConverterConvert "mif(c:\testframework\wmunittest\wmlogo\logo.mif 16384)"
+test ImageConverterWaitResult OK
+test ImageConverterConversionMethod EMifIcon
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
+
+// Tests image converter mif method (hex)
+[Test]
+title Image converter mif (hex)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test ImageConverterConvert "mif(c:\testframework\wmunittest\wmlogo\logo.mif 0x4000 0x4001)"
+test ImageConverterWaitResult OK
+test ImageConverterConversionMethod EMifIcon
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
+
+// Tests image converter mif method (padded with spaces)
+[Test]
+title Image converter mif (padded)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test ImageConverterConvert "mif (  c:\testframework\wmunittest\wmlogo\logo.mif  16384  16385  ) "
+test ImageConverterWaitResult OK
+test ImageConverterConversionMethod EMifIcon
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
+
+
 // Tests image converter mif method with invalid path
 [Test]
 title Image converter mif (invalid path)
@@ -737,6 +841,20 @@
 create wmunittest test
 test HeapSet
 test ImageConverterCreate
+test ImageConverterConvert "uid(268458241)"
+test ImageConverterWaitResult OK
+test ImageConverterConversionMethod EUidIcon
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
+
+// Tests image converter uid method (hex)
+[Test]
+title Image converter uid (hex)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
 test ImageConverterConvert "uid(0x10005901)"
 test ImageConverterWaitResult OK
 test ImageConverterConversionMethod EUidIcon
@@ -745,6 +863,20 @@
 delete test
 [Endtest]
 
+// Tests image converter uid method (padded with spaces)
+[Test]
+title Image converter uid (padded)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test ImageConverterConvert "uid (  0x10005901  ) "
+test ImageConverterWaitResult OK
+test ImageConverterConversionMethod EUidIcon
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
+
 // Tests image converter uid method with null uid
 [Test]
 title Image converter uid (null)
@@ -856,15 +988,67 @@
 delete test
 [Endtest]
 
-// Tests image converter cancel
+
+
+// Tests image converter cancel when idle
+[Test]
+title Image converter cancel (idle)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test CancelConvert
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
+
+// Tests image converter cancel (mif conversion)
 [Test]
-title Image converter cancel
+title Image converter cancel (mif)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test ImageConverterConvert "mif(c:\testframework\wmunittest\wmlogo\logo.mif 16384 16385)"
+test CancelConvert
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
+
+// Tests image converter cancel (uid conversion)
+[Test]
+title Image converter cancel (uid)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test ImageConverterConvert "uid(268458241)"
+test CancelConvert
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
+
+// Tests image converter cancel (svg conversion)
+[Test]
+title Image converter cancel (svg)
 create wmunittest test
 test HeapSet
 test ImageConverterCreate
 test ImageConverterConvert "c:\testframework\wmunittest\wmlogo\logo.svg"
 test CancelConvert
-test ImageConverterWaitResult FAIL
+test ImageConverterDelete
+test HeapCheck
+delete test
+[Endtest]
+
+// Tests image converter cancel (jpg conversion)
+[Test]
+title Image converter cancel (jpg)
+create wmunittest test
+test HeapSet
+test ImageConverterCreate
+test ImageConverterConvert "c:\testframework\wmunittest\wmlogo\logo.jpg"
+test CancelConvert
 test ImageConverterDelete
 test HeapCheck
 delete test
--- a/idlehomescreen/widgetmanager/tsrc/wmunittest/group/wmunittest.mmp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/tsrc/wmunittest/group/wmunittest.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -50,6 +50,7 @@
 SOURCE          wmdetailsdlg.cpp
 SOURCE          wmportalbutton.cpp
 SOURCE          wmwidgetloaderao.cpp
+SOURCE          wmconfiguration.cpp
 
 SOURCEPATH      ../src
 SOURCE          wmunittest.cpp
@@ -97,6 +98,7 @@
 LIBRARY     featmgr.lib // FeatureManager
 LIBRARY     etext.lib 
 LIBRARY     centralrepository.lib
+LIBRARY     bmpanim.lib // AknBitmap animation
 
 // libraries needed by the test framework
 LIBRARY     stiftestinterface.lib
--- a/idlehomescreen/widgetmanager/tsrc/wmunittest/inc/wmunittest.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/tsrc/wmunittest/inc/wmunittest.h	Mon Jan 18 20:10:36 2010 +0200
@@ -93,6 +93,7 @@
 
     public: // from MHsContentController
 
+        
         TInt WidgetListL( CHsContentInfoArray& aArray );
         TInt ViewListL( CHsContentInfoArray& aArray );
         TInt AppListL( CHsContentInfoArray& aArray );
@@ -102,6 +103,8 @@
         TInt RemoveViewL( CHsContentInfo& aInfo );
         TInt ActivateViewL( CHsContentInfo& aInfo );
         TInt ActivateAppL( CHsContentInfo& aInfo );
+        TInt ActiveViewL( CHsContentInfo& aInfo );
+        TInt ActiveAppL( CHsContentInfo& aInfo );
         
     private: // Test methods
 
--- a/idlehomescreen/widgetmanager/tsrc/wmunittest/src/wmunittest_converter.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/tsrc/wmunittest/src/wmunittest_converter.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -69,10 +69,10 @@
     User::LeaveIfError( aItem.GetNextString( inputStr ) );
     if ( inputStr.Length() == 0 ) User::Leave( KErrArgument );
 
-    TRAPD( err, iImageConverter->HandleIconStringL( 40, 40, inputStr ) );
+    TInt err = iImageConverter->HandleIconString( 40, 40, inputStr );
     if ( err != KErrNone )
         {
-        _LOG("ImageConverterConvertL:HandleIconStringL returns with leave");
+        _LOG("ImageConverterConvertL:HandleIconString returns Error!!!");
         iConversionReady = ETrue;
         iConversionError = err;
         }
--- a/idlehomescreen/widgetmanager/tsrc/wmunittest/src/wmunittest_plugin.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/tsrc/wmunittest/src/wmunittest_plugin.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -163,6 +163,15 @@
     return KErrNone;
     }
 
+TInt CWmUnitTest::ActiveViewL( CHsContentInfo& /*aInfo*/ )
+    {
+    return 0;
+    }
+
+TInt CWmUnitTest::ActiveAppL( CHsContentInfo& /*aInfo*/ )
+    {
+    return 0;
+    }
 
 
 // -----------------------------------------------------------------------------
@@ -201,9 +210,10 @@
         name.Format( _L("Widget_%d"), i );
         info->SetNameL( name );
         TBuf8<20> id;
-        id.Num( i );
+        id.Format( _L8("0x%x"), i );
         info->SetUidL( id );
         info->SetTypeL( _L8("template") );
+        info->SetPublisherIdL( _L("teron.pub") );
         info->SetIconPathL( _L("uid(0x2000DAD2)") );
         info->SetCanBeAdded( ETrue );
         info->SetDescriptionL(_L("Default plaa plaa plaa plaa plaa plaa plaa"));
--- a/idlehomescreen/widgetmanager/tsrc/wmunittest/src/wmunittest_sortorder.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/widgetmanager/tsrc/wmunittest/src/wmunittest_sortorder.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -155,11 +155,15 @@
     RWidgetRegistryClientSession registryClient;
     User::LeaveIfError( registryClient.Connect() );
     CleanupClosePushL( registryClient );
-
+    TSize dummySize(40,40);
+    CWmResourceLoader* resLoader = NULL; // not used in this case
     while( contentArray->Array().Count() > 0 )
-        {
+        {        
         CWmWidgetData* data = CWmWidgetData::NewL(
-                contentArray->Array()[0], &registryClient);
+                dummySize, *resLoader, 
+                contentArray->Array()[0],
+                &registryClient);
+
         contentArray->Array().Remove( 0 );
         CleanupStack::PushL( data );
         aArray.AppendL( data );
Binary file idlehomescreen/xmluicontroller/conf/activeidle2.confml has changed
Binary file idlehomescreen/xmluicontroller/conf/activeidle2_10275102.crml has changed
--- a/idlehomescreen/xmluicontroller/src/aieventhandler.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluicontroller/src/aieventhandler.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -269,9 +269,9 @@
         TLiwGenericParam data( KData, TLiwVariant( &aMap ));
         inparam.AppendL( data );
 
-        TRAPD(err, msgInterface ->ExecuteCmdL(KExecute, inparam, outparam));
+        msgInterface ->ExecuteCmdL(KExecute, inparam, outparam);
         msgInterface->Close();
-        
+
         outparam.Reset();
         inparam.Reset();
         }
--- a/idlehomescreen/xmluicontroller/src/aixmluiutils.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluicontroller/src/aixmluiutils.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -439,7 +439,7 @@
         {
         // Create new property value and property
         CXnDomPropertyValue* value = CXnDomPropertyValue::NewL(
-                                                aUiElement.UiEngineL()->StringPool() );
+                                                &aUiElement.UiEngineL()->StringPool() );
         CleanupStack::PushL( value );
         
         CXnProperty* property = CXnProperty::NewL(
@@ -1066,7 +1066,7 @@
     const TDesC8& aNewValueString )
 	{
 	// Set defined property to defined node.
-    CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL(aNode.UiEngineL()->StringPool());
+    CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( &aNode.UiEngineL()->StringPool() );
     CleanupStack::PushL(newValue);
     newValue->SetStringValueL(CXnDomPropertyValue::EString, aNewValueString);
     CXnProperty* prop = CXnProperty::NewL(aPropertyName, newValue, aNode.UiEngineL()->StringPool());
--- a/idlehomescreen/xmluicontroller/src/databuffertransactionelement.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluicontroller/src/databuffertransactionelement.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -145,7 +145,7 @@
         
         // Create new new label attribute value
         CXnDomPropertyValue* propertyValue =
-            CXnDomPropertyValue::NewL( target.UiEngineL()->StringPool() );
+            CXnDomPropertyValue::NewL( &target.UiEngineL()->StringPool() );
     
         CleanupStack::PushL( propertyValue );
     
@@ -178,16 +178,6 @@
         User::LeaveIfError( AiUtility::ParseInt( volume, iNewData ) );
         volumeControl->SetValue( volume );
         }
-    else if ( type == XnNewstickerInterface::MXnNewstickerInterface::Type() )
-        {
-        // Get newsticker interface
-        XnNewstickerInterface::MXnNewstickerInterface* newsTicker = NULL;
-        XnComponentInterface::MakeInterfaceL( newsTicker, Target() );
-        LeaveIfNull( newsTicker, KErrNotSupported );
-        
-        // Append new SVG title
-        newsTicker->AppendSvgTitleL( iNewData );
-        }
     else
         {
         User::Leave( KErrNotSupported );
--- a/idlehomescreen/xmluicontroller/src/imagetransactionelement.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluicontroller/src/imagetransactionelement.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -225,16 +225,6 @@
         imageIntr->SetContentBitmaps( iIcon->Bitmap(), iIcon->Mask() );
       
         }
-    else if ( type == XnNewstickerInterface::MXnNewstickerInterface::Type() )
-        {
-        XnNewstickerInterface::MXnNewstickerInterface* newsTicker = NULL;
-        XnComponentInterface::MakeInterfaceL( newsTicker, *node );
-        LeaveIfNull( newsTicker, KErrNotSupported );
-        
-        User::LeaveIfError( newsTicker->SetSeparatorImageL( iIcon ) );
-        // Ownership of icon transferred to newsticker
-        iIcon = NULL;
-        }
     // Menu softkey icons
     else if ( ( ( type == KXnMenuItem || type == KXnMenu ) &&
                 IsNodeVisible( *node ) ) ||
@@ -375,18 +365,6 @@
             iNewIcon->SetBitmapsOwnedExternally( ETrue );
             imageIntr->SetContentBitmaps( iNewIcon->Bitmap(), iNewIcon->Mask() );
             }
-        else if ( type == XnNewstickerInterface::MXnNewstickerInterface::Type() )
-            {
-            XnNewstickerInterface::MXnNewstickerInterface* newsTicker = NULL;
-            XnComponentInterface::MakeInterfaceL( newsTicker, Target() );
-            LeaveIfNull( newsTicker, KErrNotSupported );
-            
-            User::LeaveIfError( newsTicker->SetSeparatorImageL( iNewIcon ) );
-            
-            // Ownership of icon transferred to newsticker
-            
-            iNewIcon = NULL;
-            }
         // Menu softkey icons
         else if ( ( ( type == KXnMenuItem || type == KXnMenu ) &&
                     IsNodeVisible( Target() ) ) ||
--- a/idlehomescreen/xmluicontroller/src/texttransactionelement.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluicontroller/src/texttransactionelement.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -145,7 +145,7 @@
         CXnNodeAppIf& target = Target();
         // Set the label of the softkey
         CXnDomPropertyValue* propertyValue =
-            CXnDomPropertyValue::NewL( target.UiEngineL()->StringPool() );
+            CXnDomPropertyValue::NewL( &target.UiEngineL()->StringPool() );
     
         CleanupStack::PushL( propertyValue );
     
--- a/idlehomescreen/xmluirendering/dom/bwins/xn3domdocumentu.def	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/dom/bwins/xn3domdocumentu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -1,11 +1,11 @@
 EXPORTS
-	?IsRefNode@CXnDomNode@@QBEHXZ @ 1 NONAME ; int CXnDomNode::IsRefNode(void) const
-	??1CXnDomAttribute@@UAE@XZ @ 2 NONAME ; CXnDomAttribute::~CXnDomAttribute(void)
-	?Value@CXnDomAttribute@@QAEABVTDesC8@@XZ @ 3 NONAME ; class TDesC8 const & CXnDomAttribute::Value(void)
-	?NewL@CXnDomDocument@@SAPAV1@AAVRReadStream@@@Z @ 4 NONAME ; class CXnDomDocument * CXnDomDocument::NewL(class RReadStream &)
-	?InternalizeL@CXnDomDocument@@QAEXAAVRReadStream@@@Z @ 5 NONAME ; void CXnDomDocument::InternalizeL(class RReadStream &)
-	?SetContentType@CXnDomNode@@QAEXABW4TContentType@@@Z @ 6 NONAME ; void CXnDomNode::SetContentType(enum TContentType const &)
-	?RemoveItem@CXnDomList@@QAEXPAVMXnDomListItem@@@Z @ 7 NONAME ; void CXnDomList::RemoveItem(class MXnDomListItem *)
+	??1CXnDomAttribute@@UAE@XZ @ 1 NONAME ; CXnDomAttribute::~CXnDomAttribute(void)
+	?Value@CXnDomAttribute@@QAEABVTDesC8@@XZ @ 2 NONAME ; class TDesC8 const & CXnDomAttribute::Value(void)
+	?NewL@CXnDomDocument@@SAPAV1@AAVRReadStream@@@Z @ 3 NONAME ; class CXnDomDocument * CXnDomDocument::NewL(class RReadStream &)
+	?InternalizeL@CXnDomDocument@@QAEXAAVRReadStream@@@Z @ 4 NONAME ; void CXnDomDocument::InternalizeL(class RReadStream &)
+	?SetContentType@CXnDomNode@@QAEXABW4TContentType@@@Z @ 5 NONAME ; void CXnDomNode::SetContentType(enum TContentType const &)
+	?RemoveItem@CXnDomList@@QAEXPAVMXnDomListItem@@@Z @ 6 NONAME ; void CXnDomList::RemoveItem(class MXnDomListItem *)
+	?SwapStringPoolL@CXnDomList@@QAEXPAVCXnDomStringPool@@@Z @ 7 NONAME ; void CXnDomList::SwapStringPoolL(class CXnDomStringPool *)
 	?MarshallL@CXnDomDocument@@QAEPAVHBufC8@@XZ @ 8 NONAME ; class HBufC8 * CXnDomDocument::MarshallL(void)
 	??1CXnDomDepthIterator@@UAE@XZ @ 9 NONAME ; CXnDomDepthIterator::~CXnDomDepthIterator(void)
 	?IsValueSet@CXnDomProperty@@QAEHXZ @ 10 NONAME ; int CXnDomProperty::IsValueSet(void)
@@ -14,77 +14,77 @@
 	?IsAutoIdent@CXnDomPropertyValue@@QAEHXZ @ 13 NONAME ; int CXnDomPropertyValue::IsAutoIdent(void)
 	?AttributeList@CXnDomNode@@QBEAAVCXnDomList@@XZ @ 14 NONAME ; class CXnDomList & CXnDomNode::AttributeList(void) const
 	?StringValue@CXnDomPropertyValue@@QAEABVTDesC8@@XZ @ 15 NONAME ; class TDesC8 const & CXnDomPropertyValue::StringValue(void)
-	?SetRefNode@CXnDomNode@@QAEXH@Z @ 16 NONAME ; void CXnDomNode::SetRefNode(int)
-	?AddItemL@CXnDomList@@QAEXPAVMXnDomListItem@@@Z @ 17 NONAME ; void CXnDomList::AddItemL(class MXnDomListItem *)
-	?AddChildL@CXnDomNode@@QAEXPAV1@H@Z @ 18 NONAME ; void CXnDomNode::AddChildL(class CXnDomNode *, int)
-	?IsInheritIdent@CXnDomPropertyValue@@QAEHXZ @ 19 NONAME ; int CXnDomPropertyValue::IsInheritIdent(void)
-	?StringPool@CXnDomDocument@@QBEAAVCXnDomStringPool@@XZ @ 20 NONAME ; class CXnDomStringPool & CXnDomDocument::StringPool(void) const
-	?Parent@CXnDomNode@@QBEPAV1@XZ @ 21 NONAME ; class CXnDomNode * CXnDomNode::Parent(void) const
-	?Name@CXnDomAttribute@@UAEABVTDesC8@@XZ @ 22 NONAME ; class TDesC8 const & CXnDomAttribute::Name(void)
-	?CloneL@CXnDomProperty@@QAEPAV1@XZ @ 23 NONAME ; class CXnDomProperty * CXnDomProperty::CloneL(void)
-	?Last@CXnDomList@@QAEPAVMXnDomListItem@@XZ @ 24 NONAME ; class MXnDomListItem * CXnDomList::Last(void)
-	?AddStringL@CXnDomStringPool@@QAEHABVTDesC8@@@Z @ 25 NONAME ; int CXnDomStringPool::AddStringL(class TDesC8 const &)
-	?StringValueL@CXnDomPropertyValue@@QAEABVTDesC8@@XZ @ 26 NONAME ; class TDesC8 const & CXnDomPropertyValue::StringValueL(void)
-	?SetPseudoClass@CXnDomProperty@@QAEXW4TPseudoClass@1@@Z @ 27 NONAME ; void CXnDomProperty::SetPseudoClass(enum CXnDomProperty::TPseudoClass)
-	?ReplaceChildL@CXnDomNode@@QAEXPAV1@0@Z @ 28 NONAME ; void CXnDomNode::ReplaceChildL(class CXnDomNode *, class CXnDomNode *)
-	?CreateRefNodeL@CXnDomNode@@QAEPAV1@XZ @ 29 NONAME ; class CXnDomNode * CXnDomNode::CreateRefNodeL(void)
-	?Length@CXnDomList@@QBEHXZ @ 30 NONAME ; int CXnDomList::Length(void) const
-	?AppendPCDataL@CXnDomNode@@QAEXABVTDesC8@@@Z @ 31 NONAME ; void CXnDomNode::AppendPCDataL(class TDesC8 const &)
-	?ReleaseData@CXnDomPropertyValue@@QAEXXZ @ 32 NONAME ; void CXnDomPropertyValue::ReleaseData(void)
-	?ItemIndex@CXnDomList@@QBEHABVMXnDomListItem@@@Z @ 33 NONAME ; int CXnDomList::ItemIndex(class MXnDomListItem const &) const
-	?FloatValueL@CXnDomPropertyValue@@QBENXZ @ 34 NONAME ; double CXnDomPropertyValue::FloatValueL(void) const
-	?LayoutNode@CXnDomNode@@QAEPAVCXnNode@@XZ @ 35 NONAME ; class CXnNode * CXnDomNode::LayoutNode(void)
-	?StringPoolIndexL@CXnDomPropertyValue@@QBEFXZ @ 36 NONAME ; short CXnDomPropertyValue::StringPoolIndexL(void) const
-	?FindByName@CXnDomList@@QAEPAVMXnDomListItem@@ABVTDesC8@@@Z @ 37 NONAME ; class MXnDomListItem * CXnDomList::FindByName(class TDesC8 const &)
-	?StringPool@CXnDomNode@@QBEAAVCXnDomStringPool@@XZ @ 38 NONAME ; class CXnDomStringPool & CXnDomNode::StringPool(void) const
-	?First@CXnDomList@@QAEPAVMXnDomListItem@@XZ @ 39 NONAME ; class MXnDomListItem * CXnDomList::First(void)
-	?ValueStringPoolIndex@CXnDomAttribute@@QBEFXZ @ 40 NONAME ; short CXnDomAttribute::ValueStringPoolIndex(void) const
-	?NewL@CXnDomDocument@@SAPAV1@PBVHBufC8@@@Z @ 41 NONAME ; class CXnDomDocument * CXnDomDocument::NewL(class HBufC8 const *)
-	?DeleteChild@CXnDomNode@@QAEXPAV1@@Z @ 42 NONAME ; void CXnDomNode::DeleteChild(class CXnDomNode *)
-	?AddChildL@CXnDomNode@@QAEXPAV1@@Z @ 43 NONAME ; void CXnDomNode::AddChildL(class CXnDomNode *)
-	?NewL@CXnDomProperty@@SAPAV1@FAAVCXnDomStringPool@@@Z @ 44 NONAME ; class CXnDomProperty * CXnDomProperty::NewL(short, class CXnDomStringPool &)
-	?NewL@CXnDomAttribute@@SAPAV1@ABVTDesC8@@AAVCXnDomStringPool@@@Z @ 45 NONAME ; class CXnDomAttribute * CXnDomAttribute::NewL(class TDesC8 const &, class CXnDomStringPool &)
-	?ChildNodes@CXnDomNode@@QAEAAVCXnDomList@@XZ @ 46 NONAME ; class CXnDomList & CXnDomNode::ChildNodes(void)
-	?NodeId@CXnDomNode@@QBEHXZ @ 47 NONAME ; int CXnDomNode::NodeId(void) const
-	?IsNoneIdent@CXnDomPropertyValue@@QAEHXZ @ 48 NONAME ; int CXnDomPropertyValue::IsNoneIdent(void)
-	?ItemIndex@CXnDomNode@@QBEHABVMXnDomListItem@@@Z @ 49 NONAME ; int CXnDomNode::ItemIndex(class MXnDomListItem const &) const
-	?Item@CXnDomList@@QBEPAVMXnDomListItem@@H@Z @ 50 NONAME ; class MXnDomListItem * CXnDomList::Item(int) const
-	?ExternalizeL@CXnDomDocument@@QBEXAAVRWriteStream@@@Z @ 51 NONAME ; void CXnDomDocument::ExternalizeL(class RWriteStream &) const
-	?StringPool@CXnDomProperty@@QBEAAVCXnDomStringPool@@XZ @ 52 NONAME ; class CXnDomStringPool & CXnDomProperty::StringPool(void) const
-	?SetNamespaceL@CXnDomNode@@QAEXABVTDesC8@@@Z @ 53 NONAME ; void CXnDomNode::SetNamespaceL(class TDesC8 const &)
-	?CloneL@CXnDomPropertyValue@@QAEPAV1@XZ @ 54 NONAME ; class CXnDomPropertyValue * CXnDomPropertyValue::CloneL(void)
-	?PCData@CXnDomNode@@QAEABVTDesC8@@XZ @ 55 NONAME ; class TDesC8 const & CXnDomNode::PCData(void)
-	?ContentType@CXnDomNode@@QAEABW4TContentType@@XZ @ 56 NONAME ; enum TContentType const & CXnDomNode::ContentType(void)
-	?DeleteItem@CXnDomList@@QAEXPAVMXnDomListItem@@@Z @ 57 NONAME ; void CXnDomList::DeleteItem(class MXnDomListItem *)
-	?StringPool@CXnDomList@@QBEAAVCXnDomStringPool@@XZ @ 58 NONAME ; class CXnDomStringPool & CXnDomList::StringPool(void) const
-	?Reset@CXnDomList@@QAEXXZ @ 59 NONAME ; void CXnDomList::Reset(void)
-	?PropertyList@CXnDomNode@@QAEAAVCXnDomList@@XZ @ 60 NONAME ; class CXnDomList & CXnDomNode::PropertyList(void)
-	?CloneL@CXnDomAttribute@@QAEPAV1@XZ @ 61 NONAME ; class CXnDomAttribute * CXnDomAttribute::CloneL(void)
-	?RootNode@CXnDomDocument@@QBEPAVCXnDomNode@@XZ @ 62 NONAME ; class CXnDomNode * CXnDomDocument::RootNode(void) const
-	??1CXnDomPropertyValue@@UAE@XZ @ 63 NONAME ; CXnDomPropertyValue::~CXnDomPropertyValue(void)
-	?SetLayoutNode@CXnDomNode@@QAEXPAVCXnNode@@@Z @ 64 NONAME ; void CXnDomNode::SetLayoutNode(class CXnNode *)
-	?PropertyValueList@CXnDomProperty@@QAEAAVCXnDomList@@XZ @ 65 NONAME ; class CXnDomList & CXnDomProperty::PropertyValueList(void)
-	??1CXnDomDocument@@UAE@XZ @ 66 NONAME ; CXnDomDocument::~CXnDomDocument(void)
-	?DeleteItem@CXnDomList@@QAEXH@Z @ 67 NONAME ; void CXnDomList::DeleteItem(int)
-	?NewL@CXnDomDepthIterator@@SAPAV1@AAVCXnDomNode@@@Z @ 68 NONAME ; class CXnDomDepthIterator * CXnDomDepthIterator::NewL(class CXnDomNode &)
-	?CloneWithoutKidsL@CXnDomNode@@QAEPAV1@AAVCXnDomStringPool@@@Z @ 69 NONAME ; class CXnDomNode * CXnDomNode::CloneWithoutKidsL(class CXnDomStringPool &)
-	?RemoveItem@CXnDomList@@QAEXH@Z @ 70 NONAME ; void CXnDomList::RemoveItem(int)
-	?CloneL@CXnDomDocument@@QAEPAV1@XZ @ 71 NONAME ; class CXnDomDocument * CXnDomDocument::CloneL(void)
-	?NameStringPoolIndex@CXnDomAttribute@@QBEFXZ @ 72 NONAME ; short CXnDomAttribute::NameStringPoolIndex(void) const
-	?PrimitiveValueType@CXnDomPropertyValue@@QBE?AW4TPrimitiveValueType@1@XZ @ 73 NONAME ; enum CXnDomPropertyValue::TPrimitiveValueType CXnDomPropertyValue::PrimitiveValueType(void) const
-	?SetInherited@CXnDomProperty@@QAEXH@Z @ 74 NONAME ; void CXnDomProperty::SetInherited(int)
-	?SetRgbColorL@CXnDomPropertyValue@@QAEXABVTRgb@@@Z @ 75 NONAME ; void CXnDomPropertyValue::SetRgbColorL(class TRgb const &)
-	?AttributeValue@CXnDomNode@@QBEABVTDesC8@@ABV2@@Z @ 76 NONAME ; class TDesC8 const & CXnDomNode::AttributeValue(class TDesC8 const &) const
-	?SetRootNode@CXnDomDocument@@QAEXPAVCXnDomNode@@@Z @ 77 NONAME ; void CXnDomDocument::SetRootNode(class CXnDomNode *)
-	?DeleteAttributeList@CXnDomNode@@QAEXXZ @ 78 NONAME ; void CXnDomNode::DeleteAttributeList(void)
-	?Inherited@CXnDomProperty@@QAEHXZ @ 79 NONAME ; int CXnDomProperty::Inherited(void)
-	?NewL@CXnDomDocument@@SAPAV1@XZ @ 80 NONAME ; class CXnDomDocument * CXnDomDocument::NewL(void)
-	?SetValueL@CXnDomAttribute@@QAEXABVTDesC8@@@Z @ 81 NONAME ; void CXnDomAttribute::SetValueL(class TDesC8 const &)
-	?AddItemL@CXnDomList@@QAEXPAVMXnDomListItem@@H@Z @ 82 NONAME ; void CXnDomList::AddItemL(class MXnDomListItem *, int)
-	?Namespace@CXnDomNode@@QAEABVTDesC8@@XZ @ 83 NONAME ; class TDesC8 const & CXnDomNode::Namespace(void)
-	?SetNodeId@CXnDomNode@@QAEXH@Z @ 84 NONAME ; void CXnDomNode::SetNodeId(int)
-	?PseudoClass@CXnDomProperty@@QBE?AW4TPseudoClass@1@XZ @ 85 NONAME ; enum CXnDomProperty::TPseudoClass CXnDomProperty::PseudoClass(void) const
-	?CloneL@CXnDomNode@@QAEPAV1@AAVCXnDomStringPool@@ABVTDesC8@@@Z @ 86 NONAME ; class CXnDomNode * CXnDomNode::CloneL(class CXnDomStringPool &, class TDesC8 const &)
+	?AddItemL@CXnDomList@@QAEXPAVMXnDomListItem@@@Z @ 16 NONAME ; void CXnDomList::AddItemL(class MXnDomListItem *)
+	?AddChildL@CXnDomNode@@QAEXPAV1@H@Z @ 17 NONAME ; void CXnDomNode::AddChildL(class CXnDomNode *, int)
+	?IsInheritIdent@CXnDomPropertyValue@@QAEHXZ @ 18 NONAME ; int CXnDomPropertyValue::IsInheritIdent(void)
+	?Parent@CXnDomNode@@QBEPAV1@XZ @ 19 NONAME ; class CXnDomNode * CXnDomNode::Parent(void) const
+	?Name@CXnDomAttribute@@UAEABVTDesC8@@XZ @ 20 NONAME ; class TDesC8 const & CXnDomAttribute::Name(void)
+	?CloneL@CXnDomProperty@@QAEPAV1@XZ @ 21 NONAME ; class CXnDomProperty * CXnDomProperty::CloneL(void)
+	?Last@CXnDomList@@QAEPAVMXnDomListItem@@XZ @ 22 NONAME ; class MXnDomListItem * CXnDomList::Last(void)
+	?StringValueL@CXnDomPropertyValue@@QAEABVTDesC8@@XZ @ 23 NONAME ; class TDesC8 const & CXnDomPropertyValue::StringValueL(void)
+	?SetPseudoClass@CXnDomProperty@@QAEXW4TPseudoClass@1@@Z @ 24 NONAME ; void CXnDomProperty::SetPseudoClass(enum CXnDomProperty::TPseudoClass)
+	?ReplaceChildL@CXnDomNode@@QAEXPAV1@0@Z @ 25 NONAME ; void CXnDomNode::ReplaceChildL(class CXnDomNode *, class CXnDomNode *)
+	?Length@CXnDomList@@QBEHXZ @ 26 NONAME ; int CXnDomList::Length(void) const
+	?SetOwnershipL@CXnDomNode@@QAEXABVTDesC8@@@Z @ 27 NONAME ; void CXnDomNode::SetOwnershipL(class TDesC8 const &)
+	?AppendPCDataL@CXnDomNode@@QAEXABVTDesC8@@@Z @ 28 NONAME ; void CXnDomNode::AppendPCDataL(class TDesC8 const &)
+	?ReleaseData@CXnDomPropertyValue@@QAEXXZ @ 29 NONAME ; void CXnDomPropertyValue::ReleaseData(void)
+	?ItemIndex@CXnDomList@@QBEHABVMXnDomListItem@@@Z @ 30 NONAME ; int CXnDomList::ItemIndex(class MXnDomListItem const &) const
+	?FloatValueL@CXnDomPropertyValue@@QBENXZ @ 31 NONAME ; double CXnDomPropertyValue::FloatValueL(void) const
+	?LayoutNode@CXnDomNode@@QAEPAVCXnNode@@XZ @ 32 NONAME ; class CXnNode * CXnDomNode::LayoutNode(void)
+	?StringPoolIndexL@CXnDomPropertyValue@@QBEFXZ @ 33 NONAME ; short CXnDomPropertyValue::StringPoolIndexL(void) const
+	?FindByName@CXnDomList@@QAEPAVMXnDomListItem@@ABVTDesC8@@@Z @ 34 NONAME ; class MXnDomListItem * CXnDomList::FindByName(class TDesC8 const &)
+	?First@CXnDomList@@QAEPAVMXnDomListItem@@XZ @ 35 NONAME ; class MXnDomListItem * CXnDomList::First(void)
+	?ValueStringPoolIndex@CXnDomAttribute@@QBEFXZ @ 36 NONAME ; short CXnDomAttribute::ValueStringPoolIndex(void) const
+	?NewL@CXnDomDocument@@SAPAV1@PBVHBufC8@@@Z @ 37 NONAME ; class CXnDomDocument * CXnDomDocument::NewL(class HBufC8 const *)
+	?DeleteChild@CXnDomNode@@QAEXPAV1@@Z @ 38 NONAME ; void CXnDomNode::DeleteChild(class CXnDomNode *)
+	?NewL@CXnDomPropertyValue@@SAPAV1@PAVCXnDomStringPool@@@Z @ 39 NONAME ; class CXnDomPropertyValue * CXnDomPropertyValue::NewL(class CXnDomStringPool *)
+	?AddChildL@CXnDomNode@@QAEXPAV1@@Z @ 40 NONAME ; void CXnDomNode::AddChildL(class CXnDomNode *)
+	?SwapStringPoolL@CXnDomAttribute@@QAEXPAVCXnDomStringPool@@@Z @ 41 NONAME ; void CXnDomAttribute::SwapStringPoolL(class CXnDomStringPool *)
+	?ChildNodes@CXnDomNode@@QAEAAVCXnDomList@@XZ @ 42 NONAME ; class CXnDomList & CXnDomNode::ChildNodes(void)
+	?NodeId@CXnDomNode@@QBEHXZ @ 43 NONAME ; int CXnDomNode::NodeId(void) const
+	?IsNoneIdent@CXnDomPropertyValue@@QAEHXZ @ 44 NONAME ; int CXnDomPropertyValue::IsNoneIdent(void)
+	?NewL@CXnDomProperty@@SAPAV1@ABVTDesC8@@PAVCXnDomStringPool@@@Z @ 45 NONAME ; class CXnDomProperty * CXnDomProperty::NewL(class TDesC8 const &, class CXnDomStringPool *)
+	?ItemIndex@CXnDomNode@@QBEHABVMXnDomListItem@@@Z @ 46 NONAME ; int CXnDomNode::ItemIndex(class MXnDomListItem const &) const
+	?Item@CXnDomList@@QBEPAVMXnDomListItem@@H@Z @ 47 NONAME ; class MXnDomListItem * CXnDomList::Item(int) const
+	?ExternalizeL@CXnDomDocument@@QBEXAAVRWriteStream@@@Z @ 48 NONAME ; void CXnDomDocument::ExternalizeL(class RWriteStream &) const
+	?SetNamespaceL@CXnDomNode@@QAEXABVTDesC8@@@Z @ 49 NONAME ; void CXnDomNode::SetNamespaceL(class TDesC8 const &)
+	?CloneL@CXnDomPropertyValue@@QAEPAV1@XZ @ 50 NONAME ; class CXnDomPropertyValue * CXnDomPropertyValue::CloneL(void)
+	?ContentType@CXnDomNode@@QAEABW4TContentType@@XZ @ 51 NONAME ; enum TContentType const & CXnDomNode::ContentType(void)
+	?DeleteItem@CXnDomList@@QAEXPAVMXnDomListItem@@@Z @ 52 NONAME ; void CXnDomList::DeleteItem(class MXnDomListItem *)
+	?PCData@CXnDomNode@@QAEABVTDesC8@@XZ @ 53 NONAME ; class TDesC8 const & CXnDomNode::PCData(void)
+	?Reset@CXnDomList@@QAEXXZ @ 54 NONAME ; void CXnDomList::Reset(void)
+	?SwapStringPoolL@CXnDomPropertyValue@@QAEXPAVCXnDomStringPool@@@Z @ 55 NONAME ; void CXnDomPropertyValue::SwapStringPoolL(class CXnDomStringPool *)
+	?PropertyList@CXnDomNode@@QAEAAVCXnDomList@@XZ @ 56 NONAME ; class CXnDomList & CXnDomNode::PropertyList(void)
+	?CloneL@CXnDomAttribute@@QAEPAV1@XZ @ 57 NONAME ; class CXnDomAttribute * CXnDomAttribute::CloneL(void)
+	?RootNode@CXnDomDocument@@QBEPAVCXnDomNode@@XZ @ 58 NONAME ; class CXnDomNode * CXnDomDocument::RootNode(void) const
+	??1CXnDomPropertyValue@@UAE@XZ @ 59 NONAME ; CXnDomPropertyValue::~CXnDomPropertyValue(void)
+	?SetLayoutNode@CXnDomNode@@QAEXPAVCXnNode@@@Z @ 60 NONAME ; void CXnDomNode::SetLayoutNode(class CXnNode *)
+	?PropertyValueList@CXnDomProperty@@QAEAAVCXnDomList@@XZ @ 61 NONAME ; class CXnDomList & CXnDomProperty::PropertyValueList(void)
+	??1CXnDomDocument@@UAE@XZ @ 62 NONAME ; CXnDomDocument::~CXnDomDocument(void)
+	?StringPool@CXnDomDocument@@QBEPAVCXnDomStringPool@@XZ @ 63 NONAME ; class CXnDomStringPool * CXnDomDocument::StringPool(void) const
+	?DeleteItem@CXnDomList@@QAEXH@Z @ 64 NONAME ; void CXnDomList::DeleteItem(int)
+	?NewL@CXnDomDepthIterator@@SAPAV1@AAVCXnDomNode@@@Z @ 65 NONAME ; class CXnDomDepthIterator * CXnDomDepthIterator::NewL(class CXnDomNode &)
+	?RemoveItem@CXnDomList@@QAEXH@Z @ 66 NONAME ; void CXnDomList::RemoveItem(int)
+	?CloneL@CXnDomDocument@@QAEPAV1@XZ @ 67 NONAME ; class CXnDomDocument * CXnDomDocument::CloneL(void)
+	?NameStringPoolIndex@CXnDomAttribute@@QBEFXZ @ 68 NONAME ; short CXnDomAttribute::NameStringPoolIndex(void) const
+	?PrimitiveValueType@CXnDomPropertyValue@@QBE?AW4TPrimitiveValueType@1@XZ @ 69 NONAME ; enum CXnDomPropertyValue::TPrimitiveValueType CXnDomPropertyValue::PrimitiveValueType(void) const
+	?StringPool@CXnDomNode@@QBEPAVCXnDomStringPool@@XZ @ 70 NONAME ; class CXnDomStringPool * CXnDomNode::StringPool(void) const
+	?SetInherited@CXnDomProperty@@QAEXH@Z @ 71 NONAME ; void CXnDomProperty::SetInherited(int)
+	?SetRgbColorL@CXnDomPropertyValue@@QAEXABVTRgb@@@Z @ 72 NONAME ; void CXnDomPropertyValue::SetRgbColorL(class TRgb const &)
+	?AttributeValue@CXnDomNode@@QBEABVTDesC8@@ABV2@@Z @ 73 NONAME ; class TDesC8 const & CXnDomNode::AttributeValue(class TDesC8 const &) const
+	?SetRootNode@CXnDomDocument@@QAEXPAVCXnDomNode@@@Z @ 74 NONAME ; void CXnDomDocument::SetRootNode(class CXnDomNode *)
+	?DeleteAttributeList@CXnDomNode@@QAEXXZ @ 75 NONAME ; void CXnDomNode::DeleteAttributeList(void)
+	?Inherited@CXnDomProperty@@QAEHXZ @ 76 NONAME ; int CXnDomProperty::Inherited(void)
+	?NewL@CXnDomDocument@@SAPAV1@XZ @ 77 NONAME ; class CXnDomDocument * CXnDomDocument::NewL(void)
+	?SetValueL@CXnDomAttribute@@QAEXABVTDesC8@@@Z @ 78 NONAME ; void CXnDomAttribute::SetValueL(class TDesC8 const &)
+	?AddItemL@CXnDomList@@QAEXPAVMXnDomListItem@@H@Z @ 79 NONAME ; void CXnDomList::AddItemL(class MXnDomListItem *, int)
+	?Namespace@CXnDomNode@@QAEABVTDesC8@@XZ @ 80 NONAME ; class TDesC8 const & CXnDomNode::Namespace(void)
+	?NewL@CXnDomAttribute@@SAPAV1@ABVTDesC8@@PAVCXnDomStringPool@@@Z @ 81 NONAME ; class CXnDomAttribute * CXnDomAttribute::NewL(class TDesC8 const &, class CXnDomStringPool *)
+	?NewL@CXnDomProperty@@SAPAV1@FPAVCXnDomStringPool@@@Z @ 82 NONAME ; class CXnDomProperty * CXnDomProperty::NewL(short, class CXnDomStringPool *)
+	?ReadL@CXnDomDocument@@QAEPAVCXnDomNode@@AAVRReadStream@@@Z @ 83 NONAME ; class CXnDomNode * CXnDomDocument::ReadL(class RReadStream &)
+	?SwapStringPoolL@CXnDomProperty@@QAEXPAVCXnDomStringPool@@@Z @ 84 NONAME ; void CXnDomProperty::SwapStringPoolL(class CXnDomStringPool *)
+	?SetNodeId@CXnDomNode@@QAEXH@Z @ 85 NONAME ; void CXnDomNode::SetNodeId(int)
+	?PseudoClass@CXnDomProperty@@QBE?AW4TPseudoClass@1@XZ @ 86 NONAME ; enum CXnDomProperty::TPseudoClass CXnDomProperty::PseudoClass(void) const
 	?SetStringValueL@CXnDomPropertyValue@@QAEXW4TPrimitiveValueType@1@ABVTDesC8@@@Z @ 87 NONAME ; void CXnDomPropertyValue::SetStringValueL(enum CXnDomPropertyValue::TPrimitiveValueType, class TDesC8 const &)
 	?SetFloatValueL@CXnDomPropertyValue@@QAEXW4TPrimitiveValueType@1@N@Z @ 88 NONAME ; void CXnDomPropertyValue::SetFloatValueL(enum CXnDomPropertyValue::TPrimitiveValueType, double)
 	?Name@CXnDomNode@@UAEABVTDesC8@@XZ @ 89 NONAME ; class TDesC8 const & CXnDomNode::Name(void)
@@ -92,18 +92,17 @@
 	?First@CXnDomDepthIterator@@UAEPAVCXnDomNode@@XZ @ 91 NONAME ; class CXnDomNode * CXnDomDepthIterator::First(void)
 	?Name@CXnDomProperty@@UAEABVTDesC8@@XZ @ 92 NONAME ; class TDesC8 const & CXnDomProperty::Name(void)
 	?NextL@CXnDomDepthIterator@@UAEPAVCXnDomNode@@XZ @ 93 NONAME ; class CXnDomNode * CXnDomDepthIterator::NextL(void)
-	?NewL@CXnDomPropertyValue@@SAPAV1@AAVCXnDomStringPool@@@Z @ 94 NONAME ; class CXnDomPropertyValue * CXnDomPropertyValue::NewL(class CXnDomStringPool &)
-	?StringPoolIndex@CXnDomProperty@@QBEFXZ @ 95 NONAME ; short CXnDomProperty::StringPoolIndex(void) const
-	?CreateElementNSL@CXnDomDocument@@QAEPAVCXnDomNode@@ABVTDesC8@@0@Z @ 96 NONAME ; class CXnDomNode * CXnDomDocument::CreateElementNSL(class TDesC8 const &, class TDesC8 const &)
-	?CloneL@CXnDomNode@@QAEPAV1@AAVCXnDomStringPool@@@Z @ 97 NONAME ; class CXnDomNode * CXnDomNode::CloneL(class CXnDomStringPool &)
-	?SetStringPoolIndexL@CXnDomPropertyValue@@QAEXW4TPrimitiveValueType@1@F@Z @ 98 NONAME ; void CXnDomPropertyValue::SetStringPoolIndexL(enum CXnDomPropertyValue::TPrimitiveValueType, short)
+	?StringPoolIndex@CXnDomProperty@@QBEFXZ @ 94 NONAME ; short CXnDomProperty::StringPoolIndex(void) const
+	?CreateElementNSL@CXnDomDocument@@QAEPAVCXnDomNode@@ABVTDesC8@@0@Z @ 95 NONAME ; class CXnDomNode * CXnDomDocument::CreateElementNSL(class TDesC8 const &, class TDesC8 const &)
+	?CloneL@CXnDomNode@@QAEPAV1@AAVCXnDomStringPool@@@Z @ 96 NONAME ; class CXnDomNode * CXnDomNode::CloneL(class CXnDomStringPool &)
+	?SetStringPoolIndexL@CXnDomPropertyValue@@QAEXW4TPrimitiveValueType@1@F@Z @ 97 NONAME ; void CXnDomPropertyValue::SetStringPoolIndexL(enum CXnDomPropertyValue::TPrimitiveValueType, short)
+	?StringPool@CXnDomProperty@@QBEPAVCXnDomStringPool@@XZ @ 98 NONAME ; class CXnDomStringPool * CXnDomProperty::StringPool(void) const
 	?SetParent@CXnDomNode@@QAEXPAV1@@Z @ 99 NONAME ; void CXnDomNode::SetParent(class CXnDomNode *)
 	?DomNodeCount@CXnDomDocument@@QBEHXZ @ 100 NONAME ; int CXnDomDocument::DomNodeCount(void) const
 	?CloneL@CXnDomProperty@@QAEPAV1@AAVCXnDomStringPool@@@Z @ 101 NONAME ; class CXnDomProperty * CXnDomProperty::CloneL(class CXnDomStringPool &)
-	?Size@CXnDomDocument@@QBEHXZ @ 102 NONAME ; int CXnDomDocument::Size(void) const
-	?NewL@CXnDomProperty@@SAPAV1@ABVTDesC8@@AAVCXnDomStringPool@@@Z @ 103 NONAME ; class CXnDomProperty * CXnDomProperty::NewL(class TDesC8 const &, class CXnDomStringPool &)
-	??1CXnDomProperty@@UAE@XZ @ 104 NONAME ; CXnDomProperty::~CXnDomProperty(void)
-	?LastNode@CXnDomDocument@@QBEPAVCXnDomNode@@XZ @ 105 NONAME ; class CXnDomNode * CXnDomDocument::LastNode(void) const
-	?SetOwnershipL@CXnDomNode@@QAEXABVTDesC8@@@Z @ 106 NONAME ; void CXnDomNode::SetOwnershipL(class TDesC8 const &)
-	?ReadL@CXnDomDocument@@QAEPAVCXnDomNode@@AAVRReadStream@@@Z @ 107 NONAME ; class CXnDomNode * CXnDomDocument::ReadL(class RReadStream &)
+	?SwapStringPoolL@CXnDomNode@@QAEXPAVCXnDomStringPool@@@Z @ 102 NONAME ; void CXnDomNode::SwapStringPoolL(class CXnDomStringPool *)
+	?Size@CXnDomDocument@@QBEHXZ @ 103 NONAME ; int CXnDomDocument::Size(void) const
+	?StringPool@CXnDomList@@QBEPAVCXnDomStringPool@@XZ @ 104 NONAME ; class CXnDomStringPool * CXnDomList::StringPool(void) const
+	??1CXnDomProperty@@UAE@XZ @ 105 NONAME ; CXnDomProperty::~CXnDomProperty(void)
+	?LastNode@CXnDomDocument@@QBEPAVCXnDomNode@@XZ @ 106 NONAME ; class CXnDomNode * CXnDomDocument::LastNode(void) const
 
--- a/idlehomescreen/xmluirendering/dom/eabi/xn3domdocumentu.def	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/dom/eabi/xn3domdocumentu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -4,15 +4,15 @@
 	_ZN10CXnDomList10FindByNameERK6TDesC8 @ 3 NONAME
 	_ZN10CXnDomList10RemoveItemEP14MXnDomListItem @ 4 NONAME
 	_ZN10CXnDomList10RemoveItemEi @ 5 NONAME
-	_ZN10CXnDomList4LastEv @ 6 NONAME
-	_ZN10CXnDomList5FirstEv @ 7 NONAME
-	_ZN10CXnDomList5ResetEv @ 8 NONAME
-	_ZN10CXnDomList8AddItemLEP14MXnDomListItem @ 9 NONAME
-	_ZN10CXnDomList8AddItemLEP14MXnDomListItemi @ 10 NONAME
-	_ZN10CXnDomNode10ChildNodesEv @ 11 NONAME
-	_ZN10CXnDomNode10LayoutNodeEv @ 12 NONAME
-	_ZN10CXnDomNode10SetPCDataLERK6TDesC8 @ 13 NONAME
-	_ZN10CXnDomNode10SetRefNodeEi @ 14 NONAME
+	_ZN10CXnDomList15SwapStringPoolLEP16CXnDomStringPool @ 6 NONAME
+	_ZN10CXnDomList4LastEv @ 7 NONAME
+	_ZN10CXnDomList5FirstEv @ 8 NONAME
+	_ZN10CXnDomList5ResetEv @ 9 NONAME
+	_ZN10CXnDomList8AddItemLEP14MXnDomListItem @ 10 NONAME
+	_ZN10CXnDomList8AddItemLEP14MXnDomListItemi @ 11 NONAME
+	_ZN10CXnDomNode10ChildNodesEv @ 12 NONAME
+	_ZN10CXnDomNode10LayoutNodeEv @ 13 NONAME
+	_ZN10CXnDomNode10SetPCDataLERK6TDesC8 @ 14 NONAME
 	_ZN10CXnDomNode11ContentTypeEv @ 15 NONAME
 	_ZN10CXnDomNode11DeleteChildEPS_ @ 16 NONAME
 	_ZN10CXnDomNode12PropertyListEv @ 17 NONAME
@@ -20,25 +20,25 @@
 	_ZN10CXnDomNode13ReplaceChildLEPS_S0_ @ 19 NONAME
 	_ZN10CXnDomNode13SetLayoutNodeEP7CXnNode @ 20 NONAME
 	_ZN10CXnDomNode13SetNamespaceLERK6TDesC8 @ 21 NONAME
-	_ZN10CXnDomNode14CreateRefNodeLEv @ 22 NONAME
+	_ZN10CXnDomNode13SetOwnershipLERK6TDesC8 @ 22 NONAME
 	_ZN10CXnDomNode14SetContentTypeERK12TContentType @ 23 NONAME
-	_ZN10CXnDomNode17CloneWithoutKidsLER16CXnDomStringPool @ 24 NONAME
+	_ZN10CXnDomNode15SwapStringPoolLEP16CXnDomStringPool @ 24 NONAME
 	_ZN10CXnDomNode19DeleteAttributeListEv @ 25 NONAME
 	_ZN10CXnDomNode4NameEv @ 26 NONAME
 	_ZN10CXnDomNode6CloneLER16CXnDomStringPool @ 27 NONAME
-	_ZN10CXnDomNode6CloneLER16CXnDomStringPoolRK6TDesC8 @ 28 NONAME
-	_ZN10CXnDomNode6PCDataEv @ 29 NONAME
-	_ZN10CXnDomNode9AddChildLEPS_ @ 30 NONAME
-	_ZN10CXnDomNode9AddChildLEPS_i @ 31 NONAME
-	_ZN10CXnDomNode9NamespaceEv @ 32 NONAME
-	_ZN10CXnDomNode9SetNodeIdEi @ 33 NONAME
-	_ZN10CXnDomNode9SetParentEPS_ @ 34 NONAME
-	_ZN14CXnDomDocument11SetRootNodeEP10CXnDomNode @ 35 NONAME
-	_ZN14CXnDomDocument12InternalizeLER11RReadStream @ 36 NONAME
-	_ZN14CXnDomDocument16CreateElementNSLERK6TDesC8S2_ @ 37 NONAME
-	_ZN14CXnDomDocument4NewLEPK6HBufC8 @ 38 NONAME
-	_ZN14CXnDomDocument4NewLER11RReadStream @ 39 NONAME
-	_ZN14CXnDomDocument4NewLEv @ 40 NONAME
+	_ZN10CXnDomNode6PCDataEv @ 28 NONAME
+	_ZN10CXnDomNode9AddChildLEPS_ @ 29 NONAME
+	_ZN10CXnDomNode9AddChildLEPS_i @ 30 NONAME
+	_ZN10CXnDomNode9NamespaceEv @ 31 NONAME
+	_ZN10CXnDomNode9SetNodeIdEi @ 32 NONAME
+	_ZN10CXnDomNode9SetParentEPS_ @ 33 NONAME
+	_ZN14CXnDomDocument11SetRootNodeEP10CXnDomNode @ 34 NONAME
+	_ZN14CXnDomDocument12InternalizeLER11RReadStream @ 35 NONAME
+	_ZN14CXnDomDocument16CreateElementNSLERK6TDesC8S2_ @ 36 NONAME
+	_ZN14CXnDomDocument4NewLEPK6HBufC8 @ 37 NONAME
+	_ZN14CXnDomDocument4NewLER11RReadStream @ 38 NONAME
+	_ZN14CXnDomDocument4NewLEv @ 39 NONAME
+	_ZN14CXnDomDocument5ReadLER11RReadStream @ 40 NONAME
 	_ZN14CXnDomDocument6CloneLEv @ 41 NONAME
 	_ZN14CXnDomDocument9MarshallLEv @ 42 NONAME
 	_ZN14CXnDomDocumentD0Ev @ 43 NONAME
@@ -47,102 +47,101 @@
 	_ZN14CXnDomProperty10IsValueSetEv @ 46 NONAME
 	_ZN14CXnDomProperty12SetInheritedEi @ 47 NONAME
 	_ZN14CXnDomProperty14SetPseudoClassENS_12TPseudoClassE @ 48 NONAME
-	_ZN14CXnDomProperty17PropertyValueListEv @ 49 NONAME
-	_ZN14CXnDomProperty4NameEv @ 50 NONAME
-	_ZN14CXnDomProperty4NewLERK6TDesC8R16CXnDomStringPool @ 51 NONAME
-	_ZN14CXnDomProperty4NewLEsR16CXnDomStringPool @ 52 NONAME
-	_ZN14CXnDomProperty6CloneLER16CXnDomStringPool @ 53 NONAME
-	_ZN14CXnDomProperty6CloneLEv @ 54 NONAME
-	_ZN14CXnDomProperty9InheritedEv @ 55 NONAME
-	_ZN14CXnDomPropertyD0Ev @ 56 NONAME
-	_ZN14CXnDomPropertyD1Ev @ 57 NONAME
-	_ZN14CXnDomPropertyD2Ev @ 58 NONAME
-	_ZN15CXnDomAttribute4NameEv @ 59 NONAME
-	_ZN15CXnDomAttribute4NewLERK6TDesC8R16CXnDomStringPool @ 60 NONAME
-	_ZN15CXnDomAttribute5ValueEv @ 61 NONAME
-	_ZN15CXnDomAttribute6CloneLEv @ 62 NONAME
-	_ZN15CXnDomAttribute9SetValueLERK6TDesC8 @ 63 NONAME
-	_ZN15CXnDomAttributeD0Ev @ 64 NONAME
-	_ZN15CXnDomAttributeD1Ev @ 65 NONAME
-	_ZN15CXnDomAttributeD2Ev @ 66 NONAME
-	_ZN16CXnDomStringPool10AddStringLERK6TDesC8 @ 67 NONAME
-	_ZN19CXnDomDepthIterator4NewLER10CXnDomNode @ 68 NONAME
-	_ZN19CXnDomDepthIterator5FirstEv @ 69 NONAME
-	_ZN19CXnDomDepthIterator5NextLEv @ 70 NONAME
-	_ZN19CXnDomDepthIteratorD0Ev @ 71 NONAME
-	_ZN19CXnDomDepthIteratorD1Ev @ 72 NONAME
-	_ZN19CXnDomDepthIteratorD2Ev @ 73 NONAME
-	_ZN19CXnDomPropertyValue11IsAutoIdentEv @ 74 NONAME
-	_ZN19CXnDomPropertyValue11IsNoneIdentEv @ 75 NONAME
-	_ZN19CXnDomPropertyValue11ReleaseDataEv @ 76 NONAME
-	_ZN19CXnDomPropertyValue11StringValueEv @ 77 NONAME
-	_ZN19CXnDomPropertyValue12SetRgbColorLERK4TRgb @ 78 NONAME
-	_ZN19CXnDomPropertyValue12StringValueLEv @ 79 NONAME
-	_ZN19CXnDomPropertyValue14IsInheritIdentEv @ 80 NONAME
-	_ZN19CXnDomPropertyValue14SetFloatValueLENS_19TPrimitiveValueTypeEd @ 81 NONAME
-	_ZN19CXnDomPropertyValue15SetStringValueLENS_19TPrimitiveValueTypeERK6TDesC8 @ 82 NONAME
-	_ZN19CXnDomPropertyValue19SetStringPoolIndexLENS_19TPrimitiveValueTypeEs @ 83 NONAME
-	_ZN19CXnDomPropertyValue4NewLER16CXnDomStringPool @ 84 NONAME
-	_ZN19CXnDomPropertyValue6CloneLEv @ 85 NONAME
-	_ZN19CXnDomPropertyValueD0Ev @ 86 NONAME
-	_ZN19CXnDomPropertyValueD1Ev @ 87 NONAME
-	_ZN19CXnDomPropertyValueD2Ev @ 88 NONAME
-	_ZNK10CXnDomList10StringPoolEv @ 89 NONAME
-	_ZNK10CXnDomList4ItemEi @ 90 NONAME
-	_ZNK10CXnDomList6LengthEv @ 91 NONAME
-	_ZNK10CXnDomList9ItemIndexERK14MXnDomListItem @ 92 NONAME
-	_ZNK10CXnDomNode10StringPoolEv @ 93 NONAME
-	_ZNK10CXnDomNode13AttributeListEv @ 94 NONAME
-	_ZNK10CXnDomNode14AttributeValueERK6TDesC8 @ 95 NONAME
-	_ZNK10CXnDomNode15DescendantCountEv @ 96 NONAME
-	_ZNK10CXnDomNode6NodeIdEv @ 97 NONAME
-	_ZNK10CXnDomNode6ParentEv @ 98 NONAME
-	_ZNK10CXnDomNode9IsRefNodeEv @ 99 NONAME
-	_ZNK10CXnDomNode9ItemIndexERK14MXnDomListItem @ 100 NONAME
-	_ZNK14CXnDomDocument10StringPoolEv @ 101 NONAME
-	_ZNK14CXnDomDocument12DomNodeCountEv @ 102 NONAME
-	_ZNK14CXnDomDocument12ExternalizeLER12RWriteStream @ 103 NONAME
-	_ZNK14CXnDomDocument4SizeEv @ 104 NONAME
-	_ZNK14CXnDomDocument8LastNodeEv @ 105 NONAME
-	_ZNK14CXnDomDocument8RootNodeEv @ 106 NONAME
-	_ZNK14CXnDomProperty10StringPoolEv @ 107 NONAME
-	_ZNK14CXnDomProperty11PseudoClassEv @ 108 NONAME
-	_ZNK14CXnDomProperty15StringPoolIndexEv @ 109 NONAME
-	_ZNK15CXnDomAttribute19NameStringPoolIndexEv @ 110 NONAME
-	_ZNK15CXnDomAttribute20ValueStringPoolIndexEv @ 111 NONAME
-	_ZNK19CXnDomPropertyValue11FloatValueLEv @ 112 NONAME
-	_ZNK19CXnDomPropertyValue14RgbColorValueLEv @ 113 NONAME
-	_ZNK19CXnDomPropertyValue16StringPoolIndexLEv @ 114 NONAME
-	_ZNK19CXnDomPropertyValue18PrimitiveValueTypeEv @ 115 NONAME
-	_ZTI10CXnDomList @ 116 NONAME ; #<TI>#
-	_ZTI10CXnDomNode @ 117 NONAME ; #<TI>#
-	_ZTI14CXnDomDocument @ 118 NONAME ; #<TI>#
-	_ZTI14CXnDomProperty @ 119 NONAME ; #<TI>#
-	_ZTI15CXnDomAttribute @ 120 NONAME ; #<TI>#
-	_ZTI16CXnDomStringPool @ 121 NONAME ; #<TI>#
-	_ZTI19CXnDomDepthIterator @ 122 NONAME ; #<TI>#
-	_ZTI19CXnDomPropertyValue @ 123 NONAME ; #<TI>#
-	_ZTV10CXnDomList @ 124 NONAME ; #<VT>#
-	_ZTV10CXnDomNode @ 125 NONAME ; #<VT>#
-	_ZTV14CXnDomDocument @ 126 NONAME ; #<VT>#
-	_ZTV14CXnDomProperty @ 127 NONAME ; #<VT>#
-	_ZTV15CXnDomAttribute @ 128 NONAME ; #<VT>#
-	_ZTV16CXnDomStringPool @ 129 NONAME ; #<VT>#
-	_ZTV19CXnDomDepthIterator @ 130 NONAME ; #<VT>#
-	_ZTV19CXnDomPropertyValue @ 131 NONAME ; #<VT>#
-	_ZThn4_N10CXnDomNode4NameEv @ 132 NONAME ; #<thunk>#
-	_ZThn4_N14CXnDomProperty4NameEv @ 133 NONAME ; #<thunk>#
-	_ZThn4_N14CXnDomPropertyD0Ev @ 134 NONAME ; #<thunk>#
-	_ZThn4_N14CXnDomPropertyD1Ev @ 135 NONAME ; #<thunk>#
-	_ZThn4_N15CXnDomAttribute4NameEv @ 136 NONAME ; #<thunk>#
-	_ZThn4_N15CXnDomAttributeD0Ev @ 137 NONAME ; #<thunk>#
-	_ZThn4_N15CXnDomAttributeD1Ev @ 138 NONAME ; #<thunk>#
-	_ZThn4_N19CXnDomDepthIterator5FirstEv @ 139 NONAME ; #<thunk>#
-	_ZThn4_N19CXnDomDepthIterator5NextLEv @ 140 NONAME ; #<thunk>#
-	_ZThn4_N19CXnDomDepthIteratorD0Ev @ 141 NONAME ; #<thunk>#
-	_ZThn4_N19CXnDomDepthIteratorD1Ev @ 142 NONAME ; #<thunk>#
-	_ZThn4_N19CXnDomPropertyValueD0Ev @ 143 NONAME ; #<thunk>#
-	_ZThn4_N19CXnDomPropertyValueD1Ev @ 144 NONAME ; #<thunk>#
-	_ZN10CXnDomNode13SetOwnershipLERK6TDesC8 @ 145 NONAME
-	_ZN14CXnDomDocument5ReadLER11RReadStream @ 146 NONAME
+	_ZN14CXnDomProperty15SwapStringPoolLEP16CXnDomStringPool @ 49 NONAME
+	_ZN14CXnDomProperty17PropertyValueListEv @ 50 NONAME
+	_ZN14CXnDomProperty4NameEv @ 51 NONAME
+	_ZN14CXnDomProperty4NewLERK6TDesC8P16CXnDomStringPool @ 52 NONAME
+	_ZN14CXnDomProperty4NewLEsP16CXnDomStringPool @ 53 NONAME
+	_ZN14CXnDomProperty6CloneLER16CXnDomStringPool @ 54 NONAME
+	_ZN14CXnDomProperty6CloneLEv @ 55 NONAME
+	_ZN14CXnDomProperty9InheritedEv @ 56 NONAME
+	_ZN14CXnDomPropertyD0Ev @ 57 NONAME
+	_ZN14CXnDomPropertyD1Ev @ 58 NONAME
+	_ZN14CXnDomPropertyD2Ev @ 59 NONAME
+	_ZN15CXnDomAttribute15SwapStringPoolLEP16CXnDomStringPool @ 60 NONAME
+	_ZN15CXnDomAttribute4NameEv @ 61 NONAME
+	_ZN15CXnDomAttribute4NewLERK6TDesC8P16CXnDomStringPool @ 62 NONAME
+	_ZN15CXnDomAttribute5ValueEv @ 63 NONAME
+	_ZN15CXnDomAttribute6CloneLEv @ 64 NONAME
+	_ZN15CXnDomAttribute9SetValueLERK6TDesC8 @ 65 NONAME
+	_ZN15CXnDomAttributeD0Ev @ 66 NONAME
+	_ZN15CXnDomAttributeD1Ev @ 67 NONAME
+	_ZN15CXnDomAttributeD2Ev @ 68 NONAME
+	_ZN19CXnDomDepthIterator4NewLER10CXnDomNode @ 69 NONAME
+	_ZN19CXnDomDepthIterator5FirstEv @ 70 NONAME
+	_ZN19CXnDomDepthIterator5NextLEv @ 71 NONAME
+	_ZN19CXnDomDepthIteratorD0Ev @ 72 NONAME
+	_ZN19CXnDomDepthIteratorD1Ev @ 73 NONAME
+	_ZN19CXnDomDepthIteratorD2Ev @ 74 NONAME
+	_ZN19CXnDomPropertyValue11IsAutoIdentEv @ 75 NONAME
+	_ZN19CXnDomPropertyValue11IsNoneIdentEv @ 76 NONAME
+	_ZN19CXnDomPropertyValue11ReleaseDataEv @ 77 NONAME
+	_ZN19CXnDomPropertyValue11StringValueEv @ 78 NONAME
+	_ZN19CXnDomPropertyValue12SetRgbColorLERK4TRgb @ 79 NONAME
+	_ZN19CXnDomPropertyValue12StringValueLEv @ 80 NONAME
+	_ZN19CXnDomPropertyValue14IsInheritIdentEv @ 81 NONAME
+	_ZN19CXnDomPropertyValue14SetFloatValueLENS_19TPrimitiveValueTypeEd @ 82 NONAME
+	_ZN19CXnDomPropertyValue15SetStringValueLENS_19TPrimitiveValueTypeERK6TDesC8 @ 83 NONAME
+	_ZN19CXnDomPropertyValue15SwapStringPoolLEP16CXnDomStringPool @ 84 NONAME
+	_ZN19CXnDomPropertyValue19SetStringPoolIndexLENS_19TPrimitiveValueTypeEs @ 85 NONAME
+	_ZN19CXnDomPropertyValue4NewLEP16CXnDomStringPool @ 86 NONAME
+	_ZN19CXnDomPropertyValue6CloneLEv @ 87 NONAME
+	_ZN19CXnDomPropertyValueD0Ev @ 88 NONAME
+	_ZN19CXnDomPropertyValueD1Ev @ 89 NONAME
+	_ZN19CXnDomPropertyValueD2Ev @ 90 NONAME
+	_ZNK10CXnDomList10StringPoolEv @ 91 NONAME
+	_ZNK10CXnDomList4ItemEi @ 92 NONAME
+	_ZNK10CXnDomList6LengthEv @ 93 NONAME
+	_ZNK10CXnDomList9ItemIndexERK14MXnDomListItem @ 94 NONAME
+	_ZNK10CXnDomNode10StringPoolEv @ 95 NONAME
+	_ZNK10CXnDomNode13AttributeListEv @ 96 NONAME
+	_ZNK10CXnDomNode14AttributeValueERK6TDesC8 @ 97 NONAME
+	_ZNK10CXnDomNode15DescendantCountEv @ 98 NONAME
+	_ZNK10CXnDomNode6NodeIdEv @ 99 NONAME
+	_ZNK10CXnDomNode6ParentEv @ 100 NONAME
+	_ZNK10CXnDomNode9ItemIndexERK14MXnDomListItem @ 101 NONAME
+	_ZNK14CXnDomDocument10StringPoolEv @ 102 NONAME
+	_ZNK14CXnDomDocument12DomNodeCountEv @ 103 NONAME
+	_ZNK14CXnDomDocument12ExternalizeLER12RWriteStream @ 104 NONAME
+	_ZNK14CXnDomDocument4SizeEv @ 105 NONAME
+	_ZNK14CXnDomDocument8LastNodeEv @ 106 NONAME
+	_ZNK14CXnDomDocument8RootNodeEv @ 107 NONAME
+	_ZNK14CXnDomProperty10StringPoolEv @ 108 NONAME
+	_ZNK14CXnDomProperty11PseudoClassEv @ 109 NONAME
+	_ZNK14CXnDomProperty15StringPoolIndexEv @ 110 NONAME
+	_ZNK15CXnDomAttribute19NameStringPoolIndexEv @ 111 NONAME
+	_ZNK15CXnDomAttribute20ValueStringPoolIndexEv @ 112 NONAME
+	_ZNK19CXnDomPropertyValue11FloatValueLEv @ 113 NONAME
+	_ZNK19CXnDomPropertyValue14RgbColorValueLEv @ 114 NONAME
+	_ZNK19CXnDomPropertyValue16StringPoolIndexLEv @ 115 NONAME
+	_ZNK19CXnDomPropertyValue18PrimitiveValueTypeEv @ 116 NONAME
+	_ZTI10CXnDomList @ 117 NONAME
+	_ZTI10CXnDomNode @ 118 NONAME
+	_ZTI14CXnDomDocument @ 119 NONAME
+	_ZTI14CXnDomProperty @ 120 NONAME
+	_ZTI15CXnDomAttribute @ 121 NONAME
+	_ZTI16CXnDomStringPool @ 122 NONAME
+	_ZTI19CXnDomDepthIterator @ 123 NONAME
+	_ZTI19CXnDomPropertyValue @ 124 NONAME
+	_ZTV10CXnDomList @ 125 NONAME
+	_ZTV10CXnDomNode @ 126 NONAME
+	_ZTV14CXnDomDocument @ 127 NONAME
+	_ZTV14CXnDomProperty @ 128 NONAME
+	_ZTV15CXnDomAttribute @ 129 NONAME
+	_ZTV16CXnDomStringPool @ 130 NONAME
+	_ZTV19CXnDomDepthIterator @ 131 NONAME
+	_ZTV19CXnDomPropertyValue @ 132 NONAME
+	_ZThn4_N10CXnDomNode4NameEv @ 133 NONAME
+	_ZThn4_N14CXnDomProperty4NameEv @ 134 NONAME
+	_ZThn4_N14CXnDomPropertyD0Ev @ 135 NONAME
+	_ZThn4_N14CXnDomPropertyD1Ev @ 136 NONAME
+	_ZThn4_N15CXnDomAttribute4NameEv @ 137 NONAME
+	_ZThn4_N15CXnDomAttributeD0Ev @ 138 NONAME
+	_ZThn4_N15CXnDomAttributeD1Ev @ 139 NONAME
+	_ZThn4_N19CXnDomDepthIterator5FirstEv @ 140 NONAME
+	_ZThn4_N19CXnDomDepthIterator5NextLEv @ 141 NONAME
+	_ZThn4_N19CXnDomDepthIteratorD0Ev @ 142 NONAME
+	_ZThn4_N19CXnDomDepthIteratorD1Ev @ 143 NONAME
+	_ZThn4_N19CXnDomPropertyValueD0Ev @ 144 NONAME
+	_ZThn4_N19CXnDomPropertyValueD1Ev @ 145 NONAME
 
--- a/idlehomescreen/xmluirendering/dom/group/xndomdocument.mmp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/dom/group/xndomdocument.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -34,6 +34,7 @@
 SOURCE      xndomlist.cpp
 SOURCE      xndomdepthiterator.cpp
 SOURCE      xndomstringpool.cpp
+SOURCE      xndomstringpooloptimizer.cpp
 
 USERINCLUDE . 
 USERINCLUDE ../inc
--- a/idlehomescreen/xmluirendering/dom/src/xndomattribute.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/dom/src/xndomattribute.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -28,7 +28,7 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CXnDomAttribute::CXnDomAttribute( CXnDomStringPool& aStringPool ):
+CXnDomAttribute::CXnDomAttribute( CXnDomStringPool* aStringPool ):
     iStringPool( aStringPool ),
     iNameRef( KErrNotFound ),
     iValueRef( KErrNotFound )
@@ -43,7 +43,7 @@
 //
 void CXnDomAttribute::ConstructL( const TDesC8& aName )
     {
-    iNameRef = iStringPool.AddStringL( aName );
+    iNameRef = iStringPool->AddStringL( aName );
     }
 // -----------------------------------------------------------------------------
 // CXnDomAttribute::NewL
@@ -52,7 +52,7 @@
 //
 EXPORT_C CXnDomAttribute* CXnDomAttribute::NewL( 
     const TDesC8& aName,
-    CXnDomStringPool& aStringPool )
+    CXnDomStringPool* aStringPool )
     {
     CXnDomAttribute* self = new( ELeave ) CXnDomAttribute( aStringPool );
     
@@ -71,7 +71,7 @@
 //
 CXnDomAttribute* CXnDomAttribute::NewL( 
     RReadStream& aStream, 
-    CXnDomStringPool& aStringPool )
+    CXnDomStringPool* aStringPool )
     {
     CXnDomAttribute* self = new( ELeave ) CXnDomAttribute( aStringPool );
     CleanupStack::PushL( self );
@@ -108,13 +108,13 @@
 //
 CXnDomAttribute* CXnDomAttribute::CloneL( CXnDomStringPool& aStringPool )
     {
-    const TDesC8& name = iStringPool.String( iNameRef );
+    const TDesC8& name = iStringPool->String( iNameRef );
     
-    CXnDomAttribute* clone = CXnDomAttribute::NewL( name, aStringPool );
+    CXnDomAttribute* clone = CXnDomAttribute::NewL( name, &aStringPool );
     CleanupStack::PushL( clone );
     if ( iValueRef > KErrNotFound )
         {
-        const TDesC8& value = iStringPool.String( iValueRef );
+        const TDesC8& value = iStringPool->String( iValueRef );
         clone->SetValueL( value );
         }
     CleanupStack::Pop( clone );    
@@ -128,7 +128,7 @@
 //
 EXPORT_C const TDesC8& CXnDomAttribute::Name()
     {
-    return iStringPool.String( iNameRef );
+    return iStringPool->String( iNameRef );
     }
     
 // -----------------------------------------------------------------------------
@@ -147,7 +147,7 @@
     {
     if ( iValueRef > KErrNotFound )
         {
-        return iStringPool.String( iValueRef );
+        return iStringPool->String( iValueRef );
         }
     return KNullDesC8;
     }
@@ -160,15 +160,32 @@
     {
     return iValueRef;    
     }    
+
 // -----------------------------------------------------------------------------
 // CXnDomAttribute::SetValueL
 // -----------------------------------------------------------------------------
 //
 EXPORT_C void CXnDomAttribute::SetValueL( const TDesC8& aValue )
     {
-    iValueRef = iStringPool.AddStringL( aValue );
+    iValueRef = iStringPool->AddStringL( aValue );
     }
 
+// -----------------------------------------------------------------------------
+// CXnDomAttribute::SwapStringPoolL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CXnDomAttribute::SwapStringPoolL( CXnDomStringPool* aStringPool )
+    {
+    if( !aStringPool )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    iNameRef = aStringPool->AddStringL( iStringPool->String( iNameRef ) );
+    iValueRef = aStringPool->AddStringL( iStringPool->String( iValueRef ) );
+    
+    iStringPool = aStringPool;
+    }
    
 // -----------------------------------------------------------------------------
 // CXnDomAttribute::Size
@@ -201,7 +218,7 @@
 //
 void CXnDomAttribute::InternalizeL( RReadStream& aStream )
     {
-    iNameRef = aStream.ReadInt16L() + iStringPool.Offset();
-    iValueRef = aStream.ReadInt16L()  + iStringPool.Offset();
+    iNameRef = aStream.ReadInt16L();
+    iValueRef = aStream.ReadInt16L();
     }
 //  End of File  
--- a/idlehomescreen/xmluirendering/dom/src/xndomdocument.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/dom/src/xndomdocument.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -53,7 +53,7 @@
     const TDesC8& aName, 
     const TDesC8& aNamespace )
     {
-    return CXnDomNode::NewL( aName, aNamespace, *iDomStringPool );
+    return CXnDomNode::NewL( aName, aNamespace, iDomStringPool );
     }
 // -----------------------------------------------------------------------------
 // CXnDomDocument::CXnDomDocument
@@ -73,6 +73,9 @@
 void CXnDomDocument::ConstructL()
     {
     iDomStringPool = CXnDomStringPool::NewL();
+    // Add KNullDesC8 to string pool index 0 for safety reasons.
+    // Some components use 0 as initial value for their string references.
+    iDomStringPool->AddStringL( KNullDesC8 );
     }
 
 // -----------------------------------------------------------------------------
@@ -191,7 +194,7 @@
     TBool rootNodeExist( aStream.ReadInt8L() );
     if ( rootNodeExist )
         {    
-        iRootNode = CXnDomNode::NewL( aStream, *iDomStringPool );
+        iRootNode = CXnDomNode::NewL( aStream, iDomStringPool );
         }
     }          
 
@@ -273,9 +276,9 @@
 // CXnDomDocument::StringPool
 // -----------------------------------------------------------------------------
 //
-EXPORT_C CXnDomStringPool& CXnDomDocument::StringPool() const
+EXPORT_C CXnDomStringPool* CXnDomDocument::StringPool() const
     {
-    return *iDomStringPool;
+    return iDomStringPool;
     }
 
 // -----------------------------------------------------------------------------
@@ -285,16 +288,25 @@
 //
 EXPORT_C CXnDomNode* CXnDomDocument::ReadL( 
     RReadStream& aStream )
-    { 
-    CXnDomNode* rootNode = NULL;
+    {    
+    CXnDomStringPool* localStringPool = CXnDomStringPool::NewL( ETrue );
+    CleanupStack::PushL( localStringPool );
+    aStream >> *localStringPool;
     
-    aStream >> *iDomStringPool;
+    iDomStringPool->AddAllL( *localStringPool );
+    
+    CXnDomNode* rootNode = NULL;    
     
     TBool rootNodeExist( aStream.ReadInt8L() );
     if ( rootNodeExist )
         {
-        rootNode = CXnDomNode::NewL( aStream, *iDomStringPool );
+        rootNode = CXnDomNode::NewL( aStream, localStringPool );
+        CleanupStack::PushL( rootNode );
+        rootNode->SwapStringPoolL( iDomStringPool );   
+        CleanupStack::Pop( rootNode );
         }
+        
+    CleanupStack::PopAndDestroy( localStringPool );
     
     return rootNode;
     }
--- a/idlehomescreen/xmluirendering/dom/src/xndomlist.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/dom/src/xndomlist.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -37,7 +37,7 @@
 //
 CXnDomList::CXnDomList( 
     TListType aListType, 
-    CXnDomStringPool& aStringPool,
+    CXnDomStringPool* aStringPool,
     TInt aGranularity ):
     iListType( aListType ),
     iList( aGranularity ), 
@@ -61,7 +61,7 @@
 //
 CXnDomList* CXnDomList::NewL( 
     TListType aListType, 
-    CXnDomStringPool& aStringPool,
+    CXnDomStringPool* aStringPool,
     TInt aGranularity)
     {
     CXnDomList* self = 
@@ -80,7 +80,7 @@
 //
 CXnDomList* CXnDomList::NewL( 
     RReadStream& aStream, 
-    CXnDomStringPool& aStringPool )
+    CXnDomStringPool* aStringPool )
     {
     CXnDomList* self = new( ELeave ) CXnDomList( ENodeList, aStringPool );
     
@@ -290,11 +290,25 @@
 // CXnDomList::StringPool
 // -----------------------------------------------------------------------------
 //        
-EXPORT_C CXnDomStringPool& CXnDomList::StringPool() const
+EXPORT_C CXnDomStringPool* CXnDomList::StringPool() const
     {
     return iStringPool;
     }
+
+// -----------------------------------------------------------------------------
+// CXnDomAttribute::SwapStringPoolL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CXnDomList::SwapStringPoolL( CXnDomStringPool* aStringPool )
+    {
+    if( !aStringPool )
+        {
+        User::Leave( KErrArgument );
+        }
     
+    iStringPool = aStringPool;
+    }
+
 // -----------------------------------------------------------------------------
 // CXnDomList::Size
 // -----------------------------------------------------------------------------
--- a/idlehomescreen/xmluirendering/dom/src/xndomnode.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/dom/src/xndomnode.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -24,8 +24,6 @@
 
 // LOCAL CONSTANTS AND MACROS
 const TInt KNotDefined = -1;
-_LIT8( KIdAttr, "id" );
-_LIT8( KRefAttr, "ref" );
 const TInt KPropertyListGranularity = 8;
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -35,8 +33,11 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CXnDomNode::CXnDomNode(CXnDomStringPool& aStringPool) :
-    iStringPool(aStringPool), iNodeId(KNotDefined)
+CXnDomNode::CXnDomNode(CXnDomStringPool* aStringPool) :
+    iNameRef( KNotDefined ),
+    iNSRef( KNotDefined ),
+    iStringPool( aStringPool ),
+    iNodeId( KNotDefined )    
     {
     }
 
@@ -47,8 +48,8 @@
 //
 void CXnDomNode::ConstructL(const TDesC8& aName, const TDesC8& aNS)
     {
-    iNameRef = iStringPool.AddStringL(aName);
-    iNSRef = iStringPool.AddStringL(aNS);
+    iNameRef = iStringPool->AddStringL(aName);
+    iNSRef = iStringPool->AddStringL(aNS);
 
     iChildList = CXnDomList::NewL(CXnDomList::ENodeList, iStringPool);
     iAttributeList
@@ -64,7 +65,7 @@
 // -----------------------------------------------------------------------------
 //
 CXnDomNode* CXnDomNode::NewL(const TDesC8& aName, const TDesC8& aNS,
-        CXnDomStringPool& aStringPool)
+        CXnDomStringPool* aStringPool)
     {
     CXnDomNode* self = new (ELeave) CXnDomNode(aStringPool);
 
@@ -81,7 +82,7 @@
 // -----------------------------------------------------------------------------
 //
 CXnDomNode* CXnDomNode::NewL(RReadStream& aStream,
-        CXnDomStringPool& aStringPool)
+        CXnDomStringPool* aStringPool)
     {
     CXnDomNode* self = new (ELeave) CXnDomNode(aStringPool);
 
@@ -103,24 +104,23 @@
     delete iPCData;
     }
 
-// -----------------------------------------------------------------------------
+// ---------------------------------------------------------------------
 // CXnDomNode::CloneL
 // Clones this node and it's child nodes. This is a recursive function.
 // -----------------------------------------------------------------------------
 //
 EXPORT_C CXnDomNode* CXnDomNode::CloneL(CXnDomStringPool& aStringPool)
     {
-    const TDesC8& name = iStringPool.String(iNameRef);
-    const TDesC8& ns = iStringPool.String(iNSRef);
+    const TDesC8& name = iStringPool->String(iNameRef);
+    const TDesC8& ns = iStringPool->String(iNSRef);
 
-    CXnDomNode* clone = CXnDomNode::NewL(name, ns, aStringPool);
+    CXnDomNode* clone = CXnDomNode::NewL(name, ns, &aStringPool);
     CleanupStack::PushL(clone);
     if (iPCData)
         {
         clone->AppendPCDataL(*iPCData);
         }
     clone->iNodeId = iNodeId;
-    clone->iRefNode = iRefNode;
 
     TInt childCount(iChildList->Length());
 
@@ -163,118 +163,19 @@
     }
 
 // -----------------------------------------------------------------------------
-// CXnDomNode::CloneWithoutKidsL
-// Clones only this node. This is a recursive function.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CXnDomNode* CXnDomNode::CloneWithoutKidsL(
-        CXnDomStringPool& aStringPool)
-    {
-    const TDesC8& name = iStringPool.String(iNameRef);
-    const TDesC8& ns = iStringPool.String(iNSRef);
-
-    CXnDomNode* clone = CXnDomNode::NewL(name, ns, aStringPool);
-    CleanupStack::PushL(clone);
-    if (iPCData)
-        {
-        clone->AppendPCDataL(*iPCData);
-        }
-    clone->iNodeId = iNodeId;
-    clone->iRefNode = iRefNode;
-
-    TInt attrCount(iAttributeList->Length());
-    for (TInt j = 0; j < attrCount; j++)
-        {
-        CXnDomAttribute
-                * attrClone =
-                        static_cast<CXnDomAttribute*> (iAttributeList->Item(j))->CloneL(
-                                aStringPool);
-        CleanupStack::PushL(attrClone);
-        clone->iAttributeList->AddItemL(attrClone);
-        CleanupStack::Pop(attrClone);
-        }
-
-    TInt propertyCount(iPropertyList->Length());
-    for (TInt k = 0; k < propertyCount; k++)
-        {
-        CXnDomProperty
-                * propClone =
-                        static_cast<CXnDomProperty*> (iPropertyList->Item(k))->CloneL(
-                                aStringPool);
-        CleanupStack::PushL(propClone);
-        clone->iPropertyList->AddItemL(propClone);
-        CleanupStack::Pop(propClone);
-        }
-    CleanupStack::Pop(clone);
-    return clone;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnDomNode::CreateRefNodeL
-// Recursive function to create referer nodes.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CXnDomNode* CXnDomNode::CreateRefNodeL()
-    {
-    const TDesC8& name = iStringPool.String(iNameRef);
-    const TDesC8& ns = iStringPool.String(iNSRef);
-
-    CXnDomNode* ref = CXnDomNode::NewL(name, ns, iStringPool);
-    CleanupStack::PushL(ref);
-
-    ref->iRefNode = ETrue;
-
-    TInt childCount(iChildList->Length());
-
-    for (TInt i = 0; i < childCount; i++)
-        {
-        CXnDomNode
-                * childRef =
-                        static_cast<CXnDomNode*> (iChildList->Item(i))->CreateRefNodeL();
-        CleanupStack::PushL(childRef);
-        childRef->iParentNode = ref;
-        ref->iChildList->AddItemL(childRef);
-        CleanupStack::Pop(childRef);
-        }
-
-    CXnDomAttribute* attr = NULL;
-    if (!iRefNode)
-        {
-        attr = static_cast<CXnDomAttribute*> (iAttributeList->FindByName(
-                KIdAttr));
-        }
-    else
-        {
-        attr = static_cast<CXnDomAttribute*> (iAttributeList->FindByName(
-                KRefAttr));
-        }
-
-    if (attr)
-        {
-        CXnDomAttribute* newAttr = CXnDomAttribute::NewL(KRefAttr,
-                iStringPool);
-        CleanupStack::PushL(newAttr);
-        newAttr->SetValueL(attr->Value());
-        ref->iAttributeList->AddItemL(newAttr);
-        CleanupStack::Pop(newAttr);
-        }
-    else
-        {
-        //referred node don't have an id or ref, thats not ok.
-        User::Leave(KErrArgument);
-        }
-
-    CleanupStack::Pop(ref);
-    return ref;
-    }
-
-// -----------------------------------------------------------------------------
 // CXnDomNode::Name
 // -----------------------------------------------------------------------------
 //
 EXPORT_C const TDesC8& CXnDomNode::Name()
     {
-    return iStringPool.String(iNameRef);
+    if( iNameRef == KNotDefined )
+        {
+        return KNullDesC8();
+        }
+    else        
+        {
+        return iStringPool->String( iNameRef );
+        }       
     }
 
 // -----------------------------------------------------------------------------
@@ -283,7 +184,14 @@
 //
 EXPORT_C const TDesC8& CXnDomNode::Namespace()
     {
-    return iStringPool.String(iNSRef);
+    if( iNSRef == KNotDefined )
+        {
+        return KNullDesC8();
+        }
+    else        
+        {
+        return iStringPool->String( iNSRef );
+        }    
     }
 
 // -----------------------------------------------------------------------------
@@ -469,29 +377,12 @@
 // CXnDomNode::StringPool
 // -----------------------------------------------------------------------------
 //        
-EXPORT_C CXnDomStringPool& CXnDomNode::StringPool() const
+EXPORT_C CXnDomStringPool* CXnDomNode::StringPool() const
     {
     return iStringPool;
     }
 
 // -----------------------------------------------------------------------------
-// CXnDomNode::SetRefNode
-// -----------------------------------------------------------------------------
-//        
-EXPORT_C void CXnDomNode::SetRefNode(TBool aRefNode)
-    {
-    iRefNode = aRefNode;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnDomNode::IsRefNode
-// -----------------------------------------------------------------------------
-//        
-EXPORT_C TBool CXnDomNode::IsRefNode() const
-    {
-    return iRefNode;
-    }
-// -----------------------------------------------------------------------------
 // CXnDomNode::Size
 // -----------------------------------------------------------------------------
 //
@@ -529,10 +420,9 @@
 //
 void CXnDomNode::ExternalizeL(RWriteStream& aStream) const
     {
-
     aStream.WriteInt16L(iNameRef);
     aStream.WriteInt16L(iNSRef);
-    aStream.WriteInt8L(iRefNode);
+    aStream.WriteInt8L( 0 ); // ref node legacy.
 
     if (iPCData)
         {
@@ -555,11 +445,14 @@
 // CXnDomNode::InternalizeL
 // -----------------------------------------------------------------------------
 //
-void CXnDomNode::InternalizeL(RReadStream& aStream)
+void CXnDomNode::InternalizeL( RReadStream& aStream )
     {
-    iNameRef = aStream.ReadInt16L() + iStringPool.Offset();
-    iNSRef = aStream.ReadInt16L() + iStringPool.Offset();
-    iRefNode = aStream.ReadInt8L();
+    iNameRef = aStream.ReadInt16L();
+    
+    iNSRef = KNotDefined; // This is set later by call to setnamespace,    
+    aStream.ReadInt16L(); // so only consume legacy data from stream.
+    
+    aStream.ReadInt8L(); // Consume legacy ref node parameter.
 
     TInt len(0);
     TBool exist(aStream.ReadInt8L());
@@ -589,49 +482,6 @@
         }
 
     iAttributeList = CXnDomList::NewL(aStream, iStringPool);
-
-    iPropertyList = CXnDomList::NewL(aStream, iStringPool);
-    }
-
-// -----------------------------------------------------------------------------
-// CXnDomNode::ReadL
-// -----------------------------------------------------------------------------
-//
-void CXnDomNode::ReadL(RReadStream& aStream)
-    {
-    iNameRef = aStream.ReadInt16L();
-    iNSRef = aStream.ReadInt16L();
-    iRefNode = aStream.ReadInt8L();
-
-    TBool exist(aStream.ReadInt8L());
-    if (exist)
-        {
-        TInt len(0);
-        len = aStream.ReadInt16L();
-        delete iPCData;
-        iPCData = NULL;
-        iPCData = HBufC8::NewL(aStream, len);
-        }
-
-    iNodeId = aStream.ReadInt32L();
-
-    iChildList = CXnDomList::NewL(aStream, iStringPool);
-    TInt count(iChildList->Length());
-    for (TInt i = 0; i < count; i++)
-        {
-        CXnDomNode* node = static_cast<CXnDomNode*> (iChildList->Item(i));
-        if (node)
-            {
-            node->SetParent(this);
-            }
-        else
-            {
-            User::Leave(KErrArgument);
-            }
-        }
-
-    iAttributeList = CXnDomList::NewL(aStream, iStringPool);
-
     iPropertyList = CXnDomList::NewL(aStream, iStringPool);
     }
 
@@ -712,67 +562,7 @@
 //
 EXPORT_C void CXnDomNode::SetNamespaceL(const TDesC8& aNS)
     {
-    iNSRef = iStringPool.AddStringL(aNS);
-    }
-
-// -----------------------------------------------------------------------------
-// CXnDomNode::CloneL
-// Clones this node and it's child nodes and sets new namespace. This is a
-// recursive function.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CXnDomNode* CXnDomNode::CloneL(CXnDomStringPool& aStringPool,
-        const TDesC8& aNS)
-    {
-    const TDesC8& name = iStringPool.String(iNameRef);
-
-    CXnDomNode* clone = CXnDomNode::NewL(name, aNS, aStringPool);
-    CleanupStack::PushL(clone);
-    if (iPCData)
-        {
-        clone->AppendPCDataL(*iPCData);
-        }
-    clone->iNodeId = iNodeId;
-    clone->iRefNode = iRefNode;
-
-    TInt childCount(iChildList->Length());
-
-    for (TInt i = 0; i < childCount; i++)
-        {
-        CXnDomNode* childClone =
-                static_cast<CXnDomNode*> (iChildList->Item(i))->CloneL(
-                        aStringPool, aNS);
-        CleanupStack::PushL(childClone);
-        childClone->iParentNode = clone;
-        clone->iChildList->AddItemL(childClone);
-        CleanupStack::Pop(childClone);
-        }
-
-    TInt attrCount(iAttributeList->Length());
-    for (TInt j = 0; j < attrCount; j++)
-        {
-        CXnDomAttribute
-                * attrClone =
-                        static_cast<CXnDomAttribute*> (iAttributeList->Item(j))->CloneL(
-                                aStringPool);
-        CleanupStack::PushL(attrClone);
-        clone->iAttributeList->AddItemL(attrClone);
-        CleanupStack::Pop(attrClone);
-        }
-
-    TInt propertyCount(iPropertyList->Length());
-    for (TInt k = 0; k < propertyCount; k++)
-        {
-        CXnDomProperty
-                * propClone =
-                        static_cast<CXnDomProperty*> (iPropertyList->Item(k))->CloneL(
-                                aStringPool);
-        CleanupStack::PushL(propClone);
-        clone->iPropertyList->AddItemL(propClone);
-        CleanupStack::Pop(propClone);
-        }
-    CleanupStack::Pop(clone);
-    return clone;
+    iNSRef = iStringPool->AddStringL(aNS);
     }
 
 // -----------------------------------------------------------------------------
@@ -793,4 +583,55 @@
         }
     }
 
+// -----------------------------------------------------------------------------
+// CXnDomNode::SwapStringPoolL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CXnDomNode::SwapStringPoolL( CXnDomStringPool* aStringPool )
+    {
+    if( !aStringPool )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    if( iNameRef != KNotDefined )
+        {
+        iNameRef = aStringPool->AddStringL( iStringPool->String( iNameRef ) );
+        }
+
+    if( iNSRef != KNotDefined )
+        {
+        iNSRef = aStringPool->AddStringL( iStringPool->String( iNSRef ) );
+        }
+    
+    iChildList->SwapStringPoolL( aStringPool );
+    TInt count = iChildList->Length();    
+    for( TInt i = 0; i < count; i++ )
+        {
+        CXnDomNode* obj =
+                static_cast<CXnDomNode*> ( iChildList->Item( i ) );
+        obj->SwapStringPoolL( aStringPool );
+        }
+    
+    iAttributeList->SwapStringPoolL( aStringPool );
+    count = iAttributeList->Length();    
+    for( TInt i = 0; i < count; i++ )
+        {    
+        CXnDomAttribute* obj =
+                static_cast<CXnDomAttribute*> ( iAttributeList->Item( i ) );
+        obj->SwapStringPoolL( aStringPool );
+        }
+    
+    count = iPropertyList->Length();    
+    iPropertyList->SwapStringPoolL( aStringPool );
+    for( TInt i = 0; i < count; i++ )
+        {
+        CXnDomProperty* obj =
+                static_cast<CXnDomProperty*> ( iPropertyList->Item( i ) );
+        obj->SwapStringPoolL( aStringPool );
+        }
+    
+    iStringPool = aStringPool;
+    }
+
 //  End of File  
--- a/idlehomescreen/xmluirendering/dom/src/xndomproperty.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/dom/src/xndomproperty.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -30,7 +30,7 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CXnDomProperty::CXnDomProperty( CXnDomStringPool& aStringPool ):
+CXnDomProperty::CXnDomProperty( CXnDomStringPool* aStringPool ):
     iStringPool( aStringPool )
     {
     }
@@ -42,7 +42,7 @@
 //
 CXnDomProperty::CXnDomProperty( 
     TInt16 aStringPoolIndex, 
-    CXnDomStringPool& aStringPool ):
+    CXnDomStringPool* aStringPool ):
     iStringPool( aStringPool ),
     iNameRef( aStringPoolIndex )
     {
@@ -54,7 +54,7 @@
 //
 void CXnDomProperty::ConstructL( const TDesC8& aName )
     {
-    iNameRef = iStringPool.AddStringL( aName );
+    iNameRef = iStringPool->AddStringL( aName );
     iPropValList = CXnDomList::NewL( CXnDomList::EPropertyValueList, iStringPool );
     }
 // -----------------------------------------------------------------------------
@@ -73,7 +73,7 @@
 //
 EXPORT_C CXnDomProperty* CXnDomProperty::NewL( 
     const TDesC8& aName,
-    CXnDomStringPool& aStringPool )
+    CXnDomStringPool* aStringPool )
     {
     CXnDomProperty* self = new( ELeave ) CXnDomProperty( aStringPool );
     
@@ -91,7 +91,7 @@
 //
 CXnDomProperty* CXnDomProperty::NewL( 
     RReadStream& aStream, 
-    CXnDomStringPool& aStringPool )
+    CXnDomStringPool* aStringPool )
     {
     CXnDomProperty* self = 
         new( ELeave ) CXnDomProperty( aStringPool );
@@ -110,7 +110,7 @@
 //
 EXPORT_C CXnDomProperty* CXnDomProperty::NewL( 
     TInt16 aStringPoolIndex,
-    CXnDomStringPool& aStringPool )
+    CXnDomStringPool* aStringPool )
     {
     CXnDomProperty* self = 
         new (ELeave) CXnDomProperty( aStringPoolIndex, aStringPool );
@@ -157,8 +157,8 @@
 //
 EXPORT_C CXnDomProperty* CXnDomProperty::CloneL( CXnDomStringPool& aStringPool )
     {
-    const TDesC8& name = iStringPool.String( iNameRef );
-    CXnDomProperty* clone = CXnDomProperty::NewL( name, aStringPool );
+    const TDesC8& name = iStringPool->String( iNameRef );
+    CXnDomProperty* clone = CXnDomProperty::NewL( name, &aStringPool );
     CleanupStack::PushL(clone);
     
     TInt count( iPropValList->Length() );
@@ -182,7 +182,7 @@
 //
 EXPORT_C const TDesC8& CXnDomProperty::Name()
     {
-    return iStringPool.String( iNameRef );
+    return iStringPool->String( iNameRef );
     }
 
 // -----------------------------------------------------------------------------
@@ -225,7 +225,7 @@
 // CXnDomProperty::StringPool
 // -----------------------------------------------------------------------------
 //        
-EXPORT_C CXnDomStringPool& CXnDomProperty::StringPool() const
+EXPORT_C CXnDomStringPool* CXnDomProperty::StringPool() const
     {
     return iStringPool;
     }                      
@@ -237,6 +237,31 @@
     {
     return iNameRef;    
     }
+
+// -----------------------------------------------------------------------------
+// CXnDomProperty::SwapStringPoolL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CXnDomProperty::SwapStringPoolL( CXnDomStringPool* aStringPool )
+    {
+    if( !aStringPool )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    iNameRef = aStringPool->AddStringL( iStringPool->String( iNameRef ) );
+
+    TInt count = iPropValList->Length();
+    for( TInt i = 0; i < count; i++ )
+        {
+        CXnDomPropertyValue* val =
+                static_cast<CXnDomPropertyValue*>( iPropValList->Item(i) );
+        val->SwapStringPoolL( aStringPool );
+        }
+
+    iStringPool = aStringPool;
+    }
+
 // -----------------------------------------------------------------------------
 // CXnDomProperty::PseudoClass
 // -----------------------------------------------------------------------------
@@ -288,7 +313,7 @@
 //
 void CXnDomProperty::InternalizeL( RReadStream& aStream )
     {
-    iNameRef = aStream.ReadInt16L() + iStringPool.Offset();
+    iNameRef = aStream.ReadInt16L();
     iPropValList = CXnDomList::NewL( aStream, iStringPool );
     
     iInherited =  TBool( aStream.ReadInt8L() );
--- a/idlehomescreen/xmluirendering/dom/src/xndompropertyvalue.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/dom/src/xndompropertyvalue.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -36,7 +36,7 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CXnDomPropertyValue::CXnDomPropertyValue( CXnDomStringPool& aStringPool ):
+CXnDomPropertyValue::CXnDomPropertyValue( CXnDomStringPool* aStringPool ):
     iStringPool( aStringPool ),	
     iPrimitiveValueType( (TPrimitiveValueType)KErrNotFound )
     {
@@ -57,7 +57,7 @@
 // -----------------------------------------------------------------------------
 //
 EXPORT_C CXnDomPropertyValue* CXnDomPropertyValue::NewL( 
-    CXnDomStringPool& aStringPool )
+    CXnDomStringPool* aStringPool )
     {
     CXnDomPropertyValue* self = new( ELeave ) CXnDomPropertyValue( aStringPool );
     
@@ -74,7 +74,7 @@
 //
 CXnDomPropertyValue* CXnDomPropertyValue::NewL( 
     RReadStream& aStream,
-    CXnDomStringPool& aStringPool )
+    CXnDomStringPool* aStringPool )
     {
     CXnDomPropertyValue* self = new( ELeave ) CXnDomPropertyValue( aStringPool );
     
@@ -162,7 +162,7 @@
 //
 CXnDomPropertyValue* CXnDomPropertyValue::CloneL( CXnDomStringPool& aStringPool )
     {
-    CXnDomPropertyValue* clone = CXnDomPropertyValue::NewL( aStringPool );
+    CXnDomPropertyValue* clone = CXnDomPropertyValue::NewL( &aStringPool );
     CleanupStack::PushL( clone );
     clone->iPrimitiveValueType = iPrimitiveValueType;
     
@@ -199,7 +199,7 @@
 	    case EAttr:
 	    case EUnknown:
 	        {
-	        const TDesC8& value = iStringPool.String( iData.iStringRef );
+	        const TDesC8& value = iStringPool->String( iData.iStringRef );
             clone->iData.iStringRef = aStringPool.AddStringL( value );
 	        clone->iIdent = iIdent;
 	        break;
@@ -327,7 +327,7 @@
         }
     
     
-    return iStringPool.String( iData.iStringRef );
+    return iStringPool->String( iData.iStringRef );
     }
 // -----------------------------------------------------------------------------
 // const TDesC& CXnDomPropertyValue::StringValue
@@ -352,7 +352,7 @@
         }
     
     
-    return iStringPool.String( iData.iStringRef );
+    return iStringPool->String( iData.iStringRef );
     }
 // -----------------------------------------------------------------------------
 // TReal CXnDomPropertyValue::SetStringValueL
@@ -382,7 +382,7 @@
     ReleaseData();
     
     iPrimitiveValueType = aValueType;
-    TInt stringRef = iStringPool.AddStringL( aStringValue );
+    TInt stringRef = iStringPool->AddStringL( aStringValue );
     iData.iStringRef = stringRef;
     
     if ( aStringValue.Compare( KAuto ) == 0 )
@@ -572,7 +572,35 @@
         }
     return iData.iStringRef;    
     }
+
+// -----------------------------------------------------------------------------
+// CXnDomPropertyValue::SwapStringPoolL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CXnDomPropertyValue::SwapStringPoolL( CXnDomStringPool* aStringPool )
+    {
+    if( !aStringPool )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    if( iPrimitiveValueType == EString ||
+        iPrimitiveValueType == EIdent ||
+        iPrimitiveValueType == EUri ||
+        iPrimitiveValueType == EAttr ||
+        iPrimitiveValueType == EUnknown )
+        {
+        if( iData.iStringRef != NULL &&
+            iData.iStringRef != -1 )
+            {
+            iData.iStringRef =
+                    aStringPool->AddStringL( iStringPool->String( iData.iStringRef ) );
+            }
+        }
     
+    iStringPool = aStringPool;
+    }
+
 // -----------------------------------------------------------------------------
 // CXnDomPropertyValue::Size()const
 // Count size of this object's data.
@@ -733,7 +761,6 @@
 	    case EUnknown:
             {
             aStream >> iData.iStringRef;
-            iData.iStringRef += iStringPool.Offset();
             iIdent = static_cast<TIdentType>( aStream.ReadInt8L() );
             }
             break;
--- a/idlehomescreen/xmluirendering/dom/src/xndomstringpool.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/dom/src/xndomstringpool.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -19,7 +19,7 @@
 
 // INCLUDE FILES
 #include    "xndomstringpool.h"
-
+#include    "xndomstringpooloptimizer.h"
 
 // ============================ LOCAL FUNCTIONS ================================
 
@@ -30,9 +30,9 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CXnDomStringPool::CXnDomStringPool()
+CXnDomStringPool::CXnDomStringPool( const TBool aAllowDuplicates ) :
+    iAllowDuplicates( aAllowDuplicates )
     {
-    iStringPoolOffsetCurrent = iStringPoolOffsetNext = 0;
     }
 
 // -----------------------------------------------------------------------------
@@ -49,9 +49,10 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CXnDomStringPool* CXnDomStringPool::NewL()
+CXnDomStringPool* CXnDomStringPool::NewL( const TBool aAllowDuplicates )
     {
-    CXnDomStringPool* self = new( ELeave ) CXnDomStringPool;
+    CXnDomStringPool* self =
+            new( ELeave ) CXnDomStringPool( aAllowDuplicates );
     
     CleanupStack::PushL( self );
     self->ConstructL();
@@ -66,9 +67,10 @@
 // Two-phased stream constructor.
 // -----------------------------------------------------------------------------
 //
-CXnDomStringPool* CXnDomStringPool::NewL( RReadStream& aStream )
+CXnDomStringPool* CXnDomStringPool::NewL( RReadStream& aStream,
+        const TBool aAllowDuplicates )
     {
-    CXnDomStringPool* self = new( ELeave ) CXnDomStringPool;
+    CXnDomStringPool* self = new( ELeave ) CXnDomStringPool( aAllowDuplicates );
     CleanupStack::PushL( self );
     aStream >> *self;
     CleanupStack::Pop(self);
@@ -84,6 +86,7 @@
 CXnDomStringPool::~CXnDomStringPool()
     {
     iStringPool.ResetAndDestroy();
+    iStringPoolOptimizer.Close();
     }
 
 // -----------------------------------------------------------------------------
@@ -91,15 +94,23 @@
 // -----------------------------------------------------------------------------
 //
 CXnDomStringPool* CXnDomStringPool::CloneL()
-    {
-    CXnDomStringPool* clone = CXnDomStringPool::NewL();
+    {    
+    CXnDomStringPool* clone = NULL;    
+    if( iAllowDuplicates )
+        {
+        clone = CXnDomStringPool::NewL( ETrue );
+        }
+    else
+        {
+        clone = CXnDomStringPool::NewL( EFalse );
+        }    
     CleanupStack::PushL( clone );
     
     TInt count( iStringPool.Count() );
-    for ( TInt i=0; i<count; i++ )
-        {
+    for ( TInt i = 0; i < count; i++ )
+        {    
         HBufC8* tmp = iStringPool[i]->Des().AllocLC();
-        clone->iStringPool.AppendL( tmp );
+        clone->DoAddStringL( tmp );
         CleanupStack::Pop( tmp );
         }
     CleanupStack::Pop( clone );
@@ -110,32 +121,56 @@
 // CXnDomNode::AddStringL
 // -----------------------------------------------------------------------------
 //
-EXPORT_C TInt CXnDomStringPool::AddStringL( const TDesC8& aString )
-    {
-    TBool found( EFalse );
-    TInt index( 0 );
-     
-    TInt count( iStringPool.Count() );
-    for (; index < count && !found;  )
+TInt CXnDomStringPool::AddStringL( const TDesC8& aString )
+    {   
+    TInt index = iStringPoolOptimizer.GetIndex( aString );
+
+    if( index == KErrNotFound )
+        {
+        HBufC8* string = aString.AllocLC();
+        index = DoAddStringL( string );        
+        CleanupStack::Pop( string );        
+        }    
+    
+    return index;    
+    }
+
+// -----------------------------------------------------------------------------
+// CXnDomNode::AddStringL
+// -----------------------------------------------------------------------------
+//
+TInt CXnDomStringPool::AddStringL( HBufC8* aString )
+    {   
+    if( !aString )
         {
-        if ( iStringPool[ index ]->Des().Compare( aString ) == 0 )
-            {
-            found = ETrue;
-            }
-        else
-            {
-            index++;
-            }    
+        User::Leave( KErrArgument );
+        }
+    
+    TInt index = iStringPoolOptimizer.GetIndex( *aString );    
+    
+    if( index == KErrNotFound )
+        {
+        index = DoAddStringL( aString );       
+        }
+    else
+        {
+        delete aString;
         }
-    if ( !found )
+    
+    return index;    
+    }
+
+// -----------------------------------------------------------------------------
+// CXnDomNode::AddStringL
+// -----------------------------------------------------------------------------
+//
+void CXnDomStringPool::AddAllL( CXnDomStringPool& aStringPool )
+    {
+    const TInt count = aStringPool.Count();
+    for( TInt i = 0; i < count; i++ )
         {
-        HBufC8* tmp = aString.AllocLC();
-        iStringPool.AppendL( tmp );
-        CleanupStack::Pop( tmp );
-        index = iStringPool.Count()-1;    //Last item
-        iStringPoolOffsetNext++;
-        }
-    return index;
+        AddStringL( aStringPool.String( i ) );
+        }    
     }
 
 // -----------------------------------------------------------------------------
@@ -143,10 +178,17 @@
 // -----------------------------------------------------------------------------
 //
 const TDesC8& CXnDomStringPool::String( const TInt aStringRef )
-    {
-    return (*iStringPool[ aStringRef ]);
+    {       
+    if( aStringRef >= 0 && aStringRef < iStringPool.Count() )
+        {
+        return (*iStringPool[ aStringRef ]);
+        }
+    else
+        {
+        return KNullDesC8;
+        }
     }
-        
+
 // -----------------------------------------------------------------------------
 // CXnDomStringPool::Size
 // -----------------------------------------------------------------------------
@@ -167,6 +209,15 @@
     }
 
 // -----------------------------------------------------------------------------
+// CXnDomStringPool::Count
+// -----------------------------------------------------------------------------
+//
+TInt CXnDomStringPool::Count() const
+    {
+    return iStringPool.Count();
+    }
+
+// -----------------------------------------------------------------------------
 // CXnDomStringPool::ExternalizeL
 // -----------------------------------------------------------------------------
 //
@@ -189,27 +240,39 @@
 void CXnDomStringPool::InternalizeL( RReadStream& aStream )
     {
     TInt len(0);
-    TInt16 count ( aStream.ReadInt16L() );
-    
-    iStringPoolOffsetCurrent = iStringPoolOffsetNext;
-    iStringPoolOffsetNext += count;
+    TInt16 count ( aStream.ReadInt16L() );    
 
     for ( TInt i=0; i<count; i++ )
         {
         len = aStream.ReadInt16L();
         HBufC8* tmp = HBufC8::NewLC( aStream, len );
-        iStringPool.AppendL( tmp );
+        AddStringL( tmp ); // OWNERSHIP TRANSFERRED!        
         CleanupStack::Pop( tmp );
         }
     }
 
 // -----------------------------------------------------------------------------
-// CXnDomStringPool::Offset
+// CXnDomStringPool::DoAddStringL
 // -----------------------------------------------------------------------------
 //
-TUint CXnDomStringPool::Offset() const
+TInt CXnDomStringPool::DoAddStringL( HBufC8* aNewString )
     {
-    return iStringPoolOffsetCurrent;
+    if( !aNewString )
+        {
+        User::Leave( KErrArgument );
+        }       
+    
+    TInt index = iStringPool.Count();
+    
+    if( !iAllowDuplicates )
+        {
+        TXnDomStringPoolOptimizerEntry tmp( index, *aNewString );
+        iStringPoolOptimizer.AddEntryL( tmp );
+        }
+    
+    iStringPool.AppendL( aNewString );       
+        
+    return index;
     }
 
 //  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/xmluirendering/dom/src/xndomstringpooloptimizer.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2005,2006 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:  Optimizer module for CXnDomStringPool.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "xndomstringpooloptimizer.h"
+
+const TInt KMaxEstimateThreshold = 2;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// TXnDomStringPoolOptimizerEntry::TXnDomStringPoolOptimizerEntry
+// -----------------------------------------------------------------------------
+//
+TXnDomStringPoolOptimizerEntry::TXnDomStringPoolOptimizerEntry( TInt aIndex,
+        const TDesC8& aString) :         
+        iIndex( aIndex ),
+        iString( aString )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TXnDomStringPoolOptimizer::AddEntryL
+// -----------------------------------------------------------------------------
+//
+void TXnDomStringPoolOptimizer::AddEntryL( TXnDomStringPoolOptimizerEntry& aEntry )
+    {
+    TBool positionFound = EFalse;
+    
+    if( iEntries.Count() > 0 )
+        {    
+        const TInt estimate = FindInsertionIndexEstimate(
+                aEntry.iString,
+                0,
+                iEntries.Count() - 1 );        
+        
+        if( estimate != KErrNotFound )
+            {
+            for( TInt i = estimate; i < iEntries.Count(); i++ )
+                {
+                if( aEntry.iString.Compare( iEntries[i].iString ) < 0 )
+                    {
+                    positionFound = ETrue;
+                    iEntries.InsertL( aEntry, i );
+                    break;
+                    }
+                }
+            }
+        }
+    
+    if( !positionFound )
+        {
+        iEntries.AppendL( aEntry );
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// TXnDomStringPoolOptimizer::TXnDomStringPoolOptimizerGetIndex
+// -----------------------------------------------------------------------------
+//
+TInt TXnDomStringPoolOptimizer::GetIndex( const TDesC8& aString )
+    {
+    if( iEntries.Count() == 0 )
+        {
+        return KErrNotFound;
+        }    
+    
+    TInt index = FindEntry( aString, 0, iEntries.Count() - 1 );
+    if( index > 0 && index < iEntries.Count() )
+        {
+        return iEntries[index].iIndex;
+        }
+    else
+        {
+        // Error code.
+        return index;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TXnDomStringPoolOptimizer::Close
+// -----------------------------------------------------------------------------
+//
+void TXnDomStringPoolOptimizer::Close()
+    {
+    iEntries.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// TXnDomStringPoolOptimizer::Count
+// -----------------------------------------------------------------------------
+//
+TInt TXnDomStringPoolOptimizer::Count()
+    {
+    return iEntries.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// TXnDomStringPoolOptimizer::Entry
+// -----------------------------------------------------------------------------
+//
+TXnDomStringPoolOptimizerEntry& TXnDomStringPoolOptimizer::Entry(
+        const TInt aIndex )
+    {    
+    return iEntries[ aIndex ];
+    }
+
+// -----------------------------------------------------------------------------
+// TXnDomStringPoolOptimizer::Reset
+// -----------------------------------------------------------------------------
+//
+void TXnDomStringPoolOptimizer::Reset()
+    {
+    iEntries.Reset();
+    }
+
+// -----------------------------------------------------------------------------
+// TXnDomStringPoolOptimizer::FindEntry
+// -----------------------------------------------------------------------------
+//
+TInt TXnDomStringPoolOptimizer::FindEntry( const TDesC8& aString,
+        const TInt aLeft,
+        const TInt aRight )
+    {    
+    if( aLeft > aRight )
+        {
+        return KErrNotFound;
+        }
+    
+    const TUint middle = ( aLeft + aRight ) >> 1; // >> 1 means "divided by two".    
+    TXnDomStringPoolOptimizerEntry& entryAtMiddle = iEntries[ middle ];    
+    const TInt comparisonResult = aString.Compare( entryAtMiddle.iString );
+    
+    if( comparisonResult > 0 )
+        {
+        return FindEntry( aString, middle + 1, aRight);
+        }
+    else if( comparisonResult < 0 )
+        {
+        return FindEntry( aString, aLeft, middle - 1 );
+        }
+    else
+        {
+        return  middle;
+        }    
+    }
+
+// -----------------------------------------------------------------------------
+// TXnDomStringPoolOptimizer::FindEntry
+// -----------------------------------------------------------------------------
+//
+TInt TXnDomStringPoolOptimizer::FindInsertionIndexEstimate( const TDesC8& aString,
+        const TInt aLeft,
+        const TInt aRight )
+    {
+    if( ( aRight - aLeft ) <= KMaxEstimateThreshold )
+        {
+        return aLeft;
+        }
+    
+    const TUint middle = ( aLeft + aRight ) >> 1;      
+         
+    TXnDomStringPoolOptimizerEntry& entryAtMiddle = iEntries[ middle ];    
+    const TInt comparisonResult = aString.Compare( entryAtMiddle.iString );
+        
+    if( comparisonResult > 0 )
+        {
+        return FindInsertionIndexEstimate( aString, middle, aRight);
+        }
+    else if( comparisonResult < 0 )
+        {
+        return FindInsertionIndexEstimate( aString, aLeft, middle );
+        }
+    else
+        {
+        // Should not go here. There should be only one of a kind in the list.
+        return KErrNotFound;
+        }
+    }
+
+//  End of File  
--- a/idlehomescreen/xmluirendering/ecomelement/xndomvisitor/src/xndomvisitor.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/ecomelement/xndomvisitor/src/xndomvisitor.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -94,7 +94,7 @@
     TAny* aData )
     {
     CXnDomList* propertyList = reinterpret_cast<CXnDomList*>( aData );
-    CXnDomStringPool& stringPool = propertyList->StringPool();
+    CXnDomStringPool* stringPool = propertyList->StringPool();
     
     for ( TInt i=0; i<aItemCount; i++ )
         {
@@ -270,3 +270,4 @@
     }
 
 //  End of File  
+
--- a/idlehomescreen/xmluirendering/renderingplugins/xnmenufactory/src/xnmenuadapter.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnmenufactory/src/xnmenuadapter.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -33,6 +33,7 @@
 #include <eikspane.h>
 #include <AknSgcc.h>
 #include <aknview.h>
+#include <AknsConstants.h>
 
 // User includes
 #include "xnnodepluginif.h"
@@ -1740,7 +1741,10 @@
  	
 	iContainer = &aContainer;
 	
-	UpdateSoftkeyAppearancesL();
+    CEikCba* cba( static_cast< CEikCba* >( aContainer.ButtonGroup() ) );
+    cba->SetButtonGroupFlags( cba->ButtonGroupFlags() | EEikCbaFlagSemiTransparent );
+
+    UpdateSoftkeyAppearancesL();
 	    
 	if (iContainer)
 	    {
@@ -2125,7 +2129,7 @@
 //    
 void CXnMenuAdapter::HandleMenuPropertyChangeL(CXnNodePluginIf* aNode, CXnProperty* aProperty)
     {
-    if ( !aNode )
+    if ( !aNode || !aProperty )
         {
         return;
         }
--- a/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/group/xnnewstickerfactory.mmp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/group/xnnewstickerfactory.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -31,7 +31,6 @@
 SOURCE          xnnewsticker.cpp
 SOURCE          xnnewstickeradapter.cpp
 SOURCE          xnnewstickercontrol.cpp
-SOURCE          xnnewstickersvgcontrol.cpp
 
 USERINCLUDE     ../inc
 USERINCLUDE     ../../../inc
--- a/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/inc/xnnewstickeradapter.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/inc/xnnewstickeradapter.h	Mon Jan 18 20:10:36 2010 +0200
@@ -26,7 +26,7 @@
 // FORWARD DECLARATIONS
 class CXnNodePluginIf;
 class CXnNewstickerControl;
-class CXnNewstickerSvgControl;
+class CAknMarqueeControl;
 
 // CONSTANTS
 // The default values for the newsticker control
@@ -51,25 +51,12 @@
             XnNewstickerInterface::MXnNewstickerCallbackInterface
     {
     public:
-
-        /**
-        * State of the whole control.
-        */
-        enum TState
-            {
-            ENotStarted = 1,            //  No scrolling has been done
-            EPaused,                //  Text is shown, but not scrolled
-            EText,                  //  Text is shown and scrolled continuously
-            EAnimation,             //  SVG animation is shown
-            EScrollEnded            //  Looping is false and scrolling has ended
-            };
-            
+          
         enum TScrollBehaviour
             {
             EScroll,
-            ESlide,
             EAlternate,
-            EScrollAlternate
+            EScrollAlternate,
             };            
             
     public:
@@ -92,27 +79,27 @@
          * Append new title to the end of the title list.
          * @param aTitle The new title to add.
          */
-        void AppendTitleL(const TDesC& aTitle);
+        void AppendTitleL( const TDesC& aTitle );
 
         /**
          * Insert new title to the end of the title list.
          * @param aTitle The new title to add.
          * @param aIndex The place to add the title.
          */
-        void InsertTitleL(const TDesC& aTitle, TInt aIndex);
+        void InsertTitleL( const TDesC& aTitle, TInt aIndex );
 
         /**
          * Update title text.
          * @param aTitle The new title to add.
          * @param aIndex The place to update the title.
          */
-        void UpdateTitleL(const TDesC& aTitle, TInt aIndex);
+        void UpdateTitleL( const TDesC& aTitle, TInt aIndex );
 
         /**
          * Delete the title.
          * @param aIndex The title index to delete.
          */
-        void DeleteTitleL(TInt aIndex);
+        void DeleteTitleL( TInt aIndex );
 
     	/**
     	 * Returns index of the currently selected title.
@@ -125,14 +112,7 @@
     	 * @param aIndex The index to return the title.
     	 * @return The title of the given index.
     	 */
-        const TDesC& Title(TInt aIndex);
-
-    	/**
-    	 * Set the separator image for all titles.
-    	 * @param aIcon The separator image. This must be mif icon.
-    	 * @return KErrNone if successful, KErrArgument if the icon is not mif.
-    	 */
-        TInt SetSeparatorImageL(CGulIcon* aIcon);
+        const TDesC& Title( TInt aIndex );
 
         /**
          * Delete all titles.
@@ -140,88 +120,45 @@
         void ClearTitles();
 
         /**
-         * Append the SVG title to be shown.
-         * @param aByteData The SVG data.
-         */
-        void AppendSvgTitleL(const TDesC8& aByteData);
-
-        /**
-         * Insert the SVG title to be shown.
-         * @param aByteData The SVG data.
-         */
-        void InsertSvgTitleL(const TDesC8& aByteData, TInt aIndex);
-
-        /**
          * Set callback interface.
          * @param aCallback The callback interface pointer.
          */
         void SetCallbackInterfaceL(
-            XnNewstickerInterface::MXnNewstickerCallbackInterface* aCallback);
+            XnNewstickerInterface::MXnNewstickerCallbackInterface* aCallback );
 
         /**
          * Start showing the titles.
          */
-        void StartL();
+        void Start();
 
         /**
          * Stop showing the titles.
          */
-        void StopL();
-
+        void Stop();
+        
+        /**
+         * Stops alternate counter.
+         */
+        void StopAlternateCounter();
+        
         /**
-         * Show SVG next.
+         * Resets and unenables narquee control.
          */
-        void ShowSvgL();
+        void StopMarquee();
+        
+        /**
+         * Starts alternate counter.
+         */
+        void StartAlternateCounter();
 
         /**
          * Callback which will be called by the CPeriodic.
          * @param aPtr User defined pointer.
          * @return ETrue if the method should be called again.
          */
-        static TInt PeriodicEventL(TAny * aPtr);
-
-        /**
-         * Draw background for the newsticker control area.
-         * @param aRect The visivle area of newsticker component.
-         * @param aGc Window graphics context.
-         */
-        void DrawBackgroundL(const TRect& aRect, CWindowGc& aGc) const;
-
-        
-        /**
-        * Returns the bitmap context.
-        * @return Bitmap context.
-        */
-        inline CBitmapContext* BufferGc() const { return iBufferGc; };
-        
-        
-        /**
-        * Returns the background bitmap
-        * @return Background bitmap
-        */
-        inline const CFbsBitmap* BackgroundBitmap() const { return iBackgroundBitmap; };
-
-        /**
-        * Returns the state of the newsticker control.
-        * @return Current state.
-        */
-        inline TState CurrentState() const { return iState; };
-
-        /**
-        * Returns the current scroll behaviour
-        * @return current scroll behaviour
-        */        
-        inline TInt ScrollBehaviour() const { return iScrollBehaviour; };        
-        
-        /**
-        * Reset periodic timer to set display time.
-        */
-        void SetTimerToDisplaytime();
-        
-        /**
-        * Reset periodic timer to set scroll delay time.
-        */
-        void SetTimerToScrolltime();
+        static TInt PeriodicEventL( TAny * aPtr );
+     
+        void MakeVisible( TBool aVisible );
         
     public: // from base classes
 
@@ -230,7 +167,7 @@
          * Called when the title has been shown and is now offscreen.
          * @param aTitleIndex The title that has been completely shown.
          */
-        void TitleScrolled(TInt aTitleIndex);
+        void TitleScrolled( TInt aTitleIndex );
 
         /**
         * See CCoeControl documentation
@@ -238,44 +175,28 @@
         void SizeChanged();
 
         /**
-        * See CCoeControl documentation
-        */    	
-        void HandlePointerEventL(const TPointerEvent& aPointerEvent);
-
-        /**
-        * See CCoeControl documentation
-        */    	    	
-        void FocusChanged(TDrawNow aDrawNow);
-
-        /**
-        * See CCoeControl documentation
-        */
-        TKeyResponse OfferKeyEventL(
-                const TKeyEvent& aKeyEvent, TEventCode aType);
-
-        /**
         * See CXnControlAdapter documentation
         */    	
-    	void Draw(const TRect& aRect) const;
+    	void Draw( const TRect& aRect ) const;
 
         /**
         * Enter power save mode. This is done when application goes to background or lights go off. 
         * Derived classes should override this function and stop animations, timers etc. when the function is called.
         */ 
-        void DoEnterPowerSaveModeL(TModeEvent aEvent);
+        void DoEnterPowerSaveModeL( TModeEvent aEvent );
 
 	   	/**
         * Exit power save mode. This is done when application comes to foreground or lights go on. 
         * Derived classes should override this function and restart animations, timers etc. when the function is called.
         */ 
-        void DoExitPowerSaveModeL(TModeEvent aEvent);
+        void DoExitPowerSaveModeL( TModeEvent aEvent );
 
         /**
         * From CXnControlAdapter Handles the property changes.
         * @since Series 60 3.1
         * @return void.
         */ 
-        void DoHandlePropertyChangeL(CXnProperty* aProperty = NULL);
+        void DoHandlePropertyChangeL( CXnProperty* aProperty = NULL );
 
 	    /**
         * Skin change notification.
@@ -283,23 +204,29 @@
         */        
         void SkinChanged();
         
-        void ReportNewstickerEventL(const TDesC8& aEventName);
+        /**
+        * Reports newsticker event
+        * 
+        */   
+        void ReportNewstickerEvent( const TDesC8& aEventName );
         
         /**
-        * See CCoeControl documentation
+        * Draws text
+        * Text drawing function is selected by scrolling behaviour
         */
-        void DrawNow() const;
+        void DrawText( const TDesC& aText, const TRect& aRect  );
         
         /**
-        * If newsticker is not focusable, finds and draws focusable parent
+        * ETrue if marquee control redrawing is needed. EFalse if truncated text is needed
         */
-        TBool DrawFocusableParentL() const;
+        TBool Redraw() { return iRedraw; }
+
 
     private:
 
-    	CXnNewstickerAdapter(CXnControlAdapter* aParent, CXnNodePluginIf& aNode);
+    	CXnNewstickerAdapter( CXnControlAdapter* aParent, CXnNodePluginIf& aNode );
 
-    	void ConstructL();
+    	void ConstructL( CXnControlAdapter* aParent );
     	
     	/**
     	* Sets text properties, such as color, font, etc.
@@ -310,34 +237,38 @@
     	* Sets newsticker timing properties.
     	*/
         void SetNewstickerPropertiesL();
-
-    	/**
-    	* Creates a new doublebuffer for newsticker.
-    	*/        
-        void UpdateDoubleBufferL();
-
-    	/**
-    	* Draws a reconstructed background for newsticker.
-    	*/
-        void UpdateBackgroundL() const;
-
-    	/**
-    	* Same as SizeChanged(), but this is an L function.
-    	*/
-        void SizeChangedL();
-
-    	/**
-    	* Checks if feed can be started
-    	*/       
-        TBool CheckDisplayL( CXnNodePluginIf& aNode );
-
-        void RestartL();
-    private:
+        
+        /**
+         * From CoeControl,CountComponentControls.
+         */
+         TInt CountComponentControls() const;
 
         /**
-        * The state of the newsticker control.
-        */
-        TState                      iState;
+         * From CCoeControl,ComponentControl.
+         */
+         CCoeControl* ComponentControl( TInt aIndex ) const;
+        
+        /**
+        * Callback function for marquee control
+        */    
+        static TInt RedrawCallback( TAny* aPtr );
+        
+        /**
+        *  FScrolls alternative text. Function is called by periodic timer
+        */    
+        void DoScroll();
+        
+        /**
+        *  Draws text directly to screen if scrollins is not needed
+        */  
+        void DrawStaticText( CWindowGc& aGc, const TDesC& aText ) const;
+        
+        /**
+        *  Draws scrolling text to screen via marquee control
+        */ 
+        TBool DrawMarqueeText( CWindowGc& aGc, const TDesC& aText ) const;               
+        
+    private:
 
         /**
         * The timer to use for scrolling events.
@@ -356,22 +287,11 @@
         * Own.
         */
         CXnNewstickerControl*       iControl;
-        
-        /**
-        * The control handling the svg title showing
-        * Own.
-        */
-        CXnNewstickerSvgControl*    iSvgControl;
-
+	    
         /**
-         * Delay between loops in microseconds.
-         */
-	    TInt                        iDelay;
-
-        /**
-         * The interval between ticks.
-         */	    
-	    TInt                        iInterval;
+         * The delay before first event
+         */  
+	    TInt                        iAlternateDelay;
         
         /**
          * The alternate interval between ticks.
@@ -379,21 +299,6 @@
 	    TInt                        iAlternateInterval;
 
         /**
-         * The current interval between ticks.
-         */	    
-	    TInt                        iCurrentInterval;
-
-        /**
-         * Amount of loops executed
-         */	    
-        TInt                        iLoops;
-
-        /**
-        * The animation time in microseconds.
-        */
-        TInt                        iAnimationTime;
-
-        /**
         * UI node
         * Not own.
         */
@@ -401,43 +306,14 @@
 
         /**
         * Font for control.
-        * Own.
+        * Not own.
         */        
         CFont*                      iFont;
         
         /**
         * Whether the font needs to be released or not.
         */        
-        TBool                       iReleaseFont;
-                
-        /**
-        * Bitmap device. Used to draw on the drawing buffer
-        * Own.
-        */
-    	CFbsBitmapDevice*           iBufferDevice;
-	
-        /**
-        * Drawing buffer
-        * Own.
-        */
-    	CFbsBitmap*                 iDrawingBuffer;
-    	
-        /**
-        * Bitmap Graphic Context. Used to draw on the drawing buffer
-        * Own.
-        */
-        CBitmapContext*             iBufferGc;
-        
-        /**
-        * Pointer to background bitmap.
-        * Own.
-        */
-        mutable CFbsBitmap*         iBackgroundBitmap;
-
-        /**
-        * For the display property (content is either shown or not)
-        */
-        TBool                       iDisplay;
+        TInt                       iReleaseFont;
 
         /**
         * For keeping track of the current powersave mode state
@@ -447,12 +323,56 @@
         /**
         * Current scroll behaviour
         */               
-        TInt                        iScrollBehaviour;
+        TScrollBehaviour            iScrollBehaviour;
         
         /**
          * Restart animation after title has been updated
          */
         TBool                       iRestartAfterUpdate;
+        
+        /**
+        * marquee control for scrolling
+		* own
+        */ 
+       CAknMarqueeControl*         iMarqueeControl;
+       
+       /**
+       * Current text color
+       */ 
+       TRgb                        iTextColor;
+       
+       /**
+       * Current text alignment
+       */ 
+       TInt                        iTextAlignment;   
+       
+       /**
+       * Current baseline
+       */ 
+       TInt                        iTextBaseline;
+       
+       /**
+       * Current underlining behaviour
+       */ 
+       TFontUnderline              iUnderlining;       
+       
+       /**
+       * Current strikethrough behaviour
+       */ 
+       TFontStrikethrough          iStrikethrough;
+       
+       /**
+       * is scroll looping activated
+       */ 
+       TBool                    iScrollLooping;
+       
+       /**
+       * is marquee control redraw needed
+       */ 
+       TBool                    iRedraw;
+        
+        
+        
     };
 
 #endif // XNNEWSTICKERADAPTER_H
--- a/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/inc/xnnewstickercontrol.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/inc/xnnewstickercontrol.h	Mon Jan 18 20:10:36 2010 +0200
@@ -24,7 +24,6 @@
 
 // FORWARD DECLARATIONS
 class CXnNewstickerAdapter;
-class CFont;
 
 // CLASS DECLARATION
 
@@ -49,27 +48,7 @@
          * @param aStartDelay The delay before the animation starts
          * @return Pointer to this.
          */
-        static CXnNewstickerControl* NewL(CXnNewstickerAdapter* aAdapter);
-        
-        /** 
-        * Sets newsticker scroll amount.
-        * @param aScrollAmount A scroll amount.
-        * @return void
-        */
-        void SetScrollAmount(TInt aScrollAmount);
-
-        /** 
-        * Sets the rect of the visible area.
-        * @param aContentRect The visible rect.
-        * @return void
-        */        
-        void SetNewstickerRect(TRect& aContentRect);
-
-        /** 
-        * Checks whether a western layout is used.
-        * @return Returns true if wesern layout is in use.
-        */
-        TBool IsWestern();
+        static CXnNewstickerControl* NewL( CXnNewstickerAdapter* aAdapter );
 
         // Routed from MXnNewstickerInterface.
 
@@ -77,47 +56,40 @@
          * Append new title to the end of the title list.
          * @param aTitle The new title to add.
          */
-        void AppendTitleL(const TDesC& aTitle);
+        void AppendTitleL( const TDesC& aTitle );
 
         /**
          * Insert new title to the end of the title list.
          * @param aTitle The new title to add.
          * @param aIndex The place to add the title.
          */
-        void InsertTitleL(const TDesC& aTitle, TInt aIndex);
+        void InsertTitleL( const TDesC& aTitle, TInt aIndex );
 
         /**
          * Update title in the title list.
          * @param aTitle The new title to add.
          * @param aIndex The place to add the title.
          */
-        void UpdateTitleL(const TDesC& aTitle, TInt aIndex);
+        void UpdateTitleL( const TDesC& aTitle, TInt aIndex );
 
         /**
          * Delete the title.
          * @param aIndex The title index to delete.
          */
-        void DeleteTitleL(TInt aIndex);
+        void DeleteTitleL( TInt aIndex );
 
     	/**
     	 * Returns index of the currently selected title.
     	 * @return The index of the current title.
     	 */
-        TInt CurrentTitleIndex();
+        TInt CurrentTitleIndex() const;
 
     	/**
     	 * Return the title of the given index.
     	 * @param aIndex The index to return the title.
     	 * @return The title of the given index.
     	 */
-        const TDesC& Title(TInt aIndex);
-
-    	/**
-    	 * Set the separator image for all titles.
-    	 * @param aIcon The separator image. This must be mif icon.
-    	 * @return KErrNone if successful, KErrArgument if the icon is not mif.
-    	 */
-        TInt SetSeparatorImageL(CGulIcon* aIcon);
+        const TDesC& Title(TInt aIndex) const;
 
         /**
          * Delete all titles.
@@ -125,198 +97,34 @@
         void ClearTitles();
 
         /**
-         * Append the SVG title to be shown.
-         * @param aByteData The SVG data.
-         */
-        void AppendSvgTitleL(const TDesC8& aByteData);
-
-        /**
-         * Insert the SVG title to be shown.
-         * @param aByteData The SVG data.
-         */
-        void InsertSvgTitleL(const TDesC8& aByteData, TInt aIndex);
-
-        /**
-         * Return the current svg title.
-         * @return The current svg title.
-         */
-        const TDesC8& CurrentSvgTitle();
-
-        /**
          * Return the number of titles in the list.
          * @return The number of titles in the list.
          */
         TInt TitleCount() const;
-
-	    /**
-        * Move to the next title.
-        */
-        void MoveToNextL();
-
-	    /**
-        * Move to the previous title.
-        */
-        void MoveToPrevL();
-
-        /**
-         * Move to first title
-         */
-        void MoveToFirstL();
-
-        /**
-         * Move to last title
-         */
-        void MoveToLastL();
-	    
-        /**
-        * Move to the previous title.
-        */
-        void MoveToCurrent();
-
-        /**
-         * Sets font for bitmap graphic context.
-         * @param aFont Font family.
-         */
-        void SetFont(CFont* aFont);
-
-        /**
-         * Sets text color for bitmap graphic context.
-         * @param aColor Color in RGB format.
-         */
-        void SetTextColor(TRgb aColor);
-
-        /**
-         * Sets the underline style for all subsequently drawn text.
-         * @param aStyle Underline style, which can be either on of off.
-         */
-        void SetTextUnderlineStyle(TFontUnderline aStyle);
-
-        /**
-         * Sets the strikethrough style for all subsequently drawn text.
-         * @param aStyle Strikethrough style, which can be either on of off.
-         */
-        void SetTextStrikethroughStyle(TFontStrikethrough aStyle);
         
         /** 
         * Destructor
         */
         virtual ~CXnNewstickerControl();
 
-        /**
-         * Creates background bitmap
-         */	
-        void CreateBufferBitmapL();
-
 	    /**
-        * Advance text and issue a callback to parent
+        * Selects title to be shown
         */
-        void DoScrollL();
-
-	    /**
-        * Blit visible stuff to d-buffer. Drawing direction is left-to-right.
-        */
-        void PrepareToDrawLtrL();
-
-	    /**
-        * Blit visible stuff to d-buffer. Drawing direction is right-to-left.
-        */
-        void PrepareToDrawRtlL();
-
-	    /**
-        * Blit double buffer to gc.
-        */
-        void Draw();
+        const TDesC& SelectTitle();
         
         /**
-         * Blit double buffer to gc. Draws only the last title truncated.
-         */
-        void DrawStatic();
-
-	    /**
-        * Sets iFirstdrawingOffset as a start position.
-        */
-        void SetBeginningState();
-
-        /**
-        * Return the font
-        * @return font
-        */
-        inline const CFont* Font() { return iFont; };
-
-        /**
-        * Return the text color.
-        * @return Text color.
-        */
-        inline const TRgb TextColor() { return iTextColor; };
-
-        /**
-        * Return font underline flag.
-        * @return Font underline flag.
-        */
-        inline const TFontUnderline TextUnderlineStyle() { return iUnderlining; };
-
-        /**
-        * Return the font strikethrough flag.
-        * @return Font strikethrough flag.
+        * Sets the current title to default ( last one ) or move to next one
         */
-        inline const TFontStrikethrough TextStrikethroughStyle() { return iStrikethrough; };
-        
-        /**
-         * Set scroll looping property
-         */
-        void SetScrollLooping( TBool aLoop );
-        
-        /**
-         * Return scroll looping property
-         * @return TBool
-         */                
-        TBool ScrollLooping();
-        
-        /**
-         * @return ETrue if all the text fits on the drawing rect. In that case no scrolling and 
-         * text alignment should be used
-         */ 
-        TBool TextFitInNewstickerRect();
-        
-        /**
-         * @param aAlignment ( ELayoutAlignCenter, ELayoutAlignLeft or ELayoutAlignRight )
-         * ELayoutAlignLeft default in western, ELayoutAlignRight in AH.
-         */
-        void SetTextAlignment(TInt aAlignment);
-        
-        /**
-         * @return ETrue if the current text fits on
-         * the drawing rect (when scrolling behaviour is scroll-alternate)
-         * EFalse otherwise. 
-         * If this is ETrue then no scrolling and text alignment should be used
-         */ 
-        TBool CalculateCurrentTextFitInNewstickerRect();
+        TBool SetCurrentTitle( TBool aSetDefault = EFalse );
+
 
     private: 
 
         CXnNewstickerControl(CXnNewstickerAdapter* aAdapter);
 
         void ConstructL();
-
-        /**
-        * Calculate the indexes and offset after new title has been inserted.
-        * @param aIndex The inserted index.
-        */
-        void CountIndexAfterInsertL(TInt aIndex);
         
         /**
-         * @return ETrue if all the text fits on the drawing rect (when scrolling behaviour is slide)
-         * EFalse otherwise. 
-         * If this is ETrue then no scrolling and text alignment should be used
-         */ 
-        TBool CalculateTextFitInNewstickerRect();
-        
-        /**
-         * @return text alignment from properties if text fits to the rect or scroll behaviour is alternate.
-         * otherwise returns default alignment value (left in western, right in AH).  
-         */
-        CGraphicsContext::TTextAlign TextAlignment();
-        /**
          * Get the index of the next title that has content
          * 
          * @param aStartSearch The index where to start search
@@ -324,213 +132,26 @@
          * 
          * @return The next index that has content or -1 if nothing was found 
          */
-        TInt GetNextTitleWithContent( TInt aStartSearch, TBool aBackwards = EFalse );
-
-        TBool IsVisibleTitles();
-        
-    private:    // Data
+        TInt GetNextTitleWithContent( TInt aStartSearch, TBool aBackwards = EFalse ) const;
 
         /**
-        *  Helper class containing the title text and its length in pixels.
-        *
-        *  @lib xnnewstickerfactory.dll
-        *  @since Series 60 3.2
+        * Checks is there any visible titles in array
         */
-        class CTitleData : public CBase
-            {
-            public:
-
-                /** 
-                * Destructor
-                */
-                virtual ~CTitleData();
-
-                /**
-                * Two-phased constructor.
-                * @param aTitle The title text.
-                * @param aLenghtInPixels The lenght of title text in pixels.
-                * @return Pointer to this.
-                */
-                static CTitleData* NewL(const TDesC& aTitle, TInt aLenghtInPixels);
-
-                /**
-                * Two-phased constructor.
-                * @param aTitle The title text.
-                * @param aLenghtInPixels The lenght of title text in pixels.
-                * @return Pointer to this.
-                */
-                static CTitleData* NewLC(const TDesC& aTitle, TInt aLenghtInPixels);
-
-                /**
-                * Two-phased constructor.
-                * @param aByteData The SVG title.
-                * @param aLenghtInPixels The lenght of title text in pixels.
-                * @return Pointer to this.
-                */
-                static CTitleData* NewL(const TDesC8& aByteData);
-
-                /**
-                * Two-phased constructor.
-                * @param aByteData The SVG title.
-                * @param aLenghtInPixels The lenght of title text in pixels.
-                * @return Pointer to this.
-                */
-                static CTitleData* NewLC(const TDesC8& aByteData);
-
-                /** 
-                * Return the title text.
-                * @return The title text.
-                */
-                const TDesC& TitleText();
-                
-                /**
-                 * Set new title text
-                 */
-                void SetTitleTextL(const TDesC& aTitle);
-                
-                /** 
-                * Return the title text lenght in pixels.
-                * @return The title text lenght in pixels.
-                */
-                TInt TitleTextLengthInPixels();
-
-                /** 
-                * Return the title text lenght in pixels.
-                * @param aLenghtInPixels The lenght of title text in pixels.
-                */
-                void SetTitleTextLengthInPixels(TInt aLenghtInPixels);
-
-                /** 
-                * ETrue if the title is svg, EFalse if it is text.
-                * @return ETrue if the title is svg, EFalse if it is text.
-                */
-                TBool IsSvgTitle();
-
-                /**
-                * Return the svg title data.
-                * @return The svg title data.
-                */
-                const TDesC8& SvgTitleData();            
-
-            private:
-
-                CTitleData(TInt aLenghtInPixels = 0);
-
-                void ConstructL(const TDesC& aTitle);
-
-                void ConstructL(const TDesC8& aByteData);
-
-            private:    //  Data
-
-                /**
-                * ETrue if the title is SVG, EFalse if it is text.
-                */
-                TBool   iTitleIsSvg;
-
-                /**
-                * The title text. Owned.
-                */
-                HBufC*  iText;
-
-                /**
-                * The svg title. Owned.
-                */
-                HBufC8*  iData;
-
-                /**
-                * The title text length in pixels.
-                */
-                TInt    iTextLenghtInPixels;
-            };
-
+        TBool IsVisibleTitles() const;
+        
+    private:    // Data
+        
         /**
-        * List of titles to show.
-        */
-        RPointerArray<CTitleData>   iTitles;
-
-        /**
-        * The index of the title which is drawn first.
+        * The array for title texts
+        * owned
         */
-        TInt                        iFirstDrawingTitleIndex;
-
-        /**
-        * The number of pixels of the first title and separator image which
-        * have already been shown. In other words, the number of the pixels
-        * that are not visible in the screen. The iFirstDrawingTitleIndex
-        * is updated when:
-        * iFirstDrawingOffset > iTextLenghtInPixels + iSeparatorImageWidth
-        */
-        TInt                        iFirstDrawingOffset;
-
-        /**
-        * The width of the.separator image.
-        */
-        TInt                        iImageWidthInPixels;
+        RPointerArray<HBufC>        iTitleTexts;
         
         /**
         * The index of the title which is selected if user activates the
         * control.
         */
         TInt                        iCurrentTitleIndex;
-
-        /**
-        * The separator image. 
-        * Owned.
-        */
-        CGulIcon*                   iSeparatorimage;
-
-        /**
-        * The separator image including the gap between image and text. 
-        * Owned.
-        */
-        TInt                        iSeparatorImageWidth;
-
-        /**
-         * Font
-         * Not own.
-         */
-    	CFont* 	                    iFont;
-
-        /**
-         * Baseline for the text.
-         */
-        TInt                        iTextBaseline;
-        
-        /**
-         *  Color for the text
-         */
-        TRgb                        iTextColor;
-
-        /**
-         *  Whether to use underlining for the text
-         */
-        TFontUnderline              iUnderlining;
-
-        /**
-         *  Whether to use strikethrough for the text
-         */
-        TFontStrikethrough          iStrikethrough;
-
-        /**
-         * A rect in which the scrolling text is shown.
-         */
-        TRect                       iContentRect;
-
-        /**
-         * Amount of pixels the text moves in a tick.
-         */	    
-	    TInt                        iSpeed;
-	    
-	    /**
-	     * Whether the scrolling texts will loop or not.
-	     * If false, the scrolling will end at the last index.
-	     */
-	    TBool                       iScrollLooping;
-
-        /**
-         * Whether the text direction is LTR or RTL.
-         */	    
-        TBool                       iIsWestern;
         
         /**
          * Parent control adapter
@@ -538,15 +159,9 @@
          */	            
         CXnNewstickerAdapter*       iAdapter;
         
-        /**
-         * ETrue if there is only one title, it fits in the rect and 
-         * scroll behaviour is slide
-         */
-        TBool                       iTextFitInNewstickerRect;
-        /**
-         * Text alignment from the properties
-         */
-        TInt                        iTextAlignment;        
+
+
+        
     };
 
 #endif // XNNEWSTICKERCONTROL_H
--- a/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/inc/xnnewstickersvgcontrol.h	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,203 +0,0 @@
-/*
-* Copyright (c) 2002-2006 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:  Svg scrolling functionality.
-*
-*/
-
-
-#ifndef XNNEWSTICKERSVGCONTROL_H
-#define XNNEWSTICKERSVGCONTROL_H
-
-//  INCLUDES
-#include <e32base.h>
-#include <SVGRequestObserver.h>
-
-// CONSTANTS
-
-// FORWARD DECLARATIONS
-class CXnNewstickerAdapter;
-class CSvgEngineInterfaceImpl;
-
-// CLASS DECLARATION
-
-/**
-* @ingroup group_xnnewstickerfactory
-* 
-*  Newsticker control for XUIKON svg scrolling functionality.
-*
-*  @lib xn3newstickerfactory.dll
-*  @since Series 60 3.2
-*/
-class CXnNewstickerSvgControl : public CBase, public MSvgRequestObserver
-    {
-    public:
-        /**
-         * Two-phased constructor.
-         * @param aAdapter Parent control
-         * @return Pointer to this.
-         */
-        static CXnNewstickerSvgControl* NewL(CXnNewstickerAdapter* aAdapter);
-
-        /** 
-        * Destructor
-        */
-        virtual ~CXnNewstickerSvgControl();
-
-    public: //  New functions
-        /**
-        * Start showing the SVG until StopL is called.
-        * @param aSvgData The svg byte data to show.
-        */
-        void StartL(const TDesC8& aSvgData);
-
-        /**
-        * Stop the SVG showing and started with the StartL.
-        */
-        void StopL();
-        
-        /** 
-        * Sets the rect of the visible area.
-        * @since S60 v3.1
-        * @param aContentRect The visible rect.
-        * @param aDevice The current graphics device.
-        * @return void
-        */        
-        void SetSvgRectL(TRect& aContentRect, CGraphicsDevice& aDevice );
-        
-        /**
-        * Draws the SVG into screen
-        */
-        void Draw() const;
-
-    public: //From MSvgRequestObserver
-    
-        /**
-        * This method is called by the SVG Engine when all data for a certain
-        * step, such as animation frame, have been updated.  This usually means
-        * the off-screen image (passed in to 'ConstructL' of CSvgEngineInterface)
-        * has been updated.  The client usually redraws the image onto
-        * the screen.
-        */
-        void UpdateScreen();
-
-        /**
-        * This method is for future extension, in which an external script engine
-        * could be used to evaluate a script description.
-        *
-        * @param : aScript -- A description of script from the "on" attribute.
-        * @param : aCallerElement -- The element that calls the script by a
-        *                            an event of the "on" attribute.
-        * @return : For future use.  Value is ignored.
-        */
-        TBool ScriptCall(const TDesC& aScript, CSvgElementImpl* aCallerElement);
-
-        /**
-        * This method is called to retrieve the file handle of an image name.
-        * The session (RFs) object passed in is guaranteed to be connected, so
-        * the client must NOT call aSession.Connect().
-        *
-        * The implementation for the client of this method is usually if not always:
-        * TInt X::FetchImage(const TDesC& aFilename, RFs& aSession, RFile& aFileHandle)
-        *     {
-        *     // Check for "http", get data from remote site, save to disk
-        *     // Get absolute path to aFilename: absolutepath
-        *     return aFileHandle.Open(aSession, absolutepath, EFileRead);
-        *     }
-        *
-        * Note: Use EFileShareReadersOnly to prevent file locking.
-        *
-        * The API AssignImageData() can be used to avoid block the parsing
-        * thread due this method taking too long to return.  This is
-        * accomplished by returning a non-KErrNone value  (i.e. KErrNotFound),
-        * and storing the URI parameter.  The image data then could be
-        * assigned the the URI in another thread/Active-Object.
-        *
-        * @param : aUri -- the relative path of an image file.
-        * @param : aSession -- File session used by client to open file.
-        * @param : aFileHandle -- File handle used by client to open file.
-        * @return : KErrNone if Open command successful, otherwise error-code
-        *           from Open command.  The SVG engine will proceed loading the file
-        *           only if the return value is KErrNone.
-        */
-        TInt FetchImage(const TDesC& aUri, RFs& aSession, RFile& aFileHandle);
-
-        /**
-        * This method is called to retrieve the file handle of an svg font file.
-        * This file must be SVG 1.1 .svg file.  When the engine comes acrossed
-        * a font-family name that it doesnt know it will request "fontfamilyname".svg
-        * file through this method.  The client can either provide the svg file
-        * or the engine will default to system text.
-        *
-        * The usage of this method is exactly the same as the FetchImage method above
-        *
-        * @param : aUri -- the relative path of an image file.
-        * @param : aSession -- File session used by client to open file.
-        * @param : aFileHandle -- File handle used by client to open file.
-        * @return : KErrNone if Open command successful, otherwise error-code
-        *           from Open command.  The SVG engine will proceed loading the file
-        *           only if the return value is KErrNone.
-        */
-        TInt FetchFont(const TDesC& aUri, RFs& aSession, RFile& aFileHandle);
-
-        /**
-        * This Method updates the presentation status
-        * @param : TInt32&  aNoOfAnimation
-        */
-        void UpdatePresentation(const TInt32&  aNoOfAnimation);
-
-    private: 
-
-        CXnNewstickerSvgControl(CXnNewstickerAdapter* aAdapter);
-
-        void ConstructL();
-        
-    private:    // Data
-        /**
-        * Parent control adapter
-        * Not own.
-        */	            
-        CXnNewstickerAdapter*       iAdapter;
-        
-        /**
-        * Pointer to SVG rendering engine
-        * Owned.
-        */
-        CSvgEngineInterfaceImpl*    iSVGEngine;
-        
-        /**
-        * Pointer to svg bitmap.
-        * Own.
-        */
-        CFbsBitmap*                 iBitmap;
-        
-        /**
-        * Pointer to svg mask.
-        * Own.
-        */
-        CFbsBitmap*                 iMaskBitmap;
-        
-        /**
-        * A rect in which the svg is shown.
-        */
-        TRect                       iContentRect;
-        
-        /**
-        * Defines whether the content has been loaded
-        */
-        TBool                       iHasContent;
-    };
-
-#endif // XNNEWSTICKERSVGCONTROL_H
-
-// End of File
--- a/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewsticker.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewsticker.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -131,18 +131,6 @@
             (ControlAdapter()))->Title(aIndex);
     }
 
-
-// ---------------------------------------------------------
-// CXnNewsticker::SetSeparatorImageL
-// ---------------------------------------------------------
-//
-TInt CXnNewsticker::SetSeparatorImageL(CGulIcon* aIcon)
-    {
-    return (static_cast<CXnNewstickerAdapter*>
-            (ControlAdapter()))->SetSeparatorImageL(aIcon);
-    }
-
-
 // ---------------------------------------------------------
 // CXnNewsticker::ClearTitles
 // ---------------------------------------------------------
@@ -153,27 +141,6 @@
             (ControlAdapter()))->ClearTitles();
     }
 
-
-// ---------------------------------------------------------
-// CXnNewsticker::AppendSvgTitleL
-// ---------------------------------------------------------
-//
-void CXnNewsticker::AppendSvgTitleL(const TDesC8& aByteData)
-    {
-    (static_cast<CXnNewstickerAdapter*>
-            (ControlAdapter()))->AppendSvgTitleL(aByteData);
-    }
-
-// ---------------------------------------------------------
-// CXnNewsticker::InsertSvgTitleL
-// ---------------------------------------------------------
-//
-void CXnNewsticker::InsertSvgTitleL(const TDesC8& aByteData, TInt aIndex)
-    {
-    (static_cast<CXnNewstickerAdapter*>
-            (ControlAdapter()))->InsertSvgTitleL(aByteData, aIndex);
-    }
-
 // ---------------------------------------------------------
 // CXnNewsticker::SetCallbackInterfaceL
 // ---------------------------------------------------------
--- a/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickeradapter.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickeradapter.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -19,6 +19,8 @@
 #include <utf.h>
 #include <AknsUtils.h>
 #include <AknUtils.h>
+#include <AknMarqueeControl.h>
+#include <AknBidiTextUtils.h>
 
 // User includes
 #include "xnviewnodeimpl.h"
@@ -32,9 +34,13 @@
 
 #include "xnnewstickeradapter.h"
 #include "xnnewstickercontrol.h"
-#include "xnnewstickersvgcontrol.h"
 #include "xncomponentnodeimpl.h"
 
+
+const TInt KThousandCoef = 1000;
+const TInt KByteLength = 8;
+
+
 // ============================= LOCAL FUNCTIONS ===============================
 
 // -----------------------------------------------------------------------------
@@ -45,130 +51,30 @@
 //          return The value of the property. If not found, KErrNotFound returned.
 // -----------------------------------------------------------------------------
 // 
-static TInt GetIntPropertyL(
-    CXnNodePluginIf& aNode,
-    const TDesC8& aProperty)
+static TInt GetIntPropertyL( CXnNodePluginIf& aNode, const TDesC8& aProperty )
     {
     CXnProperty* prop = aNode.GetPropertyL(aProperty);
     if(prop)
         {        
         CXnDomPropertyValue* value = 
-            static_cast<CXnDomPropertyValue*>(prop->Property()->PropertyValueList().Item(0));
+            static_cast<CXnDomPropertyValue*>( 
+                    prop->Property()->PropertyValueList().Item(0) );
+        
         if(CXnDomPropertyValue::ENumber == value->PrimitiveValueType())
             {
-            TInt integer = static_cast<TInt>(prop->FloatValueL());
+            TInt integer = static_cast<TInt>( prop->FloatValueL() );
+            
             return integer;
             }
         }
+    
     return KErrNotFound;
-    }
+    }       
 
 // -----------------------------------------------------------------------------
-// CopyBitmapData
-// Copies a data from source bitmap to target bitmap.
+// CXnNewstickerAdapter::SetNewstickerPropertiesL
 // -----------------------------------------------------------------------------
 //
-static TInt CopyBitmapData(
-    CFbsBitmap& aTarget,
-    const CFbsBitmap& aSource,
-    TPoint aSourcePoint)
-	{
-    TSize targetSize(aTarget.SizeInPixels());
-    TSize sourceSize(aSource.SizeInPixels());
-    TInt lineLength(targetSize.iWidth);
-    TInt maxSourceLineLength(sourceSize.iWidth - aSourcePoint.iX);
-    if(lineLength > maxSourceLineLength)
-        {
-        lineLength = maxSourceLineLength;
-        }
-    TInt rowCount(targetSize.iHeight);
-    TInt maxSourceRowCount(sourceSize.iHeight - aSourcePoint.iY);
-    if(rowCount > maxSourceRowCount)
-        {
-        rowCount = maxSourceRowCount;
-        }
-
-    // Get bitmap display mode
-	TDisplayMode displayMode(aSource.DisplayMode());
-
-    // Create buffer for a scan line
-	HBufC8* scanLine = HBufC8::New(
-        aSource.ScanLineLength(lineLength, displayMode));
-    if(!scanLine)
-    	{
-    	return KErrNoMemory;
-    	}
-     
-	TPtr8 scanPtr(scanLine->Des());
-
-    // Copy all rows to destination bitmap
-	for(TInt row(0); row < rowCount; row++)
-		{
-		aSource.GetScanLine(scanPtr,
-            TPoint(aSourcePoint.iX, aSourcePoint.iY + row),
-            lineLength, displayMode);
-		aTarget.SetScanLine(scanPtr, row);
-		}
-    delete scanLine;
-	return KErrNone;
-	}        
-
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::CheckDisplayL
-// ---------------------------------------------------------
-//
-TBool CXnNewstickerAdapter::CheckDisplayL( CXnNodePluginIf& aNode )
-    {
-    if( iPowerSaveMode )
-        {
-        iDisplay = EFalse;
-        
-        return iDisplay;
-        }
-        
-	CXnProperty* displayProp( aNode.DisplayL() );
-
-	if( displayProp )
-	    {
-	    const TDesC8& display( displayProp->StringValue() );
-	    
-	    if( display != XnPropertyNames::style::common::display::KBlock )
-	        {
-	        return EFalse;
-	        }
-	    }
-    
-	CXnProperty* visibilityProp( aNode.VisibilityL());
-
-	if( visibilityProp )
-	    {
-	    const TDesC8& visibility( visibilityProp->StringValue() );
-	    
-	    if( visibility != XnPropertyNames::style::common::visibility::KVisible )
-	        {
-	        return EFalse;
-	        }
-	    }
-    
-    
-    CXnNodePluginIf* parent( aNode.ParentL() );
-    
-    TBool ret( ETrue );
-    
-    if( parent )
-        {
-        ret = CheckDisplayL( *parent );
-        }
-        
-    iDisplay = ret;  
-    
-    return iDisplay;          
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::SetNewstickerPropertiesL
-// ---------------------------------------------------------
-//
 void CXnNewstickerAdapter::SetNewstickerPropertiesL()
     {
     // scroll amount 
@@ -180,20 +86,19 @@
         scrollamount = KXnNewstickerScrollAmount;
         }
 
-    CXnProperty* prop( iNode.GetPropertyL( XnPropertyNames::newsticker::KScrollBehaviour ) );
+    CXnProperty* prop( iNode.GetPropertyL(
+            XnPropertyNames::newsticker::KScrollBehaviour ) );
     
     if( prop )
         {
-        if ( prop->StringValue() == XnPropertyNames::newsticker::scroll_behaviour::KAlternate )
+        if ( prop->StringValue() == 
+                XnPropertyNames::newsticker::scroll_behaviour::KAlternate )
             {
             scrollamount = 0;
             iScrollBehaviour = EAlternate;
             }
-        else if ( prop->StringValue() == XnPropertyNames::newsticker::scroll_behaviour::KSlide )
-            {
-            iScrollBehaviour = ESlide;
-            }
-        else if ( prop->StringValue() == XnPropertyNames::newsticker::scroll_behaviour::KScrollAlternate )
+        else if ( prop->StringValue() == 
+                XnPropertyNames::newsticker::scroll_behaviour::KScrollAlternate )
             {
             iScrollBehaviour = EScrollAlternate;
             }
@@ -207,9 +112,9 @@
         iScrollBehaviour = EScroll;
         }        
         
-    iControl->SetScrollAmount( scrollamount );
+    iMarqueeControl->SetSpeedInPixels( scrollamount );
     
-    if( iScrollBehaviour == EScroll || iScrollBehaviour == ESlide )
+    if( iScrollBehaviour == EScroll )
         {                    
         // scroll delay
         TInt scrolldelay = GetIntPropertyL( iNode, 
@@ -221,10 +126,11 @@
             }
         else 
             {
-            scrolldelay *= 1000;    // change to microseconds
+            scrolldelay *= KThousandCoef;    // change to microseconds
             }
         
-        iInterval = scrolldelay;
+        iMarqueeControl->SetInterval( scrolldelay ); 
+        iAlternateInterval = scrolldelay;
             
         // start delay
         TInt startdelay = GetIntPropertyL( iNode, 
@@ -236,10 +142,11 @@
             }
         else 
             {
-            startdelay *= 1000;    // change to microseconds
+            startdelay *= KThousandCoef;    // change to microseconds
             }
         
-        iDelay = startdelay;
+        iMarqueeControl->SetDelay( startdelay );
+        iAlternateDelay = startdelay;
         }
     else if( iScrollBehaviour == EScrollAlternate )
 		{
@@ -253,10 +160,11 @@
             }
         else 
             {
-            scrolldelay *= 1000;    // change to microseconds
+            scrolldelay *= KThousandCoef;    // change to microseconds
             }
         
-        iInterval = scrolldelay;
+        iMarqueeControl->SetInterval( scrolldelay );
+        iAlternateInterval = scrolldelay;
 
         TInt alternateTime( GetIntPropertyL( iNode, XnPropertyNames::newsticker::KDisplayTime ) );
         
@@ -265,7 +173,7 @@
             alternateTime = 0;
             }
 
-        alternateTime *= 1000; // change to ms                        
+        alternateTime *= KThousandCoef; // change to ms                        
 
         iAlternateInterval = alternateTime;
 
@@ -279,10 +187,11 @@
             }
         else 
             {
-            startdelay *= 1000;    // change to microseconds
+            startdelay *= KThousandCoef;    // change to microseconds
             }
         
-        iDelay = startdelay;
+        iMarqueeControl->SetDelay( startdelay );
+        iAlternateDelay = startdelay;
         }
     else // TScrollBehaviour::EAlternate
         {
@@ -293,37 +202,31 @@
             alternateTime = 0;
             }
 
-        alternateTime *= 1000; // change to ms                        
-
-        iDelay = 0;
-        iInterval = alternateTime;
-        }        
+        alternateTime *= KThousandCoef; // change to ms                        
 
-    //  animation time
-    iAnimationTime = GetIntPropertyL( iNode, 
-        XnPropertyNames::newsticker::KXnNewstickerAnimationDelay );  // ms
-    
-    if( KErrNotFound == iAnimationTime )
-        {
-        iAnimationTime = KAnimationTime;
-        }
-    else 
-        {
-        iAnimationTime *= 1000;    // change to microseconds
-        }
+        iMarqueeControl->SetDelay( 0 );
+        iMarqueeControl->SetInterval( alternateTime );
+        
+        iAlternateDelay = 0;
+        iAlternateInterval = alternateTime;
+        }        
     
     // _s60-scroll-loop property. True by default.
-    CXnProperty* loopProp( iNode.GetPropertyL( XnPropertyNames::newsticker::KScrollLoop ) );
+    CXnProperty* loopProp( iNode.GetPropertyL(
+            XnPropertyNames::newsticker::KScrollLoop ) );
     
     if( loopProp && loopProp->StringValue() == XnPropertyNames::KFalse )
         {
-        iControl->SetScrollLooping( EFalse );
+        iScrollLooping = EFalse;
         }
     else
         {
-        iControl->SetScrollLooping( ETrue );
-        }            
-    CXnProperty* restartProperty( iNode.GetPropertyL( XnPropertyNames::newsticker::KRestartAfterUpdate ) );
+        iScrollLooping = ETrue;
+        }    
+    
+    CXnProperty* restartProperty( iNode.GetPropertyL(
+            XnPropertyNames::newsticker::KRestartAfterUpdate ) );
+    
     if ( restartProperty && restartProperty->StringValue() == XnPropertyNames::KTrue )
         {
         iRestartAfterUpdate = ETrue;
@@ -337,13 +240,14 @@
 // Symbian static 1st phase constructor
 // -----------------------------------------------------------------------------
 //
-CXnNewstickerAdapter* CXnNewstickerAdapter::NewL(CXnControlAdapter* aParent, 
-    CXnNodePluginIf& aNode)
+CXnNewstickerAdapter* CXnNewstickerAdapter::NewL( CXnControlAdapter* aParent, 
+    CXnNodePluginIf& aNode )
     {
 	CXnNewstickerAdapter* self = new( ELeave ) CXnNewstickerAdapter( aParent, aNode );
     CleanupStack::PushL( self );
-    self->ConstructL();
+    self->ConstructL( aParent );
     CleanupStack::Pop();
+    
     return self;	
     }
 
@@ -352,28 +256,32 @@
 // Symbian 2nd phase constructor can leave.
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerAdapter::ConstructL()
+void CXnNewstickerAdapter::ConstructL( CXnControlAdapter* aParent )
     {
     CXnControlAdapter::ConstructL( iNode );
     
     iControl = CXnNewstickerControl::NewL( this );    
-    iSvgControl = CXnNewstickerSvgControl::NewL( this );
+    
+    iMarqueeControl = CAknMarqueeControl::NewL();
+    TCallBack callback( RedrawCallback, this );
+    iMarqueeControl->SetRedrawCallBack( callback );
+    iMarqueeControl->SetContainerWindowL( *aParent );
+    iMarqueeControl->ActivateL();
     
     iPeriodicTimer = CPeriodic::NewL( CActive::EPriorityStandard );
     
-    iPowerSaveMode = ETrue;
-    
-    iRestartAfterUpdate = EFalse;
     SetTextPropertiesL();
     SetNewstickerPropertiesL();
     
     RPointerArray<CXnNodePluginIf> children = iNode.ChildrenL();
     CleanupClosePushL( children );
+    
     for( TInt i = 0; i < children.Count(); ++i )
         {
         CXnNodePluginIf* child( children[i] );
         
         CXnType* xnType = child->Type();
+        
         // We only care for <title> nodes
         if ( xnType && xnType->Type() == XnPropertyNames::title::KTitle )
             {
@@ -402,6 +310,9 @@
             }
         }
     CleanupStack::PopAndDestroy( &children );
+    
+    iControl->SetCurrentTitle( ETrue );
+    
     }
 
 // -----------------------------------------------------------------------------
@@ -409,9 +320,18 @@
 // C++ default constructor
 // -----------------------------------------------------------------------------
 //
-CXnNewstickerAdapter::CXnNewstickerAdapter(CXnControlAdapter* /*aParent*/, 
-    CXnNodePluginIf& aNode)
-    : iState(ENotStarted), iNode(aNode)
+CXnNewstickerAdapter::CXnNewstickerAdapter( CXnControlAdapter* /*aParent*/, 
+    CXnNodePluginIf& aNode )
+    : iNode( aNode ),
+      iPowerSaveMode( ETrue ),
+      iRestartAfterUpdate( EFalse ),
+      iTextColor( KRgbBlack ),
+      iTextAlignment( ELayoutAlignLeft ),
+      iTextBaseline( 0 ),
+      iUnderlining( EUnderlineOff ),
+      iStrikethrough( EStrikethroughOff ),
+      iScrollLooping( ETrue ),
+      iRedraw( ETrue )
     {
     }
 
@@ -422,31 +342,22 @@
 //
 CXnNewstickerAdapter::~CXnNewstickerAdapter()
     {           
-    if( iPeriodicTimer )
+    if( iPeriodicTimer && iPeriodicTimer->IsActive() )
         {
         iPeriodicTimer->Cancel();
         }
         
     delete iPeriodicTimer;
 
-    if( iFont && iReleaseFont )
+    if( iFont && ( iReleaseFont == 1 ) )
         {
         CWsScreenDevice* dev = iCoeEnv->ScreenDevice();
         dev->ReleaseFont( iFont ); 
         }
-        
+    
+    delete iMarqueeControl;
     delete iControl;
-    
-    if( iState == EAnimation )
-        {
-        TRAP_IGNORE( iSvgControl->StopL() );
-        }
-        
-    delete iSvgControl;
-    delete iBufferDevice;
-	delete iDrawingBuffer;
-	delete iBufferGc;
-    delete iBackgroundBitmap;
+
     }
 
 // -----------------------------------------------------------------------------
@@ -456,35 +367,36 @@
 //
 void CXnNewstickerAdapter::SetTextPropertiesL()
     {
-    if (iFont && iReleaseFont)
+    if (iFont && ( iReleaseFont == 1 ) )
         {
         CWsScreenDevice* dev = iCoeEnv->ScreenDevice();
         dev->ReleaseFont(iFont); 
         iFont = NULL;
         }
+    
     CXnUtils::CreateFontL(iNode, iFont, iReleaseFont);
-    iControl->SetFont(iFont);
     
     TBool colorSet(EFalse);
     CXnProperty* colorProperty = iNode.GetPropertyL(XnPropertyNames::appearance::common::KColor);
-    if (colorProperty != NULL)
+    
+    if( colorProperty )
         {
         CXnDomProperty* domProperty = colorProperty->Property();
         if(domProperty)
             {
-            TRgb textColor;
             TInt error( KErrNotSupported );
             CXnDomPropertyValue* value = static_cast< CXnDomPropertyValue* >
                                             ( domProperty->PropertyValueList().Item( 0 ) );
+            
             if( value->IsAutoIdent() )
                 {
                 MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
-                error = AknsUtils::GetCachedColor(skinInstance, textColor, KAknsIIDQsnTextColors,
-                EAknsCIQsnTextColorsCG6);
+                error = AknsUtils::GetCachedColor( skinInstance, iTextColor, KAknsIIDQsnTextColors,
+                EAknsCIQsnTextColorsCG6 );
                 }
             else if( value->PrimitiveValueType() == CXnDomPropertyValue::ERgbColor )
                 {
-                textColor = value->RgbColorValueL();
+                iTextColor = value->RgbColorValueL();
                 error = KErrNone;
                 }
             else
@@ -497,30 +409,32 @@
                 TInt index = 0;
                 TAknsItemID skinID;
                 
-                TBool idResolved = CXnUtils::ResolveSkinItemIDL( colorString->Des(), skinID, index );
+                TBool idResolved = CXnUtils::ResolveSkinItemIDL(
+                        colorString->Des(), skinID, index );
                 
                 if( idResolved )
                     {
                     MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
-                    error = AknsUtils::GetCachedColor( skinInstance, textColor, skinID, index );
+                    error = AknsUtils::GetCachedColor(
+                            skinInstance, iTextColor, skinID, index );
                     }
                 else // use auto value if skin id is invalid.
                     {
                     MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
-                    error = AknsUtils::GetCachedColor(skinInstance, textColor, KAknsIIDQsnTextColors,
-                    EAknsCIQsnTextColorsCG6);
+                    error = AknsUtils::GetCachedColor(skinInstance, iTextColor,
+                            KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6);
                     }
                 CleanupStack::PopAndDestroy( colorString );                 
                 }
-            if (error == KErrNone)
+            
+            if ( error == KErrNone )
                 {
-                iControl->SetTextColor(textColor);
                 colorSet = ETrue;
                 }
             }
         }
 
-    if(!colorSet) // Use text skin color
+    if( !colorSet ) // Use text skin color
         {
         MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
         TRgb textColor;
@@ -528,471 +442,317 @@
             KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6);
         if (error == KErrNone)
             {
-            iControl->SetTextColor(textColor);
+            iTextColor = textColor;
             }
         }
     
     CXnProperty* textDecorationProp = 
         iNode.GetPropertyL(XnPropertyNames::appearance::common::KTextDecoration);
-    if(textDecorationProp)
+    
+    if( textDecorationProp )
         {
         CXnDomList& propertyValueList = textDecorationProp->Property()->PropertyValueList();
         TInt valueCount = propertyValueList.Length();
-        for (TInt i = 0; i < valueCount; ++i)
+        
+        for( TInt i = 0; i < valueCount; ++i )
             {
             CXnDomPropertyValue* value = 
                 static_cast<CXnDomPropertyValue*>(propertyValueList.Item(i));
             if (value->StringValueL() == 
                 XnPropertyNames::appearance::common::textdecoration::KUnderline)
                 {
-                iControl->SetTextUnderlineStyle(EUnderlineOn);
+                iUnderlining = EUnderlineOn;
                 }
             if (value->StringValueL() == 
                 XnPropertyNames::appearance::common::textdecoration::KLinethrough)
                 {
-                iControl->SetTextStrikethroughStyle(EStrikethroughOn);
+                iStrikethrough = EStrikethroughOn;
                 }
             }
         }
     
     TGulAlignmentValue alignment = CXnUtils::TextAlignment( iNode );
     
-    TInt textAlignment( ELayoutAlignLeft ); // all are vertically top aligned by default (avkon)
-    
     switch( alignment )
         {
         case EHCenterVCenter:            
-            textAlignment = ELayoutAlignCenter;                 
+            iTextAlignment = ELayoutAlignCenter;                 
             break;
+            
         case EHRightVCenter:            
-            textAlignment = ELayoutAlignRight;                
+            iTextAlignment = ELayoutAlignRight;                
             break;
+            
         default: 
+            iTextAlignment = ELayoutAlignLeft;
             break;    
-        }
-    
-    iControl->SetTextAlignment(textAlignment);
+        }   
     }
 
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::AppendTitleL
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
-void CXnNewstickerAdapter::AppendTitleL(const TDesC& aTitle)
+void CXnNewstickerAdapter::AppendTitleL( const TDesC& aTitle )
     {
-    iControl->AppendTitleL(aTitle);
-    iNode.SetDirtyL();
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::InsertTitleL
-// ---------------------------------------------------------
-//
-void CXnNewstickerAdapter::InsertTitleL(const TDesC& aTitle, TInt aIndex)
-    {
-    iControl->InsertTitleL(aTitle, aIndex);
+    iControl->AppendTitleL( aTitle );
     iNode.SetDirtyL();
     }
 
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::UpdateTitleL
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::InsertTitleL
+// -----------------------------------------------------------------------------
 //
-void CXnNewstickerAdapter::UpdateTitleL(const TDesC& aTitle, TInt aIndex)
+void CXnNewstickerAdapter::InsertTitleL( const TDesC& aTitle, TInt aIndex )
     {
-    iControl->UpdateTitleL(aTitle, aIndex);
+    iControl->InsertTitleL( aTitle, aIndex );
     iNode.SetDirtyL();
+    }
+
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::UpdateTitleL
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerAdapter::UpdateTitleL( const TDesC& aTitle, TInt aIndex )
+    {
+    iControl->UpdateTitleL( aTitle, aIndex );
+    iNode.SetDirtyL();
+    
     if ( iRestartAfterUpdate )
         {
-        RestartL();
+        Stop();
+        Start();
         }
     }
 
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::DeleteTitleL
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
-void CXnNewstickerAdapter::DeleteTitleL(TInt aIndex)
+void CXnNewstickerAdapter::DeleteTitleL( TInt aIndex )
     {
-    if( iState == EAnimation && iControl->CurrentTitleIndex() == aIndex )
-        {
-        //  About to delete the currently showing animation
-        iSvgControl->StopL();
-        iControl->DeleteTitleL( aIndex );
-
-        RestartL();
-        }
-    else
-        {
-        iControl->DeleteTitleL(aIndex);
-        }
-
+    iControl->DeleteTitleL( aIndex );
     iNode.SetDirtyL();
     }
 
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::CurrentTitleIndex
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
 TInt CXnNewstickerAdapter::CurrentTitleIndex()
     {
     return iControl->CurrentTitleIndex();
     }
 
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::Title
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
-const TDesC& CXnNewstickerAdapter::Title(TInt aIndex)
+const TDesC& CXnNewstickerAdapter::Title( TInt aIndex )
     {
-    return iControl->Title(aIndex);
+    return iControl->Title( aIndex );
     }
 
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::SetSeparatorImageL
-// ---------------------------------------------------------
-//
-TInt CXnNewstickerAdapter::SetSeparatorImageL(CGulIcon* aIcon)
-    {
-    return iControl->SetSeparatorImageL(aIcon);
-    }
-
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::ClearTitles
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
 void CXnNewstickerAdapter::ClearTitles()
     {
     iControl->ClearTitles();
-    TRAP_IGNORE(iNode.SetDirtyL());
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::AppendSvgTitleL
-// ---------------------------------------------------------
-//
-void CXnNewstickerAdapter::AppendSvgTitleL(const TDesC8& aByteData)
-    {
-    iControl->AppendSvgTitleL(aByteData);
+    TRAP_IGNORE( iNode.SetDirtyL() );
     }
 
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::InsertSvgTitleL
-// ---------------------------------------------------------
-//
-void CXnNewstickerAdapter::InsertSvgTitleL(const TDesC8& aByteData, TInt aIndex)
-    {
-    iControl->InsertSvgTitleL(aByteData, aIndex);
-    }
-
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::SetCallbackInterfaceL
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
 void CXnNewstickerAdapter::SetCallbackInterfaceL(
-        XnNewstickerInterface::MXnNewstickerCallbackInterface* aCallback)
+        XnNewstickerInterface::MXnNewstickerCallbackInterface* aCallback )
     {
     iCallback = aCallback;
     }
 
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::TitleScrolled
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
-void CXnNewstickerAdapter::TitleScrolled(TInt aTitleIndex)
+void CXnNewstickerAdapter::TitleScrolled( TInt aTitleIndex )
     {
-    if (iCallback)
+    if( iCallback )
         {
-        iCallback->TitleScrolled(aTitleIndex);
-        }
-    // if not looping, see if the last item was scrolled...
-    if( !iControl->ScrollLooping() &&
-         aTitleIndex == iControl->TitleCount() - 1 )
-        {
-        iState = EScrollEnded;
-        TRAP_IGNORE( StopL() );
-        DrawNow();
+        iCallback->TitleScrolled( aTitleIndex );
         }
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerAdapter::DrawBackground()
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerAdapter::DrawBackgroundL(const TRect& aRect, CWindowGc& aGc) const
-    {
-    RPointerArray<CXnControlAdapter> adapters;
-    
-    for ( CXnNodePluginIf* node = &iNode; node; ) 
-        {
-        CXnControlAdapter* adapter( node->Control() );
-        
-        if ( adapter )
-            {
-            adapters.Append( adapter );
-            }
-                        
-        node = node->ParentL();
-        }
-    
-    for ( TInt i = adapters.Count() - 1; i >= 0; --i )
-        {
-        adapters[i]->Draw( aRect, aGc );
-        }
-    
-    adapters.Reset();        
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerAdapter::SetTimerToDisplaytime()
+// CXnNewstickerAdapter::StartL
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerAdapter::SetTimerToDisplaytime()
-    {
-    if( iCurrentInterval != iAlternateInterval )
-        {
-        iPeriodicTimer->Cancel();
-        
-        iPeriodicTimer->Start(
-            TTimeIntervalMicroSeconds32( iAlternateInterval ),
-            TTimeIntervalMicroSeconds32( iAlternateInterval ), 
-            TCallBack( CXnNewstickerAdapter::PeriodicEventL, this ) );
-        iCurrentInterval = iAlternateInterval;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerAdapter::SetTimerToScrolltime()
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerAdapter::SetTimerToScrolltime()
+void CXnNewstickerAdapter::Start()
     {
-    if( iCurrentInterval != iInterval )
+    if( IsVisible() && !iPowerSaveMode )
         {
-        iPeriodicTimer->Cancel();
-        
-        iPeriodicTimer->Start(
-            TTimeIntervalMicroSeconds32( iInterval ),
-            TTimeIntervalMicroSeconds32( iInterval ), 
-            TCallBack( CXnNewstickerAdapter::PeriodicEventL, this ) );
-        iCurrentInterval = iInterval;
-        }
-    }
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::StartL
-// ---------------------------------------------------------
-//
-void CXnNewstickerAdapter::StartL()
-    {
-    if( iDisplay && !iPowerSaveMode )
-        {
-        if( iControl->TitleCount() == 0 )
+        if( iControl->TitleCount() < 1 )
             {
             // Nothing to show
             return;
             }
-
-        if( iPeriodicTimer && !iPeriodicTimer->IsActive() )
+        
+        switch( iScrollBehaviour )
             {
-            TInt startDelay( ( iState == ENotStarted ) ? iDelay : KNoDelay );
-
-            //  Start
-            if ( ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate &&
-                 iControl->CalculateCurrentTextFitInNewstickerRect() )
+            case EScroll:
+                {
+                iMarqueeControl->EnableMarquee( ETrue );
+                iRedraw = ETrue;
+                }
+                break;
+                
+            case EAlternate:
                 {
-                iPeriodicTimer->Start(                
-                    TTimeIntervalMicroSeconds32( startDelay ),
-                    TTimeIntervalMicroSeconds32( iAlternateInterval ), 
-                    TCallBack( CXnNewstickerAdapter::PeriodicEventL, this ) );
-                iCurrentInterval = iAlternateInterval;
+                iMarqueeControl->EnableMarquee( EFalse );
+                StartAlternateCounter();  
                 }
-            else
+                break;
+                
+            case EScrollAlternate:
                 {
-                iPeriodicTimer->Start(                
-                    TTimeIntervalMicroSeconds32( startDelay ),
-                    TTimeIntervalMicroSeconds32( iInterval ), 
-                    TCallBack( CXnNewstickerAdapter::PeriodicEventL, this ) );
-                iCurrentInterval = iInterval;
+                iMarqueeControl->EnableMarquee( ETrue );
+                StartAlternateCounter(); 
+                iRedraw = ETrue;
                 }
-        
-            iState = EText;                       
-            }            
+                break;
+                
+            default:
+                break;
+            }
         }
     }
 
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::StopL
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::Stop
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerAdapter::Stop()
+    {  
+    StopAlternateCounter();
+    StopMarquee();
+    }
+
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::StopAlternateCounter
+// -----------------------------------------------------------------------------
 //
-void CXnNewstickerAdapter::StopL()
+void CXnNewstickerAdapter::StopAlternateCounter()
+    {
+    if( iPeriodicTimer && iPeriodicTimer->IsActive() )
+        {
+        iPeriodicTimer->Cancel();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::StopMarquee
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerAdapter::StopMarquee()
     {
-    if( iState == EAnimation )
+    iMarqueeControl->Reset();
+    iMarqueeControl->EnableMarquee( EFalse );
+    }
+
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::StartCounter
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerAdapter::StartAlternateCounter()
+    {
+    if( iPeriodicTimer && iPeriodicTimer->IsActive() )
         {
-        iSvgControl->StopL();
+        iPeriodicTimer->Cancel();
         }
 
-    //  Have we already been started
-    if( iPeriodicTimer->IsActive() )
-        {
-        //  Yes, cancel and set the state
-       iPeriodicTimer->Cancel();
-       
-       if ( iState == EScrollEnded )
-           {
-           iControl->MoveToLastL();
-           iControl->DrawStatic();
-           }
-       else if ( iState == EText || iState == EAnimation )
-           {
-           iState = EPaused;
-           }
-        }
-    // Entering power save mode => Move to last item and draw it
-    if ( ( iScrollBehaviour == EAlternate ||
-          iScrollBehaviour == EScrollAlternate )
-        && iPowerSaveMode )
-       {
-       iState = EPaused;
-       iControl->MoveToLastL();
-       iControl->DrawStatic();
-       }        
+    iPeriodicTimer->Start(                
+        TTimeIntervalMicroSeconds32( iAlternateDelay ),
+        TTimeIntervalMicroSeconds32( iAlternateInterval ), 
+        TCallBack( CXnNewstickerAdapter::PeriodicEventL, this ) ); 
     }
 
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::ShowSvgL
-// ---------------------------------------------------------
-//
-void CXnNewstickerAdapter::ShowSvgL()
-    {
-    //  Get next animation from model and start it
-    iSvgControl->StartL( iControl->CurrentSvgTitle() );
-
-    //  Set the end timer
-    iState = EAnimation;
-    
-    iPeriodicTimer->Cancel();
-    
-    iPeriodicTimer->Start(
-        TTimeIntervalMicroSeconds32( iAnimationTime ),
-        TTimeIntervalMicroSeconds32( iAnimationTime ), 
-        TCallBack( CXnNewstickerAdapter::PeriodicEventL, this ) );
-    iCurrentInterval = iAnimationTime;
-    }
-
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::PeriodicEventL
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
 TInt CXnNewstickerAdapter::PeriodicEventL( TAny* aPtr )
     {
     CXnNewstickerAdapter* self = static_cast< CXnNewstickerAdapter* >( aPtr );
-    
-    if( self->iState == EText )
-        {
-        //  Do the text scroll
-        self->iControl->DoScrollL();
-        }
-    else if( self->iState == EAnimation )
-        {
-        self->iSvgControl->StopL();
-        self->TitleScrolled( self->iControl->CurrentTitleIndex() );
-        //  Animation scroll has been ended, start the next scroll
-        self->iState = ENotStarted;
-        self->iPeriodicTimer->Cancel();
-        self->StartL();
-        //  Do the first draw
-        self->iControl->SetBeginningState();
-        self->iControl->DoScrollL();
-        }
-
+    self->DoScroll();
+  
     return KErrNone;
     }
 
-void CXnNewstickerAdapter::RestartL()
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::MakeVisible()
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerAdapter::MakeVisible( TBool aVisible )
     {
-    if ( iPowerSaveMode )
+    if( aVisible )
         {
-        return;
+        Start();
         }
-    //  Restart
-     iState = ENotStarted;
-     iPeriodicTimer->Cancel();
-     
-     iControl->MoveToFirstL();
-     StartL();
-     
-     //  Do the first draw
-     iControl->SetBeginningState();
+    else
+        {
+        Stop();
+        }
+    
+    CCoeControl::MakeVisible( aVisible );
     }
-// ---------------------------------------------------------
+
+// -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::SizeChanged()
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
 void CXnNewstickerAdapter::SizeChanged()
     {
-    CXnControlAdapter::SizeChanged();
-    TRAP_IGNORE( SizeChangedL() );
+    CXnControlAdapter::SizeChanged();         
+    iMarqueeControl->SetExtent( iNode.Rect().iTl, iNode.Rect().Size() );
+    
+    iTextBaseline = iNode.Rect().Height() / 2 + iFont->AscentInPixels() / 2;
     }
 
-// ---------------------------------------------------------
-// CXnNewstickerAdapter::SizeChangedL()
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::CountComponentControls() const
+// -----------------------------------------------------------------------------
 //
-void CXnNewstickerAdapter::SizeChangedL()
-    {        
-    UpdateDoubleBufferL();
-
-    TRect rect( Rect() );            
-            
-    iControl->SetNewstickerRect( rect );
-    iSvgControl->SetSvgRectL( rect, *SystemGc().Device() );
+TInt CXnNewstickerAdapter::CountComponentControls() const
+    {
+    return 1; // return nbr of controls inside this container
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerAdapter::HandlePointerEventL
+// CXnNewstickerAdapter::ComponentControl(TInt aIndex) const
 // -----------------------------------------------------------------------------
-// 
-void CXnNewstickerAdapter::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+//
+CCoeControl* CXnNewstickerAdapter::ComponentControl( TInt aIndex ) const
     {
-	if ( AknLayoutUtils::PenEnabled() )
-	    {
-        CXnControlAdapter::HandlePointerEventL(aPointerEvent);
+    switch ( aIndex )
+        {
+        case 0:
+            return iMarqueeControl;
+            
+        default:
+            return NULL;
         }
     }
+
 // -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::DoHandlePropertyChangeL
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerAdapter::DoHandlePropertyChangeL( CXnProperty* aProperty )
+void CXnNewstickerAdapter::DoHandlePropertyChangeL( CXnProperty* /*aProperty*/ )
     {
     SetTextPropertiesL();
     SetNewstickerPropertiesL();
-    //New code to check do we need Start or Stop Newsticker
-    if( aProperty )
-        {
-        const TDesC8& name( aProperty->Property()->Name() );
-               
-        if( name == XnPropertyNames::style::common::KDisplay ||
-        	name == XnPropertyNames::style::common::KVisibility )
-        	{               
-            if( CheckDisplayL( iNode ) )
-                {
-                StartL();
-                }
-            else
-                {
-                StopL();
-                }                   
-        	}
-        }
-    }
-    	
-// -----------------------------------------------------------------------------
-// CXnNewstickerAdapter::FocusChanged
-// -----------------------------------------------------------------------------
-// 
-void CXnNewstickerAdapter::FocusChanged(TDrawNow /*aDrawNow*/) 
-    {
     }
 
 // -----------------------------------------------------------------------------
@@ -1005,257 +765,183 @@
     TRAP_IGNORE( SetTextPropertiesL() );
     }
 
-void CXnNewstickerAdapter::ReportNewstickerEventL(const TDesC8& aEventName)
-    { 
-    TBuf8<8>index(KNullDesC8);
-    index.Num(CurrentTitleIndex());
-    
-    iNode.ReportTriggerEventL(aEventName,
-            XnPropertyNames::action::trigger::name::KTitleIndex, index);
-    }
 // -----------------------------------------------------------------------------
-// CXnNewstickerAdapter::OfferKeyEventL
+// CXnNewstickerAdapter::ReportNewstickerEventL
 // -----------------------------------------------------------------------------
 // 
-TKeyResponse CXnNewstickerAdapter::OfferKeyEventL(
-        const TKeyEvent& aKeyEvent, TEventCode aType)
-    {
-    TKeyResponse    resp = EKeyWasNotConsumed;
-    TBool           restart = EFalse;
-
-    CXnControlAdapter::OfferKeyEventL(aKeyEvent, aType);
-
-    if(aType == EEventKey)
-        {
-        if (aKeyEvent.iScanCode == EStdKeyRightArrow)
-            {
-            restart = ETrue;
-            if(iControl->IsWestern())
-                {
-                iControl->MoveToNextL();
-                }
-            else
-                {
-                iControl->MoveToPrevL();
-                }
-            StopL();
-            }
-        else if (aKeyEvent.iScanCode == EStdKeyLeftArrow)
-            {
-            restart = ETrue;
-            if(iControl->IsWestern())
-                {
-                iControl->MoveToPrevL();
-                }
-            else
-                {
-                iControl->MoveToNextL();
-                }
-            StopL();
-            }
-        }
-    if(aType == EEventKeyUp)
-        {
-        if (aKeyEvent.iScanCode == EStdKeyDevice3) // rocker
-            {
-            restart = ETrue;
-            StopL();
-            iControl->MoveToCurrent();            
-            }
-        }
-        
-    if( restart )
-        {
-        //  Restart and do the first draw
-        iState = ENotStarted;
-        StartL();
-        iControl->DoScrollL();
-        }
-        
-    return resp;
+void CXnNewstickerAdapter::ReportNewstickerEvent( const TDesC8& aEventName )
+    { 
+    TBuf8<KByteLength>index( KNullDesC8 );
+    index.Num( CurrentTitleIndex() );
+    
+    TRAP_IGNORE( iNode.ReportTriggerEventL( aEventName,
+            XnPropertyNames::action::trigger::name::KTitleIndex, index ); )
     }
 
 // -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::Draw
 // Draws the text component
 // -----------------------------------------------------------------------------
-void CXnNewstickerAdapter::Draw(const TRect& aRect) const
-    {
-    CXnControlAdapter::Draw( aRect );
-            
-    TRAP_IGNORE( UpdateBackgroundL() );
-    // In powersave-/editmode only draw the last title. 
-    if ( iScrollBehaviour == EAlternate && iPowerSaveMode )
-        {
-        iControl->DrawStatic();
-        
-        // Blit double buffer
-        SystemGc().BitBlt( Rect().iTl, iDrawingBuffer );    
-        }
-    else if( iState == EText || iState == EPaused && 
-            iControl->CurrentTitleIndex() >= 0 )
-        {
-        iControl->Draw();
-
-        // Blit double buffer
-        SystemGc().BitBlt( Rect().iTl, iDrawingBuffer );                
-        }
-    else if( iState == EAnimation )
-        {                            
-        iSvgControl->Draw();
-        
-        // Blit double buffer
-        SystemGc().BitBlt( Rect().iTl, iDrawingBuffer );            
-        }
-    else if( iState == EScrollEnded )
-        {
-        iControl->DrawStatic();
-        SystemGc().BitBlt( Rect().iTl, iDrawingBuffer );
-        }
-    }
-    
-// -----------------------------------------------------------------------------
-// CXnNewstickerAdapter::UpdateDoubleBufferL
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerAdapter::UpdateDoubleBufferL()
-    {
-	TDisplayMode displayMode( SystemGc().Device()->DisplayMode() );
-	
-    // Create double buffer
-    if( iDrawingBuffer ) 
-        {
-        delete iDrawingBuffer;
-        iDrawingBuffer = NULL;
-        delete iBufferDevice;
-        iBufferDevice = NULL;
-        delete iBufferGc;
-        iBufferGc = NULL;        
-        }
-        
-	iDrawingBuffer = new ( ELeave ) CFbsBitmap();
-	iDrawingBuffer->Create( iNode.Rect().Size(), displayMode );
-    iBufferDevice = CFbsBitmapDevice::NewL( iDrawingBuffer );
-    iBufferDevice->CreateBitmapContext( iBufferGc );
-    iBufferGc->UseFont( iControl->Font() );
-    iBufferGc->SetPenColor( iControl->TextColor() );
-    iBufferGc->SetStrikethroughStyle( iControl->TextStrikethroughStyle() );
-    iBufferGc->SetUnderlineStyle( iControl->TextUnderlineStyle() );
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerAdapter::UpdateBackgroundL
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerAdapter::UpdateBackgroundL() const
-    {
-    TDisplayMode displayMode( SystemGc().Device()->DisplayMode() );
-    
-    // Create "screenshot" from the background appearance
-    if( iBackgroundBitmap )
-        {
-        delete iBackgroundBitmap;
-        iBackgroundBitmap = NULL;        
-        }
-    
-    iBackgroundBitmap = new ( ELeave ) CFbsBitmap();
-	iBackgroundBitmap->Create( iNode.Rect().Size(), displayMode );
-	
-	CFbsBitmap* tmpBitmap = new ( ELeave ) CFbsBitmap();
-	CleanupStack::PushL( tmpBitmap );
-	
-	CWsScreenDevice* scrDevice = static_cast< CWsScreenDevice* >( SystemGc().Device() );
-    
-    TSize tmpSize( scrDevice->SizeInPixels() );
-    
-	tmpBitmap->Create( tmpSize, displayMode );
-	
-    CFbsBitmapDevice* tmpDevice = CFbsBitmapDevice::NewL( tmpBitmap );
-	CleanupStack::PushL( tmpDevice );
-    
-    CBitmapContext* bc( NULL );
-    
-    tmpDevice->CreateBitmapContext( bc );    
-    CleanupStack::PushL( bc );
-    
-    DrawBackgroundL( iNode.Rect(), reinterpret_cast< CWindowGc& >( *bc ) );
-    
-    CopyBitmapData( *iBackgroundBitmap, *tmpBitmap, iNode.Rect().iTl );
-    
-    CleanupStack::PopAndDestroy( 3 );
+void CXnNewstickerAdapter::Draw( const TRect& aRect ) const
+    {    
+    const_cast<CXnNewstickerAdapter*>(this)->DrawText( iControl->SelectTitle(), aRect );
     }
     
 // -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::DoEnterPowerSaveModeL
 // Enter power save mode
 // -----------------------------------------------------------------------------
-void CXnNewstickerAdapter::DoEnterPowerSaveModeL(TModeEvent /*aEvent*/)
-    {
-    iDisplay = EFalse;        
+void CXnNewstickerAdapter::DoEnterPowerSaveModeL( TModeEvent /*aEvent*/ )
+    {     
     iPowerSaveMode = ETrue;
-        
-    StopL();
+    Stop();
     }
 
 // -----------------------------------------------------------------------------
 // CXnNewstickerAdapter::DoExitPowerSaveModeL
 // Exit power save mode
 // -----------------------------------------------------------------------------
-void CXnNewstickerAdapter::DoExitPowerSaveModeL(TModeEvent /*aEvent*/)
+void CXnNewstickerAdapter::DoExitPowerSaveModeL( TModeEvent /*aEvent*/ )
     {
     iPowerSaveMode = EFalse;
-            
-    if( CheckDisplayL( iNode ) )
+    
+    if( IsVisible() )
         {
-        RestartL();
-        
-        if( iDrawingBuffer )
-            {
-            DrawNow(); 
-            }
+        Start();
         }
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerAdapter::DrawNow
-// Draw
+// CXnNewstickerAdapter::DrawText
+// Text drawing function is selected by scrolling behaviour
 // -----------------------------------------------------------------------------
-void CXnNewstickerAdapter::DrawNow() const
+void CXnNewstickerAdapter::DrawText( const TDesC& aText, const TRect& aRect )
+    {    
+    CWindowGc& gc = SystemGc();
+    
+    TRect rect = iNode.Rect();
+           
+    CXnControlAdapter::Draw( aRect );
+    
+    gc.SetPenColor( iTextColor );
+    gc.UseFont( iFont );
+    gc.SetUnderlineStyle( iUnderlining );
+    gc.SetStrikethroughStyle( iStrikethrough );
+           
+    TInt textWidth = iFont->TextWidthInPixels( aText );
+    TInt rectWidth = rect.Width();
+    
+    switch( iScrollBehaviour )
+        {  
+        case EScroll:
+        case EScrollAlternate:
+            {
+            if( !iRedraw || textWidth < rectWidth )
+                {
+                iMarqueeControl->Stop();
+                DrawStaticText( gc, aText );
+                }
+            else
+                {
+                iMarqueeControl->Start();
+                TBool isLast = DrawMarqueeText( gc, aText );
+                
+                if( isLast )
+                    {
+                    if( !iScrollLooping )
+                        {
+                        iRedraw = EFalse;
+                        }
+                    
+                    iMarqueeControl->Reset();
+                    StartAlternateCounter();
+                    }
+                }
+            }
+            break;
+            
+        case EAlternate:
+            {
+            DrawStaticText( gc, aText );
+            }
+            break;
+            
+        default:
+            break;
+        }
+      }
+
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::RedrawCallback
+// Callback function for marquee control
+// -----------------------------------------------------------------------------
+//
+TInt CXnNewstickerAdapter::RedrawCallback( TAny* aPtr )
     {
-    TBool parentDrawn = EFalse;
-    TRAP_IGNORE( parentDrawn = DrawFocusableParentL() );
-    if ( !parentDrawn )
+    CXnNewstickerAdapter* self = static_cast<CXnNewstickerAdapter*>( aPtr );
+    self->DrawNow();
+
+    return self->Redraw();
+ 
+    }
+
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::DoScroll
+// Scrolls alternative text. Function is called by periodic timer
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerAdapter::DoScroll()
+    {
+    ReportNewstickerEvent( XnPropertyNames::action::trigger::name::KTitleScrolled );
+    
+    if( iControl->SetCurrentTitle() )
         {
-        CCoeControl::DrawNow();
+        // stop alternate scrolling if current index is last
+        StopAlternateCounter();
+        }
+    
+    DrawNow();
+ 
+    ReportNewstickerEvent( XnPropertyNames::action::trigger::name::KTitleToScroll );
+    }
+
+// -----------------------------------------------------------------------------
+// CXnNewstickerAdapter::DrawStatic
+// Draws text directly to screen when scrolling is not needed
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerAdapter::DrawStaticText( CWindowGc& aGc, const TDesC& aText ) const
+    { 
+    HBufC* text = HBufC::New( aText.Length() + KAknBidiExtraSpacePerLine );
+    
+    if( text )
+        {
+        TRect rect = iNode.Rect();
+        TInt maxLength = rect.Width();
+        TPtr ptr = text->Des();
+        AknBidiTextUtils::ConvertToVisualAndClip(
+                aText, ptr, *iFont, maxLength, maxLength );
+        
+        aGc.DrawText( *text, rect, iTextBaseline,
+                ( CGraphicsContext::TTextAlign )iTextAlignment );
+        
+        delete text;
         }
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerAdapter::DrawFocusableParentL
-// Draws focusable parent
+// CXnNewstickerAdapter::DrawScrolling
+// Draws scrolling text to screen via marquee control
 // -----------------------------------------------------------------------------
-TBool CXnNewstickerAdapter::DrawFocusableParentL() const
+//
+TBool CXnNewstickerAdapter::DrawMarqueeText( CWindowGc& aGc, const TDesC& aText ) const
     {
-    TBool parentDrawn = EFalse;
+    TRect rect = iNode.Rect();
     
-    if ( !iNode.IsFocusedState() )
-        {
-        // node is not focusable, find focusable and focused parent
-        CXnNodePluginIf* parent = iNode.ParentL();
-        while ( parent && !parent->IsFocusedState() )
-            {
-            parent = parent->ParentL();
-            }
-        
-        if (parent)
-            {
-            // focusable parent found, draw it
-            parent->Control()->DrawNow();
-            parentDrawn = ETrue;
-            }
-        }
-    
-    return parentDrawn;
+    // returns true when all loops have been executed
+    return iMarqueeControl->DrawText( aGc, rect, aText, iTextBaseline,
+            ( CGraphicsContext::TTextAlign )iTextAlignment, *iFont );
     }
 
+
 // End of file
--- a/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickercontrol.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickercontrol.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -18,209 +18,26 @@
 
 // INCLUDE FILES
 #include <AknUtils.h>
-#include <gulicon.h>
 #include <AknsDrawUtils.h>
 #include <AknBidiTextUtils.h>
 
 #include "xnnewstickercontrol.h"
 #include "xnnewstickeradapter.h"
-#include "xnproperty.h"
+
 
 // CONSTANTS
-/**
-* for the empty space in pixels between text and image.
-*/
-const TInt KGap = 10;
-
    
 // ============================ MEMBER FUNCTIONS ===============================
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::CTitleData
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData::CTitleData(TInt aLenghtInPixels) :
-    iTitleIsSvg(EFalse), iTextLenghtInPixels(aLenghtInPixels)
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData::~CTitleData()
-    {
-    delete iText;
-    delete iData;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::CTitleData::ConstructL(const TDesC& aTitle)
-    {
-    delete iText;
-    iText = NULL;
-    iText = aTitle.AllocL();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::CTitleData::ConstructL(const TDesC8& aByteData)
-    {
-    iTitleIsSvg = ETrue;
-    iData = aByteData.AllocL();
-    iText = KNullDesC().AllocL();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData* CXnNewstickerControl::CTitleData::NewL(
-                const TDesC& aTitle, TInt aLenghtInPixels)
-    {
-    CXnNewstickerControl::CTitleData* self =
-            CXnNewstickerControl::CTitleData::NewLC(aTitle, aLenghtInPixels);
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData* CXnNewstickerControl::CTitleData::NewLC(
-                const TDesC& aTitle, TInt aLenghtInPixels)
-    {
-    CXnNewstickerControl::CTitleData* self =
-            new(ELeave) CXnNewstickerControl::CTitleData(aLenghtInPixels);
-    CleanupStack::PushL(self);
-    self->ConstructL(aTitle);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData* CXnNewstickerControl::CTitleData::NewL(
-                const TDesC8& aByteData)
-    {
-    CXnNewstickerControl::CTitleData* self =
-            CXnNewstickerControl::CTitleData::NewLC(aByteData);
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData* CXnNewstickerControl::CTitleData::NewLC(
-                const TDesC8& aByteData)
-    {
-    CXnNewstickerControl::CTitleData* self =
-            new(ELeave) CXnNewstickerControl::CTitleData();
-    CleanupStack::PushL(self);
-    self->ConstructL(aByteData);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::TitleText
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-const TDesC& CXnNewstickerControl::CTitleData::TitleText()
-    {
-    return *iText;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::SetTitleText
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::CTitleData::SetTitleTextL(const TDesC& aTitle)
-    {
-    HBufC* newTitle = aTitle.AllocL();
-    delete iText;
-    iText = newTitle;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::TitleTextLengthInPixels
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CXnNewstickerControl::CTitleData::TitleTextLengthInPixels()
-    {
-    return iTextLenghtInPixels;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::SetTitleTextLengthInPixels
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::CTitleData::SetTitleTextLengthInPixels(TInt aLenghtInPixels)
-    {
-    iTextLenghtInPixels = aLenghtInPixels;    
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::IsSvgTitle
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CXnNewstickerControl::CTitleData::IsSvgTitle()
-    {
-    return iTitleIsSvg;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::SvgTitleData
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-const TDesC8& CXnNewstickerControl::CTitleData::SvgTitleData()
-    {
-    return *iData;
-    }
-
-// -----------------------------------------------------------------------------
 // CXnNewstickerControl::CXnNewstickerControl
 // C++ default constructor can NOT contain any code, that
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CXnNewstickerControl::CXnNewstickerControl(CXnNewstickerAdapter* aAdapter) :     
-    iFirstDrawingTitleIndex(0),
-    iFirstDrawingOffset(0),
-    iImageWidthInPixels(0),
-    iCurrentTitleIndex(-1),
-    iSeparatorimage(NULL),
-    iSeparatorImageWidth(0),
-    iFont(NULL),
-    iTextBaseline(0),
-    iTextColor(KRgbBlack),
-    iUnderlining(EUnderlineOff),
-    iStrikethrough(EStrikethroughOff),
-    iIsWestern(ETrue),
-    iAdapter(aAdapter),
-    iTextAlignment(ELayoutAlignLeft)
+CXnNewstickerControl::CXnNewstickerControl( CXnNewstickerAdapter* aAdapter ) :     
+    iCurrentTitleIndex( -1 ),
+    iAdapter( aAdapter )
     {
     }
 
@@ -231,11 +48,7 @@
 //
 void CXnNewstickerControl::ConstructL()
     {
-    if(AknLayoutUtils::LayoutMirrored())
-        {
-    	iIsWestern = EFalse;
-        iTextAlignment = ELayoutAlignRight;
-        }
+
     }
 
 // -----------------------------------------------------------------------------
@@ -243,12 +56,12 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CXnNewstickerControl* CXnNewstickerControl::NewL(CXnNewstickerAdapter* aAdapter)
+CXnNewstickerControl* CXnNewstickerControl::NewL( CXnNewstickerAdapter* aAdapter )
     {
-    CXnNewstickerControl* self = new(ELeave)CXnNewstickerControl(aAdapter);
-    CleanupStack::PushL(self);
+    CXnNewstickerControl* self = new(ELeave)CXnNewstickerControl( aAdapter );
+    CleanupStack::PushL( self );
     self->ConstructL();
-    CleanupStack::Pop();    
+    CleanupStack::Pop(); // self   
     return self;
     }
 
@@ -259,55 +72,7 @@
 //
 CXnNewstickerControl::~CXnNewstickerControl()
     {
-    iTitles.ResetAndDestroy();
-    delete iSeparatorimage;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetScrollAmount
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::SetScrollAmount(TInt aScrollAmount)
-    {
-    iSpeed = aScrollAmount;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetNewstickerRect
-// Set visible rect.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::SetNewstickerRect(TRect& aContentRect)
-    {
-    if(iContentRect != aContentRect)
-        {
-        iContentRect = aContentRect;
-        iTextBaseline = iContentRect.Height() / 2 + iFont->AscentInPixels() / 2;
-        SetBeginningState();
-        for(TInt i = 0; i < iTitles.Count(); i++)
-            {
-            if(!iTitles[i]->IsSvgTitle())
-                {
-                TInt textWidth = iFont->TextWidthInPixels(
-                    iTitles[i]->TitleText());
-                iTitles[i]->SetTitleTextLengthInPixels(textWidth);
-                }
-            }
-        CalculateTextFitInNewstickerRect();        
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::IsWestern
-// Returns ETrue if western layout is used, otherwise EFalse is returned.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CXnNewstickerControl::IsWestern()
-    {
-    return iIsWestern;
+    iTitleTexts.ResetAndDestroy();
     }
 
 // -----------------------------------------------------------------------------
@@ -315,1096 +80,214 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::AppendTitleL(const TDesC& aTitle)
+void CXnNewstickerControl::AppendTitleL( const TDesC& aTitle )
     {
-    TInt textWidth = iFont->TextWidthInPixels(aTitle);
-    CTitleData* title = CTitleData::NewLC(aTitle, textWidth);
-    iTitles.AppendL(title);
-    CleanupStack::Pop(title);
-    
-    CalculateTextFitInNewstickerRect();    
+    HBufC* title = aTitle.AllocLC();
+    iTitleTexts.AppendL( title );
+    CleanupStack::Pop( title );
+    }
 
-    // if this is the first item
-    if(iTitles.Count() == 1) 
+// -----------------------------------------------------------------------------
+// CXnNewstickerControl::InsertTitleL
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerControl::InsertTitleL( const TDesC& aTitle, TInt aIndex )
+    {
+    if( aIndex >= 0 && aIndex < iTitleTexts.Count() )
         {
-        iCurrentTitleIndex = 0;
-        iAdapter->StartL();    
+        HBufC* title = aTitle.AllocLC();
+        iTitleTexts.InsertL( title, aIndex );
+        CleanupStack::Pop( title );
+        }
+    else
+        {
+        AppendTitleL( aTitle );
         }
     }
 
-// ---------------------------------------------------------
-// CXnNewstickerControl::InsertTitleL
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
+// CXnNewstickerControl::UpdateTitleL
+// -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::InsertTitleL(const TDesC& aTitle, TInt aIndex)
+void CXnNewstickerControl::UpdateTitleL( const TDesC& aTitle, TInt aIndex )
     {
-    TInt textWidth = iFont->TextWidthInPixels(aTitle);
-    CTitleData* title = CTitleData::NewLC(aTitle, textWidth);
-    iTitles.InsertL(title, aIndex);
-    CleanupStack::Pop(title);
-
-    
-    CountIndexAfterInsertL(aIndex);
-    CalculateTextFitInNewstickerRect();    
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::UpdateTitleL
-// ---------------------------------------------------------
-//
-void CXnNewstickerControl::UpdateTitleL(const TDesC& aTitle, TInt aIndex)
-    {
-    if ( aIndex >= 0 && aIndex < iTitles.Count() )
+    if( aIndex >= 0 && aIndex < iTitleTexts.Count() )
         {
-        CTitleData* titleData = iTitles[aIndex];    
-        TInt textWidth = iFont->TextWidthInPixels(aTitle);
-        titleData->SetTitleTextL(aTitle);
-        titleData->SetTitleTextLengthInPixels(textWidth);
-        CalculateTextFitInNewstickerRect();
+        HBufC* oldTitle = iTitleTexts[ aIndex ];
+        iTitleTexts.Remove( aIndex );
+        
+        delete oldTitle;
+        oldTitle = NULL;
+        
+        HBufC* title = aTitle.AllocLC();
+        iTitleTexts.InsertL( title, aIndex );
+        CleanupStack::Pop( title );   
         }
     else
         {
-        AppendTitleL(aTitle);
+        AppendTitleL( aTitle );
         }
     }
 
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 // CXnNewstickerControl::DeleteTitle
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::DeleteTitleL(TInt aIndex)
+void CXnNewstickerControl::DeleteTitleL( TInt aIndex )
     {
-    TInt count = iTitles.Count();
-    if (aIndex >= 0 && aIndex < count)
+    TInt count = iTitleTexts.Count();
+    
+    if( aIndex >= 0 && aIndex < count )
         {
         // If the last item will be deleted
         if(count == 1)
             {
-            iAdapter->StopL();
-            iFirstDrawingTitleIndex = GetNextTitleWithContent( 0 );
-            SetBeginningState();
+            iAdapter->Stop();
             iCurrentTitleIndex = -1;
             }
-        if (aIndex == iFirstDrawingTitleIndex)
-            {
-            // If this happens to be the last item in the list
-            if(aIndex == count - 1)
-                {
-                iFirstDrawingTitleIndex = GetNextTitleWithContent( 0 );
-                }
-            SetBeginningState();
-            iCurrentTitleIndex = iFirstDrawingTitleIndex;
-            }
-            
-        //  Check if the title was deleted before the current title
-        else if (aIndex < iFirstDrawingTitleIndex)
-            {
-            iCurrentTitleIndex--;
-            iFirstDrawingTitleIndex = GetNextTitleWithContent( iFirstDrawingTitleIndex-1, ETrue);
-            }
-        UpdateTitleL(KNullDesC, aIndex);
-        CalculateTextFitInNewstickerRect();        
-        }
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::CurrentTitleIndex
-// ---------------------------------------------------------
-//
-TInt CXnNewstickerControl::CurrentTitleIndex()
-    {
-    return iCurrentTitleIndex;
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::Title
-// ---------------------------------------------------------
-//
-const TDesC& CXnNewstickerControl::Title(TInt aIndex)
-    {
-    if (aIndex < 0 || aIndex >= iTitles.Count())
-        {
-        return KNullDesC;
-        }
-
-    if (iTitles[aIndex]->IsSvgTitle())
-        {
-        return KNullDesC;
-        }
-
-    return iTitles[aIndex]->TitleText();
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::SetSeparatorImageL
-// ---------------------------------------------------------
-//
-TInt CXnNewstickerControl::SetSeparatorImageL(CGulIcon* aIcon)
-    {
-    CFbsBitmap* bitmap = aIcon->Bitmap();
-    if(AknIconUtils::IsMifIcon(bitmap))
-        {
-        delete iSeparatorimage;
-        iSeparatorimage = aIcon;
-        TInt maxHeight = iContentRect.Height();
-        TSize size = TSize(maxHeight, maxHeight);        
-        AknIconUtils::SetSize(bitmap, size, EAspectRatioPreservedAndUnusedSpaceRemoved);
-        iSeparatorImageWidth = bitmap->SizeInPixels().iWidth + KGap;
-        return KErrNone;
-        }
-    else
-        {
-        iSeparatorimage = NULL;
-        return KErrNotSupported;
-        }
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::ClearTitles
-// ---------------------------------------------------------
-//
-void CXnNewstickerControl::ClearTitles()
-    {
-    TRAP_IGNORE(iAdapter->StopL());
-    iFirstDrawingTitleIndex = 0;
-    SetBeginningState();
-    iCurrentTitleIndex = -1;
-    // Don't delete just clear the contents
-    for( TInt i = 0; i < iTitles.Count(); ++i )
-        {
-        TRAP_IGNORE( UpdateTitleL( KNullDesC, i ) );
-        }
-    iTextFitInNewstickerRect = EFalse;
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::AppendSvgTitleL
-// ---------------------------------------------------------
-//
-void CXnNewstickerControl::AppendSvgTitleL(const TDesC8& aByteData)
-    {
-    CTitleData* title = CTitleData::NewLC(aByteData);
-    iTitles.AppendL(title);
-    CleanupStack::Pop(title);
-    
-    // if this is the first item
-    if(iTitles.Count() == 1) 
-        {
-        iCurrentTitleIndex = 0;
-        iAdapter->StartL();
-        }
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::InsertSvgTitleL
-// ---------------------------------------------------------
-//
-void CXnNewstickerControl::InsertSvgTitleL(const TDesC8& aByteData, TInt aIndex)
-    {
-    CTitleData* title = CTitleData::NewLC(aByteData);
-    iTitles.InsertL(title, aIndex);
-    CleanupStack::Pop(title);
-    CountIndexAfterInsertL(aIndex);
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::CurrentSvgTitle
-// ---------------------------------------------------------
-//
-const TDesC8& CXnNewstickerControl::CurrentSvgTitle()
-    {
-    if ( iFirstDrawingTitleIndex < 0 || iFirstDrawingTitleIndex >= iTitles.Count() )
-        {
-        return KNullDesC8;
-        }
-    
-    CTitleData* title = iTitles[iFirstDrawingTitleIndex];
-    //  Is it SVG title
-    if (title->IsSvgTitle())
-        {
-        //  Yes, advance the title index
-        iFirstDrawingTitleIndex++;
-        if (iFirstDrawingTitleIndex >= iTitles.Count())
-            {
-            iFirstDrawingTitleIndex = 0;
-            }
 
-        //  Return the data
-        return title->SvgTitleData();
-        }
-
-    //  Not svg title, return empty desc
-    return KNullDesC8;
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::TitleCount
-// ---------------------------------------------------------
-//
-TInt CXnNewstickerControl::TitleCount() const
-    {
-    return iTitles.Count();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::MoveToNext
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::MoveToNextL()
-    {
-    //  If there are no titles, don't do anything.
-    if (!IsVisibleTitles())
-        {
-        return ;
-        }
-    // Skip notification of the first title
-    if ( iCurrentTitleIndex != GetNextTitleWithContent( 0 ) )
-        {
-        iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleScrolled);
-        }
-    // Don't report the last TitleToScroll in case the scroll ended
-    if ( iAdapter->CurrentState() != CXnNewstickerAdapter::EScrollEnded )
-        {    
-        iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleToScroll);
-        }
-    iAdapter->TitleScrolled(iFirstDrawingTitleIndex);
-    if (iAdapter->CurrentState() == CXnNewstickerAdapter::EAnimation)
-        {
-        iCurrentTitleIndex = GetNextTitleWithContent( iCurrentTitleIndex + 1 );
-        iFirstDrawingTitleIndex = iCurrentTitleIndex;
-        }
-    else
-        {
-        iCurrentTitleIndex = GetNextTitleWithContent( iFirstDrawingTitleIndex + 1);
-        iFirstDrawingTitleIndex = iCurrentTitleIndex;
-        }
-
-    //  Check that we are still in range
-    if (iFirstDrawingTitleIndex >= iTitles.Count() || iFirstDrawingTitleIndex < 0)
-        {
-        iFirstDrawingTitleIndex = GetNextTitleWithContent( 0 );
-        iCurrentTitleIndex = iFirstDrawingTitleIndex;
-        }
-
-    SetBeginningState();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::MoveToFirstL
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::MoveToFirstL()
-    {
-    //  If there are no titles, don't do anything.
-    if (!IsVisibleTitles())
-        {
-        return ;
-        }
-    // Something already scrolling, report scroll done
-    if ( iAdapter->CurrentState() == CXnNewstickerAdapter::EText )
-        {
-        iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleScrolled);
-        iAdapter->TitleScrolled(iFirstDrawingTitleIndex);
-        }
-       
-    TInt start = 0; // iIsWestern ? 0 : (iTitles.Count() - 1);
-    
-    iCurrentTitleIndex = GetNextTitleWithContent( start );
-    iFirstDrawingTitleIndex = iCurrentTitleIndex;
-    iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleToScroll);
-    SetBeginningState();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::MoveToLastL
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::MoveToLastL()
-    {
-    //  If there are no titles, don't do anything.
-    if (!IsVisibleTitles())
-        {
-        return ;
-        }
-    // Something already scrolling, report scroll done
-    if ( iAdapter->CurrentState() == CXnNewstickerAdapter::EText )
-        {
-        iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleScrolled);
-        iAdapter->TitleScrolled(iFirstDrawingTitleIndex);
-        }
-    
-    TInt start = iTitles.Count() - 1; // iIsWestern ? (iTitles.Count() - 1) : 0;
-    
-    iCurrentTitleIndex = GetNextTitleWithContent( start, ETrue );
-    iFirstDrawingTitleIndex = iCurrentTitleIndex;
-    iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleToScroll);
-    SetBeginningState();
-    }
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::MoveToPrev
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::MoveToPrevL()
-    {
-    //  If there are no titles, don't do anything.
-    if (!IsVisibleTitles())
-        {
-        return ;
-        }
-    
-    iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleScrolled);
-
-    if (iAdapter->CurrentState() == CXnNewstickerAdapter::EAnimation)
-        {
-        iCurrentTitleIndex = GetNextTitleWithContent( iCurrentTitleIndex - 1, ETrue );        
-        iFirstDrawingTitleIndex = iCurrentTitleIndex;
-        }
-    else
-        {
-        iFirstDrawingTitleIndex = GetNextTitleWithContent( iFirstDrawingTitleIndex - 1, ETrue );
-        iCurrentTitleIndex = iFirstDrawingTitleIndex;
-        }
-    //  Check that we are still in range
-    if (iFirstDrawingTitleIndex >= iTitles.Count() || iFirstDrawingTitleIndex < 0)
-        {
-        iFirstDrawingTitleIndex = GetNextTitleWithContent( iTitles.Count() - 1, ETrue );
-        iCurrentTitleIndex = iFirstDrawingTitleIndex;
-        }
-    
-    iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleToScroll);
-    SetBeginningState();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::MoveToCurrent
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::MoveToCurrent()
-    {
-    //  If there are no titles, don't do anything.
-    if (!IsVisibleTitles())
-        {
-        return ;
-        }
-
-    iFirstDrawingTitleIndex = iCurrentTitleIndex;
-    SetBeginningState();    
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CountIndexAfterInsert
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::CountIndexAfterInsertL(TInt aIndex)
-    {
-    //  Check if the new title was inserted before the first drawing title
-    if (aIndex <= iFirstDrawingTitleIndex)
-        {
-        iCurrentTitleIndex++;
-        iFirstDrawingTitleIndex++;
-        }
-        
-    // if this is the first item
-    if(iTitles.Count() == 1 && GetNextTitleWithContent( 0 ) == 0) 
-        {
-        iCurrentTitleIndex = 0;
-        iFirstDrawingTitleIndex = 0;
-        iAdapter->StartL();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetFont
-// -----------------------------------------------------------------------------
-void CXnNewstickerControl::SetFont(CFont* aFont)
-    {
-    if(iFont != aFont)
-        {
-        for(TInt i = 0; i < iTitles.Count(); i++)
-            {
-            if(!iTitles[i]->IsSvgTitle())
-                {
-                TInt textWidth = aFont->TextWidthInPixels(
-                    iTitles[i]->TitleText());
-                iTitles[i]->SetTitleTextLengthInPixels(textWidth);
-                }
-            }
-        iFont = aFont;
-        iTextBaseline = iContentRect.Height() / 2 + iFont->AscentInPixels() / 2;
-        CBitmapContext* gc = iAdapter->BufferGc();
-        if(gc)
-            {
-            gc->UseFont(aFont);
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetTextColor
-// -----------------------------------------------------------------------------
-void CXnNewstickerControl::SetTextColor(TRgb aColor)
-    {
-    iTextColor = aColor;
-    CBitmapContext* gc = iAdapter->BufferGc();
-    if(gc)
-        {
-        gc->SetPenColor(iTextColor);
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetTextUnderlineStyle
-// -----------------------------------------------------------------------------
-void CXnNewstickerControl::SetTextUnderlineStyle(TFontUnderline aStyle)
-    {
-    iUnderlining = aStyle;
-    CBitmapContext* gc = iAdapter->BufferGc();
-    if(gc)
-        {
-        gc->SetUnderlineStyle(iUnderlining);        
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetTextUnderlineStyle
-// -----------------------------------------------------------------------------
-void CXnNewstickerControl::SetTextStrikethroughStyle(TFontStrikethrough aStyle)
-    {
-    iStrikethrough = aStyle;
-    CBitmapContext* gc = iAdapter->BufferGc();
-    if(gc)
-        {
-        gc->SetStrikethroughStyle(iStrikethrough);        
+        UpdateTitleL( KNullDesC, aIndex );      
         }
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::PrepareToDrawL
-// (other items were commented in a header).
+// CXnNewstickerControl::CurrentTitleIndex
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::PrepareToDrawLtrL()
+TInt CXnNewstickerControl::CurrentTitleIndex() const
     {
-    CBitmapContext* gc = iAdapter->BufferGc();
-    const CFbsBitmap* background = iAdapter->BackgroundBitmap();
-    if(!gc || !background || !IsVisibleTitles() )
-        {
-        return;
-        }
-    iFirstDrawingTitleIndex = GetNextTitleWithContent( iFirstDrawingTitleIndex );
-    if ( iFirstDrawingTitleIndex < 0 || iFirstDrawingTitleIndex >= iTitles.Count() )
-        {
-        return;
-        }
-    if (iTitles[iFirstDrawingTitleIndex]->IsSvgTitle())
-        {
-        //  Show SVG title
-        iAdapter->ShowSvgL();
-        
-    	// Just in case, draw background to d-buffer
-        gc->BitBlt(TPoint(0,0), background);
-        return;
-        }
-
-    CGraphicsContext::TTextAlign alignment = TextAlignment();
-    if ( iTextFitInNewstickerRect || 
-         iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate && iTitles.Count() == 1 )
-        {
-        iAdapter->StopL();
-        SetBeginningState();
-        }
-    
-	TInt drawingPos(-iFirstDrawingOffset);
-
-	// At first, draw background
-    gc->BitBlt(TPoint(0,0), background);
-    TInt textLeft = iTitles[iFirstDrawingTitleIndex]->TitleTextLengthInPixels() - 
-        iFirstDrawingOffset;
-    TInt drawingTitleIndex = iFirstDrawingTitleIndex;
-    TInt drawingOffset(0);
-
-	// Main drawing loop. This loop runs as long as drawing area is not filled
-    // if Scroll behaviour is slide, then short text drawn only once.
-    FOREVER
-        {
-        TRect clipRect(TPoint(drawingPos,0), TPoint(iContentRect.Width(), iContentRect.Height()));
-        if ( iTextFitInNewstickerRect )
-            {
-            clipRect.SetWidth( clipRect.Width()-drawingPos);
-            }
-        // if the rest text fits into visible area
-     	if (textLeft <= iContentRect.Width() - drawingOffset)
-     	    {
-            gc->DrawText(iTitles[drawingTitleIndex]->TitleText(), 
-                   clipRect,
-                   iTextBaseline,
-                   alignment);
-
-     	    TInt drawnLength = iTitles[drawingTitleIndex]->TitleTextLengthInPixels() + KGap;
-            drawingPos += drawnLength;
-     	    drawingOffset = drawingPos;
-            
-            // Update title index, if needed
-     	    drawingTitleIndex++;
-     	    if(drawingTitleIndex >= iTitles.Count())
-     	        {
-     	        drawingTitleIndex = 0;
-     	        if ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::ESlide || iTextFitInNewstickerRect )
-     	            {
-     	            // what a dirty code!
-     	            break;
-     	            }
-     	        }
-            if(iSeparatorimage)
-                {
-                textLeft = 0;
-                }
-            else
-                {
-                if (iTitles[drawingTitleIndex]->IsSvgTitle())
-                    {
-                    return;
-                    }
-                else
-                    {
-                    textLeft = iTitles[drawingTitleIndex]->TitleTextLengthInPixels(); 
-                    }
-                }
-     	    }
-        else 
-            {
-            // Clip the text if needed in alternate mode
-            if  ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate )
-                {
-                HBufC* title = iTitles[drawingTitleIndex]->TitleText().AllocLC();
-                TPtr titlePtr = title->Des();
-                TInt maxLength = iContentRect.Width();
-                AknBidiTextUtils::ConvertToVisualAndClipL(
-                        titlePtr, *iFont, maxLength, maxLength );                              
-                gc->DrawText( titlePtr, clipRect, iTextBaseline, alignment );
-                CleanupStack::PopAndDestroy( title );
-                }
-            else
-                {
-                gc->DrawText(iTitles[drawingTitleIndex]->TitleText(), 
-                        clipRect,
-                        iTextBaseline,
-                        alignment);
-            
-                }            
-     	    break;
-            }
-            
-        if(iSeparatorimage)
-     	    {
-            TInt imageLeft = iSeparatorImageWidth - KGap;
-            
-            // if the rest of the image fits into visible area
- 	        if (imageLeft <= iContentRect.Width() - drawingOffset)
- 	            {
- 	            gc->BitBltMasked(TPoint(drawingPos, 0), iSeparatorimage->Bitmap(), 
- 	                TRect(TPoint(0,0), 
- 	                iSeparatorimage->Bitmap()->SizeInPixels()), iSeparatorimage->Mask(), ETrue); 
-                drawingPos += iSeparatorImageWidth;
-     	        drawingOffset = drawingPos;
-                textLeft = iTitles[drawingTitleIndex]->TitleTextLengthInPixels();
-                if (iTitles[drawingTitleIndex]->IsSvgTitle())
-                    {
-                    return;
-                    }
- 	            }
-            else 
-                {
- 	            gc->BitBltMasked(TPoint(drawingPos, 0), iSeparatorimage->Bitmap(), 
- 	                TRect(TPoint(0,0), iSeparatorimage->Bitmap()->SizeInPixels()), 
- 	                iSeparatorimage->Mask(), ETrue); 
-                break;
-                }
-     	    }
-
-        if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate || 
-			iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate )
-            {
-            break;
-            }
-        }
+    return iCurrentTitleIndex;
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::PrepareToDrawRtlL
-// (other items were commented in a header).
+// CXnNewstickerControl::Title
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::PrepareToDrawRtlL()
+const TDesC& CXnNewstickerControl::Title( TInt aIndex ) const
     {
-    CBitmapContext* gc = iAdapter->BufferGc();
-    const CFbsBitmap* background = iAdapter->BackgroundBitmap();
-    if(!gc || !background || !IsVisibleTitles() )
-        {
-        return;
-        }
-    if ( iFirstDrawingTitleIndex < 0 || iFirstDrawingTitleIndex >= iTitles.Count() )
+    if( aIndex >= 0 && aIndex < iTitleTexts.Count() )
         {
-        return;
-        }
-    if (iTitles[iFirstDrawingTitleIndex]->IsSvgTitle())
-        {
-        //  Show SVG title
-        iAdapter->ShowSvgL();
-        
-    	// Just in case, draw background to d-buffer
-        gc->BitBlt(TPoint(0,0), background);
-        return;
+        return *iTitleTexts[ aIndex ];
         }
 
-    CGraphicsContext::TTextAlign alignment = TextAlignment();
-    if ( iTextFitInNewstickerRect || 
-         iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate && iTitles.Count() == 1 )
-        {
-        SetBeginningState();
-        iAdapter->StopL();
-        }
-    
-	// At first, draw background
-    gc->BitBlt(TPoint(0,0), background);
-    
-    TInt textLeft = iFirstDrawingOffset - 
-        iTitles[iFirstDrawingTitleIndex]->TitleTextLengthInPixels();
-    if(textLeft >= iContentRect.Width() )
-        {
-        textLeft = 0;
-        }
-    TInt drawingTitleIndex = iFirstDrawingTitleIndex;
-    TInt drawingOffset(iContentRect.iBr.iX);
-    
-    TRect clipRect(TPoint(0,0), TPoint(iFirstDrawingOffset, iContentRect.Height()));
-    TInt clipWidth = clipRect.Width();
-	// Main drawing loop. This loop runs as long as drawing area is not filled
-    FOREVER
-        {
-     	// if the rest text fits into visible area
-     	if (textLeft <= drawingOffset)
-     	    {
-     	    HBufC* title = iTitles[drawingTitleIndex]->TitleText().AllocLC();
-     	    TPtr titlePtr = title->Des();
-
-     	    // convert to visual, do not clip
-     	    TInt maxLength = iTitles[drawingTitleIndex]->TitleTextLengthInPixels();
-     	    AknBidiTextUtils::ConvertToVisualAndClipL( titlePtr, *iFont,
-     	                                               maxLength, maxLength );
-   
-            gc->DrawText( titlePtr, clipRect, iTextBaseline, alignment );
-            CleanupStack::PopAndDestroy( title );
-
-     	    TInt drawnLength = iTitles[drawingTitleIndex]->TitleTextLengthInPixels() + KGap;
-            clipWidth -= drawnLength;
-            clipRect.SetWidth(clipWidth);
-            drawingOffset = clipRect.iBr.iX;
+    return KNullDesC;
+    }
 
-            // Update title index
-     	    drawingTitleIndex++;
-     	    if(drawingTitleIndex >= iTitles.Count())
-     	        {
-     	        drawingTitleIndex = 0;
-                if ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::ESlide || iTextFitInNewstickerRect)
-                    {
-                    // what a dirty code!
-                    break;
-                    }
-     	        }
-            if(iSeparatorimage)
-                {
-                textLeft = 0xfff;
-                }
-            else
-                {
-                if (iTitles[drawingTitleIndex]->IsSvgTitle())
-                    {
-                    return;
-                    }
-                else
-                    {
-                    textLeft = iTitles[drawingTitleIndex]->TitleTextLengthInPixels(); 
-                    }
-                }
-     	    }
-        else 
-            {
-            // Clip the text if needed in alternate mode
-            if  ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate )
-                {
-                HBufC* title = iTitles[drawingTitleIndex]->TitleText().AllocLC();
-                TPtr titlePtr = title->Des();
-                TInt maxLength = iContentRect.Width();
-                AknBidiTextUtils::ConvertToVisualAndClipL(
-                        titlePtr, *iFont, maxLength, maxLength );                              
-                gc->DrawText( titlePtr, clipRect, iTextBaseline, alignment );
-                CleanupStack::PopAndDestroy( title );
-                }
-            else
-                {
-                gc->DrawText(iTitles[drawingTitleIndex]->TitleText(), clipRect, 
-                        iTextBaseline, alignment);
-                }
-     	    break;
-            }
-
-        if(iSeparatorimage)
-     	    {
-            TInt imageLeft = iSeparatorImageWidth - KGap;
-            
-            // if the rest of the image fits into visible area
- 	        if (imageLeft <= drawingOffset)
- 	            {
- 	            gc->BitBltMasked(TPoint(clipRect.iBr.iX - imageLeft, 0), 
- 	                iSeparatorimage->Bitmap(), TRect(TPoint(0,0), 
- 	                iSeparatorimage->Bitmap()->SizeInPixels()), 
- 	                iSeparatorimage->Mask(), ETrue);                
-                clipWidth -= iSeparatorImageWidth;
-                clipRect.SetWidth(clipWidth);
-                drawingOffset = clipRect.iBr.iX;                
-                textLeft = iTitles[drawingTitleIndex]->TitleTextLengthInPixels();
-                if (iTitles[drawingTitleIndex]->IsSvgTitle())
-                    {
-                    return;
-                    }
- 	            }
-            else 
-                {
- 	            gc->BitBltMasked(TPoint(clipRect.iBr.iX - imageLeft, 0), 
- 	                iSeparatorimage->Bitmap(), TRect(TPoint(0,0), 
- 	                iSeparatorimage->Bitmap()->SizeInPixels()), 
- 	                iSeparatorimage->Mask(), ETrue); 
-                break;
-                }
-     	    }
-     	    
-        if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate || 
-			iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate )     	    
-            {
-            break;
-            }     	    
+// -----------------------------------------------------------------------------
+// CXnNewstickerControl::ClearTitles
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerControl::ClearTitles()
+    {
+    iAdapter->Stop();
+    iCurrentTitleIndex = -1;
+    // Don't delete just clear the contents
+    for( TInt i=0; i < iTitleTexts.Count(); i++ )
+        {
+        TRAP_IGNORE( UpdateTitleL( KNullDesC, i ) );
         }
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::DoScrollL
-// (other items were commented in a header).
+// CXnNewstickerControl::TitleCount
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::DoScrollL()
+TInt CXnNewstickerControl::TitleCount() const
     {
-    //  If there are no titles, don't do anything.
-    if( !IsVisibleTitles() || iFirstDrawingTitleIndex < 0 || 
-            iFirstDrawingTitleIndex >= iTitles.Count() )
-        {
-        return;
-        }
-    
-    iAdapter->DrawNow();
-    
-    if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScroll ||
-        iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::ESlide ||
-		( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate &&
-		  !CalculateCurrentTextFitInNewstickerRect() ) )
-        {    
-        iAdapter->SetTimerToScrolltime();             
-        iFirstDrawingOffset += iSpeed; // advance text
-        TInt titleLen = iTitles[iFirstDrawingTitleIndex]->TitleTextLengthInPixels() + 
-            iSeparatorImageWidth;
-
-        // if 100% (or more) has been drawn update...
-        if ((iIsWestern && iFirstDrawingOffset >= titleLen) ||
-            (!iIsWestern && iFirstDrawingOffset - titleLen >= iContentRect.Width()))
-            {
-            iAdapter->TitleScrolled(iFirstDrawingTitleIndex);
-            iFirstDrawingTitleIndex = GetNextTitleWithContent( iFirstDrawingTitleIndex + 1);
-            if(iFirstDrawingTitleIndex >= iTitles.Count())
-     	        {
-     	        iFirstDrawingTitleIndex = GetNextTitleWithContent( 0 );
-                if (iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::ESlide )
-                    {
-                    if ( iIsWestern )
-                        {
-                        iFirstDrawingOffset = -(iContentRect.iBr.iX-iContentRect.iTl.iX-KGap);
-                        }
-                    else
-                        {
-                        iFirstDrawingOffset = 0;
-                        }
-                    }
-                else
-                    {
-                    iFirstDrawingOffset -= titleLen + KGap;
-                    }
-     	        }
-            else
-                {
-                iFirstDrawingOffset -= titleLen + KGap;
-                }
-            iCurrentTitleIndex = iFirstDrawingTitleIndex;
-
-            if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate &&
-		        CalculateCurrentTextFitInNewstickerRect() )
-                {
-                MoveToNextL();
-                }
-            }
-        // but if less than 100% and more than 75% has been drawn, update only current title index.
-        else if (((iIsWestern && iFirstDrawingOffset >= titleLen * 0.75) || 
-                  (!iIsWestern && iFirstDrawingOffset - titleLen >= iContentRect.iBr.iX * 0.75)) &&
-                   iFirstDrawingTitleIndex == iCurrentTitleIndex)
-            {
-            iCurrentTitleIndex++;
-     	    if(iCurrentTitleIndex >= iTitles.Count())
-     	        {
-     	        iCurrentTitleIndex = 0;
-     	        }
-     	    iCurrentTitleIndex = GetNextTitleWithContent( iCurrentTitleIndex );
-
-            if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate &&
-		        CalculateCurrentTextFitInNewstickerRect() )
-                {
-                MoveToNextL();
-                }
-            }
-        }
-    else if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate &&
-		     CalculateCurrentTextFitInNewstickerRect() )
-        {
-        iAdapter->SetTimerToDisplaytime();
-        MoveToNextL();
-        }
-    else
-        {
-        MoveToNextL();
-        }        
+    return iTitleTexts.Count();
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::Draw
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::Draw()
-    {
-    if( IsVisibleTitles() > 0 ) 
-        {
-        if( iIsWestern )
-            {
-            TRAP_IGNORE( PrepareToDrawLtrL() );
-            }
-        else
-            {
-            TRAP_IGNORE( PrepareToDrawRtlL() );
-            }
-        }    
-    else
-        {
-        CBitmapContext* gc = iAdapter->BufferGc();
-        const CFbsBitmap* background = iAdapter->BackgroundBitmap();
-        if ( gc && background )
-            {            
-            gc->BitBlt(TPoint(0,0), background);
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::DrawStatic
+// CXnNewstickerControl::SelectTitle
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::DrawStatic()
+const TDesC& CXnNewstickerControl::SelectTitle()
     {
-    // draw to buffer gc
-    CBitmapContext* gc = iAdapter->BufferGc();
-    const CFbsBitmap* background = iAdapter->BackgroundBitmap();
-    if( !gc || !background || !IsVisibleTitles() )
-        {
-        return;
-        }
-    gc->BitBlt( TPoint(0,0), background );
-    
-    // Get the last title
-    TInt index = GetNextTitleWithContent( iTitles.Count() - 1, ETrue );
-    const TDesC& title = Title( index );
+    if( IsVisibleTitles() ) 
+        { 
+        if( iCurrentTitleIndex < 0 || iCurrentTitleIndex >= iTitleTexts.Count() )
+            {
+            // Get the last title
+            TInt index = 
+                    GetNextTitleWithContent( iTitleTexts.Count() - 1, ETrue );
+            iCurrentTitleIndex = index;
+            }
+        
+        return Title( iCurrentTitleIndex );
+        }  
     
-    // truncate text if needed
-    HBufC* visualText = HBufC::New(title.Length() + KAknBidiExtraSpacePerLine);
-    if (visualText)
-        {
-        TPtr visualTextPtr(visualText->Des());
-        TInt maxLength = iContentRect.Width();
-        AknBidiTextUtils::ConvertToVisualAndClip(
-                     title, visualTextPtr, *iFont, maxLength, maxLength );
-            
-        TRect blitRect( 0, 0, iContentRect.Width(), iContentRect.Height() );
-        gc->DrawText( *visualText, blitRect, iTextBaseline, TextAlignment() );
-        delete visualText;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetBeginningState
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::SetBeginningState()
-    {
-    iFirstDrawingOffset = 0;
-    if(!iIsWestern)
-        {
-        iFirstDrawingOffset = iContentRect.Width();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetScrollLooping
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::SetScrollLooping( TBool aLoop )
-    {
-    iScrollLooping = aLoop;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::ScrollLooping
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CXnNewstickerControl::ScrollLooping()
-    {
-    return iScrollLooping;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::TextFitInNewstickerRect
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CXnNewstickerControl::TextFitInNewstickerRect()
-    {
-    return iTextFitInNewstickerRect; 
+    return KNullDesC;
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::CalculateTextFitInNewstickerRect
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CXnNewstickerControl::CalculateTextFitInNewstickerRect()
-    {
-    if ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::ESlide &&
-         iTitles.Count() == 1 )
-        {
-        const TInt count = iTitles.Count();
-        TInt textWidth=0;
-        const TInt rectWidth = iContentRect.Width();
-        for (TInt i=0; i<count && textWidth<rectWidth;i++)
-            {
-            textWidth += iTitles[i]->TitleTextLengthInPixels();
-            }
-        iTextFitInNewstickerRect = (textWidth<rectWidth);
-        }
-    else
-        {
-        iTextFitInNewstickerRect = EFalse;
-        }
-    return iTextFitInNewstickerRect;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CalculateCurrentTextFitInNewstickerRect
-// (other items were commented in a header).
+// CXnNewstickerControl::GetNextTitleWithContent
 // -----------------------------------------------------------------------------
 //
-TBool CXnNewstickerControl::CalculateCurrentTextFitInNewstickerRect()
-    {
-    if ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate )
-        {
-        const TInt count = iTitles.Count();
-        TInt textWidth=0;
-        const TInt rectWidth = iContentRect.Width();
-        if( iCurrentTitleIndex >= 0 && iCurrentTitleIndex < count )
-            {
-            textWidth = iTitles[iCurrentTitleIndex]->TitleTextLengthInPixels();
-            }
-        return ( textWidth < rectWidth );
-        }
-    return EFalse;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetTextAlignment
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::SetTextAlignment(TInt aAlignment)
-    {
-    iTextAlignment = aAlignment;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::TextAlignment
-// if title fits to the drawing rect and scrolling behaviour is ESlide then 
-// use alignment value 
-// if scroll behaviour is alternate then use alignment value
-// otherwise return ELeft in western and ERight on AH
-// -----------------------------------------------------------------------------
-//
-CGraphicsContext::TTextAlign CXnNewstickerControl::TextAlignment()
-    {
-    CGraphicsContext::TTextAlign alignment = iIsWestern ? CGraphicsContext::ELeft : CGraphicsContext::ERight;
-    
-    if ( iTextFitInNewstickerRect || iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate ||
-         ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate && 
-           CalculateCurrentTextFitInNewstickerRect() ) )
-        {
-        switch( iTextAlignment )
-            {
-            default:
-            case ELayoutAlignLeft:
-                alignment = CGraphicsContext::ELeft;
-                break;
-            case ELayoutAlignRight:
-                alignment = CGraphicsContext::ERight;
-                break;
-            case ELayoutAlignCenter:
-                alignment = CGraphicsContext::ECenter;
-                break;
-            }
-        }
-    return alignment;
-    }
-
-TInt CXnNewstickerControl::GetNextTitleWithContent( TInt aStartSearch, TBool aBackwards )
+TInt CXnNewstickerControl::GetNextTitleWithContent( TInt aStartSearch, 
+        TBool aBackwards ) const
     {
     TInt dir = 1;
-    if ( aBackwards )
+    if( aBackwards )
         {
         dir = -1;
         }
-    for( TInt i = aStartSearch; i < iTitles.Count() && i >= 0; i += dir )
+    
+    for( TInt i = aStartSearch; i < iTitleTexts.Count() && i >= 0; i += dir )
         {
-        if ( iTitles[i]->TitleTextLengthInPixels() != 0 )
+        if( iTitleTexts[i]->Compare( KNullDesC ) != KErrNone )
             {
             return i;
             }
         }
+    
     return aStartSearch;
     }
 
-TBool CXnNewstickerControl::IsVisibleTitles()
+// -----------------------------------------------------------------------------
+// CXnNewstickerControl::SetCurrentTitle
+// -----------------------------------------------------------------------------
+//
+TBool CXnNewstickerControl::SetCurrentTitle( TBool aSetDefault )
     {
-    for( TInt i = 0; i < iTitles.Count() ; ++i )
+    TBool ret( EFalse );
+    TInt lastIndex( iTitleTexts.Count() - 1 );
+    
+    if( aSetDefault )
+        {
+        iCurrentTitleIndex = GetNextTitleWithContent( lastIndex, ETrue );
+        }
+    else if( iCurrentTitleIndex >= lastIndex )
+        {
+        iCurrentTitleIndex = GetNextTitleWithContent( 0 );
+        }
+    else
         {
-        if ( iTitles[i]->TitleTextLengthInPixels() != 0 )
+        iCurrentTitleIndex = GetNextTitleWithContent( iCurrentTitleIndex + 1 );
+        }
+    
+    if( iCurrentTitleIndex == lastIndex)
+        {
+        ret = ETrue;
+        }
+    
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnNewstickerControl::IsVisibleTitles
+// -----------------------------------------------------------------------------
+//
+TBool CXnNewstickerControl::IsVisibleTitles() const
+    {
+    for( TInt i=0; i < iTitleTexts.Count(); i++ )
+        {
+        if( iTitleTexts[i]->Compare( KNullDesC ) != KErrNone )
             {
             return ETrue;
             }
         }
+    
     return EFalse;
     }
 
--- a/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickerfactory.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickerfactory.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -116,7 +116,8 @@
 const TImplementationProxy ImplementationTable[] =
     {
 #ifdef __EABI__ 
-	IMPLEMENTATION_PROXY_ENTRY(AI3_UID_RENDERING_PLUGIN_NEWSTICKERFACTORY_IMPLEMENTATION, CXnNewstickerFactory::NewL) 
+	IMPLEMENTATION_PROXY_ENTRY(AI3_UID_RENDERING_PLUGIN_NEWSTICKERFACTORY_IMPLEMENTATION,
+	        CXnNewstickerFactory::NewL) 
 #else
     {{AI3_UID_RENDERING_PLUGIN_NEWSTICKERFACTORY_IMPLEMENTATION}, CXnNewstickerFactory::NewL}
 #endif
--- a/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickersvgcontrol.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/*
-* Copyright (c) 2002-2006 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:  Text scrolling functionality.
-*
-*/
-
-
-// INCLUDE FILES
-#include <SVGEngineInterfaceImpl.h>
-
-#include "xnnewstickersvgcontrol.h"
-#include "xnnewstickeradapter.h"
-
-   
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerSvgControl::CXnNewstickerSvgControl
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerSvgControl::CXnNewstickerSvgControl(CXnNewstickerAdapter* aAdapter) :
-    iAdapter(aAdapter)
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerSvgControl::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerSvgControl::ConstructL()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerSvgControl::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerSvgControl* CXnNewstickerSvgControl::NewL(CXnNewstickerAdapter* aAdapter)
-    {
-    CXnNewstickerSvgControl* self = new(ELeave)CXnNewstickerSvgControl(aAdapter);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop();    
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerSvgControl::~CXnNewstickerSvgControl()
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerSvgControl::~CXnNewstickerSvgControl()
-    {
-    delete iBitmap;
-	delete iMaskBitmap;
-	if(iSVGEngine)
-	    {
-	    iSVGEngine->Destroy();
-		delete iSVGEngine;
-	    }
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerSvgControl::StartL
-// ---------------------------------------------------------
-//
-void CXnNewstickerSvgControl::StartL(const TDesC8& aSvgData)
-    {
-    iHasContent = ETrue;
-    if(!iSVGEngine)
-        {        
-    	TFontSpec fspec;
-    	iSVGEngine = CSvgEngineInterfaceImpl::NewL(iBitmap,this, fspec);
-	    }
-
-	MSvgError* error = iSVGEngine->Load(aSvgData);
-	User::LeaveIfError(error->SystemErrorCode());
-
-	// Get the size of the bitmap and set the SVG size to match
- 	TSize tmpsize = iBitmap->SizeInPixels();
- 	iSVGEngine->SetSvgDimensionToFrameBuffer(tmpsize.iWidth, tmpsize.iHeight);
-    iSVGEngine->SetBackgroundColor(0x00FFFFFF, NULL);
-	iSVGEngine->Start();
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerSvgControl::StopL
-// ---------------------------------------------------------
-//
-void CXnNewstickerSvgControl::StopL()
-    {
-    iHasContent = EFalse;
-    if(iSVGEngine)
-	    {
-		iSVGEngine->Stop();
-	    }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerSvgControl::SetSvgRectL
-// Set visible rect.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerSvgControl::SetSvgRectL(TRect& aContentRect, CGraphicsDevice& aDevice )
-    {
-    iContentRect = aContentRect;    
-	
-	TDisplayMode displayMode = aDevice.DisplayMode();
-    
-    if(iBitmap)
-        {
-        delete iBitmap;
-        iBitmap = NULL;
-        }
-    iBitmap = new (ELeave) CFbsBitmap();
- 	iBitmap->Create(iContentRect.Size(),displayMode);
-
-    if(iMaskBitmap)
-        {
-        delete iMaskBitmap;
-        iMaskBitmap = NULL;
-        }
-    iMaskBitmap = new (ELeave) CFbsBitmap();
- 	iMaskBitmap->Create(iContentRect.Size(),EGray256);
- 	
- 	if(iSVGEngine && iHasContent)
-        {
-        iSVGEngine->SetFrameBuffer(iBitmap);
-    	TSize tmpsize = iBitmap->SizeInPixels();
-    	iSVGEngine->SetSvgDimensionToFrameBuffer(tmpsize.iWidth, tmpsize.iHeight);
-        }
-    }
- 
-// -----------------------------------------------------------------------------
-// CXnNewstickerSvgControl::Draw
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerSvgControl::Draw() const
-    {       
-    TPoint point(iContentRect.iTl);
-    iAdapter->BufferGc()->BitBlt(TPoint(0,0), iAdapter->BackgroundBitmap());
-    iAdapter->BufferGc()->BitBltMasked(TPoint(0,0), iBitmap, 
-        TRect(iBitmap->SizeInPixels()), iMaskBitmap, ETrue);   
-    }
-
-// ---------------------------------------------------------------------------
-// From class MSvgRequestObserver.
-// CXnNewstickerSvgControl::UpdateScreen
-// ---------------------------------------------------------------------------
-//
-void CXnNewstickerSvgControl::UpdateScreen()
-    {
-	iSVGEngine->GenerateMask(iMaskBitmap, NULL);
-    
-    iAdapter->DrawNow();
-    }
-
-// ---------------------------------------------------------------------------
-// From class MSvgRequestObserver.
-// CXnNewstickerSvgControl::ScriptCall
-// ---------------------------------------------------------------------------
-//
-TBool  CXnNewstickerSvgControl::ScriptCall(
-    const TDesC& /*aScript*/,
-    CSvgElementImpl* /*aCallerElement*/)
-    {
-	return EFalse;
-    }
-
-// ---------------------------------------------------------------------------
-// From class MSvgRequestObserver.
-// CXnNewstickerSvgControl::FetchImage
-// ---------------------------------------------------------------------------
-//
-TInt CXnNewstickerSvgControl::FetchImage(
-    const TDesC& /*aUri*/,
-    RFs& /*aSession*/,
-    RFile& /*aFileHandle*/)
-    {
-	return KErrNotFound;
-    }
-
-// ---------------------------------------------------------------------------
-// From class MSvgRequestObserver.
-// CXnNewstickerSvgControl::FetchFont
-// ---------------------------------------------------------------------------
-//
-TInt CXnNewstickerSvgControl::FetchFont(
-    const TDesC& /*aUri*/,
-    RFs& /*aSession*/,
-    RFile& /*aFileHandle*/)
-    {
-	return KErrNotFound;
-    }
-
-// ---------------------------------------------------------------------------
-// From class MSvgRequestObserver.
-// CXnNewstickerSvgControl::UpdatePresentation
-// ---------------------------------------------------------------------------
-//
-void CXnNewstickerSvgControl::UpdatePresentation(const TInt32&  /*aNoOfAnimation*/)
-    {
-    }
-
-//  End of File  
--- a/idlehomescreen/xmluirendering/renderingplugins/xnvolumecontrolfactory/src/xnvolumecontroladapter.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnvolumecontrolfactory/src/xnvolumecontroladapter.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -155,7 +155,7 @@
 	if( aValue >= minRange && aValue <= maxRange )
 		{		    	
 		CXnDomStringPool& sp = iNode.UiEngineL()->StringPool();		
-		CXnDomPropertyValue* value = CXnDomPropertyValue::NewL( sp );
+		CXnDomPropertyValue* value = CXnDomPropertyValue::NewL( &sp );
 		CleanupStack::PushL( value );
 		value->SetFloatValueL( CXnDomPropertyValue::ENumber, aValue );
 		CXnProperty* valueProperty = CXnProperty::NewL( XnPropertyNames::action::KValue, value, sp );
@@ -184,7 +184,7 @@
 	CXnDomStringPool& sp = iNode.UiEngineL()->StringPool();
 	
 	// Set min value property
-	CXnDomPropertyValue* minValue = CXnDomPropertyValue::NewL( sp );
+	CXnDomPropertyValue* minValue = CXnDomPropertyValue::NewL( &sp );
 	CleanupStack::PushL( minValue );
 	minValue->SetFloatValueL( CXnDomPropertyValue::ENumber, aMinimumValue );
 	CXnProperty* minValueProperty = CXnProperty::NewL( XnPropertyNames::volumecontrol::KMinRange, minValue, sp );
@@ -194,7 +194,7 @@
 	CleanupStack::Pop( minValueProperty );
 
 	// Set max value property
-	CXnDomPropertyValue* maxValue = CXnDomPropertyValue::NewL( sp );
+	CXnDomPropertyValue* maxValue = CXnDomPropertyValue::NewL( &sp );
 	CleanupStack::PushL( maxValue );
 	maxValue->SetFloatValueL( CXnDomPropertyValue::ENumber, aMaximumValue );
 	CXnProperty* maxValueProperty = CXnProperty::NewL( XnPropertyNames::volumecontrol::KMaxRange, maxValue, sp );
@@ -249,7 +249,7 @@
     if( aProperty->Property()->Name() == XnPropertyNames::volumecontrol::KVolumeLevelAdjustment )
     	{
     	CXnDomStringPool& sp = iNode.UiEngineL()->StringPool();
-    	CXnDomPropertyValue* value = CXnDomPropertyValue::NewL( sp );
+    	CXnDomPropertyValue* value = CXnDomPropertyValue::NewL( &sp );
     	CleanupStack::PushL( value );
     	
     	const TDesC8& strValue = aProperty->StringValue();
--- a/idlehomescreen/xmluirendering/uiengine/group/xnlayoutengine.mmp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/group/xnlayoutengine.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -85,6 +85,7 @@
 SOURCE    xninactivitymonitor.cpp 
 SOURCE    xnfocuscontrol.cpp
 SOURCE    xnextrenderingpluginwrapper.cpp
+SOURCE    xnbackgroundmanager.cpp
 
 START RESOURCE  xnuiengine.rss
 HEADER
@@ -147,6 +148,8 @@
 LIBRARY    hscontentinfo.lib
 LIBRARY    hsccproviderclient.lib
 LIBRARY    extrenderingplugin.lib
+LIBRARY    disknotifyhandler.lib
+LIBRARY	   platformenv.lib
 
 #if defined(_XN3_DEBUG_) || defined(AI3_DEBUG_PERFORMANCE)
 LIBRARY    flogger.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/xmluirendering/uiengine/inc/xnbackgroundmanager.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Background manager
+*
+*/
+
+#ifndef CXNBACKGROUNDMANAGER_H
+#define CXNBACKGROUNDMANAGER_H
+
+// System includes
+#include <coecntrl.h>
+#include <aknssrvclient.h>
+#include <coeview.h>
+#include <disknotifyhandler.h>
+
+// CLASS DECLARATION
+class CXnViewManager;
+class CXnViewData;
+class CAknsLayeredBackgroundControlContext;
+
+namespace hspswrapper
+    {
+    class CHspsWrapper;
+    }
+
+using namespace hspswrapper;
+
+/**
+*  Background manager.
+*
+*  @since S60 v5.0
+*/
+NONSHARABLE_CLASS( CXnBackgroundManager ) : public CCoeControl,
+    public MAknsSkinChangeObserver, public MCoeViewActivationObserver,
+    public MDiskNotifyHandlerCallback
+    {
+public:
+
+    /**
+     * Two-phased constructor.
+     * @param aWrapper HSPS wrapper
+     * @return new instance of CXnWallpaperView.
+     */
+    static CXnBackgroundManager* NewL( CXnViewManager& aViewManager, CHspsWrapper& aWrapper );
+
+    /**
+     * Destructor.
+     */
+    ~CXnBackgroundManager();
+
+    /**
+     * Caches wallpaper image.
+     * 
+     * @since S60 5.0
+     * @param aFileName WallpaperImage image path and filename to be cached
+     * @return Error code.
+     */            
+    TInt CacheWallpaperL( const TDesC& aFileName, CXnViewData& aViewData );
+
+    /**
+     * Changes wallpaper image of the current page.
+     * 
+     * @since S60 5.0
+     * @param aFileName WallpaperImage image path and filename
+     */            
+    void AddWallpaperL( const TDesC& aFileName );
+
+    /**
+     * Checks whether page specific wallpaper feature is activated or not.
+     *  
+     * @since S60 5.0
+     */
+    TBool ActivatedL();
+
+    /**
+     * Shows wallpaper change dialog
+     * 
+     * @since S60 5.0
+     */
+    void SetWallpaperL();
+
+    /**
+     * Handles wallpaper changing in page change
+     * 
+     * @since S60 5.0
+     * @param aOldView         Old view
+     * @param aNewView         New view 
+     */
+    void WallpaperChanged( CXnViewData& aOldView, CXnViewData& aNewView );
+   
+private: // Functions from base classes    
+
+    /**
+     * see CCoeControl 
+     */
+    void Draw(const TRect& aRect) const;  
+
+    /**
+     * see CCoeControl 
+     */
+    void SizeChanged();
+
+    /**
+     * see MAknsSkinChangeObserver 
+     */
+    void SkinContentChanged();
+    
+    /**
+     * see MAknsSkinChangeObserver 
+     */
+    void SkinConfigurationChanged(
+        const TAknsSkinStatusConfigurationChangeReason aReason );
+    
+    /**
+     * see MAknsSkinChangeObserver 
+     */
+    void SkinPackageChanged(
+        const TAknsSkinStatusPackageChangeReason aReason );
+
+    /**
+     * @see MCoeViewActivationObserver
+     */
+    void HandleViewActivation( const TVwsViewId& aNewlyActivatedViewId, 
+        const TVwsViewId& aViewIdToBeDeactivated );
+
+    /**
+    * From MDiskNotifyHandlerCallback.
+    */
+    void HandleNotifyDisk( TInt aError, const TDiskEvent& aEvent );
+    
+private:
+    
+    /**
+     * C++ default constructor.
+     */
+    CXnBackgroundManager( CXnViewManager& aViewManager, CHspsWrapper& aWrapper );
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL();
+
+    void SaveWallpaperL();
+    TInt SetSettingPropertyL( const TDesC8& aPluginId, const TDesC8& aItemId,
+        const TDesC8& aPropertyName, const TDesC8& aPropertyValue );
+    void UpdateWallpapersL();
+    void CleanCache();
+    void RemoveWallpaperL( CXnViewData& aViewData );
+    void RemoveWallpaperFromCache( const TDesC& aFileName );
+    void RemovableDiskInsertedL();
+    void CheckFeatureTypeL();
+    void AddPageSpecificWallpaperL( const TDesC& aFileName );
+    void AddCommonWallpaperL( const TDesC& aFileName, TBool aSave = ETrue );
+    void ReadWallpaperFromCenrepL();
+
+private: // data
+
+    /**
+     * Provides needed services
+     */
+    CXnViewManager& iViewManager;
+    
+    /** 
+     * Hsps wrapper 
+     */
+    CHspsWrapper& iHspsWrapper;
+    
+    /** 
+     * skin server to detect when wallpaper has changed 
+     * Own.
+     */
+    RAknsSrvSession iSkinSrv;
+
+    /**
+     * File server session.
+     * Own.
+     */
+    RFs iFsSession;
+
+    /**
+     * Notifier for disk drive status changes.
+     * Own.
+     */
+    CDiskNotifyHandler* iDiskNotifier;
+
+    /** 
+     * Background control context. 
+     * Own. 
+     */    
+    CAknsLayeredBackgroundControlContext* iBgContext;
+    
+    /** 
+     * Current view rect, which is basically the whole screen.
+     */        
+    TRect iRect;
+
+    /** 
+     * States whether page specific wallpaper is supported or
+     * same wallpaper is shown in all pages.
+     */
+    TBool iFeatureSuppoted;
+
+    /** 
+     * Internal wallpaper update in progress
+     */
+    TInt iIntUpdate;
+        
+    /** 
+     * States whether transparent CBA and status pane is used. 
+     * Homescreen uses transparency, but e.g. Widget catalog does not.
+     */
+    TBool iTransparencyEnabled;
+
+    /** 
+     * Pointer to wallpaper image. This is used only if same wallpaper 
+     * is shared among all HS pages.
+     * Own. 
+     */   
+    CFbsBitmap* iBgImage;
+    
+    /** 
+     * Path of the wallpaper image, including filename. 
+     * This is used only if same wallpaper 
+     * is shared among all HS pages.
+     * Own. 
+     */  
+    HBufC* iBgImagePath;
+
+    };
+
+#endif      // CXNBACKGROUNDMANAGER_H
+
+// End of File
--- a/idlehomescreen/xmluirendering/uiengine/inc/xnbgcontrol.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/inc/xnbgcontrol.h	Mon Jan 18 20:10:36 2010 +0200
@@ -103,8 +103,6 @@
 private:
     // data
     
-    /** Background control context, Owned */    
-    CAknsLayeredBackgroundControlContext* iBgContext;
     /** Compound Control, Not owned */
     CCoeControl* iControl;
     };
--- a/idlehomescreen/xmluirendering/uiengine/inc/xneditor.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/inc/xneditor.h	Mon Jan 18 20:10:36 2010 +0200
@@ -38,6 +38,7 @@
 class CXnViewManager;
 class CXnViewData;
 class CRepository;
+class CXnBackgroundManager;
 
 namespace hspswrapper
     {
@@ -194,6 +195,14 @@
      */    
     TInt IdFromCrep ( TDes8& aUid ) const;
 
+    /**
+     * Returns the Background manager object owned by this.
+     * 
+     * @since S60 5.0
+     * @return BgManager
+     */
+    CXnBackgroundManager& BgManager() const;
+
 private:
     // from MHsContentController
     
@@ -214,7 +223,11 @@
     TInt ActivateViewL( CHsContentInfo& aInfo );
     
     TInt ActivateAppL( CHsContentInfo& aInfo );
+
+    TInt ActiveViewL( CHsContentInfo& aInfo );
     
+    TInt ActiveAppL( CHsContentInfo& aInfo );
+
 private:
     // constructors
     
@@ -297,6 +310,8 @@
     CHspsWrapper* iHspsWrapper;  
     /** CPS wrapper, owned */
     CCpsWrapper* iCpsWrapper;
+    /** Provides background services, owned */    
+    CXnBackgroundManager* iBgManager;
     /** Publisher map, owned */
     CPublisherMap* iPublisherMap;
     /** Add widget listquery, not owned */
--- a/idlehomescreen/xmluirendering/uiengine/inc/xnviewdata.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/inc/xnviewdata.h	Mon Jan 18 20:10:36 2010 +0200
@@ -24,6 +24,7 @@
 
 // Forward declarations
 class CXnViewManager;
+class CFbsBitmap;
 
 // Constants
 
@@ -201,18 +202,54 @@
     CXnNode* ViewNode() const;
 
     /**
+     * Set wallpaper image. Ovnership is transferred.
+     * 
+     * @param aBitmap Background image file name.
+     */
+    void SetWallpaperImage( CFbsBitmap* aBitmap );
+
+    /**
+     * Get background image. Ovnership is NOT transferred. 
+     * 
+     * @return Pointer to background image. 
+     *         Returns NULL if image has not been set.
+     */
+    CFbsBitmap* WallpaperImage() const;
+
+    /**
+     * Set path of the wallpaper image.
+     * 
+     * @param aFileName Image path, including file name.
+     */
+    void SetWallpaperImagePathL( const TDesC& aFileName );
+    
+    /**
+     * Get the path of wallpaper image.
+     * 
+     * @return Image path, including file name. 
+     *         Returns KNullCDes if wallpaper has not been set.
+     */
+    const TDesC& WallpaperImagePath() const;
+
+    /**
      * Sets view's locking_status attribute (locked/none) to determine if view
      * is prevented from removing/deleting or not
      * 
      * @param aLockingStatusString attr. locking_status ("locked"/"none")
      */
     void SetLockingStatus( const TDesC8& aLockingStatusString );
+    
 private:
     // data                              
     
     /** Focused Node, Not owned */
     CXnNode* iFocusedNode;
 
+    /** Pointer to wallpaper image, Owned */    
+    CFbsBitmap* iBgImage;
+    
+    /** Path of the wallpaper image, including filename */    
+    HBufC* iBgImagePath;
     };
 
 #include "xnviewdata.inl"
--- a/idlehomescreen/xmluirendering/uiengine/src/xnappuiadapter.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnappuiadapter.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -60,7 +60,7 @@
     User::AllocSize( start );
 #endif //_XN_PERFORMANCE_TEST_
 
-    CAknViewAppUi::BaseConstructL( EAknEnableSkin | EAknEnableMSK );
+    CAknViewAppUi::BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible );
 
     CAknToolbar* toolbar( CurrentFixedToolbar() );
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnbackgroundmanager.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,794 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Background manager.
+*
+*/
+
+
+// INCLUDE FILES
+#include "xnbackgroundmanager.h"
+#include "hspswrapper.h"
+#include "xnviewmanager.h"
+#include "xnviewdata.h"
+#include "xnplugindefs.h"
+#include "hspssapi.h"
+#include "xnappuiadapter.h"
+#include "xnwallpaperview.h"
+#include "xnrootdata.h"
+
+// SYSTEM INCLUDE FILES
+#include <aknlistquerydialog.h> 
+#include <xnuiengine.rsg>
+#include <aknskinsinternalcrkeys.h>
+#include <activeidle2domaincrkeys.h>
+#include <aknswallpaperutils.h>
+#include <imageconversion.h>
+#include <bitmaptransforms.h>
+
+#include <aknsutils.h>
+#include <aknsdrawutils.h>
+#include <aknscontrolcontext.h>
+#include <aknslayeredbackgroundcontrolcontext.h>
+#include <driveinfo.h>
+
+using namespace hspswrapper;
+
+_LIT8( KSingle, "single" );
+const TUid KDummyUid = { 0x0000000 };
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CXnBackgroundManager::CXnBackgroundManager( CXnViewManager& aViewManager, CHspsWrapper& aWrapper )
+    : iViewManager( aViewManager ), 
+      iHspsWrapper( aWrapper ),
+      iTransparencyEnabled( ETrue )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Symbian 2nd phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CXnBackgroundManager::ConstructL()
+    {
+    // Register for view activation & deactivation
+    iViewManager.AppUiAdapter().AddViewActivationObserverL( this );
+    
+    CreateWindowL();
+
+    iBgContext = CAknsLayeredBackgroundControlContext::NewL(
+            KAknsIIDQsnBgScreenIdle, TRect(), ETrue, 1 );
+
+    TRect bgRect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, bgRect );
+    SetRect( bgRect );
+
+    Window().SetOrdinalPosition( -1 );
+
+    MakeVisible( ETrue );
+    ActivateL();
+    iIntUpdate = 0;
+    User::LeaveIfError( iSkinSrv.Connect( this ) );
+    iSkinSrv.EnableSkinChangeNotify();  
+    
+    // Start listening for drive events.
+    User::LeaveIfError( iFsSession.Connect() );
+    
+    // Start listening file server notifications.
+    iDiskNotifier = CDiskNotifyHandler::NewL( *this, iFsSession );
+    User::LeaveIfError( iDiskNotifier->NotifyDisk() );
+    
+    // Reads from cenrep wheteher page specific wallpaper is enabled or not
+    CheckFeatureTypeL();
+    }
+
+// -----------------------------------------------------------------------------
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CXnBackgroundManager* CXnBackgroundManager::NewL( CXnViewManager& aViewManager, 
+    CHspsWrapper& aWrapper )
+    {
+    CXnBackgroundManager* self = new (ELeave) CXnBackgroundManager( aViewManager, 
+        aWrapper );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CXnBackgroundManager::~CXnBackgroundManager()
+    {
+    CleanCache();
+    iSkinSrv.Close();
+    delete iDiskNotifier;
+    iFsSession.Close();
+    delete iBgContext;
+    delete iBgImage;
+    delete iBgImagePath;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnBackgroundManager::Draw
+// -----------------------------------------------------------------------------
+//    
+void CXnBackgroundManager::Draw(const TRect& aRect) const
+    {
+    if( iTransparencyEnabled )
+        {
+        if( iFeatureSuppoted )
+            {
+            CXnViewData& viewData( iViewManager.ActiveViewData() );
+            CFbsBitmap* wallpaper = viewData.WallpaperImage();
+            if( wallpaper )
+                {
+                SystemGc().BitBlt( TPoint(0, 0), wallpaper ); 
+                return;
+                }
+            }
+        else if( iBgImage )
+            {
+            SystemGc().BitBlt( TPoint(0, 0), iBgImage ); 
+            return;
+            }    
+        }
+    MAknsSkinInstance* skin( AknsUtils::SkinInstance() );     
+    AknsDrawUtils::Background( skin, iBgContext, this, 
+        SystemGc(), aRect );
+    }
+
+// -----------------------------------------------------------------------------
+// CXnBackgroundManager::SizeChanged
+// -----------------------------------------------------------------------------
+// 
+void CXnBackgroundManager::SizeChanged()
+    {
+    iRect = Rect();
+    if( iFeatureSuppoted )
+        {
+        TRAP_IGNORE( UpdateWallpapersL() );
+        }
+    else
+        {
+        if( iBgImagePath )
+            {
+            delete iBgImage;
+            iBgImage = NULL;
+            TRAP_IGNORE( iBgImage = iSkinSrv.WallpaperImageL( *iBgImagePath ) );
+            }
+        }
+    iBgContext->SetRect( iRect );
+    }
+
+// -----------------------------------------------------------------------------
+// Handle disk drive notifications.
+// -----------------------------------------------------------------------------
+//
+void CXnBackgroundManager::HandleNotifyDisk(
+        TInt /*aError*/,
+        const TDiskEvent& aEvent )
+    {
+    if( aEvent.iType == MDiskNotifyHandlerCallback::EDiskStatusChanged )
+        {
+        if( !( aEvent.iInfo.iDriveAtt & KDriveAttInternal ) ) 
+            {        
+            TBool diskRemoved( aEvent.iInfo.iType == EMediaNotPresent );
+            if( diskRemoved )
+                {
+                // TODO:
+                //TRAP_IGNORE( RemovableDiskRemovedL() );
+                }
+            else
+                {
+                TRAP_IGNORE( RemovableDiskInsertedL() );        
+                }
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CXnBackgroundManager::CacheWallpaperL
+// -----------------------------------------------------------------------------
+//
+TInt CXnBackgroundManager::CacheWallpaperL( const TDesC& aFileName, CXnViewData& aViewData )
+    {
+    if( aFileName == KNullDesC )
+        {
+        return KErrArgument;
+        }
+
+    aViewData.SetWallpaperImagePathL( aFileName );
+    aViewData.SetWallpaperImage( NULL );
+
+    TBool err( KErrNone );
+    TRAP( err, iSkinSrv.AddWallpaperL( aFileName, iRect.Size() ) );
+    if( err == KErrNone )
+        {    
+        CFbsBitmap* bitmap( NULL );
+        CleanupStack::PushL( bitmap );
+        TRAP( err, bitmap = iSkinSrv.WallpaperImageL( aFileName ) );
+        if( err == KErrNone && bitmap )
+            {
+            aViewData.SetWallpaperImage( bitmap ); // Ownership tranferred
+            }        
+        else
+            {
+            iSkinSrv.RemoveWallpaper( aFileName );
+            }
+        CleanupStack::Pop();
+        }
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::AddWallpaperL
+// ---------------------------------------------------------------------------
+//
+void CXnBackgroundManager::AddWallpaperL( const TDesC& aFileName )
+    {
+    if( iFeatureSuppoted )
+        {
+        AddPageSpecificWallpaperL( aFileName );
+        }
+    else
+        {
+        AddCommonWallpaperL( aFileName );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::ActivatedL
+// ---------------------------------------------------------------------------
+//
+TBool CXnBackgroundManager::ActivatedL()
+    {
+    return iFeatureSuppoted;
+    }
+    
+// -----------------------------------------------------------------------------
+// CXnBackgroundManager::WallpaperChanged
+// -----------------------------------------------------------------------------
+//
+void CXnBackgroundManager::WallpaperChanged( CXnViewData& aOldView, CXnViewData& aNewView )
+    {
+    if( iFeatureSuppoted && 
+        aOldView.WallpaperImagePath().Compare( aNewView.WallpaperImagePath() ) )
+        {
+        DrawNow();
+        TInt err = AknsWallpaperUtils::SetIdleWallpaper( aNewView.WallpaperImagePath(), NULL );
+        if( err == KErrNone )
+            {
+            iIntUpdate++;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::SaveWallpaperL
+// ---------------------------------------------------------------------------
+// 
+void CXnBackgroundManager::SaveWallpaperL()
+    {
+    // Save wallpaper to HSPS
+    if( iFeatureSuppoted )
+        {
+        TBuf8<KMaxFileName> wallpaper8;
+        CXnViewData& viewData( iViewManager.ActiveViewData() );
+        wallpaper8.Copy( viewData.WallpaperImagePath() );    
+        SetSettingPropertyL( viewData.PluginId(), KWallpaper,
+                KPath, wallpaper8 );
+        }
+    else
+        {
+        CRepository* repository = CRepository::NewLC( TUid::Uid( KCRUidActiveIdleLV ) );
+        if ( repository )
+            {
+            if( iBgImagePath )
+                {
+                User::LeaveIfError( repository->Set( KAIWallpaperPath, 
+                    *iBgImagePath ) );            
+                }
+            else
+                {
+                User::LeaveIfError( repository->Set( KAIWallpaperPath, 
+                    KNullDesC ) );            
+                }
+            }
+        CleanupStack::PopAndDestroy( repository );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::SetSettingPropertyL
+// ---------------------------------------------------------------------------
+//
+TInt CXnBackgroundManager::SetSettingPropertyL( const TDesC8& aPluginId,
+    const TDesC8& aItemId, const TDesC8& aPropertyName, 
+    const TDesC8& aPropertyValue )
+    {
+    if ( aPluginId == KNullDesC8() ||
+         aItemId == KNullDesC8() ||
+         aPropertyName == KNullDesC8() )
+        {
+        return KErrArgument;
+        }        
+    
+    CHspsConfiguration* pluginConf(
+            iHspsWrapper.GetPluginConfigurationL( aPluginId ) );
+    if ( !pluginConf )
+        {
+        return KErrNotFound;
+        }    
+    CleanupStack::PushL( pluginConf );
+        
+    // Find.
+    CPropertyMap* property = NULL;
+    RPointerArray<CItemMap>& settings = pluginConf->Settings();           
+    for( TInt i = 0; i < settings.Count(); i++ )
+        {
+        CItemMap* setting = settings[i];
+        if ( !setting )
+            {
+            continue;
+            }
+
+        if ( setting->ItemId() == aItemId )
+            {
+            RPointerArray<CPropertyMap>& properties = setting->Properties();
+            for( TInt j = 0; j < properties.Count(); j++ )
+                {
+                CPropertyMap* tmpProperty = properties[j];
+                if ( !tmpProperty )
+                    {
+                    continue;
+                    }
+                
+                if ( tmpProperty->Name() == aPropertyName )
+                    {
+                    property = tmpProperty;     
+                    break;
+                    }
+                }            
+            break;
+            }
+        }
+
+    TInt ret = KErrNone;
+    
+    // Set.    
+    if ( property )
+        {
+        property->SetValueL( aPropertyValue );
+        ret = iHspsWrapper.SetPluginSettingsL( aPluginId, settings );        
+        }
+    else
+        {
+        ret = KErrNotFound;
+        }
+    
+    CleanupStack::PopAndDestroy( pluginConf );
+    
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::SetWallpaperL
+// ---------------------------------------------------------------------------
+//
+void CXnBackgroundManager::SetWallpaperL()
+    {
+    TInt selectedIndex( 0 );
+
+    CAknListQueryDialog* query =
+        new ( ELeave ) CAknListQueryDialog( &selectedIndex );
+    CleanupStack::PushL( query );
+    query->PrepareLC( R_LISTQUERY_CHANGE_WALLPAPER );
+
+    if ( query->RunLD() )
+        {
+        if ( selectedIndex == 0 )
+            {
+            AddWallpaperL( KNullDesC );
+            }
+        else if ( selectedIndex == 1 )
+            {
+            iViewManager.AppUiAdapter().ActivateLocalViewL( KWallpaperViewUid, 
+                KDummyUid, KSingle );                
+            }
+        }
+    CleanupStack::Pop( query );
+    }
+    
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::SkinContentChanged
+// ---------------------------------------------------------------------------
+//
+void CXnBackgroundManager::SkinContentChanged()
+    {    
+    }
+    
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::SkinConfigurationChanged
+// ---------------------------------------------------------------------------
+//
+void CXnBackgroundManager::SkinConfigurationChanged(
+    const TAknsSkinStatusConfigurationChangeReason aReason )
+    {
+    if ( aReason == EAknsSkinStatusWallpaperChanged )
+        {        
+        if( iIntUpdate > 0 )
+            {
+            iIntUpdate--;
+            }
+        else
+            {
+            TRAP_IGNORE( ReadWallpaperFromCenrepL() );
+            }
+        }
+    else if ( aReason == EAknsSkinStatusConfigurationDeployed )
+        {
+        DrawNow();
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::SkinPackageChanged
+// ---------------------------------------------------------------------------
+//
+void CXnBackgroundManager::SkinPackageChanged(
+        const TAknsSkinStatusPackageChangeReason /*aReason*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CXnBackgroundManager::HandleViewActivation()
+// ----------------------------------------------------------------------------
+//
+void CXnBackgroundManager::HandleViewActivation( 
+    const TVwsViewId& aNewlyActivatedViewId, 
+    const TVwsViewId& aViewIdToBeDeactivated )
+    {
+    TVwsViewId viewId( iViewManager.AppUiAdapter().View().ViewId() );
+    if ( viewId == aNewlyActivatedViewId && !iTransparencyEnabled )
+        {
+        iTransparencyEnabled = ETrue;
+        DrawNow();
+        }
+    else if ( viewId == aViewIdToBeDeactivated && iTransparencyEnabled )
+        {
+        iTransparencyEnabled = EFalse;
+        DrawNow();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CXnBackgroundManager::CleanCache
+// -----------------------------------------------------------------------------
+//
+void CXnBackgroundManager::CleanCache()
+    {
+    iSkinSrv.RemoveAllWallpapers();
+    }
+
+// -----------------------------------------------------------------------------
+// CXnBackgroundManager::RemoveWallpaper
+// -----------------------------------------------------------------------------
+//
+void CXnBackgroundManager::RemoveWallpaperFromCache( const TDesC& aFileName )
+    {
+    CXnViewData& activeViewData( iViewManager.ActiveViewData() );
+    CXnRootData& rootData = iViewManager.ActiveAppData();
+    RPointerArray<CXnPluginData>& rootDataArr = rootData.PluginData();
+
+    for( TInt i = 0; i < rootDataArr.Count(); i++ )
+        {
+        CXnViewData* viewData = static_cast<CXnViewData*>( rootDataArr[i] );
+        if( viewData == &activeViewData )
+            {
+            continue;
+            }
+        else if( viewData->WallpaperImagePath() == aFileName )
+            {
+            // Some other view has same wallpaper image. 
+            // This must not be removed from the cache.
+            return;
+            }
+        }
+    // Image is not needed anymore. Can be removed from the cache.
+    iSkinSrv.RemoveWallpaper( aFileName );  
+    }
+
+// -----------------------------------------------------------------------------
+// CXnBackgroundManager::RemoveWallpaper
+// -----------------------------------------------------------------------------
+//
+void CXnBackgroundManager::RemoveWallpaperL( CXnViewData& aViewData )
+    {
+    aViewData.SetWallpaperImagePathL( KNullDesC );
+    aViewData.SetWallpaperImage( NULL );
+    SetSettingPropertyL( aViewData.PluginId(), KWallpaper, KPath, KNullDesC8 );
+    }
+
+// -----------------------------------------------------------------------------
+// CXnBackgroundManager::UpdateWallpapersL
+// -----------------------------------------------------------------------------
+//
+void CXnBackgroundManager::UpdateWallpapersL()
+    {
+    CXnRootData& rootData = iViewManager.ActiveAppData();
+    if( !&rootData )
+        {
+        return;
+        }
+    RPointerArray<CXnPluginData>& rootDataArr = rootData.PluginData();
+
+    for( TInt i = 0; i < rootDataArr.Count(); i++ )
+        {
+        CXnViewData* viewData = static_cast<CXnViewData*>( rootDataArr[i] );
+        const TDesC& path = viewData->WallpaperImagePath();
+        if( path != KNullDesC )
+            {
+            CFbsBitmap* bitmap = iSkinSrv.WallpaperImageL( path );
+            if( bitmap )
+                {
+                viewData->SetWallpaperImage( bitmap );
+                }
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CXnBackgroundManager::RemovableDiskInsertedL
+// -----------------------------------------------------------------------------
+//
+void CXnBackgroundManager::RemovableDiskInsertedL()
+    {
+    if( iFeatureSuppoted )
+        {
+        CXnRootData& rootData = iViewManager.ActiveAppData();
+        if( !&rootData )
+            {
+            return;
+            }
+        RPointerArray<CXnPluginData>& rootDataArr = rootData.PluginData();
+        TInt drawingNeeded( EFalse );
+        for( TInt i = 0; i < rootDataArr.Count(); i++ )
+            {
+            CXnViewData* viewData = static_cast<CXnViewData*>( rootDataArr[i] );
+            const TDesC& path = viewData->WallpaperImagePath();
+            CFbsBitmap* bitmap = viewData->WallpaperImage();
+            if( path != KNullDesC && !bitmap )
+                {
+                TInt err = CacheWallpaperL( path, *viewData );
+                if( err == KErrNone )
+                    {
+                    drawingNeeded = ETrue;
+                    }
+                }
+            }
+        if( drawingNeeded )
+            {
+            DrawNow();
+            }    
+        }
+    else
+        {
+        if( iBgImagePath )
+            {
+            AddCommonWallpaperL( *iBgImagePath, EFalse );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::CheckFeatureTypeL
+// ---------------------------------------------------------------------------
+//
+void CXnBackgroundManager::CheckFeatureTypeL()
+    {
+    iFeatureSuppoted = EFalse;
+    CRepository* repository = CRepository::NewL( TUid::Uid( KCRUidActiveIdleLV ) );
+    CleanupStack::PushL( repository );
+    if ( repository )
+        {
+        // Get wallpaper handling type from cenrep
+        TInt type;
+        TInt err = repository->Get( KAIWallpaperChangeType, type );
+        if ( err == KErrNone && type == 1)
+            {
+            iFeatureSuppoted = ETrue;
+            }
+        else
+            {
+            TFileName path;
+            err = repository->Get( KAIWallpaperPath, path );
+            if ( !err && path.Length())
+                {
+                AddCommonWallpaperL( path, EFalse );
+                }
+            }
+        }
+    CleanupStack::PopAndDestroy( repository );
+    }
+
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::AddPageSpecificWallpaperL
+// ---------------------------------------------------------------------------
+//
+void CXnBackgroundManager::AddPageSpecificWallpaperL( const TDesC& aFileName )
+    {
+    CXnViewData& viewData( iViewManager.ActiveViewData() );
+    const TDesC& old = viewData.WallpaperImagePath();
+
+    if( aFileName.Compare( old ) )
+        {
+        // Remove old from the cache
+        if( old != KNullDesC )
+            {
+            RemoveWallpaperFromCache( old );
+            }
+
+        // Add new to the cache
+        if( aFileName != KNullDesC )
+            {
+            if( CacheWallpaperL( aFileName, viewData ) == KErrNone )
+                {
+                SaveWallpaperL(); // to HSPS
+                }
+            else
+                {
+                return;
+                }
+            }
+        
+        // WallpaperImage changed back to default. Update view data.
+        else
+            {
+            viewData.SetWallpaperImagePathL( KNullDesC );
+            viewData.SetWallpaperImage( NULL );            
+            }
+
+        // Update screen
+        DrawNow();        
+
+        TInt err = AknsWallpaperUtils::SetIdleWallpaper( aFileName, NULL );
+        if( err == KErrNone )
+            {
+            iIntUpdate++;        
+            }                
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::AddCommonWallpaperL
+// ---------------------------------------------------------------------------
+//
+void CXnBackgroundManager::AddCommonWallpaperL( const TDesC& aFileName, 
+    TBool aSave )
+    {
+    // Remove old from the cache
+    if( iBgImagePath )
+        {
+        iSkinSrv.RemoveWallpaper( aFileName );          
+        delete iBgImagePath;
+        iBgImagePath = NULL;
+        }
+    delete iBgImage;
+    iBgImage = NULL;
+
+    if( aFileName != KNullDesC )
+        {
+        iBgImagePath = aFileName.AllocL();
+    
+        TBool err( KErrNone );
+        TRAP( err, iSkinSrv.AddWallpaperL( aFileName, iRect.Size() ) );
+        if( err )
+            {
+            return;
+            }
+        TRAP( err, iBgImage = iSkinSrv.WallpaperImageL( aFileName ) );
+        if( err )
+            {
+            iSkinSrv.RemoveWallpaper( aFileName );
+            delete iBgImage;
+            iBgImage = NULL;
+            return;
+            }
+        }
+    
+    // Update screen
+    DrawNow();        
+
+    // Save path to cenrep
+    if( aSave )
+        {
+        SaveWallpaperL();
+        }
+
+    TInt err = AknsWallpaperUtils::SetIdleWallpaper( aFileName, NULL );
+    if( !err )
+        {
+        iIntUpdate++;        
+        }                
+    }
+
+// ---------------------------------------------------------------------------
+// CXnBackgroundManager::ReadWallpaperFromCenrepL
+// ---------------------------------------------------------------------------
+//
+void CXnBackgroundManager::ReadWallpaperFromCenrepL()
+    {
+    CRepository* repository = CRepository::NewLC( KCRUidPersonalisation );
+    if ( repository )
+        {                
+        // Get wallpaper type from cenrep
+        TInt wallpaperType;
+        TInt err = repository->Get( KPslnWallpaperType, wallpaperType );
+        if ( err == KErrNone )
+            {
+            if ( wallpaperType == 0 )
+                {
+                if( iFeatureSuppoted )
+                    {
+                    CXnViewData& viewData( iViewManager.ActiveViewData() );
+                    RemoveWallpaperFromCache( viewData.WallpaperImagePath() );
+                    RemoveWallpaperL( viewData );                        
+                    } 
+                else
+                    {
+                    if( iBgImagePath )
+                        {
+                        iSkinSrv.RemoveWallpaper( *iBgImagePath );
+                        delete iBgImagePath;
+                        iBgImagePath = NULL;
+                        }
+                    delete iBgImage;
+                    iBgImage = NULL;
+                    SaveWallpaperL();
+                    }
+                }
+            else if ( wallpaperType == 1 )
+                {
+                // WallpaperImage is image
+                // Get wallpaper image path from cenrep and save it
+                TFileName wallpaper;            
+                err = repository->Get( KPslnIdleBackgroundImagePath, wallpaper );
+                if ( err == KErrNone )
+                    {
+                    if( iFeatureSuppoted )
+                        {
+                        AddPageSpecificWallpaperL( wallpaper );
+                        }
+                    else
+                        {
+                        AddCommonWallpaperL( wallpaper, EFalse );
+                        }
+                    }                
+                }
+            DrawNow();
+            }
+
+        CleanupStack::PopAndDestroy( repository );
+        }    
+    }
+
+//  End of File
--- a/idlehomescreen/xmluirendering/uiengine/src/xnbgcontrol.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnbgcontrol.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -69,7 +69,6 @@
 //
 CXnBgControl::~CXnBgControl()
     {  
-    delete iBgContext;
     }
 
 // -----------------------------------------------------------------------------
@@ -89,13 +88,18 @@
 void CXnBgControl::ConstructL()
     {   
     CreateWindowL();
+
+    TRgb backgroundColour = KRgbWhite;
+    if( KErrNone == Window().SetTransparencyAlphaChannel() )      
+        {       
+        backgroundColour.SetAlpha( 0 );       
+        }   
+    Window().SetBackgroundColor( backgroundColour );
     
     EnableDragEvents();
     
     Window().SetPointerGrab( ETrue );
-      
-    iBgContext = CAknsLayeredBackgroundControlContext::NewL(
-        KAknsIIDWallpaper, TRect(), ETrue, 1 );
+    
     
     ActivateL();
 
@@ -141,15 +145,6 @@
 //
 void CXnBgControl::SizeChanged()
     {
-    TRect rect;
-    
-#ifdef RD_FULLSCREEN_WALLPAPER    
-    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, rect );
-#else
-    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect );
-#endif
-       
-    iBgContext->SetRect( rect );    
     }
 
 // -----------------------------------------------------------------------------
@@ -171,10 +166,8 @@
         // No background needed for dragging widget screenshot        
         }
     else
-        {
-        MAknsSkinInstance* skin( AknsUtils::SkinInstance() );
-               
-        AknsDrawUtils::Background( skin, iBgContext, this, gc, aRect );        
+        {        
+        gc.Clear( aRect );        
         }          
     }
 
--- a/idlehomescreen/xmluirendering/uiengine/src/xncomponentfactory.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xncomponentfactory.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -124,14 +124,15 @@
     
     adapter->SetComponent( aTargetComponent );
     adapter->SetComponentsToInheritVisibility( ETrue );
-    adapter->MakeVisible( EFalse );
-    
+        
     if ( type != KToolTip )
         {
         // Don't activate tooltip yet
         adapter->ActivateL();
         }
-        
+    
+    adapter->MakeVisible( EFalse );
+    
     CleanupStack::Pop( aTargetComponent );
     
     return response;
--- a/idlehomescreen/xmluirendering/uiengine/src/xncomposer.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xncomposer.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -32,6 +32,9 @@
 #include "xndomattribute.h"
 #include "xnpanic.h"
 #include "xnplugindefs.h"
+#include "xnviewmanager.h"
+#include "xneditor.h"
+#include "xnbackgroundmanager.h"
 
 // Constants
 _LIT8( KStateWaitConfirmation, "WaitForConfirmation" );
@@ -52,6 +55,48 @@
 using namespace hspswrapper;
 
 // ======== LOCAL FUNCTIONS ========
+// --------------------------------------------------------------------------
+// ItemValueL
+// Get property value from configuration.
+// --------------------------------------------------------------------------
+//
+static HBufC* ItemValueL( CHspsConfiguration& aConfiguration, const TDesC8& aItemId, const TDesC8& aName  )
+    {
+    HBufC* ret = NULL;
+
+    RPointerArray<CItemMap>& settingsList = aConfiguration.Settings();    
+    for( TInt i = 0; i < settingsList.Count(); i++ )
+        {
+        CItemMap* setting = settingsList[i];
+        if( !setting )
+            {
+            continue;
+            }
+        
+        if( setting->ItemId() == aItemId )
+            {
+            RPointerArray<CPropertyMap>& properties = setting->Properties();
+            for( TInt j = 0; j < properties.Count(); j++ )
+                {
+                CPropertyMap* property = properties[j];
+                if( !property )
+                    {
+                    continue;
+                    }
+                
+                if( property->Name() == aName )
+                    {
+                    ret = HBufC::NewL( property->Value().Length() );
+                    ret->Des().Copy( property->Value() );
+                    break;
+                    }
+                }            
+            break;
+            }    
+        }        
+    return ret;
+    }
+
 // ---------------------------------------------------------------------------
 // Finds recursively node by name
 // @return    returns pointer to desired node, NULL if nothing found 
@@ -164,7 +209,7 @@
         return;
         }
 
-    CXnDomStringPool& sp( node->StringPool() );
+    CXnDomStringPool* sp( node->StringPool() );
 
     for ( TInt i = 0; i < aProperties.Count(); i++ )
         {
@@ -451,7 +496,7 @@
         
         return NULL;
         }
-    
+
     RPointerArray< CXnPluginData >& array( aRootData.PluginData() );
     
     TInt index( 0 );
@@ -561,7 +606,22 @@
         UpdatePluginFromSettingsL( *configuration, *viewRoot );
                 
         aViewData.SetUseEmptyWidget( UseEmptyWidget( *viewRoot )  );   
+
+        // Read wallpaper image path from HSPS
+        CXnBackgroundManager& bgManager = aViewData.ViewManager().
+            Editor().BgManager();
         
+        // if page specific wallpaper feature is enabled
+        if( bgManager.ActivatedL() )
+            {
+            HBufC* bgImage = ItemValueL( *configuration, KWallpaper, KPath );
+            CleanupStack::PushL( bgImage );
+            if( bgImage && bgImage->Length() > 0 )
+                {
+                bgManager.CacheWallpaperL( bgImage->Des(), aViewData );
+                }
+            CleanupStack::PopAndDestroy( bgImage );
+            }
         if ( pluginNode )
             {            
             // This assumes all <plugin> elements are siblings
--- a/idlehomescreen/xmluirendering/uiengine/src/xncontroladapterimpl.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xncontroladapterimpl.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -1152,7 +1152,7 @@
                 TRAP( error, tmpProperty = CXnProperty::NewL(
                     KNullDesC8,
                     tmpValue,
-                    aNode.UiEngine()->ODT()->DomDocument().StringPool() ); );
+                    *aNode.UiEngine()->ODT()->DomDocument().StringPool() ); );
                 if ( error != KErrNone )
                     {
                     delete tmpValue;
@@ -1335,7 +1335,7 @@
                 CXnProperty* tmpProperty = NULL;
                 TRAP( error, tmpProperty = CXnProperty::NewL(
                     KNullDesC8, tmpValue,
-                    aNode.UiEngine()->ODT()->DomDocument().StringPool() ); );
+                    *aNode.UiEngine()->ODT()->DomDocument().StringPool() ); );
                 if ( error != KErrNone )
                     {
                     delete tmpValue;
@@ -3107,7 +3107,7 @@
                 tmpProperty = CXnProperty::NewL(
                     KNullDesC8,
                     tmpValue,
-                    aNode.UiEngine()->ODT()->DomDocument().StringPool() );
+                *aNode.UiEngine()->ODT()->DomDocument().StringPool() );
                 CleanupStack::Pop( tmpValue );
                 TSize imageSize = returnValue->SizeInPixels();
                 CleanupStack::PushL( tmpProperty );
@@ -3206,7 +3206,7 @@
     CleanupStack::PushL( nameValue );
     nameValue->SetStringValueL( CXnDomPropertyValue::EString, aName );
     CXnProperty* name = CXnProperty::NewL( XnPropertyNames::action::KName,
-        nameValue, aUiEngine.ODT()->DomDocument().StringPool() );
+        nameValue, *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -3216,7 +3216,7 @@
     CleanupStack::PushL( valueValue );
     valueValue->SetStringValueL( CXnDomPropertyValue::EString, aValue );
     CXnProperty* value = CXnProperty::NewL( XnPropertyNames::action::KValue,
-        valueValue, aUiEngine.ODT()->DomDocument().StringPool() );
+        valueValue, *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( valueValue );
     CleanupStack::PushL( value );
     node->SetPropertyL( value );
@@ -3249,7 +3249,7 @@
     CleanupStack::PushL( nameValue );
     nameValue->SetStringValueL( CXnDomPropertyValue::EString, aTriggerName );
     CXnProperty* name = CXnProperty::NewL( XnPropertyNames::action::trigger::KName,
-        nameValue, aUiEngine.ODT()->DomDocument().StringPool() );
+        nameValue, *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -3285,7 +3285,7 @@
     CleanupStack::PushL( nameValue );
     nameValue->SetStringValueL( CXnDomPropertyValue::EString, aTriggerName );
     CXnProperty* name = CXnProperty::NewL( XnPropertyNames::action::trigger::KName,
-        nameValue, aUiEngine.ODT()->DomDocument().StringPool() );
+        nameValue, *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -3535,7 +3535,7 @@
     CXnUiEngine& aUiEngine,
     const TDesC8& aDirection )
     {
-    CXnDomStringPool& sp( aUiEngine.ODT()->DomDocument().StringPool() );
+    CXnDomStringPool* sp( aUiEngine.ODT()->DomDocument().StringPool() );
 
     CXnNode* node = CXnNode::NewL();
     CleanupStack::PushL( node );
@@ -3558,7 +3558,7 @@
 
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::trigger::KName,
-        nameValue, sp );
+        nameValue, *sp );
 
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
@@ -3573,7 +3573,7 @@
 
     CXnProperty* reason = CXnProperty::NewL(
         XnPropertyNames::action::trigger::name::swipe::KDirection,
-        reasonValue, sp );
+        reasonValue, *sp );
 
     CleanupStack::Pop( reasonValue );
 
@@ -4039,6 +4039,14 @@
                node->IsStateSet( XnPropertyNames::style::common::KFocus ) &&
                node->IsStateSet( XnPropertyNames::style::common::KPressedDown ) ) )
                 {
+#ifdef RD_TACTILE_FEEDBACK            
+                MTouchFeedback* feedback( MTouchFeedback::Instance() );
+                
+                if ( feedback )
+                    {
+                    feedback->InstantFeedback( ETouchFeedbackBasic );
+                    }
+#endif
                 node->SetStateL( XnPropertyNames::style::common::KActive );
                 }                      
             }
--- a/idlehomescreen/xmluirendering/uiengine/src/xneditmode.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xneditmode.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -115,12 +115,12 @@
     {
     CXnUiEngine* engine( aNode.UiEngine() );
     
-    CXnDomStringPool& sp( aNode.DomNode()->StringPool() );
+    CXnDomStringPool* sp( aNode.DomNode()->StringPool() );
     
     CXnProperty* prop = CXnProperty::NewL(
             XnPropertyNames::style::common::KVisibility,
             aVisibility,
-            CXnDomPropertyValue::EString, sp );
+            CXnDomPropertyValue::EString, *sp );
     CleanupStack::PushL( prop );
     
     aNode.SetPropertyL( prop );
@@ -303,7 +303,7 @@
             DrawNow( iLastDrawRect );
             }
         
-        iDrawPos = TPoint::EUninitialized;
+        iDrawPos.SetXY( 0, 0 );
         iLastDrawRect = TRect::EUninitialized;        
         }
     }
@@ -459,9 +459,9 @@
                if ( iState == CXnEditMode::EDragging )
                    {
                    node->SetStateL( XnPropertyNames::style::common::KFocus );               
-    #ifdef RD_TACTILE_FEEDBACK               
-                    Feedback( ETouchFeedbackSensitive );
-    #endif                                   
+#ifdef RD_TACTILE_FEEDBACK               
+                   Feedback( ETouchFeedbackSensitive );
+#endif                                   
                    }
                else if ( iDraggingNode && 
                    !iDraggingNode->MarginRect().Contains( aPointerEvent.iPosition ) )
@@ -540,7 +540,10 @@
             }
         }
     else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
-        {                                                                          
+        {
+#ifdef RD_TACTILE_FEEDBACK                
+        Feedback( ETouchFeedbackBasic );
+#endif
         // Cancel
         if ( !iTargetNode || !iDraggingNode ||                 
              iDraggingNode == iTargetNode ||
@@ -754,10 +757,12 @@
         iDraggingNode->Parent()->SetDirtyL( XnDirtyLevel::ELayoutAndRender );
         }
 
-    iDraggingNode = iTargetNode = NULL;
-     
-    iPreviousPos = iStylusDownPos = TPoint::EUninitialized;
-    
+    iDraggingNode = NULL;
+    iTargetNode = NULL;
+
+    iPreviousPos.SetXY( 0, 0 );
+    iStylusDownPos.SetXY( 0, 0 );
+
     iState = CXnEditMode::EDragAndDrop;
     }
 
--- a/idlehomescreen/xmluirendering/uiengine/src/xneditor.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xneditor.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -56,6 +56,7 @@
 #include "xnrootdata.h"
 #include "xnviewdata.h"
 #include "xnwallpaperview.h"
+#include "xnbackgroundmanager.h"
 
 #include "xneditor.h"
 #include "xnpanic.h"
@@ -173,7 +174,7 @@
     
     if ( node )
         {
-        CXnDomStringPool& sp( node->StringPool() );
+        CXnDomStringPool* sp( node->StringPool() );
 
         // create new property
         CXnDomPropertyValue* value = CXnDomPropertyValue::NewL( sp );
@@ -181,7 +182,7 @@
 
         value->SetStringValueL( CXnDomPropertyValue::EString, aValue );
 
-        CXnProperty* prop = CXnProperty::NewL( aAttribute, value, sp );
+        CXnProperty* prop = CXnProperty::NewL( aAttribute, value, *sp );
                     
         CleanupStack::Pop( value );
         CleanupStack::PushL( prop );
@@ -311,6 +312,7 @@
     iCpsWrapper = CCpsWrapper::NewL( *this );
     iHspsWrapper = CHspsWrapper::NewL( aUid, this );
     iRepository= CRepository::NewL( TUid::Uid( KCRUidActiveIdleLV ) );
+    iBgManager = CXnBackgroundManager::NewL( iViewManager, *iHspsWrapper );
     }
 
 // ---------------------------------------------------------------------------
@@ -325,6 +327,7 @@
     delete iHspsWrapper;
     delete iPublisherMap;
     delete iRepository;
+    delete iBgManager;
     }
 
 // -----------------------------------------------------------------------------
@@ -1586,6 +1589,15 @@
     }
 
 // -----------------------------------------------------------------------------
+// CXnEditor::BgManager
+// -----------------------------------------------------------------------------
+//
+CXnBackgroundManager& CXnEditor::BgManager() const
+    {
+    return *iBgManager;
+    }
+
+// -----------------------------------------------------------------------------
 // from MHsContentController
 // -----------------------------------------------------------------------------
 //
@@ -1788,4 +1800,80 @@
     return iViewManager.ActivateAppL( aInfo.Uid() );     
     }
 
+// -----------------------------------------------------------------------------
+// from MHsContentController
+// -----------------------------------------------------------------------------
+//
+TInt CXnEditor::ActiveViewL( CHsContentInfo& aInfo )
+    {
+
+    TInt err( KErrNone );
+    
+    // Get active application configuration
+    CHspsConfiguration* app( iHspsWrapper->GetAppConfigurationL() );
+    CleanupStack::PushL( app );
+
+    // Get list of views included in active application configuration
+    RPointerArray< CPluginMap >& plugins( app->PluginMaps() );
+    CPluginMap* plugin( NULL );
+    
+    // Find active view
+    for ( TInt i = 0; i < plugins.Count() && !plugin; i++ )
+        {
+        if ( plugins[ i ]->ActivationState() )
+            {
+            plugin = plugins[ i ];
+            }
+        }
+    
+    if ( plugin )
+        {
+        CHspsConfiguration* view( iHspsWrapper->GetPluginConfigurationL( plugin->PluginId() ) );
+        CleanupStack::PushL( view );
+        
+        aInfo.SetNameL( view->PluginInfo().Name() );
+        aInfo.SetUidL( view->PluginInfo().Uid() );
+        aInfo.SetTypeL( view->PluginInfo().Type() );
+        aInfo.SetDescriptionL( view->PluginInfo().Description() );
+        aInfo.SetIconPathL( view->PluginInfo().LogoIcon() );
+        
+        CleanupStack::PopAndDestroy( view );
+        }
+    else
+        {
+        err = KErrNotFound;
+        }
+    
+    CleanupStack::PopAndDestroy( app );
+    return err;     
+    }
+
+// -----------------------------------------------------------------------------
+// from MHsContentController
+// -----------------------------------------------------------------------------
+//
+TInt CXnEditor::ActiveAppL( CHsContentInfo& aInfo )
+    {
+
+    TInt err( KErrNone );
+    CHspsConfiguration* app = iHspsWrapper->GetAppConfigurationL();
+    CleanupStack::PushL( app );
+
+    if ( app->PluginInfo().Uid().Length() > 0 )
+        {
+        aInfo.SetNameL( app->PluginInfo().Name() );
+        aInfo.SetUidL( app->PluginInfo().Uid() );
+        aInfo.SetTypeL( app->PluginInfo().Type() );
+        aInfo.SetDescriptionL( app->PluginInfo().Description() );
+        aInfo.SetIconPathL( app->PluginInfo().LogoIcon() );
+        }
+    else
+        {
+        err = KErrNotFound;
+        }
+    
+    CleanupStack::PopAndDestroy( app );
+    return err;     
+    }
+
 // End of file
--- a/idlehomescreen/xmluirendering/uiengine/src/xnextrenderingpluginwrapper.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnextrenderingpluginwrapper.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -24,12 +24,15 @@
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::NewL()
+//
 // ----------------------------------------------------------------------------
 //
 CXnExtRenderingPluginWrapper* CXnExtRenderingPluginWrapper::NewL( 
     CXnNodePluginIf& aNode, CXnExtRenderingPluginAdapter& aAdapter )
     {
-    CXnExtRenderingPluginWrapper* self = new ( ELeave ) CXnExtRenderingPluginWrapper( aAdapter );
+    CXnExtRenderingPluginWrapper* self = 
+        new ( ELeave ) CXnExtRenderingPluginWrapper( aAdapter );
+    
     CleanupStack::PushL( self );
     self->ConstructL( aNode );
     CleanupStack::Pop( self );
@@ -38,25 +41,30 @@
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::ConstructL()
+//
 // ----------------------------------------------------------------------------
 //
 void CXnExtRenderingPluginWrapper::ConstructL( CXnNodePluginIf& aNode )
     {
     iNode = &aNode;
+    
     CXnControlAdapter::ConstructL( aNode );
     }
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::CXnExtRenderingPluginWrapper()
+//
 // ----------------------------------------------------------------------------
 //
-CXnExtRenderingPluginWrapper::CXnExtRenderingPluginWrapper( CXnExtRenderingPluginAdapter& aAdapter )
+CXnExtRenderingPluginWrapper::CXnExtRenderingPluginWrapper( 
+    CXnExtRenderingPluginAdapter& aAdapter )
     {
     iAdapter = &aAdapter;
     }
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::~CXnExtRenderingPluginWrapper()
+//
 // ----------------------------------------------------------------------------
 //
 CXnExtRenderingPluginWrapper::~CXnExtRenderingPluginWrapper()
@@ -66,6 +74,7 @@
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::CountComponentControls()
+//
 // ----------------------------------------------------------------------------
 //
 TInt CXnExtRenderingPluginWrapper::CountComponentControls() const
@@ -75,31 +84,42 @@
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::ComponentControl()
+//
 // ----------------------------------------------------------------------------
 //
-CCoeControl* CXnExtRenderingPluginWrapper::ComponentControl( TInt aIndex ) const
+CCoeControl* CXnExtRenderingPluginWrapper::ComponentControl( 
+    TInt aIndex ) const
     {
     if( aIndex == 0 )
         {
         return iAdapter;
         }
-    else
-        {
-        return NULL;
-        }
+
+    return NULL;    
     }
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::OfferKeyEventL()
+//
 // ----------------------------------------------------------------------------
 //
-TKeyResponse CXnExtRenderingPluginWrapper::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+TKeyResponse CXnExtRenderingPluginWrapper::OfferKeyEventL(
+    const TKeyEvent& aKeyEvent, TEventCode aType )
     {
-    return iAdapter->OfferKeyEventL( aKeyEvent, aType );
+    TKeyResponse resp( iAdapter->OfferKeyEventL( aKeyEvent, aType ) );
+    
+    if ( resp == EKeyWasNotConsumed )
+        {
+        // iAdapter did't consume the event, pass it to base clsas
+        resp = CXnControlAdapter::OfferKeyEventL( aKeyEvent, aType );
+        }
+    
+    return resp;
     }
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::SizeChanged()
+//
 // ----------------------------------------------------------------------------
 //    
 void CXnExtRenderingPluginWrapper::SizeChanged()
@@ -109,68 +129,84 @@
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::SkinChanged()
+//
 // ----------------------------------------------------------------------------
 //    
 void CXnExtRenderingPluginWrapper::SkinChanged()
     {
     CXnControlAdapter::SkinChanged();
+    
     iAdapter->SkinChanged();
     }
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::SetContainerWindowL()
+//
 // ----------------------------------------------------------------------------
 //   
-void CXnExtRenderingPluginWrapper::SetContainerWindowL(const CCoeControl& aContainer)
+void CXnExtRenderingPluginWrapper::SetContainerWindowL(
+    const CCoeControl& aContainer )
     {
     CXnControlAdapter::SetContainerWindowL( aContainer );
+    
     iAdapter->SetContainerWindowL( *this );
     }
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::MakeVisible()
+//
 // ----------------------------------------------------------------------------
 //
 void CXnExtRenderingPluginWrapper::MakeVisible( TBool aVisible )
     {
-    CXnControlAdapter::MakeVisible( aVisible );
-    iAdapter->MakeVisible( aVisible );
+    // Base class will call MakeVisible to component controls 
+    CXnControlAdapter::MakeVisible( aVisible );    
     }
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::FocusChanged()
+//
 // ----------------------------------------------------------------------------
 //
 void CXnExtRenderingPluginWrapper::FocusChanged( TDrawNow aDrawNow )
     {
     CXnControlAdapter::FocusChanged( aDrawNow );    
-    iAdapter->FocusChanged( aDrawNow );
+    
+    TBool focused( IsFocused() ? ETrue : EFalse );
+    
+    iAdapter->SetFocus( focused, aDrawNow );    
     }
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::HandleScreenDeviceChangedL()
+//
 // ----------------------------------------------------------------------------
 //
 void CXnExtRenderingPluginWrapper::HandleScreenDeviceChangedL()
     {
     CXnControlAdapter::HandleScreenDeviceChangedL();
+    
     iAdapter->HandleResourceChange( KEikDynamicLayoutVariantSwitch );
     }
 
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::DoEnterPowerSaveModeL()
+//
 // ----------------------------------------------------------------------------
 //
-void CXnExtRenderingPluginWrapper::DoEnterPowerSaveModeL( TModeEvent /*aEvent*/ )
+void CXnExtRenderingPluginWrapper::DoEnterPowerSaveModeL( 
+    TModeEvent /*aEvent*/ )
 	{
 	iAdapter->EnterPowerSaveModeL();
 	}
 	
 // ----------------------------------------------------------------------------
 // CXnExtRenderingPluginWrapper::DoExitPowerSaveModeL()
+//
 // ----------------------------------------------------------------------------
 //
-void CXnExtRenderingPluginWrapper::DoExitPowerSaveModeL( TModeEvent /*aEvent*/ )
+void CXnExtRenderingPluginWrapper::DoExitPowerSaveModeL( 
+    TModeEvent /*aEvent*/ )
 	{
 	iAdapter->ExitPowerSaveModeL();
 	}
--- a/idlehomescreen/xmluirendering/uiengine/src/xnfocuscontrol.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnfocuscontrol.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -182,9 +182,20 @@
     if ( IsVisible() || iRefused ) 
         {                                       
         CXnNode* node( iAppUiAdapter.UiEngine().FocusedNode() );
-
+        
         if ( node )
-            {
+            {            
+            CXnProperty* prop( NULL );
+            
+            TRAP_IGNORE( prop = node->GetPropertyL( 
+                XnPropertyNames::common::KFocusAppearance ) );
+                                            
+            if ( prop && prop->StringValue() == XnPropertyNames::KNone )
+                {
+                // Current element refuses to draw focus appearance
+                return;
+                }
+            
             TRect innerRect( aRect );            
             
             innerRect.Shrink( 
--- a/idlehomescreen/xmluirendering/uiengine/src/xnkeyeventdispatcher.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnkeyeventdispatcher.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -91,7 +91,7 @@
 
     CXnProperty* name =
         CXnProperty::NewL( XnPropertyNames::action::trigger::KName, nameValue,
-                           aUiEngine.ODT()->DomDocument().StringPool() );
+                           *aUiEngine.ODT()->DomDocument().StringPool() );
 
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
--- a/idlehomescreen/xmluirendering/uiengine/src/xnlistquerydialogadapter.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnlistquerydialogadapter.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -349,12 +349,14 @@
     HBufC8* nameStr( attribute->Value().AllocLC());
     TPtr8 namePtr = nameStr->Des();
     
-    //Find '(' char
-    TInt pos = namePtr.Locate('(');
-    TBuf8<4> index;
-    index.AppendNum( aIndex );
-    namePtr.Replace( pos+1, 1, index );
+    TInt startIndex = namePtr.Locate( '(' );
+    TInt endIndex = namePtr.Locate( ')' );
+    TInt dataLength = endIndex - startIndex - 1;
     
+    TBuf8<4> data;
+    data.AppendNum( aIndex );
+    namePtr.Replace( startIndex+1, dataLength, data );
+
     attribute->SetValueL( namePtr );
     CleanupStack::PopAndDestroy( nameStr );
     }
--- a/idlehomescreen/xmluirendering/uiengine/src/xnnodeimpl.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnnodeimpl.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -50,6 +50,7 @@
 #include "xnlistquerydialogadapter.h"
 #include "xneffectmanager.h"
 #include "xnviewadapter.h"
+#include "xnbackgroundmanager.h"
 
 // Local constants
 _LIT8( KRef, "ref" );
@@ -1912,7 +1913,7 @@
         XnPropertyNames::action::trigger::name::keyevent::KEventType );
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::KName,
-        nameValue, aUiEngine.ODT()->DomDocument().StringPool() );
+        nameValue, *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -1923,7 +1924,7 @@
     valueValue->SetFloatValueL( CXnDomPropertyValue::ENumber, aType );
     CXnProperty* value = CXnProperty::NewL(
         XnPropertyNames::action::KValue, valueValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( valueValue );
     CleanupStack::PushL( value );
     node->SetPropertyL( value );
@@ -1957,7 +1958,7 @@
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::KName,
         nameValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -1970,7 +1971,7 @@
     CXnProperty* value = CXnProperty::NewL(
         XnPropertyNames::action::KValue,
         valueValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( valueValue );
     CleanupStack::PushL( value );
     node->SetPropertyL( value );
@@ -2004,7 +2005,7 @@
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::KName,
         nameValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -2016,7 +2017,7 @@
     CXnProperty* value = CXnProperty::NewL(
         XnPropertyNames::action::KValue,
         valueValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( valueValue );
     CleanupStack::PushL( value );
     node->SetPropertyL( value );
@@ -2050,7 +2051,7 @@
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::KName,
         nameValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -2063,7 +2064,7 @@
     CXnProperty* value = CXnProperty::NewL(
         XnPropertyNames::action::KValue,
         valueValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( valueValue );
     CleanupStack::PushL( value );
     node->SetPropertyL( value );
@@ -2097,7 +2098,7 @@
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::KName,
         nameValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -2110,7 +2111,7 @@
     CXnProperty* value = CXnProperty::NewL(
         XnPropertyNames::action::KValue,
         valueValue,
-        aUiEngine.ODT()->DomDocument().StringPool()) ;
+        *aUiEngine.ODT()->DomDocument().StringPool()) ;
     CleanupStack::Pop( valueValue );
     CleanupStack::PushL( value );
     node->SetPropertyL( value );
@@ -2141,7 +2142,7 @@
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::trigger::KName,
         nameValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -2208,7 +2209,7 @@
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::trigger::KName,
         nameValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -3290,7 +3291,7 @@
     RPointerArray< CXnPluginData>& plugins( 
             aEngine.ViewManager()->ActiveViewData().PluginData() );
 
-    CXnDomStringPool& sp( aEventNode.StringPool() );
+    CXnDomStringPool* sp( aEventNode.StringPool() );
     
     CXnDomList& children( aEventNode.ChildNodes() );
 
@@ -3401,7 +3402,7 @@
             if ( !plugins[i]->Occupied() && useEmpty )
                 {                               
                 // Make empty space visible
-                SetStringPropertyToNodeL( sp, *node,
+                SetStringPropertyToNodeL( *sp, *node,
                     XnPropertyNames::style::common::KVisibility,
                     XnPropertyNames::style::common::visibility::KVisible );                    
                 }                                              
@@ -3483,7 +3484,7 @@
     RPointerArray< CXnPluginData>& plugins( 
             aEngine.ViewManager()->ActiveViewData().PluginData() );
 
-    CXnDomStringPool& sp( aEventNode.StringPool() );
+    CXnDomStringPool* sp( aEventNode.StringPool() );
 
     if ( keyEditMode )
         {
@@ -3510,7 +3511,7 @@
             if ( !plugins[i]->Occupied() && useEmpty )
                 {                               
                 // Make empty space blank
-                SetStringPropertyToNodeL( sp, *node,
+                SetStringPropertyToNodeL( *sp, *node,
                     XnPropertyNames::style::common::KVisibility,
                     XnPropertyNames::style::common::visibility::KBlank );                    
                 }
@@ -3637,7 +3638,7 @@
     {
     if ( aNode )
         {
-        CXnDomStringPool& sp = aEngine.ODT()->DomDocument().StringPool();
+        CXnDomStringPool* sp = aEngine.ODT()->DomDocument().StringPool();
         CXnDomProperty* prop = CXnDomProperty::NewL( aName, sp );
         CleanupStack::PushL( prop );
 
@@ -3681,7 +3682,7 @@
     {
     if ( aNode )
         {
-        CXnDomStringPool& sp = aEngine.ODT()->DomDocument().StringPool();
+        CXnDomStringPool* sp = aEngine.ODT()->DomDocument().StringPool();
         CXnDomProperty* prop = CXnDomProperty::NewL( aName, sp );
         CleanupStack::PushL( prop );
 
@@ -3730,7 +3731,7 @@
     {
     if ( aNode )
         {
-        CXnDomStringPool& sp = aEngine.ODT()->DomDocument().StringPool();
+        CXnDomStringPool* sp = aEngine.ODT()->DomDocument().StringPool();
         CXnDomProperty* prop = CXnDomProperty::NewL( aName, sp );
         CleanupStack::PushL( prop );
 
@@ -4403,12 +4404,12 @@
             XnPropertyNames::action::trigger::name::KEditMode ) );
         CleanupStack::PushL( trigger );
 
-        CXnDomStringPool& sp( aEngine.ODT()->DomDocument().StringPool() );
+        CXnDomStringPool* sp( aEngine.ODT()->DomDocument().StringPool() );
         
         CXnProperty* value( CXnProperty::NewL(
             XnPropertyNames::action::KValue,
             XnPropertyNames::action::trigger::name::editmode::KEnter, 
-            CXnDomPropertyValue::EString, sp ) );
+            CXnDomPropertyValue::EString, *sp ) );
         CleanupStack::PushL( value );
         
         trigger->SetPropertyL( value );
@@ -4426,12 +4427,12 @@
             XnPropertyNames::action::trigger::name::KEditMode ) );
         CleanupStack::PushL( trigger );
         
-        CXnDomStringPool& sp( aEngine.ODT()->DomDocument().StringPool() );
+        CXnDomStringPool* sp( aEngine.ODT()->DomDocument().StringPool() );
         
         CXnProperty* value( CXnProperty::NewL(
             XnPropertyNames::action::KValue,
             XnPropertyNames::action::trigger::name::editmode::KExit, 
-            CXnDomPropertyValue::EString, sp ) );
+            CXnDomPropertyValue::EString, *sp ) );
         CleanupStack::PushL( value );
         
         trigger->SetPropertyL( value );
@@ -4468,7 +4469,7 @@
         }
     else if ( nameString == XnPropertyNames::action::event::KSetWallpaper )
         {
-        aEngine.Editor()->SetWallpaperL();
+        aEngine.Editor()->BgManager().SetWallpaperL();
         return ETrue;
         }
            
@@ -6891,13 +6892,13 @@
         node = aSiblingArray[i];
         if ( DisplayValueMatchL( *node, KBlock ) )
             {
-            CXnDomStringPool& sp = node->DomNode()->StringPool();
+            CXnDomStringPool* sp = node->DomNode()->StringPool();
             //Switch the display to 'none' to visible siblings.
-            SetStringPropertyToNodeL( sp, *node, KDisplay, KNone );
+            SetStringPropertyToNodeL( *sp, *node, KDisplay, KNone );
             node = aSiblingArray[toBeDisplayed];
             toBeDisplayed++;
             //Switch the display to 'block' to hidden siblings.
-            SetStringPropertyToNodeL( sp, *node, KDisplay, KBlock );
+            SetStringPropertyToNodeL( *sp, *node, KDisplay, KBlock );
             }
         }
     }
@@ -6917,13 +6918,13 @@
         node = aSiblingArray[--i];
         if ( DisplayValueMatchL( *node, KBlock ) )
             {
-            CXnDomStringPool& sp = node->DomNode()->StringPool();
+            CXnDomStringPool* sp = node->DomNode()->StringPool();
             //Switch the display to 'none' to visible siblings.
-            SetStringPropertyToNodeL( sp, *node, KDisplay, KNone );
+            SetStringPropertyToNodeL( *sp, *node, KDisplay, KNone );
             node = aSiblingArray[toBeDisplayed];
             toBeDisplayed--;
             //Switch the display to 'block' to hidden siblings.
-            SetStringPropertyToNodeL( sp, *node, KDisplay, KBlock );
+            SetStringPropertyToNodeL( *sp, *node, KDisplay, KBlock );
             }
         }
     }
@@ -7021,14 +7022,14 @@
         if ( oldestIndex - 1 >= 0 )
             {
             node = aChildren[oldestIndex - 1];
-            CXnDomStringPool& sp = node->DomNode()->StringPool();
-            SetStringPropertyToNodeL( sp, *node, KDisplay, KBlock );
+            CXnDomStringPool* sp = node->DomNode()->StringPool();
+            SetStringPropertyToNodeL( *sp, *node, KDisplay, KBlock );
             // find youngest sibling with display block
             TInt index( 0 );
             node = FindYoungestSiblingWithDisplayL( aChildren, KBlock, index );
             if ( node )
                 {
-                SetStringPropertyToNodeL( sp, *node, KDisplay, KNone );
+                SetStringPropertyToNodeL( *sp, *node, KDisplay, KNone );
                 }
             }
         else
@@ -7069,14 +7070,14 @@
         if ( index < siblingCount - 1 )
             {
             node = aChildren[index + 1];
-            CXnDomStringPool& sp = node->DomNode()->StringPool();
-            SetStringPropertyToNodeL( sp , *node, KDisplay, KBlock );
+            CXnDomStringPool* sp = node->DomNode()->StringPool();
+            SetStringPropertyToNodeL( *sp , *node, KDisplay, KBlock );
             // find oldest sibling with display block
             TInt oldestIndex( 0 );
             node = FindOldestSiblingWithDisplayL( aChildren, KBlock, oldestIndex );
             if ( node )
                 {
-                SetStringPropertyToNodeL( sp, *node, KDisplay, KNone );
+                SetStringPropertyToNodeL( *sp, *node, KDisplay, KNone );
                 }
             }
         else // we are end of list
@@ -7223,7 +7224,7 @@
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::trigger::KName,
         nameValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -7464,14 +7465,14 @@
 
     SetDirtyL( XnDirtyLevel::ERender );
 
-    CXnDomStringPool& sp( iDomNode->StringPool() );
+    CXnDomStringPool* sp( iDomNode->StringPool() );
 
     CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( sp );
     CleanupStack::PushL( newValue );
     newValue->SetStringValueL( CXnDomPropertyValue::EString, KNullDesC8 );
     // create property
     CXnProperty* prop = CXnProperty::NewL(
-        XnPropertyNames::common::KPCData, newValue, sp );
+        XnPropertyNames::common::KPCData, newValue, *sp );
     CleanupStack::Pop( newValue );
     CleanupStack::PushL( prop );
 
@@ -7516,7 +7517,7 @@
 // Searchs and shoes tooltips
 // -----------------------------------------------------------------------------
 //
-void CXnNodeImpl::ShowPopupsL( TRect aRect, TInt aSource )
+void CXnNodeImpl::ShowPopupsL( TRect aRect, TInt /*aSource*/ )
     {
     if ( iHandleTooltip )
         {
@@ -10014,7 +10015,7 @@
         iAdaptive |= XnAdaptive::EIgnoreDirty;
 
         SetStringPropertyToNodeL(
-            DomNode()->StringPool(), *Node(),
+            *DomNode()->StringPool(), *Node(),
             XnPropertyNames::style::common::KWidth,
             XnPropertyNames::style::common::KAuto );
 
@@ -10030,7 +10031,7 @@
         iAdaptive |= XnAdaptive::EIgnoreDirty;
 
         SetStringPropertyToNodeL(
-            DomNode()->StringPool(), *Node(),
+            *DomNode()->StringPool(), *Node(),
             XnPropertyNames::style::common::KHeight,
             XnPropertyNames::style::common::KAuto );
 
@@ -10062,7 +10063,7 @@
             iAdaptive |= XnAdaptive::EIgnoreDirty;
 
             SetFloatPropertyToNodeL(
-                DomNode()->StringPool(), *Node(),
+                *DomNode()->StringPool(), *Node(),
                 XnPropertyNames::style::common::KWidth,
                 aFixedSize.iWidth, CXnDomPropertyValue::EPx );
 
@@ -10074,7 +10075,7 @@
             iAdaptive |= XnAdaptive::EIgnoreDirty;
 
             SetFloatPropertyToNodeL(
-                DomNode()->StringPool(), *Node(),
+                *DomNode()->StringPool(), *Node(),
                 XnPropertyNames::style::common::KHeight,
                 aFixedSize.iHeight, CXnDomPropertyValue::EPx );
 
--- a/idlehomescreen/xmluirendering/uiengine/src/xnnodepluginif.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnnodepluginif.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -489,7 +489,7 @@
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::trigger::KName,
         nameValue,
-        iNode->UiEngine()->ODT()->DomDocument().StringPool() );
+        *iNode->UiEngine()->ODT()->DomDocument().StringPool() );
 
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
@@ -504,7 +504,7 @@
     CXnProperty* index = CXnProperty::NewL(
         aValueName,
         indexValue,
-        iNode->UiEngine()->ODT()->DomDocument().StringPool() );
+        *iNode->UiEngine()->ODT()->DomDocument().StringPool() );
 
     CleanupStack::Pop( indexValue );
     CleanupStack::PushL( index );
--- a/idlehomescreen/xmluirendering/uiengine/src/xnodtparser.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnodtparser.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -370,10 +370,10 @@
             continue;
             }
          CXnDomProperty* clone =
-            CXnDomProperty::NewL( attribute->NameStringPoolIndex(), aStringPool );
+            CXnDomProperty::NewL( attribute->NameStringPoolIndex(), &aStringPool );
         CleanupStack::PushL( clone );
         CXnDomPropertyValue* propertyValue =
-            CXnDomPropertyValue::NewL( aStringPool );
+            CXnDomPropertyValue::NewL( &aStringPool );
         CleanupStack::PushL( propertyValue );
         propertyValue->SetStringPoolIndexL(
             CXnDomPropertyValue::EString, attribute->ValueStringPoolIndex() );
@@ -626,7 +626,7 @@
     {    
     CXnDomNode* root( aRootData.Owner() );
     
-    CXnDomStringPool& sp( root->StringPool() );
+    CXnDomStringPool* sp( root->StringPool() );
     
     CXnAppUiAdapter& appui( iManager.AppUiAdapter() );
     
@@ -638,7 +638,7 @@
     dom->SetLayoutNode( node );
     node->SetDomNode( dom );
         
-    CreateNodesL( root, sp, aRootData );
+    CreateNodesL( root, *sp, aRootData );
 
     // root doesn't have any controls   
     
@@ -654,10 +654,10 @@
     // <view> element
     CXnDomNode* view( aViewData.Node() );
     
-    CXnDomStringPool& sp( view->StringPool() );
+    CXnDomStringPool* sp( view->StringPool() );
 
     // from <view> element
-    CreateNodesL( view, sp, aViewData );       
+    CreateNodesL( view, *sp, aViewData );       
     CreateControlsL( view, aViewData );
 
     // By default make controls invisible
@@ -713,10 +713,10 @@
     // <widget> element
     CXnDomNode* widget( aPluginData.Node() );
     
-    CXnDomStringPool& sp( widget->StringPool() );
+    CXnDomStringPool* sp( widget->StringPool() );
 
     // from <widget> element 
-    CreateNodesL( widget, sp, aPluginData );           
+    CreateNodesL( widget, *sp, aPluginData );           
     CreateControlsL( widget, aPluginData );    
 
     HandleWidgetBackgroundL( widget->LayoutNode() );
@@ -1220,6 +1220,8 @@
             }
         }
 
+    __ASSERT_DEBUG( parentAdapter, User::Leave( KErrGeneral ) );
+    
     CXnControlAdapter* adapter( NULL );
     
     if( aName == KStylusPopupNodeName )
@@ -1236,7 +1238,7 @@
             XnPropertyNames::style::common::KPosition,
             XnPropertyNames::style::common::position::KFloating,
             CXnDomPropertyValue::EString, 
-            aNode.UiEngine()->ODT()->DomDocument().StringPool() );
+            *aNode.UiEngine()->ODT()->DomDocument().StringPool() );
         CleanupStack::PushL( prop );
         aNode.SetPropertyL( prop );                    
         CleanupStack::Pop( prop );                                                        
@@ -1304,7 +1306,7 @@
         
             CXnProperty* bgColor = CXnProperty::NewL(
                 XnPropertyNames::appearance::common::KBackGroundColor,
-                value, uiengine->ODT()->DomDocument().StringPool() );
+                value, *uiengine->ODT()->DomDocument().StringPool() );
         
             CleanupStack::Pop( value );
             CleanupStack::PushL( bgColor );
--- a/idlehomescreen/xmluirendering/uiengine/src/xnplugindata.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnplugindata.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -116,7 +116,7 @@
 //
 void CXnPluginData::ConstructL()
     {    
-    iLoader = CPeriodic::NewL( CActive::EPriorityUserInput );    
+    iLoader = CPeriodic::NewL( CActive::EPriorityStandard );    
     }
 
 // -----------------------------------------------------------------------------
--- a/idlehomescreen/xmluirendering/uiengine/src/xnproperty.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnproperty.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -162,7 +162,7 @@
 void CXnProperty::ConstructL( const TDesC8& aName,
     CXnDomPropertyValue* aPropertyValue, CXnDomStringPool& aStringPool )
     {
-    iProperty = CXnDomProperty::NewL( aName, aStringPool );
+    iProperty = CXnDomProperty::NewL( aName, &aStringPool );
     iIsDomPropertyOwned = ETrue;
 
     CXnDomList& propertyValueList = iProperty->PropertyValueList();
@@ -179,10 +179,10 @@
     CXnDomPropertyValue::TPrimitiveValueType aValueType,
     CXnDomStringPool& aStringPool )
     {
-    iProperty = CXnDomProperty::NewL( aPropertyName, aStringPool );
+    iProperty = CXnDomProperty::NewL( aPropertyName, &aStringPool );
     iIsDomPropertyOwned = ETrue;
 
-    CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( aStringPool );
+    CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( &aStringPool );
     CleanupStack::PushL( newValue );
 
     newValue->SetStringValueL( aValueType, aPropertyValue );
@@ -204,10 +204,10 @@
     CXnDomPropertyValue::TPrimitiveValueType aValueType,
     CXnDomStringPool& aStringPool )
     {
-    iProperty = CXnDomProperty::NewL( aPropertyName, aStringPool );
+    iProperty = CXnDomProperty::NewL( aPropertyName, &aStringPool );
     iIsDomPropertyOwned = ETrue;
 
-    CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( aStringPool );
+    CXnDomPropertyValue* newValue = CXnDomPropertyValue::NewL( &aStringPool );
     CleanupStack::PushL( newValue );
 
     newValue->SetFloatValueL( aValueType, aPropertyValue );
--- a/idlehomescreen/xmluirendering/uiengine/src/xnuiengine.rss	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnuiengine.rss	Mon Jan 18 20:10:36 2010 +0200
@@ -131,8 +131,7 @@
     items =
         {
         LBUF {txt = qtn_hs_default; },
-        LBUF {txt = qtn_hs_image; },
-        LBUF {txt = qtn_hs_slideshow; }
+        LBUF {txt = qtn_hs_image; }
         };
     }
     
--- a/idlehomescreen/xmluirendering/uiengine/src/xnuiengineappif.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnuiengineappif.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -198,7 +198,7 @@
 //
 EXPORT_C CXnDomStringPool& TXnUiEngineAppIf::StringPool()
     {
-    return iUiEngine->ODT()->DomDocument().StringPool();
+    return *iUiEngine->ODT()->DomDocument().StringPool();
     }
 
 // -----------------------------------------------------------------------------
--- a/idlehomescreen/xmluirendering/uiengine/src/xnuiengineimpl.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnuiengineimpl.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -52,6 +52,8 @@
 #include "xnnode.h"
 #include "xnpanic.h"
 #include "xneffectmanager.h"
+#include "xneditor.h"
+#include "xnbackgroundmanager.h"
 
 #ifdef _XN_PERFORMANCE_TEST_
 #include "xntimemon.h"
@@ -7779,7 +7781,7 @@
 
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::trigger::KName,
-        nameValue, aUiEngine.ODT()->DomDocument().StringPool() );
+        nameValue, *aUiEngine.ODT()->DomDocument().StringPool() );
 
     CleanupStack::Pop( nameValue );
 
@@ -7838,7 +7840,7 @@
 //
 static CXnNode* BuildScreenDeviceChangeTriggerNodeLC( CXnUiEngine& aUiEngine )
     {
-    CXnDomStringPool& sp( aUiEngine.ODT()->DomDocument().StringPool() );
+    CXnDomStringPool* sp( aUiEngine.ODT()->DomDocument().StringPool() );
 
     CXnNode* node = CXnNode::NewL();
     CleanupStack::PushL( node );
@@ -7859,7 +7861,7 @@
         XnPropertyNames::action::trigger::name::KScreenDeviceChange );
 
     CXnProperty* name = CXnProperty::NewL(
-        XnPropertyNames::action::trigger::KName, nameValue, sp );
+        XnPropertyNames::action::trigger::KName, nameValue, *sp );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
 
@@ -7885,7 +7887,7 @@
     reasonValue->SetStringValueL( CXnDomPropertyValue::EString, *reasonString );
 
     CXnProperty* reason = CXnProperty::NewL( XnPropertyNames::action::trigger::
-        name::uidefinitionmodification::KReason, reasonValue, sp );
+        name::uidefinitionmodification::KReason, reasonValue, *sp );
 
     CleanupStack::Pop( reasonValue );
 
@@ -8934,6 +8936,12 @@
         // Update client rect
         SetClientRectL( iAppUiAdapter.ClientRect(), EFalse );
 
+        // Update background rect
+        // Bg rect is always screen size.
+        TRect bgRect;
+        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, bgRect );
+        Editor()->BgManager().SetRect( bgRect );
+
         iEditMode->HandleScreenDeviceChangedL();
         
         // Force relayout
@@ -9373,7 +9381,7 @@
             iClientRect );
         
         iAppUiAdapter.ViewAdapter().BgControl().SetRect( aRect );
-        
+
         if ( aDrawNow )
             {
             RootNode()->SetDirtyL();
@@ -9507,7 +9515,7 @@
 void CXnUiEngineImpl::PositionStylusPopupL( CXnNode& aNode,
     CXnNode& aReference, const TPoint& aPosition )
     {
-    CXnDomStringPool& sp( aNode.DomNode()->StringPool() );
+    CXnDomStringPool* sp( aNode.DomNode()->StringPool() );
     TXnDirtyRegion* dirtyRegion = FindDirtyRegionL( *iCurrentView );
     RRegion region;
     region.Copy( dirtyRegion->iRegion );    
@@ -9516,14 +9524,14 @@
     // Set initial position to (0, 0) to calculate popup metrics
     CXnProperty* top = CXnProperty::NewL(
         XnPropertyNames::style::common::KTop, 0,
-        CXnDomPropertyValue::EPx, sp );
+        CXnDomPropertyValue::EPx, *sp );
     CleanupStack::PushL( top );
     aNode.SetPropertyL( top );
     CleanupStack::Pop( top );
     top = NULL;
     CXnProperty* left = CXnProperty::NewL(
         XnPropertyNames::style::common::KLeft, 0,
-        CXnDomPropertyValue::EPx, sp );
+        CXnDomPropertyValue::EPx, *sp );
     CleanupStack::PushL( left );
     aNode.SetPropertyL( left );
     CleanupStack::Pop( left );
@@ -9533,7 +9541,7 @@
     CXnProperty* display = CXnProperty::NewL(
         XnPropertyNames::style::common::KDisplay,
         XnPropertyNames::style::common::display::KBlock,
-        CXnDomPropertyValue::EString, sp );
+        CXnDomPropertyValue::EString, *sp );
     CleanupStack::PushL( display );
     aNode.SetPropertyL( display );
     CleanupStack::Pop( display );
@@ -9717,13 +9725,13 @@
     // Set positions
     top = CXnProperty::NewL(
         XnPropertyNames::style::common::KTop, tl.iY,
-        CXnDomPropertyValue::EPx, sp );
+        CXnDomPropertyValue::EPx, *sp );
     CleanupStack::PushL( top );
     aNode.SetPropertyL( top );
     CleanupStack::Pop( top );
     left = CXnProperty::NewL(
         XnPropertyNames::style::common::KLeft, tl.iX,
-        CXnDomPropertyValue::EPx, sp );
+        CXnDomPropertyValue::EPx, *sp );
     CleanupStack::PushL( left );
     aNode.SetPropertyL( left );
     CleanupStack::Pop( left );
--- a/idlehomescreen/xmluirendering/uiengine/src/xnuienginepluginif.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnuienginepluginif.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -197,7 +197,7 @@
 //
 EXPORT_C CXnDomStringPool& TXnUiEnginePluginIf::StringPool()
     {
-    return iUiEngine->ODT()->DomDocument().StringPool();
+    return *iUiEngine->ODT()->DomDocument().StringPool();
     }
 
 // -----------------------------------------------------------------------------
--- a/idlehomescreen/xmluirendering/uiengine/src/xnviewadapter.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnviewadapter.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -81,7 +81,7 @@
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::trigger::KName,
         nameValue,
-        aUiEngine.ODT()->DomDocument().StringPool() );
+        *aUiEngine.ODT()->DomDocument().StringPool() );
     CleanupStack::Pop( nameValue );
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -116,11 +116,11 @@
 //
 static CXnNode* BuildEditStateTriggerL( CXnUiEngine& aUiEngine )
     {
-    CXnDomStringPool& sp( aUiEngine.ODT()->DomDocument().StringPool() );
+    CXnDomStringPool* sp( aUiEngine.ODT()->DomDocument().StringPool() );
     
     CXnProperty* value = CXnProperty::NewL(
         XnPropertyNames::action::KValue,
-        KNullDesC8, CXnDomPropertyValue::EString, sp );
+        KNullDesC8, CXnDomPropertyValue::EString, *sp );
     CleanupStack::PushL( value );
     
     CXnNode* trigger( BuildTriggerL(
--- a/idlehomescreen/xmluirendering/uiengine/src/xnviewdata.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnviewdata.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -196,8 +196,11 @@
         
         iManager.Parser().DestroyView( *this );
         }
-    
-    Flush();    
+    delete iBgImage;
+    iBgImage = NULL;
+    Flush();  
+    delete iBgImagePath;
+    iBgImagePath = NULL;
     }
 
 // -----------------------------------------------------------------------------
@@ -274,6 +277,51 @@
     }
 
 // -----------------------------------------------------------------------------
+// CXnViewData::SetWallpaperImage
+// Store background image. Ownership is transferred.
+// -----------------------------------------------------------------------------
+//
+void CXnViewData::SetWallpaperImage( CFbsBitmap* aBitmap )
+    {
+    delete iBgImage;
+    iBgImage = aBitmap;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnViewData::WallpaperImage
+// Get wallpaper image.
+// -----------------------------------------------------------------------------
+//
+CFbsBitmap* CXnViewData::WallpaperImage() const
+    {
+    return iBgImage;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnViewData::SetWallpaperImagePathL
+// -----------------------------------------------------------------------------
+//
+void CXnViewData::SetWallpaperImagePathL( const TDesC& aFileName )
+    {
+    delete iBgImagePath;
+    iBgImagePath = NULL;
+    iBgImagePath = aFileName.AllocL();
+    }
+
+// -----------------------------------------------------------------------------
+// CXnViewData::WallpaperImagePath
+// -----------------------------------------------------------------------------
+//
+const TDesC& CXnViewData::WallpaperImagePath() const
+    {
+    if( iBgImagePath )
+        {
+        return *iBgImagePath;        
+        }
+    return KNullDesC;
+    }
+
+// -----------------------------------------------------------------------------
 // CXnViewData::ResourcesL()
 // Gets this view data's resources
 // -----------------------------------------------------------------------------
--- a/idlehomescreen/xmluirendering/uiengine/src/xnviewmanager.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnviewmanager.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -50,6 +50,7 @@
 #include "xncomponentnodeimpl.h"
 #include "xnnodepluginif.h"
 #include "xnoomsyshandler.h"
+#include "xnbackgroundmanager.h"
 
 // Constants
 _LIT8( KEmptyWidgetUid, "0x2001f47f" );
@@ -115,11 +116,11 @@
     node->SetImpl( impl );
     node->SetUiEngine( aUiEngine );
 
-    CXnDomStringPool& sp( aUiEngine.ODT()->DomDocument().StringPool() );
+    CXnDomStringPool* sp( aUiEngine.ODT()->DomDocument().StringPool() );
 
     CXnProperty* name = CXnProperty::NewL(
         XnPropertyNames::action::trigger::KName, aStringValue,
-        CXnDomPropertyValue::EString, sp );
+        CXnDomPropertyValue::EString, *sp );
 
     CleanupStack::PushL( name );
     node->SetPropertyL( name );
@@ -127,7 +128,7 @@
 
     CXnProperty* value = CXnProperty::NewL(
         XnPropertyNames::action::KValue,
-        KNullDesC8, CXnDomPropertyValue::EString, sp );
+        KNullDesC8, CXnDomPropertyValue::EString, *sp );
 
     CleanupStack::PushL( value );
     node->SetPropertyL( value );
@@ -871,6 +872,7 @@
     if ( next.Occupied() )
         {            
         iAppUiAdapter.ViewAdapter().ActivateContainerL( next );                
+        UpdateWallpaperL( current, next );
         }
     }
 
@@ -893,6 +895,7 @@
     if ( prev.Occupied() )
         {   
         iAppUiAdapter.ViewAdapter().ActivateContainerL( prev );
+        UpdateWallpaperL( current, prev );
         }
     }
 
@@ -1633,6 +1636,15 @@
     }
 
 // -----------------------------------------------------------------------------
+// CXnViewManager::UpdateWallpaperL
+// -----------------------------------------------------------------------------
+//
+void CXnViewManager::UpdateWallpaperL( CXnViewData& aCurrent, CXnViewData& aNew )
+    {
+    iEditor->BgManager().WallpaperChanged( aCurrent, aNew );
+    }
+
+// -----------------------------------------------------------------------------
 // CXnViewManager::ShowOperationFailedMessageL
 // -----------------------------------------------------------------------------
 //
--- a/idlehomescreen/xmluirendering/uiengine/src/xnwallpaperview.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnwallpaperview.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -21,6 +21,7 @@
 #include "xnwallpapercontainer.h"
 #include "xnuiengine.h"
 #include "xneditor.h"
+#include "xnbackgroundmanager.h"
 
 // SYSTEM INCLUDE FILES
 #include <aknappui.h>
@@ -93,7 +94,7 @@
 //
 void CXnWallpaperView::DoActivateL(
             const TVwsViewId& aPrevViewId,
-            TUid aCustomMessageId,
+            TUid /*aCustomMessageId*/,
             const TDesC8& aCustomMessage )
     {
     iAvkonAppUi->StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL );
@@ -124,19 +125,9 @@
         // set wallpaper.
         if( files->MdcaCount() == 1 )
             {
-            AknsWallpaperUtils::SetIdleWallpaper(
-                    files->MdcaPoint( 0 ),
-                    NULL );
-            }
-        //set slideshow
-        else
-            {
-            AknsWallpaperUtils::SetSlidesetWallpaper(
-                    *files,
-                    NULL );
+            iEngine.Editor()->BgManager().AddWallpaperL( files->MdcaPoint( 0 ) );
             }
         }
-    
     CleanupStack::PopAndDestroy( files );
     
     iAvkonAppUi->ActivateViewL( aPrevViewId );
--- a/idlehomescreen/xmluirendering/uiengine/src/xnwidgetextensionadapter.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnwidgetextensionadapter.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -266,10 +266,10 @@
                     // we can close it
                     if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
                         {
-                        CXnDomStringPool& sp =
+                        CXnDomStringPool* sp =
                             iNode.Node().DomNode()->StringPool();
                         CXnProperty* prop = CXnProperty::NewL( KDisplay, KNone,
-                        CXnDomPropertyValue::EString, sp );
+                        CXnDomPropertyValue::EString, *sp );
                         CleanupStack::PushL( prop );
                         iNode.Node().SetPropertyL( prop );
                         CleanupStack::Pop( prop );
--- a/menufw/menufwui/matrixmenu/src/mmappui.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/menufw/menufwui/matrixmenu/src/mmappui.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -12,8 +12,8 @@
 * Contributors:
 *
 * Description:  Application UI class
-*  Version     : %version: MM_176.1.28.1.54 % << Don't touch! Updated by Synergy at check-out.
-*  Version     : %version: MM_176.1.28.1.54 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: MM_176.1.28.1.56 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: MM_176.1.28.1.56 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -214,22 +214,15 @@
         iIsKastorEffectStarted = ETrue;
         TInt lastItemIndex = iCurrentContainer->NumberOfItems() - 1;
 
-        TBool makeLastItemVisible = lastItemIndex >= 0 &&
-			iCurrentContainer->ItemIsFullyVisible( lastItemIndex );
-
+        if ( lastItemIndex >= 0 && iCurrentContainer->ItemIsFullyVisible( lastItemIndex ) && 
+        		!iCurrentContainer->IsHighlightVisible() )
+        	{
+        	iCurrentContainer->SetManualHighlightL( lastItemIndex, EFalse );
+        	}
+     
         iCurrentContainer->SetRect( ClientRect() );
         iDummyContainer->SetRect( ClientRect() );
 
-        // This fixes a problem (view scrolled one row up) that occurs when
-        // switching from portrait to landscape orientation with scrollbar
-        // in bottom position.
-        if ( makeLastItemVisible )
-        	{
-        	iCurrentContainer->Widget()->View()->SetTopItemIndex(
-        		iCurrentContainer->Widget()->View()->
-					CalcNewTopItemIndexSoItemIsVisible(	lastItemIndex ) );
-        	}
-
         THashMapIter< TInt, CMmWidgetContainer* > iterator( iContainerMap );
         while( iterator.NextKey() )
             {
@@ -1527,12 +1520,19 @@
                             aMenuPane->
                                 ItemData( aMenuPane->MenuItemCommandId( i ) ) );
                         }
+                    
+                    TInt itemSpecificMenuItemsCount = 0;
 
                     //get custom menu items and their positions
                     while ( menuIterator->HasNext() )
                         {
                         CHnMenuItemModel* menuItem = menuIterator->GetNext();
-                        if ( !menuItem->IsItemSpecific() || !ignoreItemSpecific )
+                        TBool isItemSpecific = menuItem->IsItemSpecific();
+                        if ( isItemSpecific )
+                            {
+                            ++itemSpecificMenuItemsCount;
+                            }
+                        if ( !isItemSpecific || !ignoreItemSpecific )
                         	{
                         	CEikMenuPaneItem::SData menuData;
 							menuData.iCommandId = menuItem->Command();
@@ -1570,6 +1570,11 @@
 							menuItemMap.InsertL( menuItem->Position(), menuData );
                         	}
                         }
+                    
+                    // DynInitMenuPaneL always gets called immediately after an item is touched and
+                    // because of that it is possible to enable/disable settings that affect long
+                    // tap behavior here.
+                    iCurrentContainer->EnableLongTapAnimation( itemSpecificMenuItemsCount > 0 );
 
                     aMenuPane->Reset();
                     positionArray.Sort();
--- a/menufw/menufwui/mmwidgets/bwins/mmwidgetsu.def	Thu Jan 07 12:39:41 2010 +0200
+++ b/menufw/menufwui/mmwidgets/bwins/mmwidgetsu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -1,42 +1,43 @@
 EXPORTS
-	?SetHighlightVisibilityL@CMmWidgetContainer@@UAEXH@Z @ 1 NONAME ; void CMmWidgetContainer::SetHighlightVisibilityL(int)
-	?SetDefaultHighlightL@CMmGridContainer@@UAEXH@Z @ 2 NONAME ; void CMmGridContainer::SetDefaultHighlightL(int)
-	?PrepareForGarbage@CMmWidgetContainer@@QAEXXZ @ 3 NONAME ; void CMmWidgetContainer::PrepareForGarbage(void)
-	?GetPreviousHighlight@CMmWidgetContainer@@UAEHXZ @ 4 NONAME ; int CMmWidgetContainer::GetPreviousHighlight(void)
-	?SetHasFocusL@CMmWidgetContainer@@QAEXH@Z @ 5 NONAME ; void CMmWidgetContainer::SetHasFocusL(int)
-	?HandleItemAdditionL@CMmWidgetContainer@@UAEXXZ @ 6 NONAME ; void CMmWidgetContainer::HandleItemAdditionL(void)
-	?NewLC@CMmTemplateLibrary@@SAPAV1@XZ @ 7 NONAME ; class CMmTemplateLibrary * CMmTemplateLibrary::NewLC(void)
-	?IsDraggable@CMmWidgetContainer@@QAEHXZ @ 8 NONAME ; int CMmWidgetContainer::IsDraggable(void)
-	?HandleItemRemovalL@CMmWidgetContainer@@UAEXXZ @ 9 NONAME ; void CMmWidgetContainer::HandleItemRemovalL(void)
-	?NumberOfItemsChangedL@CMmWidgetContainer@@QAEXW4TItemsChangeType@@@Z @ 10 NONAME ; void CMmWidgetContainer::NumberOfItemsChangedL(enum TItemsChangeType)
-	?RestoreWidgetPosition@CMmWidgetContainer@@QAEXXZ @ 11 NONAME ; void CMmWidgetContainer::RestoreWidgetPosition(void)
-	?GetSuiteModelL@CMmWidgetContainer@@QAEPAVCHnSuiteModel@@XZ @ 12 NONAME ; class CHnSuiteModel * CMmWidgetContainer::GetSuiteModelL(void)
-	?HandleForegroundGainedL@CMmWidgetContainer@@UAEXXZ @ 13 NONAME ; void CMmWidgetContainer::HandleForegroundGainedL(void)
-	?NewL@CMmHighlightTimer@@SAPAV1@PAVCMmWidgetContainer@@@Z @ 14 NONAME ; class CMmHighlightTimer * CMmHighlightTimer::NewL(class CMmWidgetContainer *)
-	?NewL@CMmTemplateLibrary@@SAPAV1@XZ @ 15 NONAME ; class CMmTemplateLibrary * CMmTemplateLibrary::NewL(void)
-	?CancelDragL@CMmWidgetContainer@@QAEXH@Z @ 16 NONAME ; void CMmWidgetContainer::CancelDragL(int)
-	?SetManualHighlightL@CMmWidgetContainer@@UAEXHH@Z @ 17 NONAME ; void CMmWidgetContainer::SetManualHighlightL(int, int)
-	?HandleOptionsMenuVisibilityChangeL@CMmWidgetContainer@@UAEXH@Z @ 18 NONAME ; void CMmWidgetContainer::HandleOptionsMenuVisibilityChangeL(int)
-	?ItemIsFullyVisible@CMmWidgetContainer@@QAEHH@Z @ 19 NONAME ; int CMmWidgetContainer::ItemIsFullyVisible(int)
-	?NewGridContainerL@CMmWidgetContainer@@SAPAV1@ABVTRect@@PAVMObjectProvider@@PAVCMmTemplateLibrary@@@Z @ 20 NONAME ; class CMmWidgetContainer * CMmWidgetContainer::NewGridContainerL(class TRect const &, class MObjectProvider *, class CMmTemplateLibrary *)
-	?NumberOfItems@CMmWidgetContainer@@QAEHXZ @ 21 NONAME ; int CMmWidgetContainer::NumberOfItems(void)
-	?WidgetType@CMmWidgetContainer@@UAE?AW4THnSuiteWidgetType@@XZ @ 22 NONAME ; enum THnSuiteWidgetType CMmWidgetContainer::WidgetType(void)
-	?GetHighlight@CMmWidgetContainer@@UAEHXZ @ 23 NONAME ; int CMmWidgetContainer::GetHighlight(void)
-	?ItemIconZoomL@CMmWidgetContainer@@QAEXH@Z @ 24 NONAME ; void CMmWidgetContainer::ItemIconZoomL(int)
-	?ResetWidgetPosition@CMmWidgetContainer@@QAEXXZ @ 25 NONAME ; void CMmWidgetContainer::ResetWidgetPosition(void)
-	?HandleBackgroundGainedL@CMmWidgetContainer@@UAEXXZ @ 26 NONAME ; void CMmWidgetContainer::HandleBackgroundGainedL(void)
-	?CacheWidgetPosition@CMmWidgetContainer@@QAEXXZ @ 27 NONAME ; void CMmWidgetContainer::CacheWidgetPosition(void)
-	?NewLC@CMmHighlightTimer@@SAPAV1@PAVCMmWidgetContainer@@@Z @ 28 NONAME ; class CMmHighlightTimer * CMmHighlightTimer::NewLC(class CMmWidgetContainer *)
-	?SetEmptyTextL@CMmListBoxContainer@@UAEXABVTDesC16@@@Z @ 29 NONAME ; void CMmListBoxContainer::SetEmptyTextL(class TDesC16 const &)
-	?SetObserver@CMmWidgetContainer@@UAEXPAVMMmWidgetObserver@@@Z @ 30 NONAME ; void CMmWidgetContainer::SetObserver(class MMmWidgetObserver *)
-	?IsHighlightVisible@CMmWidgetContainer@@UAEHXZ @ 31 NONAME ; int CMmWidgetContainer::IsHighlightVisible(void)
-	?GetItemRectL@CMmWidgetContainer@@QAE?AVTRect@@H@Z @ 32 NONAME ; class TRect CMmWidgetContainer::GetItemRectL(int)
-	?EndLongTapL@CMmWidgetContainer@@UAEXH@Z @ 33 NONAME ; void CMmWidgetContainer::EndLongTapL(int)
-	?SetIsFaded@CMmWidgetContainer@@QAEXH@Z @ 34 NONAME ; void CMmWidgetContainer::SetIsFaded(int)
-	?NewListBoxContainerL@CMmWidgetContainer@@SAPAV1@ABVTRect@@PAVMObjectProvider@@PAVCMmTemplateLibrary@@@Z @ 35 NONAME ; class CMmWidgetContainer * CMmWidgetContainer::NewListBoxContainerL(class TRect const &, class MObjectProvider *, class CMmTemplateLibrary *)
-	?StopMovingL@CMmWidgetContainer@@QAEXXZ @ 36 NONAME ; void CMmWidgetContainer::StopMovingL(void)
-	?SetDefaultHighlightL@CMmListBoxContainer@@UAEXH@Z @ 37 NONAME ; void CMmListBoxContainer::SetDefaultHighlightL(int)
-	?SetEmptyTextL@CMmGridContainer@@UAEXABVTDesC16@@@Z @ 38 NONAME ; void CMmGridContainer::SetEmptyTextL(class TDesC16 const &)
-	?SetLongTapObserver@CMmWidgetContainer@@UAEXPAVMMmLongTapObserver@@@Z @ 39 NONAME ; void CMmWidgetContainer::SetLongTapObserver(class MMmLongTapObserver *)
-	?ScrollToItemL@CMmWidgetContainer@@QAEHH@Z @ 40 NONAME ; int CMmWidgetContainer::ScrollToItemL(int)
+	?GetPreviousHighlight@CMmWidgetContainer@@UAEHXZ @ 1 NONAME ; int CMmWidgetContainer::GetPreviousHighlight(void)
+	?HandleItemRemovalL@CMmWidgetContainer@@UAEXXZ @ 2 NONAME ; void CMmWidgetContainer::HandleItemRemovalL(void)
+	?SetObserver@CMmWidgetContainer@@UAEXPAVMMmWidgetObserver@@@Z @ 3 NONAME ; void CMmWidgetContainer::SetObserver(class MMmWidgetObserver *)
+	?ItemIconZoomL@CMmWidgetContainer@@QAEXH@Z @ 4 NONAME ; void CMmWidgetContainer::ItemIconZoomL(int)
+	?SetDefaultHighlightL@CMmListBoxContainer@@UAEXH@Z @ 5 NONAME ; void CMmListBoxContainer::SetDefaultHighlightL(int)
+	?GetItemRectL@CMmWidgetContainer@@QAE?AVTRect@@H@Z @ 6 NONAME ; class TRect CMmWidgetContainer::GetItemRectL(int)
+	?ScrollToItemL@CMmWidgetContainer@@QAEHH@Z @ 7 NONAME ; int CMmWidgetContainer::ScrollToItemL(int)
+	?IsHighlightVisible@CMmWidgetContainer@@UAEHXZ @ 8 NONAME ; int CMmWidgetContainer::IsHighlightVisible(void)
+	?HandleBackgroundGainedL@CMmWidgetContainer@@UAEXXZ @ 9 NONAME ; void CMmWidgetContainer::HandleBackgroundGainedL(void)
+	?SetHasFocusL@CMmWidgetContainer@@QAEXH@Z @ 10 NONAME ; void CMmWidgetContainer::SetHasFocusL(int)
+	?NewGridContainerL@CMmWidgetContainer@@SAPAV1@ABVTRect@@PAVMObjectProvider@@PAVCMmTemplateLibrary@@@Z @ 11 NONAME ; class CMmWidgetContainer * CMmWidgetContainer::NewGridContainerL(class TRect const &, class MObjectProvider *, class CMmTemplateLibrary *)
+	?SetLongTapObserver@CMmWidgetContainer@@UAEXPAVMMmLongTapObserver@@@Z @ 12 NONAME ; void CMmWidgetContainer::SetLongTapObserver(class MMmLongTapObserver *)
+	?EndLongTapL@CMmWidgetContainer@@UAEXH@Z @ 13 NONAME ; void CMmWidgetContainer::EndLongTapL(int)
+	?NumberOfItems@CMmWidgetContainer@@QAEHXZ @ 14 NONAME ; int CMmWidgetContainer::NumberOfItems(void)
+	?GetSuiteModelL@CMmWidgetContainer@@QAEPAVCHnSuiteModel@@XZ @ 15 NONAME ; class CHnSuiteModel * CMmWidgetContainer::GetSuiteModelL(void)
+	?NewLC@CMmTemplateLibrary@@SAPAV1@XZ @ 16 NONAME ; class CMmTemplateLibrary * CMmTemplateLibrary::NewLC(void)
+	?NewL@CMmTemplateLibrary@@SAPAV1@XZ @ 17 NONAME ; class CMmTemplateLibrary * CMmTemplateLibrary::NewL(void)
+	?NumberOfItemsChangedL@CMmWidgetContainer@@QAEXW4TItemsChangeType@@@Z @ 18 NONAME ; void CMmWidgetContainer::NumberOfItemsChangedL(enum TItemsChangeType)
+	?SetManualHighlightL@CMmWidgetContainer@@UAEXHH@Z @ 19 NONAME ; void CMmWidgetContainer::SetManualHighlightL(int, int)
+	?IsDraggable@CMmWidgetContainer@@QAEHXZ @ 20 NONAME ; int CMmWidgetContainer::IsDraggable(void)
+	?HandleForegroundGainedL@CMmWidgetContainer@@UAEXXZ @ 21 NONAME ; void CMmWidgetContainer::HandleForegroundGainedL(void)
+	?SetDefaultHighlightL@CMmGridContainer@@UAEXH@Z @ 22 NONAME ; void CMmGridContainer::SetDefaultHighlightL(int)
+	?WidgetType@CMmWidgetContainer@@UAE?AW4THnSuiteWidgetType@@XZ @ 23 NONAME ; enum THnSuiteWidgetType CMmWidgetContainer::WidgetType(void)
+	?SetEmptyTextL@CMmGridContainer@@UAEXABVTDesC16@@@Z @ 24 NONAME ; void CMmGridContainer::SetEmptyTextL(class TDesC16 const &)
+	?HandleItemAdditionL@CMmWidgetContainer@@UAEXXZ @ 25 NONAME ; void CMmWidgetContainer::HandleItemAdditionL(void)
+	?StopMovingL@CMmWidgetContainer@@QAEXXZ @ 26 NONAME ; void CMmWidgetContainer::StopMovingL(void)
+	?SetEmptyTextL@CMmListBoxContainer@@UAEXABVTDesC16@@@Z @ 27 NONAME ; void CMmListBoxContainer::SetEmptyTextL(class TDesC16 const &)
+	?NewListBoxContainerL@CMmWidgetContainer@@SAPAV1@ABVTRect@@PAVMObjectProvider@@PAVCMmTemplateLibrary@@@Z @ 28 NONAME ; class CMmWidgetContainer * CMmWidgetContainer::NewListBoxContainerL(class TRect const &, class MObjectProvider *, class CMmTemplateLibrary *)
+	?PrepareForGarbage@CMmWidgetContainer@@QAEXXZ @ 29 NONAME ; void CMmWidgetContainer::PrepareForGarbage(void)
+	?GetHighlight@CMmWidgetContainer@@UAEHXZ @ 30 NONAME ; int CMmWidgetContainer::GetHighlight(void)
+	?NewLC@CMmHighlightTimer@@SAPAV1@PAVCMmWidgetContainer@@@Z @ 31 NONAME ; class CMmHighlightTimer * CMmHighlightTimer::NewLC(class CMmWidgetContainer *)
+	?RestoreWidgetPosition@CMmWidgetContainer@@QAEXXZ @ 32 NONAME ; void CMmWidgetContainer::RestoreWidgetPosition(void)
+	?EnableLongTapAnimation@CMmWidgetContainer@@QAEXH@Z @ 33 NONAME ; void CMmWidgetContainer::EnableLongTapAnimation(int)
+	?SetHighlightVisibilityL@CMmWidgetContainer@@UAEXH@Z @ 34 NONAME ; void CMmWidgetContainer::SetHighlightVisibilityL(int)
+	?NewL@CMmHighlightTimer@@SAPAV1@PAVCMmWidgetContainer@@@Z @ 35 NONAME ; class CMmHighlightTimer * CMmHighlightTimer::NewL(class CMmWidgetContainer *)
+	?ResetWidgetPosition@CMmWidgetContainer@@QAEXXZ @ 36 NONAME ; void CMmWidgetContainer::ResetWidgetPosition(void)
+	?HandleOptionsMenuVisibilityChangeL@CMmWidgetContainer@@UAEXH@Z @ 37 NONAME ; void CMmWidgetContainer::HandleOptionsMenuVisibilityChangeL(int)
+	?ItemIsFullyVisible@CMmWidgetContainer@@QAEHH@Z @ 38 NONAME ; int CMmWidgetContainer::ItemIsFullyVisible(int)
+	?SetIsFaded@CMmWidgetContainer@@QAEXH@Z @ 39 NONAME ; void CMmWidgetContainer::SetIsFaded(int)
+	?CacheWidgetPosition@CMmWidgetContainer@@QAEXXZ @ 40 NONAME ; void CMmWidgetContainer::CacheWidgetPosition(void)
+	?CancelDragL@CMmWidgetContainer@@QAEXH@Z @ 41 NONAME ; void CMmWidgetContainer::CancelDragL(int)
 
--- a/menufw/menufwui/mmwidgets/eabi/mmwidgetsu.def	Thu Jan 07 12:39:41 2010 +0200
+++ b/menufw/menufwui/mmwidgets/eabi/mmwidgetsu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -32,12 +32,13 @@
 	_ZN18CMmWidgetContainer20NewListBoxContainerLERK5TRectP15MObjectProviderP18CMmTemplateLibrary @ 31 NONAME
 	_ZN18CMmWidgetContainer21NumberOfItemsChangedLE16TItemsChangeType @ 32 NONAME
 	_ZN18CMmWidgetContainer21RestoreWidgetPositionEv @ 33 NONAME
-	_ZN18CMmWidgetContainer23HandleBackgroundGainedLEv @ 34 NONAME
-	_ZN18CMmWidgetContainer23HandleForegroundGainedLEv @ 35 NONAME
-	_ZN18CMmWidgetContainer23SetHighlightVisibilityLEi @ 36 NONAME
-	_ZN18CMmWidgetContainer34HandleOptionsMenuVisibilityChangeLEi @ 37 NONAME
-	_ZN19CMmListBoxContainer13SetEmptyTextLERK7TDesC16 @ 38 NONAME
-	_ZN19CMmListBoxContainer20SetDefaultHighlightLEi @ 39 NONAME
-	_ZThn52_N18CMmWidgetContainer23HandleBackgroundGainedLEv @ 40 NONAME
-	_ZThn52_N18CMmWidgetContainer23HandleForegroundGainedLEv @ 41 NONAME
+	_ZN18CMmWidgetContainer22EnableLongTapAnimationEi @ 34 NONAME
+	_ZN18CMmWidgetContainer23HandleBackgroundGainedLEv @ 35 NONAME
+	_ZN18CMmWidgetContainer23HandleForegroundGainedLEv @ 36 NONAME
+	_ZN18CMmWidgetContainer23SetHighlightVisibilityLEi @ 37 NONAME
+	_ZN18CMmWidgetContainer34HandleOptionsMenuVisibilityChangeLEi @ 38 NONAME
+	_ZN19CMmListBoxContainer13SetEmptyTextLERK7TDesC16 @ 39 NONAME
+	_ZN19CMmListBoxContainer20SetDefaultHighlightLEi @ 40 NONAME
+	_ZThn52_N18CMmWidgetContainer23HandleBackgroundGainedLEv @ 41 NONAME
+	_ZThn52_N18CMmWidgetContainer23HandleForegroundGainedLEv @ 42 NONAME
 
--- a/menufw/menufwui/mmwidgets/inc/mmwidgetcontainer.h	Thu Jan 07 12:39:41 2010 +0200
+++ b/menufw/menufwui/mmwidgets/inc/mmwidgetcontainer.h	Mon Jan 18 20:10:36 2010 +0200
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:
-*  Version     : %version: MM_48.1.35 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: MM_48.1.36 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -361,6 +361,18 @@
      * Destructor.
      */
     ~CMmWidgetContainer();
+    
+    /**
+     * Enables/disables animation during long tap.
+     * Tactile feedback is also enabled and disabled with the animation.
+     * Changes made with this method will be effective on the next long
+     * tap, i.e. it is not possible to stop an already started animation
+     * by using this method.
+     * 
+     * @param aEnable ETrue - enable, EFalse - disable long tap animation
+     *                and long tap tactile feedback
+     */
+    IMPORT_C void EnableLongTapAnimation( TBool aEnable );
 
     /**
      * from CCoeControl.
--- a/menufw/menufwui/mmwidgets/src/mmgrid.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/menufw/menufwui/mmwidgets/src/mmgrid.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:
-*  Version     : %version: MM_94 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: MM_95 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -250,6 +250,7 @@
     if ( aPointerEvent.iType == TPointerEvent::EButton1Up ||
             aPointerEvent.iType == TPointerEvent::EButton1Down )
         {
+        iListBoxFlags &= ~ELeftDownInViewRect; // prevent kinetic scrolling
         CAknGrid::HandlePointerEventL( aPointerEvent );
         }
     else if ( View()->XYPosToItemIndex(
--- a/menufw/menufwui/mmwidgets/src/mmlistbox.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/menufw/menufwui/mmwidgets/src/mmlistbox.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -133,6 +133,7 @@
     if ( aPointerEvent.iType == TPointerEvent::EButton1Up ||
             aPointerEvent.iType == TPointerEvent::EButton1Down )
         {
+        iListBoxFlags &= ~ELeftDownInViewRect; // prevent kinetic scrolling
         CEikFormattedCellListBoxTypedef::HandlePointerEventL( aPointerEvent );
         }
     else if ( View()->XYPosToItemIndex(
--- a/menufw/menufwui/mmwidgets/src/mmwidgetcontainer.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/menufw/menufwui/mmwidgets/src/mmwidgetcontainer.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:
-*  Version     : %version: MM_71.1.17.1.44 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: MM_71.1.17.1.47 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -134,6 +134,18 @@
 //
 // -----------------------------------------------------------------------------
 //
+EXPORT_C void CMmWidgetContainer::EnableLongTapAnimation( TBool aEnable )
+    {
+    if ( iLongTapDetector )
+        {
+        iLongTapDetector->EnableLongTapAnimation( aEnable );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
 void CMmWidgetContainer::SizeChanged()
     {
     if ( iWidget && iWidgetRect != Rect() )
@@ -222,9 +234,17 @@
             aType == KAknsMessageSkinChange )
         {
         static_cast<CMmListBoxItemDrawer*>( iDrawer )->InvalidateCache();
+        CMmTemplateLibrary * templateLibrary =
+        static_cast<CMmListBoxItemDrawer*>( iDrawer )->TemplateLibrary();
+        templateLibrary->CleanAndClearCache();
         }
 
     CCoeControl::HandleResourceChange( aType );
+
+	if ( aType == KEikDynamicLayoutVariantSwitch && !IsHighlightVisible() )
+		{
+		SetDefaultHighlightL( EFalse );
+		}
     }
 
 // -----------------------------------------------------------------------------
@@ -636,6 +656,10 @@
 
     if ( iLongTapDetector )
     	{
+    	if ( !itemExists )
+    	    {
+    	    iLongTapDetector->EnableLongTapAnimation( EFalse );
+    	    }
     	TPointerEvent longTapPointerEvent = aPointerEvent;
         if ( aPointerEvent.iType == TPointerEvent::EButtonRepeat )
         	{
--- a/menufw/menusuites/foldersuite/data/matrixmenudata.xml	Thu Jan 07 12:39:41 2010 +0200
+++ b/menufw/menusuites/foldersuite/data/matrixmenudata.xml	Mon Jan 18 20:10:36 2010 +0200
@@ -17,22 +17,6 @@
         <!-- </menu:folder> -->
         <!--Contacts application-->
         <menu:application uid="0x101F4CCE"/>
-        <!--music suite-->
-        <menu:suite title_name="&qtn_apps_music_title;" 
-                    long_name="&qtn_apps_music_list;" 
-                    short_name="&qtn_apps_music_grid;" 
-                    suite_name="musicsuite" 
-                    icon_file="z:\resource\apps\matrixmenudata.mif"
-                    icon_id="16384" 
-                    mask_id="16385" 
-                    icon_skin_minor_id="0x2176" 
-                    icon_skin_major_id="0x101F86E3"/>
-        <!-- application used in music suite should be hidden from menu -->
-        <menu:folder flags="hidden">
-            <menu:application uid="0x102072C3"/> <!-- Music Player (MusicPlayer)-->
-            <menu:application uid="0x10207A89"/> <!-- Radio -->
-            <menu:application uid="0x101FFB51"/> <!-- Music Store -->
-        </menu:folder>
         <!--Internet folder-->
         <!--  now using qgnmenugroupweb available in skin -->
         <menu:folder title_name="&qtn_apps_browserng_title;" 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,34 @@
+/*
+* ============================================================================
+*  Name        : bld.inf
+*  Part of     : Huriganes / Context Services
+*  Description : Build info file for Context Services.
+*  Version     : %version: sa1spcx1#55 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+
+// stub sis files
+../sis/stubs/hgctxsrv_stub.sis                          /epoc32/release/winscw/udeb/z/system/install/hgctxsrv_stub.sis
+
+// iby files
+../rom/hgcontextservices.iby    CORE_MW_LAYER_IBY_EXPORT_PATH(hgcontextservices.iby)
+
+
+
+#include "../hgfswpreviewprovider/group/bld.inf"
+#include "../hgfswserver/group/bld.inf"
+
+#include "../hgctxutils/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgctxutils/BWINS/hgcontextservicesutilsu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,8 @@
+EXPORTS
+	??1CHgPropertyListener@@UAE@XZ @ 1 NONAME ; CHgPropertyListener::~CHgPropertyListener(void)
+	?Value@CHgCenrepListener@@QAEHXZ @ 2 NONAME ; int CHgCenrepListener::Value(void)
+	?NewL@CHgCenrepListener@@SAPAV1@ABVTUid@@KAAVMHgCenrepChangeObserver@@@Z @ 3 NONAME ; class CHgCenrepListener * CHgCenrepListener::NewL(class TUid const &, unsigned long, class MHgCenrepChangeObserver &)
+	??1CHgCenrepListener@@UAE@XZ @ 4 NONAME ; CHgCenrepListener::~CHgCenrepListener(void)
+	??0CHgPropertyListener@@QAE@VTUid@@IAAVMHgPropertyChangeObserver@@@Z @ 5 NONAME ; CHgPropertyListener::CHgPropertyListener(class TUid, unsigned int, class MHgPropertyChangeObserver &)
+	?NewLC@CHgCenrepListener@@SAPAV1@ABVTUid@@KAAVMHgCenrepChangeObserver@@@Z @ 6 NONAME ; class CHgCenrepListener * CHgCenrepListener::NewLC(class TUid const &, unsigned long, class MHgCenrepChangeObserver &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgctxutils/EABI/hgcontextservicesutilsu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,13 @@
+EXPORTS
+	_ZN17CHgCenrepListener4NewLERK4TUidmR23MHgCenrepChangeObserver @ 1 NONAME
+	_ZN17CHgCenrepListener5NewLCERK4TUidmR23MHgCenrepChangeObserver @ 2 NONAME
+	_ZN17CHgCenrepListener5ValueEv @ 3 NONAME
+	_ZN17CHgCenrepListenerD0Ev @ 4 NONAME
+	_ZN17CHgCenrepListenerD1Ev @ 5 NONAME
+	_ZN17CHgCenrepListenerD2Ev @ 6 NONAME
+	_ZN19CHgPropertyListenerC1E4TUidjR25MHgPropertyChangeObserver @ 7 NONAME
+	_ZN19CHgPropertyListenerC2E4TUidjR25MHgPropertyChangeObserver @ 8 NONAME
+	_ZN19CHgPropertyListenerD0Ev @ 9 NONAME
+	_ZN19CHgPropertyListenerD1Ev @ 10 NONAME
+	_ZN19CHgPropertyListenerD2Ev @ 11 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgctxutils/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* ============================================================================
+*  Name        : bld.inf
+*  Part of     : Huriganes / Context Services Utils
+*  Description : Project definition file for project Context Services Client
+*  Version     : %version: sa1spcx1#15 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+../inc/hgproplistener.h         |../../inc/hgproplistener.h
+../inc/hgcenreplistener.h       |../../inc/hgcenreplistener.h
+
+PRJ_MMPFILES
+hgcontextservicesutils.mmp
+
+PRJ_TESTMMPFILES
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgctxutils/group/hgcontextservicesutils.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* ===========================================================================
+*  Name        : hgcontextservicesutils.mmp
+*  Part of     : Huriganes / Context Services Utils
+*  Description : Project definition file for project Context Services
+*  Version     : %version: sa1spcx1#24 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+
+TARGET        	hgcontextservicesutils.dll
+TARGETTYPE      dll
+UID             0x1000008d
+
+CAPABILITY       CAP_GENERAL_DLL  
+VENDORID         VID_DEFAULT
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../trace
+
+SOURCEPATH      ../src
+SOURCE          hgproplistener.cpp
+SOURCE          hgcenreplistener.cpp
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY	        euser.lib  
+LIBRARY         centralrepository.lib
+
+DEBUGLIBRARY	flogger.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgctxutils/inc/hgcenreplistener.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,85 @@
+/*
+* ===========================================================================
+*  Name        : HgCenrepListener.h
+*  Part of     : Hg
+*  Description : Class to get notifications about changes to a cenrep key
+*
+*  Copyright © 2008 Nokia Corporation.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia Corporation. All rights are reserved. Copying, 
+*  including reproducing, storing, adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia Corporation. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia Corporation.
+* ===========================================================================
+*/
+
+#ifndef __CENREPLISTENER_H__
+#define __CENREPLISTENER_H__
+
+#include <e32base.h>
+
+class CRepository;
+
+/**
+ * Observer interface for getting notifications about a cenrep key change.
+ */
+class MHgCenrepChangeObserver
+    {
+public:
+    virtual void CenrepChanged( TUint32 aKey, TInt aNewValue ) = 0;
+    };
+
+/**
+ * Class to get notifications about changes to a cenrep key.
+ */
+NONSHARABLE_CLASS( CHgCenrepListener ) : public CActive
+    {
+public:
+    /**
+     * Fist step constructor
+     */
+    IMPORT_C static CHgCenrepListener* NewL(const TUid& aRep, TUint32 aKey,
+                                            MHgCenrepChangeObserver& aObserver);
+    
+    /**
+     * Fist step constructor
+     */
+    IMPORT_C static CHgCenrepListener* NewLC(const TUid& aRep, TUint32 aKey,
+                                             MHgCenrepChangeObserver& aObserver);
+    
+    /**
+     * Destructor.
+     */
+    IMPORT_C ~CHgCenrepListener();
+    
+    /**
+     * Returns the current value of the watched key.
+     */
+    IMPORT_C TInt Value();
+    
+private:
+    /**
+     * Constructor.
+     * Starts listening for the key.
+     */
+    CHgCenrepListener(TUint32 aKey,
+        MHgCenrepChangeObserver& aObserver );
+    
+    /**
+     * Second step constructor 
+     */
+    void ConstructL(const TUid& aRep);
+    
+    void DoCancel();
+    void RunL(); 
+    TInt RunError( TInt aError );
+    
+    MHgCenrepChangeObserver& iObserver;
+    CRepository* iRep;
+    TUint32 iKey;
+    };
+    
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgctxutils/inc/hgproplistener.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,65 @@
+/*
+* ===========================================================================
+*  Name        : HgPropListener.h
+*  Part of     : Hg
+*  Description : Class to get notifications about changes to a P&S property
+*
+*  Copyright © 2008 Nokia Corporation.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia Corporation. All rights are reserved. Copying, 
+*  including reproducing, storing, adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia Corporation. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia Corporation.
+* ===========================================================================
+*/
+
+#ifndef __PROPLISTENER_H__
+#define __PROPLISTENER_H__
+
+#include <e32base.h>
+#include <e32property.h>
+
+/**
+ * Observer interface for getting notifications about a P&S property change.
+ */
+class MHgPropertyChangeObserver
+	{
+public:
+	virtual void PropertyChanged( TUid aCategory, TUint aKey ) = 0;
+	};
+
+/**
+ * Class to get notifications about changes to a P&S property.
+ */
+NONSHARABLE_CLASS( CHgPropertyListener ) : public CActive
+	{
+public:
+    /**
+     * Constructor.
+     * Starts listening for the property with the given category/key.
+     */
+	IMPORT_C CHgPropertyListener( TUid aCategory,
+	    TUint aKey, MHgPropertyChangeObserver& aObserver );
+	    
+	/**
+	 * Destructor.
+	 */
+	IMPORT_C ~CHgPropertyListener();
+    
+private:
+	void DoCancel();
+	void RunL(); 
+	TInt RunError( TInt aError );
+
+	MHgPropertyChangeObserver& iObserver;
+	RProperty iProperty;
+	TUid iCategory;
+	TUint iKey;
+	};
+    
+#endif
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgctxutils/src/hgcenreplistener.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,114 @@
+/*
+* ===========================================================================
+*  Name        : HgCenrepListener.cpp
+*  Part of     : Hg
+*  Description : Active class to get notifications about changes to a cenrep key
+*
+*  Copyright © 2008 Nokia Corporation.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia Corporation. All rights are reserved. Copying, 
+*  including reproducing, storing, adapting or translating, any 
+*  or all of this material requires the prior written consent   of 
+*  Nokia Corporation. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia Corporation.
+* ===========================================================================
+*/
+
+#include <e32cmn.h>
+#include <centralrepository.h>
+#include "hgcenreplistener.h"
+
+// -----------------------------------------------------------------------------
+// NewL
+// -----------------------------------------------------------------------------
+EXPORT_C CHgCenrepListener* CHgCenrepListener::NewL(const TUid& aRep, TUint32 aKey,
+                                   MHgCenrepChangeObserver& aObserver)
+    {
+    CHgCenrepListener* self = CHgCenrepListener::NewLC(aRep, aKey, aObserver);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// NewLC
+// -----------------------------------------------------------------------------
+EXPORT_C CHgCenrepListener* CHgCenrepListener::NewLC(const TUid& aRep, TUint32 aKey,
+                                       MHgCenrepChangeObserver& aObserver)
+    {
+    CHgCenrepListener *self = new(ELeave) CHgCenrepListener(aKey, aObserver);
+    CleanupStack::PushL(self);
+    self->ConstructL(aRep);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgCenrepListener
+// -----------------------------------------------------------------------------
+CHgCenrepListener::CHgCenrepListener(TUint32 aKey, 
+                                     MHgCenrepChangeObserver& aObserver)
+: CActive( CActive::EPriorityStandard ), iObserver( aObserver ), iKey( aKey )
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// -----------------------------------------------------------------------------
+// ConstructL
+// -----------------------------------------------------------------------------
+void CHgCenrepListener::ConstructL(const TUid& aRep)
+    {
+    iRep = CRepository::NewL( aRep );
+    iRep->NotifyRequest( iKey, iStatus );
+    SetActive();
+    }
+
+// -----------------------------------------------------------------------------
+// ~CHgCenrepListener
+// -----------------------------------------------------------------------------
+EXPORT_C CHgCenrepListener::~CHgCenrepListener()
+    {
+    Cancel();
+    delete iRep;
+    }
+
+// -----------------------------------------------------------------------------
+// DoCancel
+// -----------------------------------------------------------------------------
+void CHgCenrepListener::DoCancel()
+    {
+    iRep->NotifyCancelAll();
+    }
+
+// -----------------------------------------------------------------------------
+// RunL
+// -----------------------------------------------------------------------------
+void CHgCenrepListener::RunL()
+    {
+    if ( iStatus.Int() != KErrCancel )
+        {
+        iObserver.CenrepChanged( iKey, Value() );
+        iRep->NotifyRequest( iKey, iStatus );
+        SetActive();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// RunError
+// -----------------------------------------------------------------------------
+TInt CHgCenrepListener::RunError( TInt /*aError*/ )
+    {
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// Value
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CHgCenrepListener::Value()
+    {
+    TInt val = 0;
+    iRep->Get( iKey, val );
+    return val;
+    }
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgctxutils/src/hgproplistener.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,66 @@
+/*
+* ===========================================================================
+*  Name        : HgPropListener.cpp
+*  Part of     : Hg
+*  Description : Active class to get notifications about changes to a P&S property
+*
+*  Copyright © 2008 Nokia Corporation.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia Corporation. All rights are reserved. Copying, 
+*  including reproducing, storing, adapting or translating, any 
+*  or all of this material requires the prior written consent   of 
+*  Nokia Corporation. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia Corporation.
+* ===========================================================================
+*/
+
+#include <e32cmn.h>
+
+#include "hgproplistener.h"
+
+EXPORT_C CHgPropertyListener::CHgPropertyListener(
+        TUid aCategory, TUint aKey, MHgPropertyChangeObserver& aObserver )
+	: CActive( CActive::EPriorityStandard),
+	    iObserver( aObserver ), iCategory( aCategory ), iKey( aKey )
+	{
+	CActiveScheduler::Add( this );
+	TInt err = iProperty.Attach( iCategory, iKey );
+	if ( err == KErrNone )
+		{
+		iProperty.Subscribe( iStatus );
+		SetActive();
+		}
+	}
+
+EXPORT_C CHgPropertyListener::~CHgPropertyListener()
+	{
+	Cancel();
+	iProperty.Close();
+	}
+
+void CHgPropertyListener::DoCancel()
+	{
+	iProperty.Cancel();
+	}
+    
+void CHgPropertyListener::RunL()
+	{
+	if ( iStatus.Int() != KErrCancel ) // when cancelling the subscribe it completes with KErrCancel
+		{
+		iObserver.PropertyChanged( iCategory, iKey );
+		iProperty.Subscribe( iStatus );
+		SetActive();
+		}
+	}    
+
+TInt CHgPropertyListener::RunError( TInt /*aError*/ )
+	{
+	iProperty.Subscribe( iStatus );
+	SetActive();
+	return KErrNone;
+	}
+
+	
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/bwins/hgpreviewprovideru.def	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,10 @@
+EXPORTS
+	??1CHgFastSwapPreviewProvider@@UAE@XZ @ 1 NONAME ; CHgFastSwapPreviewProvider::~CHgFastSwapPreviewProvider(void)
+	?ChangeScreen@CHgFastSwapPreviewProvider@@QAEHH@Z @ 2 NONAME ; int CHgFastSwapPreviewProvider::ChangeScreen(int)
+	?NewL@CHgFastSwapPreviewProvider@@SAPAV1@AAVMHgFastSwapPreviewObserver@@@Z @ 3 NONAME ; class CHgFastSwapPreviewProvider * CHgFastSwapPreviewProvider::NewL(class MHgFastSwapPreviewObserver &)
+	?Register@CHgFastSwapPreviewProvider@@QAEHH@Z @ 4 NONAME ; int CHgFastSwapPreviewProvider::Register(int)
+	?SetPreviewParam@CHgFastSwapPreviewProvider@@QAEHABVTSize@@W4TDisplayMode@@@Z @ 5 NONAME ; int CHgFastSwapPreviewProvider::SetPreviewParam(class TSize const &, enum TDisplayMode)
+	?TakePreview@CHgFastSwapPreviewProvider@@QAEHXZ @ 6 NONAME ; int CHgFastSwapPreviewProvider::TakePreview(void)
+	?Unregister@CHgFastSwapPreviewProvider@@QAEHH@Z @ 7 NONAME ; int CHgFastSwapPreviewProvider::Unregister(int)
+	?AckPreview@CHgFastSwapPreviewProvider@@QAEXH@Z @ 8 NONAME ; void CHgFastSwapPreviewProvider::AckPreview(int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/eabi/hgpreviewprovideru.def	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,12 @@
+EXPORTS
+	_ZN26CHgFastSwapPreviewProvider10UnregisterEi @ 1 NONAME
+	_ZN26CHgFastSwapPreviewProvider11TakePreviewEv @ 2 NONAME
+	_ZN26CHgFastSwapPreviewProvider12ChangeScreenEi @ 3 NONAME
+	_ZN26CHgFastSwapPreviewProvider15SetPreviewParamERK5TSize12TDisplayMode @ 4 NONAME
+	_ZN26CHgFastSwapPreviewProvider4NewLER26MHgFastSwapPreviewObserver @ 5 NONAME
+	_ZN26CHgFastSwapPreviewProvider8RegisterEi @ 6 NONAME
+	_ZN26CHgFastSwapPreviewProviderD0Ev @ 7 NONAME
+	_ZN26CHgFastSwapPreviewProviderD1Ev @ 8 NONAME
+	_ZN26CHgFastSwapPreviewProviderD2Ev @ 9 NONAME
+	_ZN26CHgFastSwapPreviewProvider10AckPreviewEi @ 10 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* ==============================================================================
+*  Name        : %name: bld.inf %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : bld.inf
+*  Version     : %version: 1 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/hgfastswappreviewprovider.iby    CORE_MW_LAYER_IBY_EXPORT_PATH(hgfastswappreviewprovider.iby)
+../inc/hgpreviewprovider.h              |../../inc/hgpreviewprovider.h
+../inc/hgpreviewobserver.h              |../../inc/hgpreviewobserver.h
+
+PRJ_MMPFILES
+previewprovider.mmp
+
+#include "../wsplugin/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/group/previewprovider.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,40 @@
+/*
+* ==============================================================================
+*  Name        : %name: previewprovider.mmp %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : MMP file for previewprovider dll
+*  Version     : %version: sa1spcx1#2 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#include <platform_paths.hrh>
+#include <defaultcaps.hrh>
+
+TARGET         hgpreviewprovider.dll
+TARGETTYPE     DLL 
+UID            0x1000008D 0x20016BEB
+CAPABILITY     CAP_CLIENT_DLL
+VENDORID       VID_DEFAULT
+
+USERINCLUDE    ../inc
+USERINCLUDE    ../../trace
+
+MW_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH     ../src
+SOURCE         previewprovider.cpp
+
+LIBRARY        euser.lib
+LIBRARY        ws32.lib
+LIBRARY        estor.lib 
+DEBUGLIBRARY   flogger.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/inc/hgfastswappreviewproviderlogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* ============================================================================
+*  Name        : hgfastswappreviewproviderlogging.h
+*  Part of     : Classic UI / Teleport
+*  Description : Defines logs for hgfastswappreviewprovider
+*  Version     : %version:  sa1spcx1#3 % 
+*
+*  Copyright (c) 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.1.1
+*/
+
+#ifdef _DEBUG // codescanner::ifpreprocessor
+_LIT( KHgLogFile, "hgfastswappreviewprovider.txt" );
+_LIT( KHgLogPath, "teleport" );
+#define _HGLOG_LOG_COMPONENT_ID 0x20016BEC
+
+#endif
+#include "hglogging.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/inc/hgpreviewobserver.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,60 @@
+/*
+* ==============================================================================
+*  Name        : %name: hgpreviewobserver.h %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : Preview provider API
+*  Version     : %version: 1 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#ifndef HGPREVIEWOBSERVER_H
+#define HGPREVIEWOBSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+
+/**
+ * Observer for preview screenshot changes. Client must implement this and 
+ * register itself when calling CHgFastSwapPreviewProvider::NewL. Callback
+ * methods are called whenever there is a new preview screenshot taken from
+ * the applications or when an application is exited.
+ *
+ * @see CHgFastSwapPreviewProvider
+ */
+class MHgFastSwapPreviewObserver
+    {
+public:
+
+    /**
+     * Called when application has changed and screenshot has been taken. 
+     * New sceenshots will be taken and provided to the client via this 
+     * callback every time the application goes to background.
+     *
+     * @param aWgId Window group id of the application.
+     * @param aFbsHandle Handle to screenshot CFbsBitmap.
+     */         
+    virtual void HandleFswPpApplicationChange( TInt aWgId, TInt aFbsHandle ) = 0;
+    
+    /**
+     * Called when application has been exited. Client can free the resources
+     * related to aWgId (for example a copied bitmap) since the application is
+     * no more running.
+     *
+     * @param aWgId Window group id of the application.
+     */         
+    virtual void HandleFswPpApplicationUnregistered( TInt aWgId ) = 0;    
+    };
+
+#endif // HGPREVIEWOBSERVER_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/inc/hgpreviewprovider.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,130 @@
+/*
+* ==============================================================================
+*  Name        : %name: hgpreviewprovider.h %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : Preview provider API
+*  Version     : %version: sa1spcx1#2 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#ifndef HGPREVIEWPROVIDER_H
+#define HGPREVIEWPROVIDER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <gdi.h>
+
+// FORWARD DECLARATIONS
+class CHgFastSwapPreviewProviderClient;
+class MHgFastSwapPreviewObserver;
+
+/**
+ * Preview provider API class. Applications (window groups) must be
+ * registered before screenshots can be received. Also, closed apps
+ * should be unregistered to save resources.
+ * TakePreview() can be called to take a screenshot right away.
+ * A client needing notifications has to create an instance
+ * so that screenshots can be delivered to it via MHgFastSwapPreviewObserver.
+ *
+ * @see MHgFastSwapPreviewObserver
+ * @lib hgpreviewprovider.lib
+ */
+NONSHARABLE_CLASS( CHgFastSwapPreviewProvider ) : public CBase
+    {
+public:
+
+    /**
+     * Two phased constructor.
+     * @see MHgFastSwapPreviewObserver
+     *
+     * @param aObs Observer.     
+     */   
+    IMPORT_C static CHgFastSwapPreviewProvider* NewL(
+        MHgFastSwapPreviewObserver& aObs );
+    
+    /**
+     * Destructor.
+     */   
+    IMPORT_C ~CHgFastSwapPreviewProvider();
+    
+    /**
+     * Registers window group for screenshots.
+     *
+     * @param aWgId Window group id.
+     * @return Error code.     
+     */       
+    IMPORT_C TInt Register( TInt aWgId );
+    
+    /**
+     * Unregisters window group.
+     *
+     * @param aWgId Window group id.
+     * @return Error code.     
+     */       
+    IMPORT_C TInt Unregister( TInt aWgId );
+    
+    /**
+     * Change screen.
+     *
+     * @param aScreenId Screen id.
+     * @return Error code.     
+     */       
+    IMPORT_C TInt ChangeScreen( TInt aScreenId );
+    
+    /**
+     * Defines the dimensions and format of the screenshots.
+     * @see TDisplayMode.
+     *
+     * @param aSize Size to be used for the preview screenshots.
+     * @param aMode Color depth to be used for the preview screenshots.
+     * @return Error code.
+     */       
+    IMPORT_C TInt SetPreviewParam( const TSize& aSize, TDisplayMode aMode );
+    
+    /**
+     * Takes a screenshot.
+     * 
+     * @return Error code.     
+     */       
+    IMPORT_C TInt TakePreview();
+    
+    /**
+     * Ack preview ready message
+     */
+    IMPORT_C void AckPreview( TInt aPreviewId );
+    
+private:
+
+    /**
+     * C++ constructor.
+     */   
+    CHgFastSwapPreviewProvider();
+    
+    /**
+     * 2nd phase constructor.
+     *
+     * @param aObs Observer.
+     */       
+    void ConstructL( MHgFastSwapPreviewObserver& aObs );
+       
+private:    
+
+    /**
+     * Implementation class.
+     */   
+    CHgFastSwapPreviewProviderClient* iClient;
+    };
+
+#endif // HGPREVIEWPROVIDER_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/inc/previewmsg.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,46 @@
+/*
+* ==============================================================================
+*  Name        : %name: previewmsg.h %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : Message types for preview plugin
+*  Version     : %version: sa1spcx1#2 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#ifndef PREVIEWMSG_H
+#define PREVIEWMSG_H
+
+namespace NPreviewMsg
+    {
+    /**
+     * Messages that are sent between PreviewProviderClient and PreviewProvider
+     * ECOM plugin via window server. 
+     */
+    enum 
+        {
+        // From PreviewProviderClient to PreviewProvider ECOM plugin. 
+        ENone,
+        ERegister,
+        EUnregister,
+        EChangeScreen,
+        ESetPreviewParam,
+        ETakePreview,
+        
+        // From PreviewProvider ECOM plugin to PreviewProviderClient. 
+        EPreviewReady,
+        EAckPreviewReady,
+        EUnregisterReady
+        };
+    }
+
+#endif // PREVIEWMSG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/inc/previewproviderlogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* ============================================================================
+*  Name        : %name: previewproviderlogging.h %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : Header file used for logging
+*  Version     : %version: 1 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* 
+*/
+
+#ifndef PREVIEWPROVIDERLOGGING_H
+#define PREVIEWPROVIDERLOGGING_H
+
+_LIT( KHgLogFile, "hgpreviewprovider.txt" );
+_LIT( KHgLogPath, "hgpreviewprovider" );
+#define _HGLOG_LOG_COMPONENT_ID 6715359
+//#define _HGLOG_RDEBUG
+
+#include <e32debug.h>
+#include "hglogging.h"
+
+#endif // PREVIEWPROVIDERLOGGING_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/rom/hgfastswappreviewprovider.iby	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* ==============================================================================
+*  Name        : %name: hgfastswappreviewprovider.iby %
+*  Part of     : Hg fast swap previer provider plugin
+*  Description : IBY file
+*  Version     : %version: sa1spcx1#2 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#ifndef HGFASTSWAPPREVIEWPROVIDER_IBY
+#define HGFASTSWAPPREVIEWPROVIDER_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+// fsw preview
+ECOM_PLUGIN( 20016BEC.DLL, 20016BEC.rsc )
+file=ABI_DIR/BUILD_DIR/hgpreviewprovider.dll    SHARED_LIB_DIR/hgpreviewprovider.dll
+
+#endif // HGFASTSWAPPREVIEWPROVIDER_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/src/previewprovider.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,586 @@
+/*
+* ==============================================================================
+*  Name        : %name: previewprovider.cpp %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : Preview provider API
+*  Version     : %version: sa1spcx1#3 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#include "hgpreviewprovider.h"
+#include "hgpreviewobserver.h"
+#include "previewmsg.h"
+#include "previewproviderlogging.h"
+#include <w32std.h>
+#include <s32mem.h>
+#include <e32property.h>
+
+#define SZ( x ) ( sizeof( x ) / sizeof( TInt ) )
+
+// CONSTANTS
+
+// Publish & subscribe UID (akncapserver.exe SID so that it can define the keys)
+const TUid KPSUidPreviewProvider = { 0x10207218 };
+
+// P&S keys
+const TUint32 KPSKeyWgId = 0x20016BE1;
+const TUint32 KPSKeyFbsBitmapId = 0x20016BE2;
+const TUint32 KPSKeyOperation = 0x20016BE3;
+
+/**
+ * Operation which will be done after P&S keys have changed.
+ */
+enum TPreviewOperation
+    {
+    EOperationNone,
+    EOperationUnregister,
+    EOperationBitmapUpdated
+    };
+
+/**
+ * CPropertyListener
+ */
+NONSHARABLE_CLASS( CPropertyListener ) : public CActive
+    {
+public:
+    static CPropertyListener* NewL( MHgFastSwapPreviewObserver& aObs );
+    virtual ~CPropertyListener();
+    
+protected:
+    CPropertyListener( MHgFastSwapPreviewObserver& aObs );
+    void ConstructL();  
+
+private: // From CActive
+    void RunL();
+    void DoCancel();
+    
+private:    
+    void ReadPropertiesL();
+    void DefinePropertyL( TInt aPSKey ); 
+    void Subscribe();
+
+private:
+    MHgFastSwapPreviewObserver& iObs;
+    RProperty iProperty;
+   
+    TInt iWgId;
+    TInt iFbsBitmapId;
+    
+    TPreviewOperation iOperation;
+    };
+
+// --------------------------------------------------------------------------
+// CPropertyListener::~CPropertyListener
+// --------------------------------------------------------------------------
+//
+CPropertyListener::~CPropertyListener()
+    {
+    Cancel();
+    iProperty.Close();
+    }
+
+// --------------------------------------------------------------------------
+// CPropertyListener::CPropertyListener
+// --------------------------------------------------------------------------
+//
+CPropertyListener::CPropertyListener( MHgFastSwapPreviewObserver& aObs ) : 
+    CActive( CActive::EPriorityHigh ), iObs( aObs )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPropertyListener::NewL
+// --------------------------------------------------------------------------
+//
+CPropertyListener* CPropertyListener::NewL( MHgFastSwapPreviewObserver& aObs )
+    {
+    CPropertyListener* self = new ( ELeave ) CPropertyListener( aObs );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;    
+    }
+
+// --------------------------------------------------------------------------
+// CPropertyListener::RunL
+// --------------------------------------------------------------------------
+//
+void CPropertyListener::RunL()
+    {
+    // Resubscribe before processing new value to prevent missing updates
+    Subscribe();
+    
+    // Read all properties to member variables
+    ReadPropertiesL();
+    
+    // Do the callback
+    switch( iOperation )
+        {
+        case EOperationUnregister:
+            {
+            iObs.HandleFswPpApplicationUnregistered( iWgId );
+            break;            
+            }        
+        case EOperationBitmapUpdated:
+            {
+            iObs.HandleFswPpApplicationChange( iWgId, iFbsBitmapId );
+            break;
+            }
+        default:
+            break;
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPropertyListener::DoCancel
+// --------------------------------------------------------------------------
+//
+void CPropertyListener::DoCancel()
+    {
+    iProperty.Cancel();
+    }
+
+// --------------------------------------------------------------------------
+// CPropertyListener::ReadProperties
+// --------------------------------------------------------------------------
+//
+void CPropertyListener::ReadPropertiesL()
+    {
+    // Read all properties
+    User::LeaveIfError( iProperty.Get( KPSUidPreviewProvider, KPSKeyWgId, iWgId ) );
+    User::LeaveIfError( iProperty.Get( KPSUidPreviewProvider, KPSKeyFbsBitmapId, iFbsBitmapId ) );
+    TInt operation( 0 );
+    User::LeaveIfError( iProperty.Get( KPSUidPreviewProvider, KPSKeyOperation, operation ) );
+    iOperation = static_cast<TPreviewOperation>( operation );    
+    }
+
+// --------------------------------------------------------------------------
+// CPropertyListener::DefinePropertyL
+// --------------------------------------------------------------------------
+//
+void CPropertyListener::DefinePropertyL( TInt aPSKey )
+    {
+    TInt err = RProperty::Define( KPSUidPreviewProvider, aPSKey, RProperty::EInt );
+    // Don't mind the already exists error
+    if ( err != KErrAlreadyExists && err != KErrPermissionDenied )
+        {
+        User::LeaveIfError( err );
+        }    
+    }
+
+// --------------------------------------------------------------------------
+// CPropertyListener::Subscribe
+// --------------------------------------------------------------------------
+//
+void CPropertyListener::Subscribe()
+    {
+    iProperty.Subscribe( iStatus );
+    SetActive();  
+    }
+
+// --------------------------------------------------------------------------
+// CPropertyListener::ConstructL
+// --------------------------------------------------------------------------
+//
+void CPropertyListener::ConstructL()
+    {
+    HGLOG_CONTEXT( ConstructL, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    DefinePropertyL( KPSKeyWgId );
+    DefinePropertyL( KPSKeyFbsBitmapId );
+    DefinePropertyL( KPSKeyOperation );
+    
+    User::LeaveIfError( iProperty.Attach( KPSUidPreviewProvider, KPSKeyWgId ) );
+    CActiveScheduler::Add( this );
+    
+    // initial subscription
+    Subscribe();
+    
+    HGLOG_OUT();    
+    }
+
+/**
+ * CHgFastSwapPreviewProviderClient
+ */
+NONSHARABLE_CLASS( CHgFastSwapPreviewProviderClient ) : public CWsGraphic
+    {
+public:
+    CHgFastSwapPreviewProviderClient( MHgFastSwapPreviewObserver& aObs );
+    void ConstructL();
+    void Register( TInt aWgId );
+    void Unregister( TInt aWgId );
+    void ChangeScreen( TInt aScreenNo );
+    void SetPreviewParam( const TSize& aSize, TDisplayMode aMode );
+    void TakePreview();
+    void AckPreview( TInt aPreviewId );
+    virtual ~CHgFastSwapPreviewProviderClient();
+private:
+    void HandleMessage( const TDesC8& aData );
+    void OnReplace();
+private:
+    void DoHandleMessageL( const TDesC8& aData );
+    void SetProperties( TInt aHandle, TInt aWgId, TInt aOp );    
+private:
+    MHgFastSwapPreviewObserver& iObs;
+    CPropertyListener* iListener;
+    };
+
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::CHgFastSwapPreviewProviderClient
+// --------------------------------------------------------------------------
+//
+CHgFastSwapPreviewProviderClient::CHgFastSwapPreviewProviderClient(
+        MHgFastSwapPreviewObserver& aObs ) : iObs( aObs )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::~CHgFastSwapPreviewProviderClient
+// --------------------------------------------------------------------------
+//
+CHgFastSwapPreviewProviderClient::~CHgFastSwapPreviewProviderClient()
+    {
+    delete iListener;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::ConstructL
+// --------------------------------------------------------------------------
+//
+void CHgFastSwapPreviewProviderClient::ConstructL()
+    {
+    HGLOG_CONTEXT( ConstructL, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    const TUid id = { 0x20016BEC };
+    BaseConstructL( id, KNullDesC8 );
+    iListener = CPropertyListener::NewL( iObs );
+    
+    HGLOG_OUT();        
+    }    
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::Register
+// --------------------------------------------------------------------------
+//    
+void CHgFastSwapPreviewProviderClient::Register( TInt aWgId )
+    {
+    HGLOG_CONTEXT( Register, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    const TInt msg[] = {
+        NPreviewMsg::ERegister,
+        aWgId
+        };
+    TPckgC<TInt[SZ(msg)]> buf(msg);
+    SendMessage(buf);
+    Flush();
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::Unregister
+// --------------------------------------------------------------------------
+//    
+void CHgFastSwapPreviewProviderClient::Unregister( TInt aWgId )
+    {
+    HGLOG_CONTEXT( Unregister, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    const TInt msg[] = {
+        NPreviewMsg::EUnregister,
+        aWgId
+        };
+    TPckgC<TInt[SZ(msg)]> buf(msg);
+    SendMessage(buf);
+    Flush();
+    
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::ChangeScreen
+// --------------------------------------------------------------------------
+//    
+void CHgFastSwapPreviewProviderClient::ChangeScreen( TInt aScreenNo )
+    {
+    HGLOG_CONTEXT( ChangeScreen, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    const TInt msg[] = {
+        NPreviewMsg::EChangeScreen,
+        aScreenNo
+        };
+    TPckgC<TInt[SZ(msg)]> buf(msg);
+    SendMessage(buf);
+    Flush();
+    
+    HGLOG_OUT();     
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::SetPreviewParam
+// --------------------------------------------------------------------------
+//    
+void CHgFastSwapPreviewProviderClient::SetPreviewParam(const TSize& aSize,
+        TDisplayMode aMode)
+    {
+    HGLOG_CONTEXT( SetPreviewParam, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    const TInt msg[] = {
+        NPreviewMsg::ESetPreviewParam,
+        aSize.iWidth,
+        aSize.iHeight,
+        static_cast<TInt>(aMode)
+        };
+    TPckgC<TInt[SZ(msg)]> buf(msg);
+    SendMessage(buf);
+    Flush();
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::TakePreview 
+// --------------------------------------------------------------------------
+//    
+void CHgFastSwapPreviewProviderClient::TakePreview()
+    {
+    HGLOG_CONTEXT( TakePreview, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    TPckgC<TInt> buf(NPreviewMsg::ETakePreview);
+    SendMessage(buf);
+    Flush();
+    
+    HGLOG_OUT();      
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::AckPreview 
+// --------------------------------------------------------------------------
+//
+void CHgFastSwapPreviewProviderClient::AckPreview( TInt aPreviwId )
+    {
+    HGLOG_CONTEXT( TakePreview, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    const TInt msg[] = { NPreviewMsg::EAckPreviewReady,
+                         aPreviwId };
+    TPckgC<TInt[SZ(msg)]> buf(msg);
+    SendMessage(buf);
+    Flush();
+    
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::HandleMessage
+// --------------------------------------------------------------------------
+//    
+void CHgFastSwapPreviewProviderClient::HandleMessage( const TDesC8& aData )
+    {
+    TRAP_IGNORE(DoHandleMessageL(aData));
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::DoHandleMessageL
+// --------------------------------------------------------------------------
+//
+void CHgFastSwapPreviewProviderClient::DoHandleMessageL( const TDesC8& aData )
+    {
+    HGLOG_CONTEXT( DoHandleMessageL, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    RDesReadStream in( aData );
+    TInt message = in.ReadInt32L();
+    switch ( message )
+        {
+        case NPreviewMsg::EPreviewReady:
+            {
+            const TInt id = in.ReadInt32L();
+            const TInt handle = in.ReadInt32L();    
+            SetProperties( handle, id, EOperationBitmapUpdated );
+            }
+            break;
+        case NPreviewMsg::EUnregisterReady:
+            {
+            const TInt id = in.ReadInt32L();
+            const TInt handle = in.ReadInt32L();
+            SetProperties( handle, id, EOperationUnregister );
+            }
+            break;
+        }
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::SetProperties
+// --------------------------------------------------------------------------
+//
+void CHgFastSwapPreviewProviderClient::SetProperties(TInt aHandle, TInt aWgId,
+        TInt aOp)
+    {
+    // Notify CPropertyListener via P&S
+    RProperty::Set( KPSUidPreviewProvider, KPSKeyFbsBitmapId, aHandle );
+    RProperty::Set( KPSUidPreviewProvider, KPSKeyOperation, aOp );
+    // KPSKeyWgId should be notified first since that is being listened 
+    // by CPropertyListener 
+    RProperty::Set( KPSUidPreviewProvider, KPSKeyWgId, aWgId );    
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProviderClient::OnReplace
+// --------------------------------------------------------------------------
+//
+void CHgFastSwapPreviewProviderClient::OnReplace()
+    {
+    }
+    
+/////////////////////////////////////////////////////////////////////////////
+
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProvider::NewL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CHgFastSwapPreviewProvider* CHgFastSwapPreviewProvider::NewL(
+        MHgFastSwapPreviewObserver& aObs)
+    {
+    CHgFastSwapPreviewProvider* p = new (ELeave) CHgFastSwapPreviewProvider();
+    CleanupStack::PushL( p );
+    p->ConstructL( aObs );
+    CleanupStack::Pop( p );
+    return p;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProvider::~CHgFastSwapPreviewProvider
+// --------------------------------------------------------------------------
+//    
+EXPORT_C CHgFastSwapPreviewProvider::~CHgFastSwapPreviewProvider()
+    {
+    if ( iClient )
+        {
+        iClient->Destroy();
+        }
+    delete iClient;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProvider::Register
+// --------------------------------------------------------------------------
+//    
+EXPORT_C TInt CHgFastSwapPreviewProvider::Register( TInt aWgId )
+    {
+    iClient->Register( aWgId );
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProvider::Unregister
+// --------------------------------------------------------------------------
+//    
+EXPORT_C TInt CHgFastSwapPreviewProvider::Unregister( TInt aWgId )    
+    {
+    iClient->Unregister( aWgId );
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProvider::ChangeScreen
+// --------------------------------------------------------------------------
+//    
+EXPORT_C TInt CHgFastSwapPreviewProvider::ChangeScreen( TInt aScreenId )
+    {
+    iClient->ChangeScreen( aScreenId );
+    return KErrNone;
+    }    
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProvider::SetPreviewParam
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CHgFastSwapPreviewProvider::SetPreviewParam(const TSize& aSize,
+        TDisplayMode aMode)
+    {
+    HGLOG_CONTEXT( SetPreviewParam, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    TInt error( KErrNone );
+    
+    if ( aMode == ENone || aMode == EColor64K )
+        {
+        iClient->SetPreviewParam( aSize, aMode );        
+        }
+    else
+        {
+        error = KErrNotSupported;
+        }
+   
+    HGLOG_OUT();
+    return error;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProvider::TakePreview
+// --------------------------------------------------------------------------
+//    
+EXPORT_C TInt CHgFastSwapPreviewProvider::TakePreview()
+    {
+    // Reset timer for screensaver (dismiss screensaver)
+    User::ResetInactivityTime(); 
+           
+    iClient->TakePreview();
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProvider::AckPreview
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFastSwapPreviewProvider::AckPreview( TInt aPreviewId )
+    {
+    iClient->AckPreview( aPreviewId );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProvider::CHgFastSwapPreviewProvider
+// --------------------------------------------------------------------------
+//    
+CHgFastSwapPreviewProvider::CHgFastSwapPreviewProvider()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CHgFastSwapPreviewProvider::ConstructL
+// --------------------------------------------------------------------------
+//    
+void CHgFastSwapPreviewProvider::ConstructL( MHgFastSwapPreviewObserver& aObs )
+    {
+    HGLOG_CONTEXT( ConstructL, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    iClient = new ( ELeave ) CHgFastSwapPreviewProviderClient( aObs );
+    iClient->ConstructL();
+    
+    HGLOG_OUT();
+    }
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* ==============================================================================
+*  Name        : %name: bld.inf %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : bld.inf
+*  Version     : %version: 1 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+previewprovidercrp.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/group/previewprovidercrp.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,47 @@
+/*
+* ==============================================================================
+*  Name        : %name: previewprovidercrp.mmp %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : MMP file for preview provider ECOM plugin
+*  Version     : %version: sa1spcx1#4 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+#include <platform_paths.hrh>
+#include <defaultcaps.hrh>
+
+TARGET          20016BEC.DLL
+TARGETTYPE      PLUGIN 
+UID             0x10009D8D 0x20016BEC
+CAPABILITY      CAP_ECOM_PLUGIN
+VENDORID        VID_DEFAULT
+
+OPTION_REPLACE  ARMCC --arm -O3 --cpu 6
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../inc
+USERINCLUDE     ../../../trace
+
+MW_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH      ../src
+SOURCE          previewprovidercrp.cpp
+
+RESOURCE        20016BEC.rss
+
+LIBRARY         ecom.lib
+LIBRARY         euser.lib
+LIBRARY         wsgraphicdrawer.lib
+LIBRARY         fbscli.lib
+LIBRARY         estor.lib 
+LIBRARY         gdi.lib 
+DEBUGLIBRARY    flogger.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/inc/previewprovidercrp.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,179 @@
+/*
+* ==============================================================================
+*  Name        : %name: previewprovidercrp.h %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : Preview provider ECOM plugin
+*  Version     : %version: sa1spcx1#3 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#ifndef PREVIEWPROVIDERCRP_H
+#define PREVIEWPROVIDERCRP_H
+
+// INCLUDES
+#include <w32std.h>
+#include <graphics/wsgraphicdrawerinterface.h>
+#include <graphics/wsgraphicdrawer.h>
+
+// Number of screenshots used at the same time,
+// each window group change will cause a screenshot
+// to one of these, the index for the current one is
+// switched after each screenshot capture. (this is needed
+// to prevent overwriting screenshots before the client could
+// make a copy of them)
+const TInt KMaxShots = 4;
+
+/**
+ * Preview provider window server ECOM plugin class.
+ */
+NONSHARABLE_CLASS( CPreviewProviderCRP ) : public CWsGraphicDrawer, 
+                                           public MWsEventHandler 
+    {
+public:
+
+    /**
+     * Creates a new instance of the plguin.
+     *
+     * @return Created instance.
+     */ 
+    static CWsGraphicDrawer* CreateL();
+    
+    /**
+     * Destructor
+     */ 
+    ~CPreviewProviderCRP();
+    
+private:
+
+    /**
+     * From CWsGraphicDrawer.
+     *
+     * @param aGc
+     * @param aRect
+     * @param aData
+     */ 
+    void DoDraw( MWsGc& aGc, const TRect& aRect, const TDesC8& aData ) const;
+    
+    /**
+     * Handles message from PreviewProviderClient.
+     *
+     * @param aData Message data.
+     */ 
+    void HandleMessage( const TDesC8& aData );
+
+    /**
+     * 2nd phase constructor.
+     *
+     * @param aEnv
+     * @param aId
+     * @param aOwner
+     * @param aData
+     */     
+    void ConstructL( MWsGraphicDrawerEnvironment& aEnv, 
+                     const TGraphicDrawerId& aId, 
+                     MWsClient& aOwner, 
+                     const TDesC8& aData );
+    
+    /**
+     * From MWsEventHandler.
+     * 
+     * Observer for TWservCrEvent::EWindowGroupChanged to take the screenshot
+     * when application changes.
+     *
+     * @param aEvent
+     */     
+    void DoHandleEvent( const TWservCrEvent& aEvent );
+    
+private:
+
+    /**
+     * 2nd phase constructor.
+     */ 
+    void ConstructL();
+    
+    /**
+     * Handles application registration.
+     *
+     * @param aWgId Window group id.
+     */ 
+    void Register( TInt aWgId );
+    
+    /**
+     * Handler application unregistration.
+     *
+     * @param aWgId Window group id.
+     */     
+    void Unregister( TInt aWgId );
+    
+    /*
+     * Allocate resources and take screenshot
+     */
+    void ScreenshotL();
+    
+    /**
+     * Takes the screenshot.
+     */     
+    void ScreenshotL( CFbsBitmap& aBitmap );
+    
+    /**
+     * Remove bitmap reference fom list
+     */
+    void RemoveScreenshot( TInt aBitmapHandle );
+    
+    /**
+     * Remove all bitmaps overflow
+     */
+    void CheckOverflow();
+    
+    /**
+     * Handles message from PreviewProviderClient.
+     *
+     * @param aData Message data.
+     */     
+    void DoHandleMessageL( const TDesC8& aData );
+    
+    /**
+     * Notifies the PreviewProviderClient when screenshot is ready for copying.
+     */     
+    void ScaleCompleteL(const CFbsBitmap& aBitmap);
+    
+    /**
+     * Notifies the PreviewProviderClient when an application has been exited.
+     */
+    void UnregisterComplete( TInt aWgId );
+    
+    /**
+     * Uses window server front buffer to create a screenshot.
+     * @param aFront preallocated destination bitmap
+     * @param aFront Front buffer. 
+     * @param aSrcSize Size of the source front buffer in pixels.
+     * @param aSrcStride Source stride.
+     */
+    void FrontBufferScreenShot(
+        CFbsBitmap& aBitmap,
+        MWsFrontBuffer& aFront, const TSize& aSrcSize, TInt aSrcStride );  
+    
+private:
+    TInt iScreen;
+    TInt iPrevId;
+    TInt iPrevReg; // to work around the problem with wgid not set when app brought 
+                   // to foreground first time
+    RPointerArray<CFbsBitmap> iScreenshots;
+    TSize iScreenshotSize;
+    TDisplayMode iScreenshotMode;
+    RArray<TInt> iWgIds;
+    };
+
+#endif // PREVIEWPROVIDERCRP_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/inc/previewprovidercrplogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* ============================================================================
+*  Name        : %name: previewprovidercrplogging.h %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : Header file used for logging
+*  Version     : %version: 1 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* 
+*/
+
+#ifndef PREVIEWPROVIDERCRPLOGGING_H
+#define PREVIEWPROVIDERCRPLOGGING_H
+
+_LIT( KHgLogFile, "hgpreviewprovidercrp.txt" );
+_LIT( KHgLogPath, "hgpreviewprovider" );
+#define _HGLOG_LOG_COMPONENT_ID 6715358
+//#define _HGLOG_RDEBUG
+
+#include <e32debug.h>
+#include "hglogging.h"
+
+#endif // PREVIEWPROVIDERCRPLOGGING_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/src/20016BEC.rss	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* ==============================================================================
+*  Name        : %name: 20016BEC.rss %
+*  Part of     : Hg fast swap previer provider plugin
+*  Description : ECOM registration file
+*  Version     : %version: sa1spcx1#2 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#include <ecom/registryinfo.rh>
+
+RESOURCE REGISTRY_INFO theInfo
+	{
+	dll_uid = 0x20016BEC;
+	interfaces =
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = 0x10281924;
+			implementations =
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x20016BEC;
+					version_no = 1;
+					display_name = "previewprovider";
+					default_data = "";
+					opaque_data = "";
+					}
+				};
+			}
+		};
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswpreviewprovider/wsplugin/src/previewprovidercrp.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,437 @@
+/*
+* ==============================================================================
+*  Name        : %name: previewprovidercrp.cpp %
+*  Part of     : Hg fast swap preview provider plugin
+*  Description : Preview provider ECOM plugin
+*  Version     : %version: sa1spcx1#8 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#include <bldvariant.hrh>
+#ifdef SYMBIAN_BUILD_GCE
+#define NGA
+#endif
+
+#include "previewprovidercrp.h"
+#include "previewmsg.h"
+#include "previewprovidercrplogging.h"
+#include <ecom/implementationproxy.h>
+#include <s32mem.h> //RDesReadStream
+
+#ifdef NGA
+#include <graphics/wsscreendevice.h>
+#endif
+
+// CONSTANTS
+const TInt KImpId( 0x20016BEC );
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::CreateL
+// --------------------------------------------------------------------------
+//
+CWsGraphicDrawer* CPreviewProviderCRP::CreateL()
+    {
+    CPreviewProviderCRP* crp = new (ELeave) CPreviewProviderCRP();
+    CleanupStack::PushL( crp );
+    crp->ConstructL();
+    CleanupStack::Pop( crp );
+    return crp;
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::ConstructL
+// --------------------------------------------------------------------------
+//    
+void CPreviewProviderCRP::ConstructL()
+    { 
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::~CPreviewProviderCRP
+// --------------------------------------------------------------------------
+//    
+CPreviewProviderCRP::~CPreviewProviderCRP()    
+    {
+    Env().UnregisterEventHandler( this );
+    iScreenshots.ResetAndDestroy();
+    iWgIds.Close();
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::DoDraw
+// --------------------------------------------------------------------------
+//
+void CPreviewProviderCRP::DoDraw( MWsGc& /*aGc*/, const TRect& /*aRect*/, 
+    const TDesC8& /*aData*/) const
+    {
+    //draws nothing
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::HandleMessage
+// --------------------------------------------------------------------------
+//    
+void CPreviewProviderCRP::HandleMessage( const TDesC8& aData )
+    {
+    TRAP_IGNORE( DoHandleMessageL( aData ) );
+    }
+    
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::DoHandleMessageL
+// --------------------------------------------------------------------------
+//    
+void CPreviewProviderCRP::DoHandleMessageL( const TDesC8& aData )
+    {  
+    HGLOG_CONTEXT( DoHandleMessageL, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    RDesReadStream in( aData );
+    switch( in.ReadInt32L() )
+        {
+        case NPreviewMsg::ERegister:
+            {
+            const TInt id = in.ReadInt32L();
+            Register( id );
+            }
+            break;
+        case NPreviewMsg::EUnregister:
+            {
+            const TInt id = in.ReadInt32L();
+            Unregister( id );
+            }
+            break;
+        case NPreviewMsg::EChangeScreen:
+            {
+            const TInt screen = in.ReadInt32L();
+            if ( Env().ScreenCount() )
+                {
+                iScreen = screen;
+                }
+            }
+            break;
+        case NPreviewMsg::ESetPreviewParam:
+            iScreenshotSize.iWidth = in.ReadInt32L();
+            iScreenshotSize.iHeight = in.ReadInt32L();
+            iScreenshotMode = static_cast<TDisplayMode>( in.ReadInt32L() );
+            break;
+        case NPreviewMsg::ETakePreview:
+            ScreenshotL();
+            break;
+        case NPreviewMsg::EAckPreviewReady:
+            RemoveScreenshot( in.ReadInt32L() );
+            break;
+        }
+    
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::ConstructL
+// --------------------------------------------------------------------------
+//    
+void CPreviewProviderCRP::ConstructL( MWsGraphicDrawerEnvironment& aEnv,
+    const TGraphicDrawerId& aId, MWsClient& aOwner, const TDesC8& /*aData*/ )
+    {
+    HGLOG_CONTEXT( ConstructL, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    BaseConstructL( aEnv, aId, aOwner );
+    aEnv.RegisterEventHandler( this, this, TWservCrEvent::EWindowGroupChanged );
+    
+    HGLOG_OUT();
+    }
+    
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::DoHandleEvent
+// --------------------------------------------------------------------------
+//    
+void CPreviewProviderCRP::DoHandleEvent( const TWservCrEvent& aEvent )
+    {
+    HGLOG_CONTEXT( DoHandleEvent, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    if ( aEvent.Type() == TWservCrEvent::EWindowGroupChanged )
+        {
+        const TInt wgId = aEvent.WindowGroupIdentifier();
+        if ( iWgIds.FindInOrder( iPrevId ) >= 0 ||
+            ( iPrevId == 0 &&  iPrevReg != 0 ) )
+            {
+            TRAP_IGNORE( ScreenshotL() );
+            iPrevReg = 0;
+            }
+        iPrevId = wgId;
+        }
+    
+    HGLOG_OUT();
+    }
+    
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::ScaleComplete
+// --------------------------------------------------------------------------
+//    
+void CPreviewProviderCRP::ScaleCompleteL( const CFbsBitmap& aBitmap )
+    {
+    HGLOG_CONTEXT( ScaleComplete, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    const TInt msg[] = {
+            NPreviewMsg::EPreviewReady,
+            iPrevId?iPrevId:iPrevReg,
+            aBitmap.Handle()
+            };
+    TPckgC<TInt[sizeof(msg) / sizeof(TInt)]> buf(msg);
+    User::LeaveIfError( SendMessage( buf ) );
+    HGLOG3( HGLOG_INFO, "size = %dx%d handle = %d",
+        aBitmap.SizeInPixels().iWidth,
+        aBitmap.SizeInPixels().iHeight,
+        aBitmap.Handle() );
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::UnregisterComplete
+// --------------------------------------------------------------------------
+//    
+void CPreviewProviderCRP::UnregisterComplete( TInt aWgId )
+    {
+    HGLOG_CONTEXT( UnregisterComplete, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    const TInt msg[] = {
+            NPreviewMsg::EUnregisterReady,
+            aWgId,
+            0
+            };
+    TPckgC<TInt[sizeof(msg) / sizeof(TInt)]> buf(msg);
+    SendMessage(buf);
+    
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::Register
+// --------------------------------------------------------------------------
+//    
+void CPreviewProviderCRP::Register( TInt aWgId )
+    {
+    HGLOG_CONTEXT( Register, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    iPrevReg = aWgId;
+    iWgIds.InsertInOrder( aWgId );
+    
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::Unregister
+// --------------------------------------------------------------------------
+//
+void CPreviewProviderCRP::Unregister( TInt aWgId )
+    {
+    HGLOG_CONTEXT( Unregister, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    const TInt index = iWgIds.FindInOrder( aWgId );
+    if ( index >= 0 )
+        {
+        iWgIds.Remove( index );
+        }
+    
+    UnregisterComplete( aWgId );
+    
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::ScreenShotL
+// --------------------------------------------------------------------------
+//
+void CPreviewProviderCRP::ScreenshotL()
+    {
+    CFbsBitmap* screenshot = new (ELeave)CFbsBitmap();
+    CleanupStack::PushL( screenshot );
+    ScreenshotL( *screenshot );
+    ScaleCompleteL( *screenshot );
+    iScreenshots.InsertL( screenshot, iScreenshots.Count() );
+    CleanupStack::Pop( screenshot );
+    CheckOverflow();
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::ScreenShotL
+// --------------------------------------------------------------------------
+//
+void CPreviewProviderCRP::ScreenshotL(CFbsBitmap& aBitmap)
+    {
+    HGLOG_CONTEXT( ScreenShot, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    if( 0 > iScreen || Env().ScreenCount() <= iScreen )
+        {
+        //screen offset out of range. skip request
+        User::Leave(KErrArgument);
+        }
+    // Find the screen resolution
+    MWsScreenConfig* screenConfig = 
+        Env().Screen( iScreen )->ObjectInterface<MWsScreenConfig>();    
+    
+    const TSize sz = screenConfig->ScreenModeSizeInPixels();
+
+    // Get the screen buffer (containing screenshot data)
+    MWsFrontBuffer* screenFront = 
+        Env().Screen( iScreen )->ObjectInterface<MWsFrontBuffer>();
+    
+    // With NGA we do not support downscaling of the screenshots.
+    // So use the size of the screen if no screenshot size has been explicitly
+    // set or if the old method for taking screenshots is not available.
+    if ( iScreenshotSize.iWidth == 0 || 
+         iScreenshotSize.iHeight == 0 || 
+         !screenFront )
+        {
+        iScreenshotSize = sz;
+        }
+    // Use the the same DisplayMode as for the source image
+    // so override the display mode, ignoring any requests.
+    iScreenshotMode = screenConfig->DisplayMode();
+    
+    HGLOG3( HGLOG_INFO, "iShotSize: %dx%d mode: %d",
+        iScreenshotSize.iWidth, iScreenshotSize.iHeight, iScreenshotMode );
+    
+    aBitmap.Reset();
+    User::LeaveIfError( aBitmap.Create( iScreenshotSize, iScreenshotMode ) );
+  
+    // Check if front buffer is available.
+    // Will always be NULL with NGA.
+    if ( screenFront )
+        {
+        HGLOG0( HGLOG_INFO, "non-NGA, using front buffer" );
+        FrontBufferScreenShot( aBitmap, *screenFront, sz, screenConfig->Stride() );
+        }
+#ifdef NGA
+    else
+        {
+        HGLOG0( HGLOG_INFO, "NGA, using CopyScreenToBitmapL" );
+        MWsScreenDevice* screenDevice = static_cast<MWsScreenDevice*>(
+            Env().Screen( iScreen )->ResolveObjectInterface(
+                MWsScreenDevice::EWsObjectInterfaceId ) );
+        User::LeaveIfNull( screenDevice );
+        screenDevice->CopyScreenToBitmapL( &aBitmap, iScreenshotSize );
+        }
+#endif
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::RemoveShot
+// --------------------------------------------------------------------------
+//
+void CPreviewProviderCRP::RemoveScreenshot( TInt aBitmapHandle )
+    {
+    for( int iter(0); iter < iScreenshots.Count(); ++iter )
+        {
+        if( iScreenshots[iter]->Handle() == aBitmapHandle )
+            {
+            delete iScreenshots[iter];
+            iScreenshots.Remove(iter);
+            break;
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::CheckOverflow
+// --------------------------------------------------------------------------
+//
+void CPreviewProviderCRP::CheckOverflow()
+    {
+    TInt overflow( iScreenshots.Count() - KMaxShots);
+    while( 0 < overflow-- )
+        {
+        delete iScreenshots[0];
+        iScreenshots.Remove(0);
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPreviewProviderCRP::FrontBufferScreenShot
+// --------------------------------------------------------------------------
+//    
+void CPreviewProviderCRP::FrontBufferScreenShot( CFbsBitmap& aBitmap, 
+                                                 MWsFrontBuffer& aFront, 
+                                                 const TSize& aSrcSize, 
+                                                 TInt aSrcStride )
+    {
+    HGLOG_CONTEXT( CPreviewProviderCRP::FrontBufferScreenShot, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    const TUint8* src = static_cast<const TUint8*> ( aFront.GetBits() );
+    HGLOG1( HGLOG_INFO, "src address = [%d]", src );
+        
+    TInt srcstride( aSrcStride );
+    TInt srcwidth( aSrcSize.iWidth );
+    TInt srcheight( aSrcSize.iHeight ); 
+    TInt dststride( aBitmap.DataStride() );
+    TInt dstheight( iScreenshotSize.iHeight );
+    TInt dstwidth( iScreenshotSize.iWidth );
+    TInt stepdst( dststride / dstwidth );
+    TInt stepsrc( srcstride / srcwidth );
+    // scale must be TInt type
+    TInt scaleX( aSrcSize.iWidth / iScreenshotSize.iWidth );
+    TInt scaleY( aSrcSize.iHeight / iScreenshotSize.iHeight );
+    
+    aBitmap.LockHeap();
+    
+    TUint8* dst = ( TUint8* ) aBitmap.DataAddress();
+    
+    TInt minWidth = Min( srcwidth, dstwidth );
+    TInt minHeight = Min( srcheight, dstheight );
+    TInt minStep = Min( stepsrc, stepdst );
+    
+    for ( TInt y = minHeight; y > 0; y-- )
+         {
+         for ( TInt x = minWidth; x > 0; x-- )
+             {
+             Mem::Copy( dst, src, minStep );
+             dst += stepdst;
+             src += scaleX*stepdst;
+             }
+         src += srcstride - scaleX * stepdst * minWidth;
+         src += ( scaleY - 1 ) * srcstride;
+         }
+         
+    aBitmap.UnlockHeap();
+    HGLOG_OUT();
+    }
+    
+// --------------------------------------------------------------------------
+// KImplementationTable
+// --------------------------------------------------------------------------
+//    
+LOCAL_C const TImplementationProxy KImplementationTable[] = 
+    {
+    IMPLEMENTATION_PROXY_ENTRY(KImpId, CPreviewProviderCRP::CreateL)
+    };
+
+// --------------------------------------------------------------------------
+// ImplementationGroupProxy
+// --------------------------------------------------------------------------
+//    
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = (sizeof(KImplementationTable) / sizeof(TImplementationProxy));
+    return KImplementationTable;
+    }
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/client/bwins/hgfswclientu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,10 @@
+EXPORTS
+	?NewL@CHgFswClient@@SAPAV1@XZ @ 1 NONAME ; class CHgFswClient * CHgFswClient::NewL(void)
+	?CancelSubscribe@CHgFswClient@@QAEXXZ @ 2 NONAME ; void CHgFswClient::CancelSubscribe(void)
+	?SwitchToApp@CHgFswClient@@QAEXH@Z @ 3 NONAME ; void CHgFswClient::SwitchToApp(int)
+	?NewLC@CHgFswClient@@SAPAV1@XZ @ 4 NONAME ; class CHgFswClient * CHgFswClient::NewLC(void)
+	?ForegroundAppUid@CHgFswClient@@QAE?AVTUid@@W4THgFswFgAppType@1@@Z @ 5 NONAME ; class TUid CHgFswClient::ForegroundAppUid(enum CHgFswClient::THgFswFgAppType)
+	?Subscribe@CHgFswClient@@QAEXAAVMHgFswObserver@@@Z @ 6 NONAME ; void CHgFswClient::Subscribe(class MHgFswObserver &)
+	?GetContentL@CHgFswClient@@QAEXAAV?$RPointerArray@VCHgFswEntry@@@@@Z @ 7 NONAME ; void CHgFswClient::GetContentL(class RPointerArray<class CHgFswEntry> &)
+	?CloseApp@CHgFswClient@@QAEXH@Z @ 8 NONAME ; void CHgFswClient::CloseApp(int)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/client/eabi/hgfswclientu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,10 @@
+EXPORTS
+	_ZN12CHgFswClient11GetContentLER13RPointerArrayI11CHgFswEntryE @ 1 NONAME
+	_ZN12CHgFswClient11SwitchToAppEi @ 2 NONAME
+	_ZN12CHgFswClient15CancelSubscribeEv @ 3 NONAME
+	_ZN12CHgFswClient16ForegroundAppUidENS_15THgFswFgAppTypeE @ 4 NONAME
+	_ZN12CHgFswClient4NewLEv @ 5 NONAME
+	_ZN12CHgFswClient5NewLCEv @ 6 NONAME
+	_ZN12CHgFswClient8CloseAppEi @ 7 NONAME
+	_ZN12CHgFswClient9SubscribeER14MHgFswObserver @ 8 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/client/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,25 @@
+/*
+ * ===========================================================================
+ *  Name        : bld.inf
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : build info file for client dll
+ *  Version     : %version: 5 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+PRJ_EXPORTS
+../inc/hgfswclient.h            |../../../inc/hgfswclient.h
+../inc/hgfswclientobserver.h    |../../../inc/hgfswclientobserver.h
+
+PRJ_MMPFILES
+hgfswclient.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/client/group/hgfswclient.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,42 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswclient.mmp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : client dll
+ *  Version     : %version: 7 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include <platform_paths.hrh>
+
+TARGET  hgfswclient.dll
+TARGETTYPE DLL
+CAPABILITY CAP_GENERAL_DLL
+
+SOURCEPATH ../src
+SOURCE          hgfswclient.cpp
+SOURCE          hgfswclientimpl.cpp
+
+MW_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../inc
+USERINCLUDE     ../../../inc
+USERINCLUDE     ../../../trace
+
+LIBRARY euser.lib
+LIBRARY estor.lib
+
+LIBRARY hgfswutils.lib
+
+DEBUGLIBRARY flogger.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/client/inc/clientlogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* ============================================================================
+*  Name        : clientlogging.h
+*  Part of     : Classic UI / Teleport
+*  Description : Defines logs for client
+*  Version     : %version:  sa1spcx1#3 % 
+*
+*  Copyright (c) 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.1.1
+*/
+
+#ifdef _DEBUG // codescanner::ifpreprocessor
+_LIT( KHgLogFile, "hgfswclient.txt" );
+_LIT( KHgLogPath, "teleport" );
+#define _HGLOG_LOG_COMPONENT_ID 0x0000000
+#endif
+
+#include "hglogging.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/client/inc/hgfswclient.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,132 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswclient.h
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : Client API
+ *  Version     : %version: 6 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#ifndef __HGFSWCLIENT_H
+#define __HGFSWCLIENT_H
+
+#include <e32std.h>
+#include "hgfswentry.h"
+
+class MHgFswObserver;
+class CHgFswClientImpl;
+
+/**
+ * Client API for the Huriganes Fast Swap Server.
+ */    
+NONSHARABLE_CLASS( CHgFswClient ) : public CBase
+    {
+public:
+    /**
+     * Possible values for aType argument of ForegroundAppUid().
+     */
+    enum THgFswFgAppType
+        {
+        /**
+         * Means that even when the foreground app has another app embedded
+         * into it the uid of the container application will be returned.
+         */
+        EUseStandaloneUid,
+        /**
+         * Means that if the foreground app has another app embedded
+         * into it then the returned uid will be the uid of the embedded
+         * app.
+         */
+        EUseEmbeddedUid
+        };
+
+    /**
+     * Creates a new instance.
+     * @capability LocalServices
+     */
+    IMPORT_C static CHgFswClient* NewL();
+    
+    /**
+     * Creates a new instance.
+     * @capability LocalServices
+     */
+    IMPORT_C static CHgFswClient* NewLC();
+    
+    /**
+     * Destructor.
+     */
+    ~CHgFswClient();
+    
+    /**
+     * Queries the fast swap content from the server and
+     * copies it into the given array.
+     * Previous content of the array is removed (by using ResetAndDestroy).
+     * @param   aDst    array to which data is stored
+     * @capability LocalServices
+     */
+    IMPORT_C void GetContentL( RHgFswArray& aDst );
+    
+    /**
+     * Subscribes for continuous notifications about changes in the
+     * fast swap content.
+     * The notifications are generated until CancelSubscribe is called
+     * or the instance is destroyed.
+     * @capability LocalServices
+     */
+    IMPORT_C void Subscribe( MHgFswObserver& aObserver );
+    
+    /**
+     * Cancels the subscription for change notifications.
+     * @capability LocalServices
+     */
+    IMPORT_C void CancelSubscribe();
+    
+    /**
+     * Tries to close the application with the given id.
+     * @capability LocalServices
+     */
+    IMPORT_C void CloseApp( TInt aWgId );
+    
+    /**
+     * Brings the application with the given id into foreground.
+     * @capability LocalServices
+     */
+    IMPORT_C void SwitchToApp( TInt aWgId );
+
+    /**
+     * Returns the uid of the foreground app or KNullUid if something goes wrong.
+     *
+     * Will never return hidden apps, only those which can also be seen in the
+     * array returned by GetContentL.
+     *
+     * However the handling of embedded applications might be different:
+     * (as opposed to GetContentL)
+     * If aType == EUseEmbeddedUid:
+     *   This function will always return the embedded application's uid, unlike
+     *   GetContentL which will always refer to the container app (except for the
+     *   screenshot of course). This means that the returned uid is simply the
+     *   uid belonging to the first (non-hidden, etc.) window group from the window group list.
+     * If aType == EUseStandaloneUid:
+     *   Embedded applications are ignored and the returned uid is the app uid belonging
+     *   to the first parentless window group.
+     */
+    IMPORT_C TUid ForegroundAppUid( THgFswFgAppType aType );
+
+private:
+    CHgFswClient();
+    void ConstructL();
+
+    CHgFswClientImpl* iImpl;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/client/inc/hgfswclientimpl.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,69 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswclientimpl.h
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : Client API, private implementation
+ *  Version     : %version: 5 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#ifndef __HGFSWCLIENTIMPL_H
+#define __HGFSWCLIENTIMPL_H
+
+#include <e32std.h>
+#include "hgfswentry.h"
+
+class MHgFswObserver;
+    
+NONSHARABLE_CLASS( CHgFswClientImpl ) : public CActive
+    {
+public:
+    static CHgFswClientImpl* NewL();
+    static CHgFswClientImpl* NewLC();
+    ~CHgFswClientImpl();
+    
+    void GetContentL( RHgFswArray& aDst );
+    
+    void Subscribe( MHgFswObserver& aObserver );
+    void CancelSubscribe();
+    
+    void CloseApp( TInt aWgId );
+    void SwitchToApp( TInt aWgId );
+
+    TUid ForegroundAppUid( TInt aType );
+
+private:
+    void RunL();
+    void DoCancel();
+
+private:
+    CHgFswClientImpl();
+    void ConstructL();
+
+    NONSHARABLE_CLASS( RHgFswClient ) : public RSessionBase
+        {
+    public:
+        TInt Connect();
+        void Subscribe( TRequestStatus& aStatus );
+        void CancelSubscribe();
+        void GetContentL( RHgFswArray& aDst );
+        void CloseApp( TInt aWgId );
+        void SwitchToApp( TInt aWgId );
+        TUid ForegroundAppUid( TInt aType );
+        };
+    RHgFswClient iClient;
+    
+    MHgFswObserver* iObserver; // not own
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/client/inc/hgfswclientobserver.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,38 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswclientobserver.h
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : Client API
+ *  Version     : %version: sa1spcx1#2 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#ifndef __HGFSWCLIENTOBSERVER_H
+#define __HGFSWCLIENTOBSERVER_H
+
+#include <e32base.h>
+
+/**
+ * Observer interface for getting notifications about fast swap content changes.
+ */
+class MHgFswObserver
+    {
+public:
+    /**
+     * Called when there is a change in the fast swap content.
+     * The data can be queried via CHgFswClient::GetContentL
+     */
+    virtual void HandleFswContentChanged() = 0;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/client/src/hgfswclient.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,83 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswclient.cpp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : Client API
+ *  Version     : %version: 3 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include "hgfswclient.h"
+#include "hgfswclientimpl.h"
+
+EXPORT_C CHgFswClient* CHgFswClient::NewL()
+    {
+    CHgFswClient* self = NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+EXPORT_C CHgFswClient* CHgFswClient::NewLC()
+    {
+    CHgFswClient* self = new ( ELeave ) CHgFswClient;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+CHgFswClient::CHgFswClient()
+    {
+    }
+
+CHgFswClient::~CHgFswClient()
+    {
+    delete iImpl;
+    }
+
+void CHgFswClient::ConstructL()
+    {
+    iImpl = CHgFswClientImpl::NewL();
+    }
+
+EXPORT_C void CHgFswClient::GetContentL( RHgFswArray& aDst )
+    {
+    iImpl->GetContentL( aDst );
+    }
+
+EXPORT_C void CHgFswClient::Subscribe( MHgFswObserver& aObserver )
+    {
+    iImpl->Subscribe( aObserver );
+    }
+    
+EXPORT_C void CHgFswClient::CancelSubscribe()
+    {
+    iImpl->CancelSubscribe();
+    }
+
+EXPORT_C void CHgFswClient::CloseApp( TInt aWgId )
+    {
+    iImpl->CloseApp( aWgId );
+    }
+    
+EXPORT_C void CHgFswClient::SwitchToApp( TInt aWgId )
+    {
+    iImpl->SwitchToApp( aWgId );
+    }
+
+EXPORT_C TUid CHgFswClient::ForegroundAppUid( THgFswFgAppType aType )
+    {
+    return iImpl->ForegroundAppUid( aType );
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/client/src/hgfswclientimpl.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,232 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswclientimpl.cpp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : Client API, private implementation
+ *  Version     : %version: sa1spcx1#10 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include "hgfswclientimpl.h"
+#include "hgfswclientobserver.h"
+#include "hgfswcommon.h"
+#include <s32mem.h>
+
+#include "clientlogging.h"
+
+static TInt StartServer()
+    {
+    RProcess server;
+    const TUidType uid( KNullUid, KNullUid, KHgFswServerUid );
+    TInt err = server.Create( KHgFswServerImg, KNullDesC, uid );
+    if ( err != KErrNone )
+        {
+        return err;
+        }
+    TRequestStatus stat;
+    server.Rendezvous( stat );
+    if ( stat != KRequestPending )
+        {
+        server.Kill( 0 );
+        }
+    else
+        {
+        server.Resume();
+        }
+    User::WaitForRequest( stat );
+    err = server.ExitType() == EExitPanic ? KErrGeneral : stat.Int();
+    server.Close();
+    return err;
+    }
+
+TInt CHgFswClientImpl::RHgFswClient::Connect()
+    {
+    const TInt KAsyncMessageSlots = 4;
+    const TInt KMaxRetry = 4;
+    
+    TInt retry = KMaxRetry;
+    for ( ; ; )
+        {
+        TInt err = CreateSession( KHgFswServerName, TVersion( 0, 0, 0 ), KAsyncMessageSlots );
+        if ( err != KErrNotFound && err != KErrServerTerminated )
+            {
+            return err;
+            }
+        if ( !--retry )
+            {
+            return err;
+            }
+        err = StartServer();
+        if ( err != KErrNone && err != KErrAlreadyExists )
+            {
+            return err;
+            }
+        }
+    }
+
+void CHgFswClientImpl::RHgFswClient::Subscribe( TRequestStatus& aStatus )
+    {
+    SendReceive( EHgFswSubscribe, aStatus );
+    }
+    
+void CHgFswClientImpl::RHgFswClient::CancelSubscribe()
+    {
+    SendReceive( EHgFswCancel );
+    }
+
+void CHgFswClientImpl::RHgFswClient::GetContentL( RHgFswArray& aDst )
+    {
+    HGLOG_CONTEXT( GetContentL, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    for ( ; ; )
+        {
+        TPckgBuf<TInt> bufSize;
+        User::LeaveIfError( SendReceive( EHgFswGetBufferSize,
+            TIpcArgs( &bufSize ) ) );
+        HBufC8* buf = HBufC8::NewLC( bufSize() );
+        TPtr8 p( buf->Des() );
+        TInt err = SendReceive( EHgFswGetBuffer,
+            TIpcArgs( &p, bufSize() ) );
+        if ( err == KErrNone )
+            {
+            RDesReadStream strm( p );
+            CleanupClosePushL( strm );
+            CHgFswEntry::InternalizeArrayL( strm, aDst );
+            CleanupStack::PopAndDestroy( &strm );
+            }
+        else if ( err != KErrArgument )
+            {
+            User::Leave( err );
+            }
+        CleanupStack::PopAndDestroy( buf );
+        if ( err == KErrNone )
+            {
+            break;
+            }
+        // If result was KErrArgument then the size received from GetBufferSize is
+        // not valid anymore so restart the whole procedure.
+        }
+
+    HGLOG_OUT();
+    }
+
+void CHgFswClientImpl::RHgFswClient::CloseApp( TInt aWgId )
+    {
+    SendReceive( EHgFswCloseApp, TIpcArgs( aWgId ) );
+    }
+
+void CHgFswClientImpl::RHgFswClient::SwitchToApp( TInt aWgId )
+    {
+    SendReceive( EHgFswSwitchToApp, TIpcArgs( aWgId ) );
+    }
+
+TUid CHgFswClientImpl::RHgFswClient::ForegroundAppUid( TInt aType )
+    {
+    TUid result = KNullUid;
+    TPckgBuf<TInt> uidBuf;
+    if ( SendReceive( EHgFswForegroundAppUid,
+            TIpcArgs( &uidBuf, &aType ) ) == KErrNone )
+        {
+        result = TUid::Uid( uidBuf() );
+        }
+    return result;
+    }
+
+CHgFswClientImpl* CHgFswClientImpl::NewL()
+    {
+    CHgFswClientImpl* self = NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CHgFswClientImpl* CHgFswClientImpl::NewLC()
+    {
+    CHgFswClientImpl* self = new ( ELeave ) CHgFswClientImpl;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+CHgFswClientImpl::CHgFswClientImpl()
+        : CActive( CActive::EPriorityStandard )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+CHgFswClientImpl::~CHgFswClientImpl()
+    {
+    Cancel();
+    iClient.Close();
+    }
+
+void CHgFswClientImpl::ConstructL()
+    {
+    User::LeaveIfError( iClient.Connect() );
+    }
+
+void CHgFswClientImpl::GetContentL( RHgFswArray& aDst )
+    {
+    iClient.GetContentL( aDst );
+    }
+
+void CHgFswClientImpl::Subscribe( MHgFswObserver& aObserver )
+    {
+    Cancel();
+    iObserver = &aObserver;
+    iClient.Subscribe( iStatus );
+    SetActive();
+    }
+    
+void CHgFswClientImpl::CancelSubscribe()
+    {
+    Cancel();
+    }
+
+void CHgFswClientImpl::CloseApp( TInt aWgId )
+    {
+    iClient.CloseApp( aWgId );
+    }
+    
+void CHgFswClientImpl::SwitchToApp( TInt aWgId )
+    {
+    iClient.SwitchToApp( aWgId );
+    }
+
+TUid CHgFswClientImpl::ForegroundAppUid( TInt aType )
+    {
+    return iClient.ForegroundAppUid( aType );
+    }
+
+void CHgFswClientImpl::RunL()
+    {
+    HGLOG_CONTEXT( RunL, HGLOG_LOCAL );
+    HGLOG1_IN( "%d", iStatus.Int() );
+
+    if ( iStatus == KErrNone && iObserver )
+        {
+        iClient.Subscribe( iStatus );
+        SetActive();
+        iObserver->HandleFswContentChanged();
+        }
+
+    HGLOG_OUT();
+    }
+    
+void CHgFswClientImpl::DoCancel()
+    {
+    iClient.CancelSubscribe();
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/bwins/hgfswengineu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,8 @@
+EXPORTS
+	?FswDataL@CHgFswEngine@@QAEABV?$RPointerArray@VCHgFswEntry@@@@XZ @ 1 NONAME ; class RPointerArray<class CHgFswEntry> const & CHgFswEngine::FswDataL(void)
+	?ForegroundAppUidL@CHgFswEngine@@QAE?AVTUid@@H@Z @ 2 NONAME ; class TUid CHgFswEngine::ForegroundAppUidL(int)
+	?SwitchToAppL@CHgFswEngine@@QAEXH@Z @ 3 NONAME ; void CHgFswEngine::SwitchToAppL(int)
+	?NewL@CHgFswEngine@@SAPAV1@AAVMHgFswEngineObserver@@@Z @ 4 NONAME ; class CHgFswEngine * CHgFswEngine::NewL(class MHgFswEngineObserver &)
+	?CloseAppL@CHgFswEngine@@QAEXH@Z @ 5 NONAME ; void CHgFswEngine::CloseAppL(int)
+	?NewLC@CHgFswEngine@@SAPAV1@AAVMHgFswEngineObserver@@@Z @ 6 NONAME ; class CHgFswEngine * CHgFswEngine::NewLC(class MHgFswEngineObserver &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/eabi/hgfswengineu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,8 @@
+EXPORTS
+	_ZN12CHgFswEngine12SwitchToAppLEi @ 1 NONAME
+	_ZN12CHgFswEngine17ForegroundAppUidLEi @ 2 NONAME
+	_ZN12CHgFswEngine4NewLER20MHgFswEngineObserver @ 3 NONAME
+	_ZN12CHgFswEngine5NewLCER20MHgFswEngineObserver @ 4 NONAME
+	_ZN12CHgFswEngine8FswDataLEv @ 5 NONAME
+	_ZN12CHgFswEngine9CloseAppLEi @ 6 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,25 @@
+/*
+ * ===========================================================================
+ *  Name        : bld.inf
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : build info file for engine component
+ *  Version     : %version: 5 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+PRJ_EXPORTS
+../inc/hgfswengine.h        |../../../inc/hgfswengine.h
+../inc/hgfswobservers.h     |../../../inc/hgfswobservers.h
+
+PRJ_MMPFILES
+hgfswengine.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/group/hgfswengine.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,59 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswengine.mmp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : engine component
+ *  Version     : %version: sa1spcx1#17 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include <platform_paths.hrh>
+
+TARGET  hgfswengine.dll
+TARGETTYPE DLL
+CAPABILITY CAP_GENERAL_DLL
+
+SOURCEPATH ../src
+SOURCE          hgfswengine.cpp
+SOURCE          hgfshiddenapplist.cpp
+SOURCE          hgfsalwaysshownapplist.cpp
+SOURCE          hgfswidgetlist.cpp
+SOURCE          hgfswiconcache.cpp
+
+MW_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../inc
+USERINCLUDE     ../../../inc
+USERINCLUDE     ../../../trace
+
+LIBRARY euser.lib
+LIBRARY estor.lib
+LIBRARY eikcore.lib
+LIBRARY cone.lib
+LIBRARY apparc.lib
+LIBRARY ws32.lib
+LIBRARY apgrfx.lib
+LIBRARY fbscli.lib
+LIBRARY bitgdi.lib
+LIBRARY aknicon.lib
+LIBRARY aknskins.lib
+LIBRARY egul.lib
+LIBRARY         widgetregistryclient.lib
+LIBRARY         featmgr.lib
+
+LIBRARY hgpreviewprovider.lib
+LIBRARY hgfswutils.lib
+
+DEBUGLIBRARY    flogger.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/inc/enginelogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* ============================================================================
+*  Name        : enginelogging.h
+*  Part of     : Classic UI / Teleport
+*  Description : Defines logs for engine
+*  Version     : %version:  sa1spcx1#3 % 
+*
+*  Copyright (c) 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.1.1
+*/
+
+#ifdef _DEBUG // codescanner::ifpreprocessor
+_LIT( KHgLogFile, "hgfswengine.txt" );
+_LIT( KHgLogPath, "teleport" );
+#define _HGLOG_LOG_COMPONENT_ID 0x0000000
+#endif
+
+#include "hglogging.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/inc/hgfsalwaysshownapplist.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,75 @@
+/*
+ * ============================================================================
+ *  Name        : hgfsalwaysshownapplist.h
+ *  Part of     : Hg Teleport
+ *  Description : Non-closeable app list class
+ *  Version     : %version: sa1spcx1#2 %
+ *
+ *  Copyright 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ */
+
+#ifndef HGFSALWAYSSHOWNAPPLIST_H
+#define HGFSALWAYSSHOWNAPPLIST_H
+
+#include <e32base.h>
+#include <apgcli.h>
+
+/**
+ * List of always shown applications.
+ */
+NONSHARABLE_CLASS( CHgFsAlwaysShownAppList ) : public CBase
+    {
+public:
+    /**
+     * Two-phased constructor.
+     *
+     * @param aParent
+     */
+    static CHgFsAlwaysShownAppList* NewL();
+
+    /*
+     * Default C++ constructor
+     */
+    CHgFsAlwaysShownAppList();
+
+    /*
+     * Destructor
+     */
+    ~CHgFsAlwaysShownAppList();
+
+    /**
+     * Initializes the list that stores applications that are always
+     * shown in the fast swap provided they have been installed
+     * in the phone rom
+     * @return   -
+     */
+    void InitializeAlwaysShownListL();
+
+    /**
+     * If application uid exists in the always shown application list
+     * @return   ETrue  application uid exists in the list
+     *           EFalse application uid doesn't exist in the list
+     * @param    TUid aAppUid the application uid
+     */
+    TBool IsAlwaysShownApp( TUid aAppUid );
+
+    /**
+     * Returning reference to iAppList
+     */
+    RArray<TUid>& AppList() { return iAppList; }
+
+private:    
+    void ConstructL();
+    RArray<TUid> iAppList;
+    RApaLsSession iAppArcSession;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/inc/hgfshiddenapplist.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,107 @@
+/*
+* ============================================================================
+*  Name        : hgfshiddenapplist.h
+*  Part of     : Hg Teleport / Fast Swap module
+*  Description : Class that checks if chosen applications should be hidden
+*                from the task swap.
+*  Version     : %version: 1 %
+*
+*  Copyright 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#ifndef HGFSHIDDENAPPLIST_H_
+#define HGFSHIDDENAPPLIST_H_
+
+#include <e32base.h>    // For CActive, link against: euser.lib
+#include <e32std.h>     // For RTimer, link against: euser.lib
+#include <e32property.h>// For RProperty
+#include "hgfswobservers.h"
+
+//FORWARD DECLARATIONS
+class RWsSession;
+
+/**
+ * This class is handling the application which are hidden
+ * from fast swap feature.
+ */
+NONSHARABLE_CLASS( CHgFsHiddenAppList ) : public CActive
+    {
+public:
+
+    /**
+     * Symbian based two phased constructor.
+     */
+    static CHgFsHiddenAppList* NewL( MHgFsHiddenAppListObserver& aObserver );
+
+    /**
+     * Symbian based two phased constructor.
+     */
+    static CHgFsHiddenAppList* NewLC( MHgFsHiddenAppListObserver& aObserver );
+
+    /**
+     * Destructor
+     */
+    ~CHgFsHiddenAppList();
+
+    /**
+     * Whether application is hidden from FSW.
+     */
+    TBool IsHiddenL( TUid aAppUid, const RWsSession& aWsSession, TInt aWgId );
+
+    /**
+     * Updating application list
+     */
+    void UpdateListL();
+
+protected:
+    /**
+     * Default constructor.
+     */
+    CHgFsHiddenAppList( MHgFsHiddenAppListObserver& aObserver );
+
+    /**
+     * Second phase construction
+     */
+    void ConstructL();
+
+    /**
+     * Reset application array list.
+     */
+    void ResetArray();
+
+    /**
+     * Derived from CActive
+     */
+    virtual void DoCancel();
+
+    /**
+     * Derived from CActive
+     */
+    virtual void RunL();
+
+private:
+    /**
+     * Property reader for reading Hiden app list from FSW
+     */
+    RProperty iProperty;
+
+    /**
+     * Hidden App list
+     */
+    CArrayFixFlat<TInt>* iHiddenAppList;
+
+    /**
+     * hidden apps list observer
+     */
+    MHgFsHiddenAppListObserver& iObserver;
+    };
+
+#endif /*HGFSHIDDENAPPLIST_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/inc/hgfswengine.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,329 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswengine.h
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : Task monitor engine
+ *  Version     : %version: sa1spcx1#22 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#ifndef __HGFSWENGINE_H
+#define __HGFSWENGINE_H
+
+#include <e32base.h>
+#include <e32cmn.h>
+#include <s32strm.h>
+#include <fbs.h>
+#include <eikenv.h>
+#include <w32std.h>
+#include <e32hashtab.h>
+#include <apgcli.h>
+#include <e32property.h>
+#include "hgpreviewobserver.h"
+#include "hgfswentry.h"
+#include "hgfswobservers.h"
+
+class CHgFsAlwaysShownAppList;
+class CHgFsHiddenAppList;
+class CHgFsWidgetList;
+class MHgFswEngineObserver;
+class CHgFswIconCache;
+class CHgFastSwapPreviewProvider;
+class CApaWindowGroupName;
+//class CHgContextUtility;
+
+// descriptor big enough to store hex repr of 32-bit integer plus 0x prefix
+typedef TBuf<10> TAppUidHexString;
+
+/**
+ * Engine for fast swap server.
+ * Performs task monitoring, notifications about wg changes are
+ * received from the appui.
+ */
+NONSHARABLE_CLASS( CHgFswEngine ) : public CActive,
+        public MHgFswTaskListObserver,
+        public MHgFswResourceObserver,
+        public MHgFsHiddenAppListObserver,
+        public MHgFastSwapPreviewObserver
+    {
+public:
+    /**
+     * Creates a new instance.
+     * @param   aObserver   ref to observer
+     */
+    IMPORT_C static CHgFswEngine* NewL( MHgFswEngineObserver& aObserver );
+    
+    /**
+     * @copydoc NewL
+     */
+    IMPORT_C static CHgFswEngine* NewLC( MHgFswEngineObserver& aObserver );
+    
+    /**
+     * Destructor.
+     */
+    ~CHgFswEngine();
+
+    /**
+     * Returns a reference to the current content.
+     * Also performs sanity checks, e.g. associates application icons
+     * when no screenshot has been received.
+     * @return  ref to content array
+     */
+    IMPORT_C const RHgFswArray& FswDataL();
+    
+    /**
+     * Tries to close the given app.
+     * @param   aWgId   value given by WgId() for an entry in iData
+     */
+    IMPORT_C void CloseAppL( TInt aWgId );
+    
+    /**
+     * Brings the given app to foreground.
+     * @param   aWgId   value given by WgId() for an entry in iData
+     */
+    IMPORT_C void SwitchToAppL( TInt aWgId );
+
+    /**
+     * Returns the uid of the foreground app or KNullUid.
+     * Will never return hidden apps, only those which can
+     * also be seen in the array returned by FswDataL.
+     *
+     * In case of embedded apps the behaviour is controlled
+     * by aType: it will return either the uid of the embedded
+     * application or the container app.
+     *
+     * @param   aType   @see CHgFswClient::THgFswFgAppType
+     */
+    IMPORT_C TUid ForegroundAppUidL( TInt aType );
+
+private:
+    // from CActive
+    void RunL();
+    TInt RunError( TInt aError );
+    void DoCancel();
+
+    // from MHgFswTaskListObserver
+    void UpdateTaskList();
+    
+    // from MHgFswResourceObserver
+    void HandleResourceChange( TInt aType );
+
+    // from MHgFsHiddenAppListObserver
+    void HiddenAppListUpdated();
+
+    // from MHgFastSwapPreviewObserver
+    void HandleFswPpApplicationChange( TInt aWgId, TInt aFbsHandle );
+    void HandleFswPpApplicationUnregistered( TInt aWgId );
+
+private:
+    /**
+     * Constructor.
+     */
+    CHgFswEngine( MHgFswEngineObserver& aObserver );
+    
+    /**
+     * Performs 2nd phase construction.
+     */
+    void ConstructL();
+    
+    /**
+     * Gets the window group list and reconstructs the fsw content.
+     * @return   TBool   ETrue if the list has been modified
+     */
+    TBool CollectTasksL();
+    
+    /**
+     * Called from CollectTasksL for each entry in the task list.
+     * @param   aWgId       window group id
+     * @param   aAppUid     application uid
+     * @param   aWgName     window group name or NULL
+     * @param   aNewList    list to add to
+     * @param   aIsWidget   true if the entry corresponds to a web widget
+     * @return  TBool   ETrue if it was really a new entry in the list
+     */
+    TBool AddEntryL( TInt aWgId, const TUid& aAppUid,
+        CApaWindowGroupName* aWgName, RHgFswArray& aNewList,
+        TBool aIsWidget );
+
+    /**
+     * Checks if there is an entry for same app in the content list.
+     * If yes then it takes some of the data for the entry that
+     * will correspond to the same app in the refreshed content list.
+     * @param   aEntry      new entry in content list
+     * @param   aAppUid     application uid
+     * @param   aChanged    ref to change-flag, set to ETrue if it is sure
+     * that the new content list will be different from the previous one
+     * @param   aNewList    ref to new content list
+     * @return  ETrue if app was found
+     */
+    TBool CheckIfExistsL( CHgFswEntry& aEntry,
+        const TUid& aAppUid,
+        TBool& aChanged,
+        RHgFswArray& aNewList );
+
+    /**
+     * Adds running widgets to the list.
+     * @param   aNewList    array to add to
+     */
+    void CheckWidgetsL( RHgFswArray& aNewList );
+
+    /**
+     * Finds out the app uid for the given window group id.
+     * @param   aWgId   a valid window group id
+     * @return  application uid
+     */
+    TUid AppUidForWgIdL( TInt aWgId );
+    
+    /**
+     * Returns the parent's wg id or KErrNotFound.
+     * @param   aWgId   a valid window group id
+     * @return parent wg id or KErrNotFound if there is no parent
+     */
+    TInt FindParentWgId( TInt aWgId );
+    
+    /**
+     * Finds out the application name.
+     * @param   aWindowName window group name or NULL
+     * @param   aAppUId     application uid
+     * @param   aWgId       window group id
+     * @return  application name, ownership transferred to caller
+     */
+    HBufC* FindAppNameLC( CApaWindowGroupName* aWindowName,
+        const TUid& aAppUid, TInt aWgId );
+
+    /**
+     * Makes a copy of the bitmap with the given handle.
+     * @param   aFbsHandle          bitmap handle
+     * @param   aKeepAspectRatio    if true then aspect ratio is kept
+     * @return  CFbsBitmap*     the copy, ownership transferred to caller
+     */
+    CFbsBitmap* CopyBitmapL( TInt aFbsHandle, TBool aKeepAspectRatio );
+    
+    /**
+     * Checks if the app to which the screenshot belongs is in the task list
+     * and updates the entry when found. Also triggers change notification
+     * to observer when data is modified.
+     * @param   aWgIdForScreenshot  wgid for the screenshot 
+     * @param   aBitmapHandle       handle for screenshot bitmap
+     */
+    void AssignScreenshotHandle( TInt aWgIdForScreenshot, TInt aBitmapHandle );
+    
+    /**
+     * Returns the bitmap handle for the screenshot belonging to the given app
+     * or 0 if not (yet) found.
+     * @param   aWgIdForApp     a window group id (from the window group list)
+     * @return  bitmap handle or 0
+     */
+    TInt LookupScreenshotHandle( TInt aWgIdForApp );
+    
+    /**
+     * Callback for the iUpdateStarter timer.
+     * Calls CollectTasksL and notifies the observer if the task list
+     * has really been modified.
+     */
+    static TInt UpdateStarterCallback( TAny* aParam );
+
+    /**
+     * Brings the given web widget to foreground.
+     * @param   aWidgetIndex    index in the list of running widgets
+     */
+    void SwitchToWidgetL( TInt aWidgetIndex );
+
+    /**
+     * Configues the preview provider with current screen size.
+     */
+    void SetPreviewParams();
+
+    /**
+     * Registers and unregisters window groups to iPreviewProvider
+     * if the window group list has been changed.
+     */
+    void UpdatePreviewContent();
+
+    /**
+     * Gets and publishes the foreground app uid to CFW.
+     */
+    void PublishFgAppUidL();
+
+    /**
+     * Helper function to publish something to CFW.
+     * @param   aType   context type
+     * @param   aValue  value to publish
+     */
+    //void PublishContextL( const TDesC& aType, const TDesC& aValue );
+
+private: // data    
+    MHgFswEngineObserver& iObserver;
+    RHgFswArray iData; // current fsw content, i.e. the task list
+    CEikonEnv* iEnv; // not own
+
+    // always shown app list, own    
+    CHgFsAlwaysShownAppList* iAlwaysShownAppList;
+    
+    // hidden app list, own
+    CHgFsHiddenAppList* iHiddenAppList;
+    
+    // web widget list, own
+    CHgFsWidgetList* iWidgetList;
+
+    // window server session
+    RWsSession iWsSession;
+    
+    // apparc session
+    RApaLsSession iAppArcSession;
+
+    /**
+     * Hash table storing the screenshots.
+     * Key: window group id for the screenshot
+     * (the one received in ApplicationChange)
+     * Value: CFbsBitmap*, pointers owned
+     */    
+    RHashMap<TInt, CFbsBitmap*> iScreenshots;
+    
+    // preview provider instance, own
+    CHgFastSwapPreviewProvider* iPreviewProvider;
+    
+    // timer to defer content refresh
+    CPeriodic* iUpdateStarter;
+    
+    // app icon provider/container instance, own
+    CHgFswIconCache* iAppIcons;
+    
+    // true if web widgets are supported by the system
+    TBool iWidgetsSupported;
+    // wgid of widget appui is saved here
+    TInt iWidgetAppUiWgId;
+
+    // PS property to listen for swi status changes
+    RProperty iSwiProp;
+    // when true CollectTasksL will call GetAllApps etc.
+    // which is slow and need not be done normally, except
+    // during startup and perhaps when new applications are installed
+    TBool iAppDataRefreshNeeded;
+
+    // window group ids returned by last WindowGroupList call
+    RArray<TInt> iWgIds;
+    
+    // Dirty flag, indicates that iData is not up-to-date because
+    // there were no subscribed clients during a previous possible
+    // change of the task list.
+    TBool iTaskListDirty;
+
+    // For publishing the foreground app uid to Context Framework    
+    //CHgContextUtility* iContextUtility;
+    TAppUidHexString iFgAppUidStr;
+    TUid iFgAppUid;
+
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/inc/hgfswiconcache.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,100 @@
+/*
+* ============================================================================
+*  Name        : hgfswiconcache.h
+*  Part of     : Hg Teleport / Fast Swap module
+*  Description : Icon cache
+*  Version     : %version: 2 %
+*
+*  Copyright 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#ifndef HGFSWICONCACHE_H_
+#define HGFSWICONCACHE_H_
+
+#include <e32base.h>
+#include <e32hashtab.h>
+
+class CFbsBitmap;
+class CGulIcon;
+
+/**
+ * App icon cache.
+ */
+NONSHARABLE_CLASS( CHgFswIconCache ) : public CBase
+    {
+public:
+
+    /**
+     * Two phased constructor.
+     */
+    static CHgFswIconCache* NewL();
+
+    /**
+     * Two phased constructor.
+     */
+    static CHgFswIconCache* NewLC();
+
+    /**
+     * Destructor
+     */
+    ~CHgFswIconCache();
+
+    /**
+     * Gets the bitmaps associated with the given app from the cache.
+     * If not found then creates the app icon, stores it to the cache,
+     * and returns that.
+     * @param   aAppUid application uid
+     * @param   aBitmap bitmap ptr, ownership NOT transferred to caller, or NULL
+     * @param   aMask   mask ptr, ownership NOT transferred to caller, or NULL
+     */
+    void GetIconL( const TUid& aAppUid,
+        CFbsBitmap*& aBitmap, CFbsBitmap*& aMask );
+
+    /**
+     * Sets the ptrs to the default icon.
+     * Ownership not transferred to caller.
+     */
+    void DefaultIcon( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask );
+
+private:
+    /**
+     * Default constructor.
+     */
+    CHgFswIconCache();
+
+    /**
+     * Second phase construction
+     */
+    void ConstructL();
+
+    /**
+     * Retrieves the bitmap/mask for the icon of the given app.
+     * @param   aAppUid application uid
+     * @param   aBitmap bitmap ptr, ownership transferred to caller, or NULL
+     * @param   aMask   mask ptr, ownership transferred to caller, or NULL
+     */
+    void GetAppIconL( const TUid& aAppUid,
+        CFbsBitmap*& aBitmap, CFbsBitmap*& aMask );
+
+private:
+    struct SHgBitmapPair
+        {
+        SHgBitmapPair( CFbsBitmap* aBitmap, CFbsBitmap* aMask )
+            : iBitmap( aBitmap ), iMask( aMask ) { }
+        CFbsBitmap* iBitmap;
+        CFbsBitmap* iMask;
+        };
+    RHashMap<TInt, SHgBitmapPair> iAppIcons;
+    
+    CGulIcon* iDefaultIcon;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/inc/hgfswidgetlist.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,62 @@
+/*
+ * ============================================================================
+ *  Name        : hgfswidgetlist.h
+ *  Part of     : Hg Teleport
+ *  Description : web widget list
+ *  Version     : %version: sa1spcx1#5 %
+ *
+ *  Copyright 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ */
+
+#ifndef HGFSWIDGETLIST_H_
+#define HGFSWIDGETLIST_H_
+
+#include <e32base.h>
+#include <widgetregistryclient.h>
+
+const TUint32 KWidgetAppUidValue = 0x10282822;
+
+/**
+ * class handling the list of running wrt widgets
+ */
+NONSHARABLE_CLASS(CHgFsWidgetList) : public CBase
+    {
+public:
+    static CHgFsWidgetList* NewL();
+
+    /** Destructor */
+    ~CHgFsWidgetList();
+
+    /**
+     * Initializes the list that stores widgets.
+     * @return   -
+     */        
+    void InitializeWidgetListL();
+
+    /**
+     * Returns a ref to the list of running widgets.
+     */
+    const RWidgetInfoArray& RunningWidgets() const { return iRunningWidgets; }
+
+private:
+    /** Constructor */
+    CHgFsWidgetList();
+    void ResetArrayOfWidgetInfo( RWidgetInfoArray& aWidgetInfoArr );
+    
+    static void CleanupConnect( TAny* aThis );
+
+private:
+    /** Contains list of widgets that are currently running */
+    RWidgetInfoArray iRunningWidgets;
+    RWidgetRegistryClientSession iWidgetRegistryClientSession;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/inc/hgfswobservers.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,81 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswobservers.h
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : Observer interfaces to get notifications from appui and from engine
+ *  Version     : %version: sa1spcx1#4 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#ifndef __HGFSWOBSERVERS_H
+#define __HGFSWOBSERVERS_H
+
+/**
+ * Interface to get notifications from appui when window groups
+ * have changed.
+ */
+class MHgFswTaskListObserver
+    {
+public:
+    /**
+     * Function called by AppUi to notify about possible
+     * changes in task list
+     */
+    virtual void UpdateTaskList() = 0;
+    };
+
+/**
+ * Interface to get notifications from appui's HandleResourceChangeL.
+ */
+class MHgFswResourceObserver
+    {
+public:
+    /**
+     * Function called by AppUi to notify about resource changes.
+     */
+    virtual void HandleResourceChange( TInt aType ) = 0;
+    };
+
+/**
+ * Observer interface to get notifications from engine
+ * when fsw content has changed.
+ */
+class MHgFswEngineObserver
+    {
+public:
+    /**
+     * Called when there is a change in the task list.
+     */
+    virtual void FswDataChanged() = 0;
+
+    /**
+     * Called to find out how many clients are subscribed
+     * for fsw content change notifications.
+     */
+    virtual TInt FswDataListenerCount() = 0;
+    };
+
+/**
+ * This class is interface for CHgFsHiddenAppList
+ * to notify about list change
+ */
+class MHgFsHiddenAppListObserver
+    {
+public:
+    /**
+     * This function is called by CHgFsHiddenAppList when list is changed.
+     */
+    virtual void HiddenAppListUpdated() = 0;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/src/hgfsalwaysshownapplist.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,119 @@
+/*
+ * ============================================================================
+ *  Name        : hgfsalwaysshownapplist.cpp
+ *  Part of     : Hg Teleport
+ *  Description : File containing application list classes
+ *  Version     : %version: 4 %
+ *
+ *  Copyright 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ */
+
+//INCLUDES:
+#include <apaid.h>
+#include "hgfsalwaysshownapplist.h"
+
+//CONSTANTS:
+/* Array for all application uid that need to be always displayed (if they are running).
+   Also, there will be no Close option for such apps. */
+const TUint32 KHgFsUidArray[] =
+    {
+    0x102750F0 // Idle App Uid
+    ,0x0EFC346A //Search App Uid
+/* never show menu app */    //,0x101F4CD2 // Menu App Uid
+    };
+
+// ================= MEMBER FUNCTIONS =======================
+
+// --------------------------------------------------------------------------
+// CHgFsAlwaysShownAppList::NewL
+// --------------------------------------------------------------------------
+//
+CHgFsAlwaysShownAppList* CHgFsAlwaysShownAppList::NewL()
+    {
+    CHgFsAlwaysShownAppList* self =
+        new (ELeave) CHgFsAlwaysShownAppList;
+    CleanupStack::PushL (self );
+    self->ConstructL ( );
+    CleanupStack::Pop ( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFsAlwaysShownAppList::CHgFsAlwaysShownAppList
+// --------------------------------------------------------------------------
+//
+CHgFsAlwaysShownAppList::CHgFsAlwaysShownAppList()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CHgFsAlwaysShownAppList::~CHgFsAlwaysShownAppList
+// --------------------------------------------------------------------------
+//
+CHgFsAlwaysShownAppList::~CHgFsAlwaysShownAppList( )
+    {
+    iAppList.Close();
+    iAppArcSession.Close();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFsAlwaysShownAppList::ConstructL
+// --------------------------------------------------------------------------
+//
+void CHgFsAlwaysShownAppList::ConstructL( )
+    {
+    User::LeaveIfError( iAppArcSession.Connect() );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFsAlwaysShownAppList::InitializeAlwaysShownListL
+// Applications that are always shown in fast swap are stored
+// in different their own list whether they exist
+// in the phone rom or not
+// --------------------------------------------------------------------------
+//
+void CHgFsAlwaysShownAppList::InitializeAlwaysShownListL( )
+    {
+    iAppList.Reset();
+    // order of always shown applications
+    TApaAppInfo applicationInfo;
+    for (TInt index = 0,
+            sizeOfArray = ( sizeof(KHgFsUidArray) / sizeof( TUint32 ) );
+            index < sizeOfArray; index++ )
+        {
+        // if exists in phone rom
+        if ( iAppArcSession.GetAppInfo( applicationInfo,
+                TUid::Uid( KHgFsUidArray[index] ) )!= KErrNotFound )
+            {
+            iAppList.AppendL( TUid::Uid( KHgFsUidArray[index] ) );
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFsAlwaysShownAppList::IsAlwaysShownApp
+// If application uid exists in the always shown application list
+// --------------------------------------------------------------------------
+//
+TBool CHgFsAlwaysShownAppList::IsAlwaysShownApp( TUid aAppUid )
+    {
+    for ( TInt index = 0, count = iAppList.Count ( ); index < count; index++ )
+        {
+        if ( iAppList[index] == aAppUid )
+            {
+            return ETrue;
+            }
+        }
+    return EFalse;
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/src/hgfshiddenapplist.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,226 @@
+/*
+* ============================================================================
+*  Name        : hgfshiddenapplist.cpp
+*  Part of     : Hg Teleport / Fast Swap module
+*  Description : Class that checks if chosen applications should be hidden
+*                from the task swap.
+*  Version     : %version: sa1spcx1#3 %
+*
+*  Copyright 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+// INCLUDES
+#include "hgfshiddenapplist.h"
+#include <apgwgnam.h>
+
+#include <eikenv.h>
+
+// the maximum size of array (25 32-bit UIDs equal 100 bytes)
+const TInt KMaxHiddenApps = 25;
+
+/**
+ * Category id for the hidden application list.
+ */
+const TUid KPSUidUikon = { 0x101F8773 };
+const TUint32 KUikAppHiddenList  = 0x00000010;
+
+/**
+ * Apps that are always hidden, no matter what settings the system reports.
+ */
+const TUint32 KHgFsAlwaysHiddenUidArray[] =
+    {
+    0x100056CF // screensaver
+    };
+
+// -----------------------------------------------------------------------------
+// CHgFsHiddenAppList::NewL
+// -----------------------------------------------------------------------------
+//
+CHgFsHiddenAppList* CHgFsHiddenAppList::NewL(
+        MHgFsHiddenAppListObserver& aObserver )
+    {
+    CHgFsHiddenAppList* self =
+        new ( ELeave ) CHgFsHiddenAppList( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgFsHiddenAppList::NewLC
+// -----------------------------------------------------------------------------
+//
+CHgFsHiddenAppList* CHgFsHiddenAppList::NewLC(
+        MHgFsHiddenAppListObserver& aObserver )
+    {
+    CHgFsHiddenAppList* self = CHgFsHiddenAppList::NewL( aObserver );
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgFsHiddenAppList::~CHgFsHiddenAppList
+// -----------------------------------------------------------------------------
+//
+CHgFsHiddenAppList::~CHgFsHiddenAppList()
+    {
+    Cancel();
+
+    ResetArray();
+    delete iHiddenAppList;
+
+    iProperty.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgFsHiddenAppList::IsHiddenL
+// -----------------------------------------------------------------------------
+//
+TBool CHgFsHiddenAppList::IsHiddenL( TUid aAppUid,
+                                     const RWsSession& aWsSession,
+                                     TInt aWgId )
+    {
+    TBool ret = EFalse;
+
+    CApaWindowGroupName* windowName =
+                        CApaWindowGroupName::NewLC( aWsSession, aWgId );
+
+    if ( windowName->Hidden() )
+        {
+        ret = ETrue;
+        }
+    else
+        {
+        for ( TInt i = 0, ie = iHiddenAppList->Count(); i != ie; ++i )
+            {
+            if ( aAppUid.iUid == iHiddenAppList->At( i ) )
+                {
+                ret = ETrue;
+                break;
+                }
+            }
+        if ( !ret )
+            {
+            for ( TInt i = 0,
+                    arrCnt = sizeof( KHgFsAlwaysHiddenUidArray ) / sizeof( TUint32 );
+                    i != arrCnt; ++i )
+                {
+                if ( KHgFsAlwaysHiddenUidArray[i] == aAppUid.iUid )
+                    {
+                    ret = ETrue;
+                    break;
+                    }
+                }
+            }
+        }
+
+    CleanupStack::PopAndDestroy( windowName );
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgFsHiddenAppList::CHgFsHiddenAppList
+// -----------------------------------------------------------------------------
+//
+CHgFsHiddenAppList::CHgFsHiddenAppList(
+        MHgFsHiddenAppListObserver& aObserver )
+            :CActive( CActive::EPriorityHigh ), iObserver( aObserver )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CHgFsHiddenAppList::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CHgFsHiddenAppList::ConstructL()
+    {
+    const TInt KMaxGranularity = 4;
+    CActiveScheduler::Add( this );
+
+    iHiddenAppList = new (ELeave) CArrayFixFlat<TInt>( KMaxGranularity );
+    User::LeaveIfError( iProperty.Attach( KPSUidUikon, KUikAppHiddenList, EOwnerThread ) );
+
+    // must not call RunL directly from here as things are not fully initialized yet
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete( status, KErrNone );
+    SetActive();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgFsHiddenAppList::ResetArray
+// -----------------------------------------------------------------------------
+//
+void CHgFsHiddenAppList::ResetArray()
+    {
+    if ( iHiddenAppList )
+        {
+        iHiddenAppList->Reset();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgFsHiddenAppList::UpdateListL
+// -----------------------------------------------------------------------------
+//
+void CHgFsHiddenAppList::UpdateListL()
+    {
+    ResetArray();
+
+    // hidden list array
+    TBuf16 <2*KMaxHiddenApps> hiddenList;
+    iProperty.Get( hiddenList );
+
+    for ( TInt i = 0; i < hiddenList.Length(); i = i + 2 )
+        {
+        TUint32 uid = 0x00000000;
+        uid = hiddenList[i];
+        uid = uid << 16; // codescanner::magicnumbers
+        uid |= hiddenList[i+1];
+
+        if ( uid != 0 )
+            {
+            iHiddenAppList->AppendL( uid );
+            }
+        else
+            {
+            break;
+            }
+        }
+
+    iObserver.HiddenAppListUpdated();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgFsHiddenAppList::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CHgFsHiddenAppList::DoCancel()
+    {
+    iProperty.Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgFsHiddenAppList::RunL
+// -----------------------------------------------------------------------------
+//
+void CHgFsHiddenAppList::RunL()
+    {
+    if ( !IsActive() )
+        {
+        iProperty.Subscribe( iStatus );
+        SetActive();
+        }
+    UpdateListL();
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/src/hgfswengine.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,1062 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswengine.cpp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : Task monitor engine
+ *  Version     : %version: sa1spcx1#37 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include "hgfswengine.h"
+#include "hgfsalwaysshownapplist.h"
+#include "hgfshiddenapplist.h"
+#include "hgfswidgetlist.h"
+#include "hgfswiconcache.h"
+#include "hgpreviewprovider.h"
+#include "hgfswclient.h"
+#include <apgtask.h>
+#include <AknDef.h>
+#include <apgwgnam.h>
+#include <mmf/common/mmfcontrollerpluginresolver.h> // for CleanupResetAndDestroyPushL
+#include <featmgr.h>
+#include <swi/swispubsubdefs.h>
+
+#include "enginelogging.h"
+
+// time to wait before refreshing content
+const TInt KContentRefreshDelay = 500000; // 0.5 sec
+
+// for screenshots, they are scaled down to (screensize/this_factor).
+const TInt KScreenSizeFactor = 2;
+
+// format to get a lowercase hex string prefixed with 0x
+_LIT( KHexFmt, "0x%x" );
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::NewL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CHgFswEngine* CHgFswEngine::NewL( MHgFswEngineObserver& aObserver )
+    {
+    CHgFswEngine* self = NewLC( aObserver );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::NewLC
+// --------------------------------------------------------------------------
+//
+EXPORT_C CHgFswEngine* CHgFswEngine::NewLC( MHgFswEngineObserver& aObserver )
+    {
+    CHgFswEngine* self = new ( ELeave ) CHgFswEngine( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::CHgFswEngine
+// --------------------------------------------------------------------------
+//
+CHgFswEngine::CHgFswEngine( MHgFswEngineObserver& aObserver )
+        : CActive( EPriorityStandard ), iObserver( aObserver )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::ConstructL
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::ConstructL()
+    {
+    iEnv = CEikonEnv::Static();
+
+    User::LeaveIfError( iWsSession.Connect() );
+    User::LeaveIfError( iAppArcSession.Connect() );
+
+    iHiddenAppList = CHgFsHiddenAppList::NewL( *this );
+    iAlwaysShownAppList = CHgFsAlwaysShownAppList::NewL();
+
+    iWidgetsSupported = FeatureManager::FeatureSupported( KFeatureIdWebWidgets );
+    if ( iWidgetsSupported )
+        {
+        iWidgetList = CHgFsWidgetList::NewL();
+        }
+
+    // create app icon retriever instance
+    iAppIcons = CHgFswIconCache::NewL();
+
+    // get an initial list of tasks
+    iAppDataRefreshNeeded = ETrue;
+    CollectTasksL();
+
+    // listen for app screenshots
+    iPreviewProvider = CHgFastSwapPreviewProvider::NewL( *this );
+    SetPreviewParams();
+    UpdatePreviewContent();
+
+    iUpdateStarter = CPeriodic::NewL( CActive::EPriorityStandard );
+    
+    // start listening for swi ps property
+    if ( iSwiProp.Attach( KUidSystemCategory,
+            Swi::KUidSoftwareInstallKey ) == KErrNone )
+        {
+        iSwiProp.Subscribe( iStatus );
+        SetActive();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::~CHgFswEngine
+// --------------------------------------------------------------------------
+//
+CHgFswEngine::~CHgFswEngine()
+    {
+    Cancel();
+    iSwiProp.Close();
+
+    delete iUpdateStarter;
+    delete iPreviewProvider;
+
+    // delete the bitmaps as the hash map cannot do that
+    THashMapIter<TInt, CFbsBitmap*> iter( iScreenshots );
+    while ( const TInt* key = iter.NextKey() )
+        {
+        CFbsBitmap** value = iter.CurrentValue();
+        delete *value;
+        }
+    iScreenshots.Close();
+    delete iAppIcons;
+
+    iData.ResetAndDestroy();
+    iWgIds.Close();
+
+    delete iHiddenAppList;
+    delete iAlwaysShownAppList;
+    delete iWidgetList;
+    iAppArcSession.Close();
+    iWsSession.Close();
+
+//    delete iContextUtility;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::FswDataL
+// --------------------------------------------------------------------------
+//
+EXPORT_C const RHgFswArray& CHgFswEngine::FswDataL()
+    {
+    HGLOG_CONTEXT( FswDataL, HGLOG_LOCAL );
+    HGLOG1_IN( "dirty flag = %d", iTaskListDirty );
+
+    // check the dirty flag and refresh if needed
+    if ( iTaskListDirty )
+        {
+        CollectTasksL();
+        // dirty flag is cleared in the above call
+        }
+
+    // Get app icon for entries without screenshot,
+    // do this only here as the app icon is not needed in case a screenshot
+    // is already available.
+    for ( TInt i = 0, ie = iData.Count(); i != ie; ++i )
+        {
+        if ( !iData[i]->ScreenshotHandle() )
+            {
+            CFbsBitmap* bmp;
+            CFbsBitmap* mask;
+            TUid appUid = iData[i]->AppUid();
+            // this will leave with -46 in case of widgets if we do not have AllFiles cap
+            TRAPD( err, iAppIcons->GetIconL( appUid, bmp, mask ) );
+            if ( err == KErrNone && bmp )
+                {
+                iData[i]->SetAppIconHandles( bmp->Handle(),
+                    mask ? mask->Handle() : 0 );
+                }
+            else
+                {
+                iAppIcons->DefaultIcon( bmp, mask );
+                iData[i]->SetAppIconHandles( bmp->Handle(),
+                    mask ? mask->Handle() : 0 );
+                }
+            }
+        }
+
+    HGLOG_OUT();
+    return iData;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::CloseAppL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEngine::CloseAppL( TInt aWgId )
+    {
+    HGLOG_CONTEXT( CloseAppL, HGLOG_LOCAL );
+    HGLOG1_IN( "aWgId = %d", aWgId );
+
+    if ( iWidgetsSupported && aWgId < 0 && iWidgetAppUiWgId )
+        {
+        // for widgets clients see a wgid that is -1*(index+1)
+        const RWidgetInfoArray& arr( iWidgetList->RunningWidgets() );
+        // convert aWgId to an index in the list of running widgets
+        TInt idx = -aWgId - 1;
+        // if index is valid then handle the widget specially
+        if ( idx >= 0 && idx < arr.Count() )
+            {
+            TWsEvent event;
+            event.SetType( EEventUser );
+            TUint8* eventData = event.EventData();
+            // Fill bits 0-31 with widget application uid.
+            reinterpret_cast<TUint32&>( *eventData ) = KWidgetAppUidValue;
+            eventData += sizeof( TUint32 );
+            // Fill bits 32-63 with uid of the widget that should be closed.
+            reinterpret_cast<TUint32&>( *eventData ) = arr[idx]->iUid.iUid;
+            // Send the event to Widget AppUi.
+            iEnv->WsSession().SendEventToWindowGroup(
+                iWidgetAppUiWgId, event );
+            // closing a widget may not cause a window group change so trigger
+            // the update manually
+            UpdateTaskList();
+            HGLOG0_OUT( "widget processing finished" );
+            return;
+            }
+        }
+
+    TUid appUid = AppUidForWgIdL( aWgId );
+    if ( !iAlwaysShownAppList->IsAlwaysShownApp( appUid ) )
+        {
+        // send window group event to kill the app
+        TWsEvent event;
+        event.SetTimeNow();
+        event.SetType( KAknShutOrHideApp );
+        iEnv->WsSession().SendEventToWindowGroup( aWgId, event );
+        HGLOG0( HGLOG_INFO, "event sent to wg" );
+        }
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::SwitchToAppL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEngine::SwitchToAppL( TInt aWgId )
+    {
+    HGLOG_CONTEXT( SwitchToAppL, HGLOG_LOCAL );
+    HGLOG1_IN( "aWgId = %d", aWgId );
+
+    if ( iWidgetsSupported && aWgId < 0 )
+        {
+        // for widgets clients see a wgid that is -1*(index+1)
+        const RWidgetInfoArray& arr( iWidgetList->RunningWidgets() );
+        // convert aWgId to an index in the list of running widgets
+        TInt idx = -aWgId - 1;
+        // if index is valid then handle the widget specially
+        if ( idx >= 0 && idx < arr.Count() )
+            {
+            SwitchToWidgetL( idx );
+            HGLOG1_OUT( "switched to widget %d", idx );
+            return;
+            }
+        }
+
+    TApaTask task( iEnv->WsSession() );
+    task.SetWgId( aWgId );
+    task.BringToForeground();
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::SwitchToWidgetL
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::SwitchToWidgetL( TInt aWidgetIndex )
+    {
+    const RWidgetInfoArray& arr( iWidgetList->RunningWidgets() );
+    RApaLsSession ls;
+    User::LeaveIfError( ls.Connect() );
+    CleanupClosePushL( ls );
+    CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+    cmdLine->SetCommandL( EApaCommandRun );
+    TApaAppInfo info;
+    iAppArcSession.GetAppInfo( info, arr[aWidgetIndex]->iUid ); // codescanner::accessArrayElementWithoutCheck2 (aWidgetIndex checked in SwitchToAppL())
+    cmdLine->SetExecutableNameL( info.iFullName );
+    ls.StartApp( *cmdLine );
+    CleanupStack::PopAndDestroy( 2, &ls );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::UpdateTaskList
+// Callback from appui
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::UpdateTaskList()
+    {
+    HGLOG_CONTEXT( UpdateTaskList, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    // If no clients are subscribed for fsw content change notifications
+    // then there is no need to waste time with rebuilding the task list,
+    // just set the dirty flag.
+    TInt listenerCount = iObserver.FswDataListenerCount();
+    HGLOG1( HGLOG_INFO, "listener count = %d", listenerCount );
+    if ( listenerCount > 0 )
+        {
+        // There can be many calls in a row, use a timer to prevent degrading
+        // device performance.
+        if ( !iUpdateStarter->IsActive() )
+            {
+            iUpdateStarter->Start( KContentRefreshDelay, 0,
+                TCallBack( UpdateStarterCallback, this ) );
+            }
+        }
+    else
+        {
+        iTaskListDirty = ETrue;
+        }
+
+    // screenshot taking support - call Register and Unregister when needed
+    UpdatePreviewContent();
+
+    // get the foreground app uid and publish it to CFW if different than before
+    TRAP_IGNORE( PublishFgAppUidL() );
+    
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::ForegroundAppUidL
+// --------------------------------------------------------------------------
+//
+EXPORT_C TUid CHgFswEngine::ForegroundAppUidL( TInt aType )
+    {
+    // Do not use GetFocusWindowGroup or others.
+    // We want to see only "real" application uids in FgApp,
+    // i.e. stuff that would also be shown in the task swapper
+    // area of Teleport.
+
+    TUid result = KNullUid;
+    RArray<RWsSession::TWindowGroupChainInfo> allWgIds;
+    CleanupClosePushL( allWgIds );
+    User::LeaveIfError( iWsSession.WindowGroupList( 0, &allWgIds ) );
+    TInt count = allWgIds.Count();
+    for ( TInt i = 0; i < count; ++i )
+        {
+        // Depending on aType we may not need to bother with iParentId here.
+        // If aType == EUseEmbeddedUid => embedded apps are treated as others.
+        // If aType == EUseStandaloneUid => embedded apps must be ignored.
+        if ( allWgIds[i].iParentId > 0
+                && aType == CHgFswClient::EUseStandaloneUid )
+            {
+            continue;
+            }
+
+        CApaWindowGroupName* wgn = CApaWindowGroupName::NewLC(
+            iWsSession, allWgIds[i].iId );
+        TUid newUid = wgn->AppUid();
+        TBool hidden = wgn->Hidden() || iHiddenAppList->IsHiddenL(
+            newUid, iWsSession, allWgIds[i].iId );
+        CleanupStack::PopAndDestroy( wgn );
+
+        if ( !hidden && newUid.iUid )
+            {
+            result = newUid;
+            break;
+            }
+        }
+    CleanupStack::PopAndDestroy( &allWgIds );
+    
+    return result;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::PublishFgAppUidL
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::PublishFgAppUidL()
+    {
+    HGLOG_CONTEXT( PublishFgAppUidL, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    TUid newUid = ForegroundAppUidL( CHgFswClient::EUseEmbeddedUid );
+    HGLOG2( HGLOG_INFO, "ws says: %x we have: %x", newUid.iUid, iFgAppUid.iUid );
+    if ( iFgAppUid != newUid && newUid.iUid )
+        {
+        iFgAppUid = newUid;
+        iFgAppUidStr.Format( KHexFmt, iFgAppUid.iUid );
+        //PublishContextL( KHgCFTypeFgApp, iFgAppUidStr );
+        }
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::PublishContextL
+// --------------------------------------------------------------------------
+//
+//void CHgFswEngine::PublishContextL( const TDesC& aType, const TDesC& aValue )
+//    {
+//    HGLOG_CONTEXT( PublishContextL, HGLOG_LOCAL );
+//    HGLOG2_IN( "%S: %S", &aType, &aValue );
+//    if ( !iContextUtility )
+//        {
+//        iContextUtility = CHgContextUtility::NewL();
+//        iContextUtility->AllowPublishFromBackground( ETrue );
+//        }
+//    iContextUtility->PublishContextL( aType, aValue );
+//    HGLOG_OUT();
+//    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::UpdateStarterCallback
+// Callback for the timer
+// --------------------------------------------------------------------------
+//
+TInt CHgFswEngine::UpdateStarterCallback( TAny* aParam )
+    {
+    CHgFswEngine* self = static_cast<CHgFswEngine*>( aParam );
+    self->iUpdateStarter->Cancel();
+    // get list of tasks and notify observer if there is a change in the list
+    TBool changed = EFalse;
+    TRAPD( err, changed = self->CollectTasksL() );
+    if ( err == KErrNone && changed )
+        {
+        self->iObserver.FswDataChanged();
+        }
+    return 0;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::CollectTasksL
+// --------------------------------------------------------------------------
+//
+TBool CHgFswEngine::CollectTasksL()
+    {
+    HGLOG_CONTEXT( CollectTasksL, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    // clear dirty flag
+    iTaskListDirty = EFalse;
+
+    TBool changed = EFalse;
+    RHgFswArray newList;
+    CleanupResetAndDestroyPushL( newList );
+
+    // update app data if needed
+    // (usually on startup and when new apps might have been installed)
+    if ( iAppDataRefreshNeeded )
+        {
+        HGLOG0( HGLOG_INFO, "refreshing app data" );
+        iAppArcSession.GetAllApps();
+        iAlwaysShownAppList->InitializeAlwaysShownListL();
+        iAppDataRefreshNeeded = EFalse;
+        }
+
+    // get all window groups
+    RArray<RWsSession::TWindowGroupChainInfo> allWgIds;
+    CleanupClosePushL( allWgIds );
+    User::LeaveIfError( iWsSession.WindowGroupList( 0, &allWgIds ) );
+    TInt count = allWgIds.Count();
+
+    for ( TInt i = 0; i < count; ++i )
+        {
+        // ignore uninteresting entries (e.g. embedded apps)
+        if ( allWgIds[i].iParentId > 0 )
+            {
+            continue;
+            }
+
+        // get window group name
+        TInt wgId = allWgIds[i].iId;
+        CApaWindowGroupName* windowName =
+            CApaWindowGroupName::NewLC( iWsSession, wgId );
+        TUid appUid = windowName->AppUid();
+
+        // ignore entries with null uid
+        if ( !appUid.iUid )
+            {
+            CleanupStack::PopAndDestroy( windowName );
+            continue;
+            }
+
+        // will append the task to our own list only if it is not hidden
+        TBool onHiddenList = iHiddenAppList->IsHiddenL(
+            appUid, iWsSession, wgId );
+
+        // if this is the widget app then save wgid for later use
+        // and ignore it, but include running widgets instead
+        if ( iWidgetsSupported && appUid.iUid == KWidgetAppUidValue )
+            {
+            iWidgetAppUiWgId = wgId;
+            onHiddenList = ETrue;
+            CheckWidgetsL( newList );
+            }
+
+        // get screen number (-1=console, 0=main screen, 1=cover ui)
+        TInt appScreen = 0;
+        TInt scrNumErr = iAppArcSession.GetDefaultScreenNumber( appScreen, appUid );
+
+        // check if it is on always-shown list
+        TBool mustShow = iAlwaysShownAppList->IsAlwaysShownApp( appUid );
+
+#ifdef _DEBUG
+        const TDesC& captionDbg( windowName->Caption() );
+        HGLOG4( HGLOG_INFO, "[%d] wgid=%d appuid=%x (%S)", i, wgId,
+            appUid.iUid, &captionDbg );
+        HGLOG4( HGLOG_INFO, "hidden=%d onhiddenlist=%d mustshow=%d scrno=%d",
+            windowName->Hidden(), onHiddenList, mustShow, appScreen );
+#endif
+
+        // add item to task list if it is always-shown OR it is not hidden
+        // and it is not on cover ui
+        if ( mustShow
+                || ( !onHiddenList
+                    && !windowName->Hidden()
+                    && ( appScreen == 0 || appScreen == -1 )
+                    && scrNumErr == KErrNone ) )
+            {
+            if ( AddEntryL( wgId, appUid, windowName, newList, EFalse ) )
+                {
+                changed = ETrue;
+                }
+            }
+        CleanupStack::PopAndDestroy( windowName );
+        }
+    CleanupStack::PopAndDestroy( &allWgIds );    
+
+    // if counts for old and new lists do not match then there is a change for sure,
+    // probably an app has been closed
+    if ( iData.Count() != newList.Count() )
+        {
+        changed = ETrue;
+        }
+
+    // move pointers from the temporary list into the real one
+    iData.ResetAndDestroy();
+    TInt newListCount = newList.Count();
+    HGLOG1( HGLOG_INFO, "new list count = %d", newListCount );
+    for ( TInt i = 0; i < newListCount; ++i )
+        {
+        HGLOG3( HGLOG_INFO, "[%d] %S wgid=%d",
+            i, &newList[i]->AppName(), newList[i]->WgId() );
+        iData.AppendL( newList[i] );
+        newList[i] = 0;
+        }
+    CleanupStack::PopAndDestroy( &newList );
+    
+    HGLOG1_OUT( "change flag = %d", changed );
+    return changed;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::AddEntryL
+// --------------------------------------------------------------------------
+//
+TBool CHgFswEngine::AddEntryL( TInt aWgId, const TUid& aAppUid,
+        CApaWindowGroupName* aWgName, RHgFswArray& aNewList,
+        TBool aIsWidget )
+    {
+    TBool changed = EFalse;
+    CHgFswEntry* entry = CHgFswEntry::NewLC();
+    entry->SetWgId( aWgId );
+    entry->SetAppUid( aAppUid );
+    entry->SetWidget( aIsWidget );
+
+    // check if present in old list and if yes then take some of the old data
+    TBool found = CheckIfExistsL( *entry, aAppUid, changed, aNewList );
+
+    // if not present previously then find out app name
+    // and check if screenshot is already available
+    if ( !found )
+        {
+        // when adding a new entry to the list it is changed for sure
+        changed = ETrue;
+        HBufC* name = FindAppNameLC( aWgName, aAppUid, aWgId );
+        if ( name )
+            {
+            entry->SetAppNameL( *name );
+            }
+        CleanupStack::PopAndDestroy( name );
+        TInt h = LookupScreenshotHandle( aWgId );
+        if ( h )
+            {
+            entry->SetScreenshotHandle( h );
+            }
+        entry->SetAlwaysShown( iAlwaysShownAppList->IsAlwaysShownApp( aAppUid ) );
+        if ( aWgName )
+            {
+            entry->SetSystemApp( aWgName->IsSystem() );
+            }
+        }
+
+    // add to new list, ownership is transferred
+    aNewList.AppendL( entry );
+    CleanupStack::Pop( entry );
+    return changed;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::CheckIfExistsL
+// --------------------------------------------------------------------------
+//
+TBool CHgFswEngine::CheckIfExistsL( CHgFswEntry& aEntry,
+        const TUid& aAppUid,
+        TBool& aChanged,
+        RHgFswArray& aNewList )
+    {
+    for ( TInt entryIdx = 0, oldCount = iData.Count();
+            entryIdx < oldCount; ++entryIdx )
+        {
+        // Enough to check appuid, no need to bother with wgid as the
+        // screenshot handle is up-to-date or will be updated later anyway.
+        if ( iData[entryIdx]->AppUid() == aAppUid )
+            {
+            // if positions do not match then the list is different than before
+            if ( entryIdx != aNewList.Count() )
+                {
+                aChanged = ETrue;
+                }
+            CHgFswEntry* oldEntry = iData[entryIdx];
+            aEntry.SetAppNameL( oldEntry->AppName() );
+            aEntry.SetScreenshotHandle( oldEntry->ScreenshotHandle() );
+            aEntry.SetAlwaysShown( oldEntry->AlwaysShown() );
+            aEntry.SetSystemApp( oldEntry->SystemApp() );
+            return ETrue;
+            }
+        }
+    return EFalse;
+    }
+    
+// --------------------------------------------------------------------------
+// CHgFswEngine::CheckWidgetsL
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::CheckWidgetsL( RHgFswArray& aNewList )
+    {
+    if ( iWidgetsSupported )
+        {
+        iWidgetList->InitializeWidgetListL();
+        const RWidgetInfoArray& arr( iWidgetList->RunningWidgets() );
+        for ( TInt i = 0, ie = arr.Count(); i != ie; ++i )
+            {
+            // wgid will be a special negative value
+            // windowgroupname is not needed here so pass NULL
+            AddEntryL( -(i+1), arr[i]->iUid, 0, aNewList, ETrue );
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::HiddenAppListUpdated
+// Callback from the hidden app list watcher
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::HiddenAppListUpdated()
+    {
+    UpdateTaskList();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::AppUidForWgIdL
+// --------------------------------------------------------------------------
+//
+TUid CHgFswEngine::AppUidForWgIdL( TInt aWgId )
+    {
+    CApaWindowGroupName* windowName =
+        CApaWindowGroupName::NewLC( iWsSession, aWgId );
+    TUid appUid = windowName->AppUid();
+    CleanupStack::PopAndDestroy( windowName );
+    return appUid;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::FindParentWgId
+// --------------------------------------------------------------------------
+//
+TInt CHgFswEngine::FindParentWgId( TInt aWgId )
+    {
+    TInt parent( KErrNotFound );
+    RArray<RWsSession::TWindowGroupChainInfo> allWgIds;
+    // Ask for window group list from RWsSession
+    TInt error = iWsSession.WindowGroupList( 0, &allWgIds );
+    if ( !error )
+        {
+        TInt count( allWgIds.Count() );
+        for ( TInt i( 0 ); i < count; i++ )
+            {
+            RWsSession::TWindowGroupChainInfo info = allWgIds[i];
+            if ( info.iId == aWgId )
+                {
+                parent = info.iParentId;
+                break;
+                }
+            }
+        }
+    allWgIds.Close();
+    return parent;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::FindAppNameLC
+// --------------------------------------------------------------------------
+//
+HBufC* CHgFswEngine::FindAppNameLC( CApaWindowGroupName* aWindowName,
+                                  const TUid& aAppUid,
+                                  TInt aWgId )
+    {
+    //Retrieve the app name
+    TApaAppInfo info;
+    iAppArcSession.GetAppInfo( info, aAppUid );
+    TPtrC caption = info.iShortCaption;
+
+    HBufC* tempName = 0;
+    if ( !caption.Length() && aWindowName ) // if not set - use thread name instead
+        {
+        if ( aWindowName->Caption().Length() )
+            {
+            tempName = aWindowName->Caption().AllocL();
+            //put on cleanupstack after the if
+            }
+        else
+            {
+            TThreadId threadId;
+            TInt err = iWsSession.GetWindowGroupClientThreadId(
+                    aWgId, threadId );
+            if ( err == KErrNone )
+                {
+                RThread thread;
+                CleanupClosePushL( thread );
+                err = thread.Open ( threadId );
+                if ( err==KErrNone )
+                    {
+                    tempName = thread.Name().AllocL(); // codescanner::forgottoputptroncleanupstack
+                    // tempName put on cleanupstack after the if
+                    }
+                CleanupStack::PopAndDestroy( &thread );
+                }
+            }
+        }
+    else
+        {
+        tempName = caption.AllocL();
+        //put on cleanupstack after the if
+        }
+    CleanupStack::PushL( tempName );
+    return tempName;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::CopyBitmapL
+// --------------------------------------------------------------------------
+//
+CFbsBitmap* CHgFswEngine::CopyBitmapL( TInt aFbsHandle, TBool aKeepAspectRatio )
+    {
+    CFbsBitmap* ret = new (ELeave) CFbsBitmap;
+    CleanupStack::PushL( ret );
+    CFbsBitmap* bmp = new (ELeave) CFbsBitmap;
+    CleanupStack::PushL( bmp );
+    User::LeaveIfError( bmp->Duplicate( aFbsHandle ) );
+
+    //Make bitmap width and height equal so that it will look better in FSW control.
+    TSize size  = bmp->SizeInPixels();
+
+    if ( !aKeepAspectRatio )
+        {
+        if ( size.iHeight > size.iWidth )
+            {
+            size.iHeight = size.iWidth;
+            }
+        else
+            {
+            size.iWidth = size.iHeight;
+            }
+        }
+
+    // preserve size and mode
+    User::LeaveIfError( ret->Create( size, EColor64K ) );
+
+    CFbsBitmapDevice* doubleBufferDev = CFbsBitmapDevice::NewL( ret );
+    CleanupStack::PushL( doubleBufferDev );
+
+    CFbsBitGc* doubleBufferGc = 0;
+    User::LeaveIfError( doubleBufferDev->CreateContext( doubleBufferGc ) );
+    CleanupStack::PushL( doubleBufferGc );
+
+    // preserve size
+    doubleBufferGc->BitBlt( TPoint( 0, 0 ), bmp, TRect(size) );
+
+    CleanupStack::PopAndDestroy( doubleBufferGc );
+    CleanupStack::PopAndDestroy( doubleBufferDev );
+    CleanupStack::PopAndDestroy( bmp );
+    CleanupStack::Pop( ret );
+
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::UpdatePreviewContent
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::UpdatePreviewContent()
+    {
+    HGLOG_CONTEXT( UpdatePreviewContent, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    RArray<RWsSession::TWindowGroupChainInfo> allWgIds;
+    if ( iWsSession.WindowGroupList( 0, &allWgIds ) == KErrNone )
+        {
+        // check window groups that do not exist anymore
+        for ( TInt i = 0, ie = iWgIds.Count(); i != ie; ++i )
+            {
+            TInt wgid = iWgIds[i];
+            TBool present = EFalse;
+            for ( TInt j = 0, je = allWgIds.Count(); j != je; ++j )
+                {
+                if ( allWgIds[j].iId == wgid )
+                    {
+                    present = ETrue;
+                    break;
+                    }
+                }
+            if ( !present )
+                {
+                HGLOG1( HGLOG_INFO, "unregister: %d", wgid );
+                iPreviewProvider->Unregister( wgid );
+                }
+            }
+        // check topmost window group
+        if ( allWgIds.Count() )
+            {
+            if ( !iWgIds.Count() || allWgIds[0].iId != iWgIds[0] )
+                {
+                TInt wgid = allWgIds[0].iId;
+                HGLOG1( HGLOG_INFO, "registering %d", wgid );
+                iPreviewProvider->Register( wgid );
+                }
+            }
+        // store the new list
+        iWgIds.Reset();
+        for ( TInt i = 0, ie = allWgIds.Count(); i != ie; ++i )
+            {
+            iWgIds.Append( allWgIds[i].iId );
+            }
+        }
+    allWgIds.Close();
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::HandleFswPpApplicationChange
+// Callback from CHgFastSwapPreviewProvider
+// Note: aWgId is for the window group for which the screenshot is taken,
+// it may not be the same as the application's wgid (in case of embedded apps)
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::HandleFswPpApplicationChange( TInt aWgId, TInt aFbsHandle )
+    {
+    HGLOG_CONTEXT( HandleFswPpApplicationChange, HGLOG_LOCAL );
+    HGLOG2_IN( "aWgId = %d aFbsHandle = %d", aWgId, aFbsHandle );
+
+    CFbsBitmap* bmp = 0;
+    TRAPD( err, bmp = CopyBitmapL( aFbsHandle, EFalse ) );
+    iPreviewProvider->AckPreview(aFbsHandle);
+    if ( err == KErrNone )
+        {
+        CFbsBitmap** oldbmp = iScreenshots.Find( aWgId );
+        if ( oldbmp )
+            {
+            delete *oldbmp;
+            }
+        if ( iScreenshots.Insert( aWgId, bmp ) != KErrNone )
+            {
+            delete bmp;
+            iScreenshots.Remove( aWgId );
+            }
+        else
+            {
+            AssignScreenshotHandle( aWgId, bmp->Handle() );
+            }
+        }
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::HandleFswPpApplicationUnregistered
+// Callback from CHgFastSwapPreviewProvider
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::HandleFswPpApplicationUnregistered( TInt aWgId )
+    {
+    HGLOG_CONTEXT( HandleFswPpApplicationUnregistered, HGLOG_LOCAL );
+    HGLOG1_IN( "aWgId = %d", aWgId );
+
+    CFbsBitmap** bmp = iScreenshots.Find( aWgId );
+    if ( bmp )
+        {
+        delete *bmp;
+        iScreenshots.Remove( aWgId );
+        AssignScreenshotHandle( aWgId, 0 );
+        }
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::AssignScreenshotHandle
+// Called when a screenshot arrives to check if there is a corresponding
+// application in the task list.
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::AssignScreenshotHandle( TInt aWgIdForScreenshot,
+        TInt aBitmapHandle )
+    {
+    TBool changed = EFalse;
+    TInt parentWgId = FindParentWgId( aWgIdForScreenshot );
+    // now parentWgId is a valid wgid or KErrNotFound (-1)
+    for ( TInt i = 0, ie = iData.Count(); i != ie; ++i )
+        {
+        if ( iData[i]->Widget() )
+            {
+            // Do not do anything for now => no screenshot for widgets.
+            continue;
+            }
+        TInt appWgId = iData[i]->WgId();
+        if ( appWgId == aWgIdForScreenshot || appWgId == parentWgId )
+            {
+            iData[i]->SetScreenshotHandle( aBitmapHandle );
+            changed = ETrue;
+            break;
+            }
+        }
+    if ( changed )
+        {
+        iObserver.FswDataChanged();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::LookupScreenshotHandle
+// Called to check if there is a screenshot already stored for the given
+// app. (or a screenshot with a wgid for which aWgIdForApp is the parent)
+// --------------------------------------------------------------------------
+//
+TInt CHgFswEngine::LookupScreenshotHandle( TInt aWgIdForApp )
+    {
+    CFbsBitmap** bmp = iScreenshots.Find( aWgIdForApp );
+    if ( bmp )
+        {
+        // there is a screenshot stored for this wgid
+        return (*bmp)->Handle();
+        }
+    else if ( aWgIdForApp > 0 )
+        {
+        // must check if there is a screenshot for which aWgIdForApp is the parent
+        THashMapIter<TInt, CFbsBitmap*> iter( iScreenshots );
+        while ( const TInt* wgid = iter.NextKey() )
+            {
+            if ( FindParentWgId( *wgid ) == aWgIdForApp )
+                {
+                CFbsBitmap** bmp = iter.CurrentValue();
+                return (*bmp)->Handle();
+                }
+            }
+        }
+    else if ( aWgIdForApp < 0 )
+        {
+        // Must be a widget, wgid is useless in this case.
+        // Do not do anything for now => no screenshot for widgets.
+        }
+    return 0;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::RunL
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::RunL()
+    {
+    if ( iStatus != KErrCancel ) // when cancelling the subscribe it completes with KErrCancel
+        {
+        TInt value = 0;
+        if ( iSwiProp.Get( value ) == KErrNone )
+            {
+            TInt operationStatus( value & Swi::KSwisOperationStatusMask );
+            // When an (un)installation has finished change the flag to
+            // refresh the app list during the next task list update.
+            if ( operationStatus == Swi::ESwisStatusSuccess )
+                {
+                iAppDataRefreshNeeded = ETrue;
+                }
+            }
+        iSwiProp.Subscribe( iStatus );
+        SetActive();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::DoCancel
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::DoCancel()
+    {
+    iSwiProp.Cancel();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::RunError
+// --------------------------------------------------------------------------
+//
+TInt CHgFswEngine::RunError( TInt /*aError*/ )
+    {
+    return KErrNone;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::HandleResourceChange
+// callback from appui's HandleResourceChangeL
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::HandleResourceChange( TInt aType )
+    {
+    HGLOG_CONTEXT( HandleResourceChange, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    if ( iPreviewProvider && aType == KEikDynamicLayoutVariantSwitch )
+        {
+        SetPreviewParams();
+        }
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEngine::SetPreviewParams
+// --------------------------------------------------------------------------
+//
+void CHgFswEngine::SetPreviewParams()
+    {
+    TSize screenSize = iEnv->ScreenDevice()->SizeInPixels();
+    iPreviewProvider->SetPreviewParam(
+        TSize( screenSize.iWidth / KScreenSizeFactor,
+            screenSize.iHeight / KScreenSizeFactor ),
+        EColor64K ); // displaymode is ignored
+    }
+
+    
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/src/hgfswiconcache.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,141 @@
+/*
+ * ============================================================================
+ *  Name        : hgfswiconcache.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Icon cache
+ *  Version     : %version: sa1spcx1#5 %
+ *
+ *  Copyright 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ */
+
+#include "hgfswiconcache.h"
+#include <fbs.h>
+#include <AknsUtils.h>
+#include <gulicon.h>
+#include <avkon.mbg>
+
+// size for the created app icons
+const TInt KAppIconWidth = 96;
+const TInt KAppIconHeight = 96;
+
+// --------------------------------------------------------------------------
+// CHgFswIconCache::NewL
+// --------------------------------------------------------------------------
+//
+CHgFswIconCache* CHgFswIconCache::NewL()
+    {
+    CHgFswIconCache* self = new (ELeave) CHgFswIconCache;
+    CleanupStack::PushL (self );
+    self->ConstructL ( );
+    CleanupStack::Pop ( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswIconCache::CHgFswIconCache
+// --------------------------------------------------------------------------
+//
+CHgFswIconCache::CHgFswIconCache()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswIconCache::~CHgFswIconCache
+// --------------------------------------------------------------------------
+//
+CHgFswIconCache::~CHgFswIconCache( )
+    {
+    THashMapIter<TInt, SHgBitmapPair> iter( iAppIcons );
+    while ( const TInt* key = iter.NextKey() )
+        {
+        SHgBitmapPair* value = iter.CurrentValue();
+        delete value->iBitmap;
+        delete value->iMask;
+        }
+    iAppIcons.Close();
+    delete iDefaultIcon;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswIconCache::ConstructL
+// --------------------------------------------------------------------------
+//
+void CHgFswIconCache::ConstructL()
+    {
+    iDefaultIcon = AknsUtils::CreateGulIconL( 
+        AknsUtils::SkinInstance(),
+        KAknsIIDQgnMenuUnknownCxt,
+        AknIconUtils::AvkonIconFileName(),
+        EMbmAvkonQgn_menu_unknown_cxt,
+        EMbmAvkonQgn_menu_unknown_cxt_mask );
+    TSize sz( KAppIconWidth, KAppIconHeight );
+    AknIconUtils::SetSize( iDefaultIcon->Bitmap(), sz );
+    AknIconUtils::SetSize( iDefaultIcon->Mask(), sz );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswIconCache::GetAppIconL
+// --------------------------------------------------------------------------
+//
+void CHgFswIconCache::GetAppIconL( const TUid& aAppUid,
+        CFbsBitmap*& aBitmap, CFbsBitmap*& aMask )
+    {
+    aBitmap = aMask = 0;
+    MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
+    if ( skinInstance )
+        {
+        AknsUtils::CreateAppIconLC( skinInstance, aAppUid, EAknsAppIconTypeList,
+            aBitmap, aMask );
+        // The CreateAppIconLC method leaves both the bitmaps in the cleanup stack.
+        // The order in which they are pushed into the stack and types of 
+        // the items in the stack are both undefined.
+        CleanupStack::Pop( 2 ); // codescanner::cleanup
+        TSize sz( KAppIconWidth, KAppIconHeight );
+        AknIconUtils::SetSize( aBitmap, sz );
+        AknIconUtils::SetSize( aMask, sz );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswIconCache::GetIconL
+// --------------------------------------------------------------------------
+//
+void CHgFswIconCache::GetIconL( const TUid& aAppUid,
+        CFbsBitmap*& aBitmap, CFbsBitmap*& aMask )
+    {
+    aBitmap = aMask = 0;
+    SHgBitmapPair* bp = iAppIcons.Find( aAppUid.iUid );
+    if ( bp )
+        {
+        // ownership stays with the hash table
+        aBitmap = bp->iBitmap;
+        aMask = bp->iMask;
+        }
+    else
+        {
+        GetAppIconL( aAppUid, aBitmap, aMask ); // ownership of the bitmap is ours
+        // insert to hash table and pass ownership
+        iAppIcons.InsertL( aAppUid.iUid, SHgBitmapPair( aBitmap, aMask ) );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswIconCache::DefaultIcon
+// --------------------------------------------------------------------------
+//
+void CHgFswIconCache::DefaultIcon( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask )
+    {
+    aBitmap = iDefaultIcon->Bitmap();
+    aMask = iDefaultIcon->Mask();
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/engine/src/hgfswidgetlist.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,89 @@
+/*
+ * ============================================================================
+ *  Name        : hgfswidgetlist.cpp
+ *  Part of     : Hg Teleport
+ *  Description : web widget list
+ *  Version     : %version: sa1spcx1#5 %
+ *
+ *  Copyright 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ */
+
+#include "hgfswidgetlist.h"
+#include <widgetregistrydata.h>
+
+// --------------------------------------------------------------------------
+// CHgFsWidgetList::NewL
+// --------------------------------------------------------------------------
+//
+CHgFsWidgetList* CHgFsWidgetList::NewL()
+    {
+    return new (ELeave) CHgFsWidgetList;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFsWidgetList::CHgFsWidgetList
+// --------------------------------------------------------------------------
+//   
+CHgFsWidgetList::CHgFsWidgetList()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CHgFsWidgetList::~CHgFsWidgetList
+// --------------------------------------------------------------------------
+//
+CHgFsWidgetList::~CHgFsWidgetList()
+    {
+    ResetArrayOfWidgetInfo( iRunningWidgets );        
+    iRunningWidgets.Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFsWidgetList::CleanupConnect
+// --------------------------------------------------------------------------
+//
+void CHgFsWidgetList::CleanupConnect( TAny* aThis )
+    {
+    CHgFsWidgetList* self = static_cast<CHgFsWidgetList*>( aThis );
+    self->iWidgetRegistryClientSession.Disconnect();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFsWidgetList::InitializeWidgetListL
+// --------------------------------------------------------------------------
+//
+void CHgFsWidgetList::InitializeWidgetListL()
+    {
+    ResetArrayOfWidgetInfo( iRunningWidgets );
+    iRunningWidgets.Reset();
+    User::LeaveIfError( iWidgetRegistryClientSession.Connect() );
+    CleanupStack::PushL( TCleanupItem( CleanupConnect, this) );
+    iWidgetRegistryClientSession.RunningWidgetsL(iRunningWidgets);
+    CleanupStack::Pop(); // clean WidgetRegistryClientSession item
+    iWidgetRegistryClientSession.Disconnect();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFsWidgetList::ResetArrayOfWidgetInfo
+// --------------------------------------------------------------------------
+//
+void CHgFsWidgetList::ResetArrayOfWidgetInfo( 
+        RWidgetInfoArray& aWidgetInfoArr )
+    {
+    for ( TInt i = 0; i < aWidgetInfoArr.Count(); i++ )
+        {
+        CWidgetInfo *item = aWidgetInfoArr[i];
+        delete item;
+        }
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,29 @@
+/*
+ * ===========================================================================
+ *  Name        : bld.inf
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : main build info file
+ *  Version     : %version: 7 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+../rom/hgfswserver.iby    CORE_MW_LAYER_IBY_EXPORT_PATH(hgfswserver.iby)
+
+#include "../utils/group/bld.inf"
+#include "../engine/group/bld.inf"
+#include "../server/group/bld.inf"
+#include "../client/group/bld.inf"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/inc/hgfswcommon.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,41 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswcommon.h
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : common constants
+ *  Version     : %version: sa1spcx1#5 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#ifndef __HGFSWCOMMON_H
+#define __HGFSWCOMMON_H
+
+#include <e32std.h>
+
+_LIT( KHgFswServerName, "hgfswserver" );
+_LIT( KHgFswServerImg, "hgfswserver" );
+
+const TUid KHgFswServerUid = { 0x2001CBE1 };
+
+enum THgFswServerMessages
+    {
+    EHgFswSubscribe,
+    EHgFswCancel,
+    EHgFswGetBufferSize,
+    EHgFswGetBuffer, // there must be a GetBufferSize request before GetBuffer
+    EHgFswCloseApp,
+    EHgFswSwitchToApp,
+    EHgFswForegroundAppUid
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/rom/hgfswserver.iby	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,27 @@
+/*
+* ============================================================================
+*  Name        : hgfswserver.iby
+*  Part of     : Huriganes
+*  Description : Iby file for fast swap server
+*  Version     : %version: sa1spcx1#2 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#ifndef __HGFSWSERVER_IBY__
+#define __HGFSWSERVER_IBY__
+
+file=ABI_DIR/BUILD_DIR/hgfswclient.dll                                     SHARED_LIB_DIR/hgfswclient.dll
+file=ABI_DIR/BUILD_DIR/hgfswutils.dll                                      SHARED_LIB_DIR/hgfswutils.dll
+file=ABI_DIR/BUILD_DIR/hgfswengine.dll                                     SHARED_LIB_DIR/hgfswengine.dll
+file=ABI_DIR/BUILD_DIR/hgfswserver.exe                                     SHARED_LIB_DIR/hgfswserver.exe
+
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/server/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,21 @@
+/*
+ * ===========================================================================
+ *  Name        : bld.inf
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : server component build info file
+ *  Version     : %version: 4 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+PRJ_MMPFILES
+hgfswserver.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/server/group/hgfswserver.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,50 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswserver.mmp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : server component
+ *  Version     : %version: 9 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include <platform_paths.hrh>
+
+TARGET hgfswserver.exe
+TARGETTYPE EXE
+UID 0x0 0x2001CBE1
+// AllFiles cap needed to get icon for wrt widgets
+CAPABILITY CAP_SERVER AllFiles
+
+SOURCEPATH ../src
+SOURCE          hgfswserver.cpp
+SOURCE          hgfswsession.cpp
+SOURCE          hgfswappui.cpp
+
+MW_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../inc
+USERINCLUDe     ../../../inc
+
+LIBRARY euser.lib
+LIBRARY estor.lib
+LIBRARY eikcore.lib
+LIBRARY cone.lib
+LIBRARY ws32.lib
+LIBRARY apgrfx.lib
+LIBRARY fbscli.lib
+LIBRARY avkon.lib
+
+LIBRARY hgfswengine.lib
+LIBRARY hgfswutils.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/server/inc/hgfswappui.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,64 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswappui.h
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : appui for server
+ *  Version     : %version: 5 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#ifndef __HGFSWAPPUI_H
+#define __HGFSWAPPUI_H
+
+#include <aknappui.h>
+
+class MHgFswTaskListObserver;
+class MHgFswResourceObserver;
+
+/**
+ * Appui for the fsw server.
+ * Reimplements HandleWsEventL from base class to get notifications about
+ * window group changes.
+ */
+class CHgFswAppUi : public CAknAppUi
+    {
+public:
+    ~CHgFswAppUi();
+    void ConstructL();
+
+    /**
+     * Setter function.
+     *
+     * @param aTaskListObserver Observer to be notified if task list
+     *                     has changed
+     */
+    void SetTaskListObserver( MHgFswTaskListObserver& aTaskListObserver );
+
+    /**
+     * Setter function.
+     *
+     * @param aResourceObserver Observer to be notified when resources are changed.
+     */
+    void SetResourceObserver( MHgFswResourceObserver& aResourceObserver );
+
+private:
+    // from CEikAppUi
+    void HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination );
+    void HandleResourceChangeL( TInt aType );
+            
+private:
+    MHgFswTaskListObserver* iTaskListObserver; // not own
+    MHgFswResourceObserver* iResourceObserver; // not own
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/server/inc/hgfswserver.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,79 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswserver.h
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : server class
+ *  Version     : %version: 6 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#ifndef __HGFSWSERVER_H
+#define __HGFSWSERVER_H
+
+#include <e32base.h>
+#include "hgfswcommon.h"
+#include "hgfswobservers.h"
+
+/**
+ * Possible panic reasons.
+ */
+enum THgFswPanic
+    {
+    EPanicBadDescriptor,
+    EPanicIllegalFunction,
+    EPanicAccessDenied
+    };
+
+/**
+ * Panic name.
+ */
+_LIT( KHgFswPanicName, "hgfsw" );
+
+class CHgFswEngine;
+class CHgFswAppUi;
+
+/**
+ * Hg FastSwap Server.
+ */
+class CHgFswServer : public CServer2, public MHgFswEngineObserver
+    {
+public:
+    static CHgFswServer* NewLC( CHgFswAppUi& aAppUi );
+    ~CHgFswServer();
+    void AddSession();
+    void DropSession();
+
+    void SerializeAndGetBufferSizeL( const RMessage2& aMessage );
+    void GetBufferL( const RMessage2& aMessage );
+    void CloseAppL( TInt aWgId );
+    void SwitchToAppL( TInt aWgId );
+    void ForegroundAppUidL( const RMessage2& aMessage );
+
+private:
+    CHgFswServer( TInt aPriority, CHgFswAppUi& aAppUi );
+    void ConstructL();
+    CSession2* NewSessionL( const TVersion& aVersion,
+        const RMessage2& aMessage ) const;
+        
+    // from MHgFswEngineObserver
+    void FswDataChanged();
+    TInt FswDataListenerCount();
+
+private:
+    TInt iSessionCount;
+    CHgFswEngine* iEngine;
+    CBufFlat* iBuffer;
+    CHgFswAppUi& iAppUi;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/server/inc/hgfswsession.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,55 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswsession.h
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : session class for server
+ *  Version     : %version: 4 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#ifndef __HGFSWSESSION_H
+#define __HGFSWSESSION_H
+
+#include "hgfswserver.h"
+#include "hgfswentry.h"
+
+/**
+ * Session class.
+ */
+class CHgFswSession : public CSession2
+    {
+public:
+    CHgFswSession();
+    void CreateL();
+    
+    /**
+     * Called from the server when fsw content has changed.
+     */
+    void FswDataChanged();
+    
+    /**
+     * Returns true if there is a pending subscribe request to this session.
+     */
+    TBool IsListening();
+
+private:
+    ~CHgFswSession();
+    CHgFswServer& Server();
+    void ServiceL( const RMessage2& aMessage );
+    void ServiceError( const RMessage2& aMessage, TInt aError );
+    void CompleteSubscribe( TInt aError );
+
+    RArray<RMessage2> iSubscribeRequests; // non-completed EHgFswSubscribe messages
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/server/inc/serverlogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* ============================================================================
+*  Name        : serverlogging.h
+*  Part of     : Classic UI / Teleport
+*  Description : Defines logs for server
+*  Version     : %version:  sa1spcx1#3 % 
+*
+*  Copyright (c) 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.1.1
+*/
+
+#ifdef _DEBUG // codescanner::ifpreprocessor
+_LIT( KHgLogFile, "hgfswserver.txt" );
+_LIT( KHgLogPath, "teleport" );
+#define _HGLOG_LOG_COMPONENT_ID 0x2001CBE1
+
+#endif
+#include "hglogging.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/server/src/hgfswappui.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,95 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswappui.cpp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : appui implementation
+ *  Version     : %version: sa1spcx1#6 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include "hgfswappui.h"
+#include "hgfswobservers.h"
+
+// --------------------------------------------------------------------------
+// CHgFswAppUi::~CHgFswAppUi
+// --------------------------------------------------------------------------
+//
+CHgFswAppUi::~CHgFswAppUi()
+    {
+    // empty
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswAppUi::ConstructL
+// --------------------------------------------------------------------------
+//
+void CHgFswAppUi::ConstructL()
+    {
+    CAknAppUi::BaseConstructL( ENoAppResourceFile | EAknEnableSkin );
+    RWindowGroup& windowGroup = CCoeEnv::Static()->RootWin();
+    windowGroup.EnableFocusChangeEvents();
+    windowGroup.EnableGroupListChangeEvents();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswAppUi::SetTaskListObserver
+// --------------------------------------------------------------------------
+//
+void CHgFswAppUi::SetTaskListObserver( MHgFswTaskListObserver& aTaskListObserver )
+    {
+    iTaskListObserver = &aTaskListObserver;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswAppUi::SetResourceObserver
+// --------------------------------------------------------------------------
+//
+void CHgFswAppUi::SetResourceObserver( MHgFswResourceObserver& aResourceObserver )
+    {
+    iResourceObserver = &aResourceObserver;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswAppUi::HandleWsEventL
+// --------------------------------------------------------------------------
+//
+void CHgFswAppUi::HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination )
+    {
+    TInt eventType = aEvent.Type();
+
+    if ( eventType == EEventFocusGroupChanged
+            || eventType == EEventWindowGroupListChanged )
+        {
+        if ( iTaskListObserver )
+            {
+            iTaskListObserver->UpdateTaskList();
+            }
+        }
+
+    CAknAppUi::HandleWsEventL( aEvent, aDestination );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswAppUi::HandleResourceChangeL
+// --------------------------------------------------------------------------
+//
+void CHgFswAppUi::HandleResourceChangeL( TInt aType ) // codescanner::LFunctionCantLeave (virtual)
+    {
+    if ( iResourceObserver )
+        {
+        iResourceObserver->HandleResourceChange( aType );
+        }
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/server/src/hgfswserver.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,283 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswserver.cpp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : server implementation
+ *  Version     : %version: sa1spcx1#14 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include "hgfswserver.h"
+#include "hgfswsession.h"
+#include "hgfswappui.h"
+#include "hgfswengine.h"
+
+#include <s32mem.h>
+#include <eikenv.h>
+#include <apgwgnam.h>
+
+// --------------------------------------------------------------------------
+// CHgFswServer::CHgFswServer
+// --------------------------------------------------------------------------
+//
+CHgFswServer::CHgFswServer( TInt aPriority, CHgFswAppUi& aAppUi )
+        : CServer2( aPriority ), iAppUi( aAppUi )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::NewLC
+// --------------------------------------------------------------------------
+//
+CHgFswServer* CHgFswServer::NewLC( CHgFswAppUi& aAppUi )
+    {
+    CHgFswServer* self = new ( ELeave ) CHgFswServer(
+        EPriorityNormal, aAppUi );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::ConstructL
+// --------------------------------------------------------------------------
+//
+void CHgFswServer::ConstructL()
+    {
+    StartL( KHgFswServerName );
+    iEngine = CHgFswEngine::NewL( *this );
+    iAppUi.SetTaskListObserver( *iEngine );
+    iAppUi.SetResourceObserver( *iEngine );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::~CHgFswServer
+// --------------------------------------------------------------------------
+//
+CHgFswServer::~CHgFswServer()
+    {
+    delete iBuffer;
+    delete iEngine;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::NewSessionL
+// --------------------------------------------------------------------------
+//
+CSession2* CHgFswServer::NewSessionL( const TVersion&,
+        const RMessage2& ) const
+    {
+    return new ( ELeave ) CHgFswSession;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::AddSession
+// --------------------------------------------------------------------------
+//
+void CHgFswServer::AddSession()
+    {
+    ++iSessionCount;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::DropSession
+// --------------------------------------------------------------------------
+//
+void CHgFswServer::DropSession()
+    {
+    --iSessionCount;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::SerializeAndGetBufferSizeL
+// --------------------------------------------------------------------------
+//
+void CHgFswServer::SerializeAndGetBufferSizeL( const RMessage2& aMessage )
+    {
+    const TInt KBufferExpandSize = 128;
+    const RHgFswArray& array( iEngine->FswDataL() );
+    delete iBuffer; iBuffer = NULL;
+    iBuffer = CBufFlat::NewL( KBufferExpandSize );
+    RBufWriteStream ws;
+    CleanupClosePushL( ws );
+    ws.Open( *iBuffer );
+    CHgFswEntry::ExternalizeArrayL( ws, array );
+    CleanupStack::PopAndDestroy( &ws );
+    TPtr8 p( iBuffer->Ptr( 0 ) );
+    TPckg<TInt> size( p.Length() );
+    aMessage.WriteL( 0, size );
+    aMessage.Complete( KErrNone );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::GetBufferL
+// --------------------------------------------------------------------------
+//
+void CHgFswServer::GetBufferL( const RMessage2& aMessage )
+    {
+    if ( !iBuffer )
+        {
+        User::Leave( KErrGeneral );
+        }
+    TPtr8 p( iBuffer->Ptr( 0 ) );
+    // If the size expected by the client does not match indicate it with a leave
+    // so the client can recognize it by checking the return value of SendReceive
+    // and can request the buffer size again.
+    if ( p.Length() != aMessage.Int1() )
+        {
+        User::Leave( KErrArgument );
+        }
+    aMessage.WriteL( 0, p );
+    aMessage.Complete( KErrNone );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::CloseAppL
+// --------------------------------------------------------------------------
+//
+void CHgFswServer::CloseAppL( TInt aWgId )
+    {
+    iEngine->CloseAppL( aWgId );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::SwitchToAppL
+// --------------------------------------------------------------------------
+//
+void CHgFswServer::SwitchToAppL( TInt aWgId )
+    {
+    iEngine->SwitchToAppL( aWgId );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::ForegroundAppUidL
+// --------------------------------------------------------------------------
+//
+void CHgFswServer::ForegroundAppUidL( const RMessage2& aMessage )
+    {
+    TUid uid = iEngine->ForegroundAppUidL( aMessage.Int1() );
+    TPckg<TInt> uidPckg( uid.iUid );
+    aMessage.WriteL( 0, uidPckg );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::FswDataChanged
+// callback from engine
+// --------------------------------------------------------------------------
+//
+void CHgFswServer::FswDataChanged()
+    {
+    // notify all sessions about the change
+    iSessionIter.SetToFirst();
+    while ( CHgFswSession* session = static_cast<CHgFswSession*>( iSessionIter++ ) )
+        {
+        if ( session->IsListening() )
+            {
+            session->FswDataChanged();
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswServer::FswDataListenersCount
+// callback from engine
+// --------------------------------------------------------------------------
+//
+TInt CHgFswServer::FswDataListenerCount()
+    {
+    TInt n = 0;
+    iSessionIter.SetToFirst();
+    while ( CHgFswSession* session = static_cast<CHgFswSession*>( iSessionIter++ ) )
+        {
+        if ( session->IsListening() )
+            {
+            ++n;
+            }
+        }
+    return n;
+    }
+
+// --------------------------------------------------------------------------
+// RunServerL
+// --------------------------------------------------------------------------
+//
+static void RunServerL( CHgFswAppUi& aAppUi, CEikonEnv& aEnv )
+    {
+    // change thread name
+    User::LeaveIfError( RThread::RenameMe( KHgFswServerName ) );
+
+    // set app as hidden
+    CApaWindowGroupName* wgName =
+        CApaWindowGroupName::NewL( aEnv.WsSession(),
+            aEnv.RootWin().Identifier() );
+    wgName->SetHidden( ETrue );
+    wgName->SetWindowGroupName( aEnv.RootWin() );
+    delete wgName;
+
+    // start server
+    CHgFswServer* server = CHgFswServer::NewLC( aAppUi );
+    RProcess::Rendezvous( KErrNone );
+    CActiveScheduler::Start();
+    CleanupStack::PopAndDestroy( server );
+    }
+
+// --------------------------------------------------------------------------
+// E32Main
+// --------------------------------------------------------------------------
+//
+TInt E32Main()
+    {
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    TInt err = KErrNoMemory;
+    if ( cleanup )
+        {
+        CEikonEnv* env = new CEikonEnv;
+        if ( env )
+            {
+            TRAP( err, env->ConstructL() );
+            if ( err == KErrNone )
+                {
+                env->DisableExitChecks( ETrue );
+                CHgFswAppUi* ui = new CHgFswAppUi;
+                if ( ui )
+                    {
+                    TRAP( err, ui->ConstructL() );
+                    if ( err == KErrNone )
+                        {
+                        // hide from tasklist and prevent from coming foreground
+                        env->RootWin().SetOrdinalPosition( 0,
+                            ECoeWinPriorityNeverAtFront );
+                        // set as system app so will not be closed when memory is low
+                        env->SetSystem( ETrue );
+                        
+                        RFbsSession::Connect();
+                        
+                        TRAP( err, RunServerL( *ui, *env ) );
+                        
+                        RFbsSession::Disconnect();
+                        
+                        ui->PrepareToExit();
+                        }
+                    }
+                }
+            env->DestroyEnvironment();
+            }
+        delete cleanup;
+        }
+    __UHEAP_MARKEND;
+    return err;
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/server/src/hgfswsession.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,159 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswsession.cpp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : session implementation
+ *  Version     : %version: sa1spcx1#8 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include "hgfswsession.h"
+
+// --------------------------------------------------------------------------
+// CHgFswSession::CHgFswSession
+// --------------------------------------------------------------------------
+//
+CHgFswSession::CHgFswSession()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::Server
+// --------------------------------------------------------------------------
+//
+CHgFswServer& CHgFswSession::Server()
+    {
+    return *static_cast<CHgFswServer*>(
+        const_cast<CServer2*>( CSession2::Server() ) );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::CreateL
+// --------------------------------------------------------------------------
+//
+void CHgFswSession::CreateL() // codescanner::LFunctionCantLeave (virtual)
+    {
+    Server().AddSession();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::~CHgFswSession
+// --------------------------------------------------------------------------
+//
+CHgFswSession::~CHgFswSession()
+    {
+    CompleteSubscribe( KErrCancel );
+    iSubscribeRequests.Close();
+    Server().DropSession();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::CompleteSubscribe
+// --------------------------------------------------------------------------
+//
+void CHgFswSession::CompleteSubscribe( TInt aError )
+    {
+    for ( TInt i = 0, ie = iSubscribeRequests.Count(); i != ie; ++i )
+        {
+        iSubscribeRequests[i].Complete( aError );
+        }
+    iSubscribeRequests.Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::ServiceL
+// --------------------------------------------------------------------------
+//
+void CHgFswSession::ServiceL( const RMessage2& aMessage )
+    {
+    if ( !aMessage.HasCapability( ECapabilityLocalServices ) )
+        {
+        aMessage.Panic( KHgFswPanicName, EPanicAccessDenied );
+        return;
+        }
+
+    switch ( aMessage.Function() )
+        {
+    case EHgFswSubscribe:
+        iSubscribeRequests.AppendL( aMessage );
+        break;
+
+    case EHgFswCancel:
+        CompleteSubscribe( KErrCancel );
+        aMessage.Complete( KErrNone );
+        break;
+
+    case EHgFswGetBufferSize:
+        Server().SerializeAndGetBufferSizeL( aMessage );
+        break;
+
+    case EHgFswGetBuffer:
+        Server().GetBufferL( aMessage );
+        break;
+
+    case EHgFswCloseApp:
+        Server().CloseAppL( aMessage.Int0() );
+        aMessage.Complete( KErrNone );
+        break;
+
+    case EHgFswSwitchToApp:
+        Server().SwitchToAppL( aMessage.Int0() );
+        aMessage.Complete( KErrNone );
+        break;
+        
+    case EHgFswForegroundAppUid:
+        Server().ForegroundAppUidL( aMessage );
+        aMessage.Complete( KErrNone );
+        break;
+
+    default:
+        aMessage.Panic( KHgFswPanicName, EPanicIllegalFunction );
+        break;
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::ServiceError
+// --------------------------------------------------------------------------
+//
+void CHgFswSession::ServiceError( const RMessage2& aMessage,
+        TInt aError )
+    {
+    if ( aError == KErrBadDescriptor )
+        {
+        aMessage.Panic( KHgFswPanicName, EPanicBadDescriptor );
+        }
+    CSession2::ServiceError( aMessage, aError );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::FswDataChanged
+// called by server when notification is received from engine
+// --------------------------------------------------------------------------
+//
+void CHgFswSession::FswDataChanged()
+    {
+    CompleteSubscribe( KErrNone );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::IsListening
+// --------------------------------------------------------------------------
+//
+TBool CHgFswSession::IsListening()
+    {
+    return iSubscribeRequests.Count() > 0;
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/utils/bwins/hgfswutilsu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,25 @@
+EXPORTS
+	?AppName@CHgFswEntry@@QBEABVTDesC16@@XZ @ 1 NONAME ; class TDesC16 const & CHgFswEntry::AppName(void) const
+	?AppUid@CHgFswEntry@@QBE?AVTUid@@XZ @ 2 NONAME ; class TUid CHgFswEntry::AppUid(void) const
+	?ExternalizeArrayL@CHgFswEntry@@SAXAAVRWriteStream@@ABV?$RPointerArray@VCHgFswEntry@@@@@Z @ 3 NONAME ; void CHgFswEntry::ExternalizeArrayL(class RWriteStream &, class RPointerArray<class CHgFswEntry> const &)
+	?ExternalizeL@CHgFswEntry@@QAEXAAVRWriteStream@@@Z @ 4 NONAME ; void CHgFswEntry::ExternalizeL(class RWriteStream &)
+	?InternalizeArrayL@CHgFswEntry@@SAXAAVRReadStream@@AAV?$RPointerArray@VCHgFswEntry@@@@@Z @ 5 NONAME ; void CHgFswEntry::InternalizeArrayL(class RReadStream &, class RPointerArray<class CHgFswEntry> &)
+	?InternalizeL@CHgFswEntry@@QAEXAAVRReadStream@@@Z @ 6 NONAME ; void CHgFswEntry::InternalizeL(class RReadStream &)
+	?NewL@CHgFswEntry@@SAPAV1@XZ @ 7 NONAME ; class CHgFswEntry * CHgFswEntry::NewL(void)
+	?NewLC@CHgFswEntry@@SAPAV1@XZ @ 8 NONAME ; class CHgFswEntry * CHgFswEntry::NewLC(void)
+	?ScreenshotHandle@CHgFswEntry@@QBEHXZ @ 9 NONAME ; int CHgFswEntry::ScreenshotHandle(void) const
+	?SetAppNameL@CHgFswEntry@@QAEXABVTDesC16@@@Z @ 10 NONAME ; void CHgFswEntry::SetAppNameL(class TDesC16 const &)
+	?SetAppUid@CHgFswEntry@@QAEXABVTUid@@@Z @ 11 NONAME ; void CHgFswEntry::SetAppUid(class TUid const &)
+	?SetScreenshotHandle@CHgFswEntry@@QAEXH@Z @ 12 NONAME ; void CHgFswEntry::SetScreenshotHandle(int)
+	?SetWgId@CHgFswEntry@@QAEXH@Z @ 13 NONAME ; void CHgFswEntry::SetWgId(int)
+	?WgId@CHgFswEntry@@QBEHXZ @ 14 NONAME ; int CHgFswEntry::WgId(void) const
+	?AlwaysShown@CHgFswEntry@@QBEHXZ @ 15 NONAME ; int CHgFswEntry::AlwaysShown(void) const
+	?SetAlwaysShown@CHgFswEntry@@QAEXH@Z @ 16 NONAME ; void CHgFswEntry::SetAlwaysShown(int)
+	?AppIconBitmapHandle@CHgFswEntry@@QBEHXZ @ 17 NONAME ; int CHgFswEntry::AppIconBitmapHandle(void) const
+	?AppIconMaskHandle@CHgFswEntry@@QBEHXZ @ 18 NONAME ; int CHgFswEntry::AppIconMaskHandle(void) const
+	?SetAppIconHandles@CHgFswEntry@@QAEXHH@Z @ 19 NONAME ; void CHgFswEntry::SetAppIconHandles(int, int)
+	?SetWidget@CHgFswEntry@@QAEXH@Z @ 20 NONAME ; void CHgFswEntry::SetWidget(int)
+	?Widget@CHgFswEntry@@QBEHXZ @ 21 NONAME ; int CHgFswEntry::Widget(void) const
+	?SetSystemApp@CHgFswEntry@@QAEXH@Z @ 22 NONAME ; void CHgFswEntry::SetSystemApp(int)
+	?SystemApp@CHgFswEntry@@QBEHXZ @ 23 NONAME ; int CHgFswEntry::SystemApp(void) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/utils/eabi/hgfswutilsu.def	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,25 @@
+EXPORTS
+	_ZN11CHgFswEntry11SetAppNameLERK7TDesC16 @ 1 NONAME
+	_ZN11CHgFswEntry12ExternalizeLER12RWriteStream @ 2 NONAME
+	_ZN11CHgFswEntry12InternalizeLER11RReadStream @ 3 NONAME
+	_ZN11CHgFswEntry17ExternalizeArrayLER12RWriteStreamRK13RPointerArrayIS_E @ 4 NONAME
+	_ZN11CHgFswEntry17InternalizeArrayLER11RReadStreamR13RPointerArrayIS_E @ 5 NONAME
+	_ZN11CHgFswEntry19SetScreenshotHandleEi @ 6 NONAME
+	_ZN11CHgFswEntry4NewLEv @ 7 NONAME
+	_ZN11CHgFswEntry5NewLCEv @ 8 NONAME
+	_ZN11CHgFswEntry7SetWgIdEi @ 9 NONAME
+	_ZN11CHgFswEntry9SetAppUidERK4TUid @ 10 NONAME
+	_ZNK11CHgFswEntry16ScreenshotHandleEv @ 11 NONAME
+	_ZNK11CHgFswEntry4WgIdEv @ 12 NONAME
+	_ZNK11CHgFswEntry6AppUidEv @ 13 NONAME
+	_ZNK11CHgFswEntry7AppNameEv @ 14 NONAME
+	_ZN11CHgFswEntry14SetAlwaysShownEi @ 15 NONAME
+	_ZNK11CHgFswEntry11AlwaysShownEv @ 16 NONAME
+	_ZN11CHgFswEntry17SetAppIconHandlesEii @ 17 NONAME
+	_ZNK11CHgFswEntry17AppIconMaskHandleEv @ 18 NONAME
+	_ZNK11CHgFswEntry19AppIconBitmapHandleEv @ 19 NONAME
+	_ZN11CHgFswEntry9SetWidgetEi @ 20 NONAME
+	_ZNK11CHgFswEntry6WidgetEv @ 21 NONAME
+	_ZN11CHgFswEntry12SetSystemAppEi @ 22 NONAME
+	_ZNK11CHgFswEntry9SystemAppEv @ 23 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/utils/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,24 @@
+/*
+ * ===========================================================================
+ *  Name        : bld.inf
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : build info file for utility component
+ *  Version     : %version: 5 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+PRJ_EXPORTS
+../inc/hgfswentry.h     |../../../inc/hgfswentry.h
+
+PRJ_MMPFILES
+hgfswutils.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/utils/group/hgfswutils.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,34 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswutils.mmp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : utility component
+ *  Version     : %version: 5 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include <platform_paths.hrh>
+
+TARGET  hgfswutils.dll
+TARGETTYPE DLL
+CAPABILITY CAP_GENERAL_DLL
+
+SOURCEPATH ../src
+SOURCE          hgfswentry.cpp
+
+MW_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE     ../inc
+
+LIBRARY euser.lib
+LIBRARY estor.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/utils/inc/hgfswentry.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,130 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswentry.h
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : Task list entry
+ *  Version     : %version: 7 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#ifndef __HGFSWENTRY_H
+#define __HGFSWENTRY_H
+
+#include <e32base.h>
+#include <e32cmn.h>
+
+class CHgFswEntry;
+class RReadStream;
+class RWriteStream;
+
+typedef RPointerArray<CHgFswEntry> RHgFswArray;
+
+/**
+ * An entry in the task list.
+ */
+NONSHARABLE_CLASS( CHgFswEntry ) : public CBase
+    {
+public:
+    IMPORT_C static CHgFswEntry* NewL();
+    IMPORT_C static CHgFswEntry* NewLC();
+    ~CHgFswEntry();
+
+    /**
+     * Window group id.
+     * In case of wrt widgets this is negative and is not a valid window group id.
+     * Use this when calling CloseApp or SwitchToApp. (these work with widgets too)
+     */
+    IMPORT_C TInt WgId() const;
+    
+    /**
+     * Application uid.
+     */
+    IMPORT_C TUid AppUid() const;
+    
+    /**
+     * Application name.
+     */
+    IMPORT_C const TDesC& AppName() const;
+    
+    /**
+     * Bitmap handle to the screenshot or 0 if not available.
+     */
+    IMPORT_C TInt ScreenshotHandle() const;
+    
+    /**
+     * ETrue if the application is always shown in the fast swapper.
+     * (no use to call CloseApp for such an application)
+     */
+    IMPORT_C TBool AlwaysShown() const;
+
+    /**
+     * ETrue if the application is a system application.
+     * (no use to call CloseApp for such an application)
+     */
+    IMPORT_C TBool SystemApp() const;
+
+    /**
+     * ETrue if this is a wrt widget.
+     */
+    IMPORT_C TBool Widget() const;
+    
+    /**
+     * Application icon bitmap handle or 0.
+     * If may not be set if the screenshot is available, i.e. it is
+     * only guaranteed to be non-zero when ScreenshotHandle() returns 0.
+     */
+    IMPORT_C TInt AppIconBitmapHandle() const;
+    
+    /**
+     * Application icon mask handle.
+     * @see AppIconBitmapHandle
+     * The mask handle may be 0 even when the bitmap handle is non-zero.
+     */
+    IMPORT_C TInt AppIconMaskHandle() const;
+
+
+    IMPORT_C void SetWgId( TInt aWgId );
+    IMPORT_C void SetAppUid( const TUid& aUid );
+    IMPORT_C void SetAppNameL( const TDesC& aAppName );
+    IMPORT_C void SetScreenshotHandle( TInt aHandle );
+    IMPORT_C void SetAlwaysShown( TBool aValue );
+    IMPORT_C void SetSystemApp( TBool aValue );
+    IMPORT_C void SetWidget( TBool aValue );
+    IMPORT_C void SetAppIconHandles( TInt aBitmapHandle, TInt aMaskHandle );
+
+    IMPORT_C void ExternalizeL( RWriteStream& aStream );
+    IMPORT_C void InternalizeL( RReadStream& aStream );
+
+    IMPORT_C static void ExternalizeArrayL( RWriteStream& aStream,
+        const RHgFswArray& aArray );
+    IMPORT_C static void InternalizeArrayL( RReadStream& aStream,
+        RHgFswArray& aArray );
+
+private:
+    TInt iWgId;
+    TUid iAppUid;
+    HBufC* iAppName;
+    TInt iScreenshotHandle;
+    TBool iAlwaysShown;
+    TBool iSystemApp;
+    TBool iWidget;
+    TInt iAppIconBitmapHandle;
+    TInt iAppIconMaskHandle;
+    
+    TInt iReserved0;
+    TInt iReserved1;
+    TInt iReserved2;
+    TInt iReserved3;
+    };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/utils/inc/utilslogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* ============================================================================
+*  Name        : utilslogging.h
+*  Part of     : Classic UI / Teleport
+*  Description : Defines logs for utils
+*  Version     : %version:  sa1spcx1#3 % 
+*
+*  Copyright (c) 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.1.1
+*/
+
+#ifdef _DEBUG // codescanner::ifpreprocessor
+_LIT( KHgLogFile, "hgfswutils.txt" );
+_LIT( KHgLogPath, "teleport" );
+#define _HGLOG_LOG_COMPONENT_ID 0x0000000
+
+#endif
+#include "hglogging.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/utils/src/hgfswentry.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,278 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswentry.cpp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : Task list entry
+ *  Version     : %version: 7 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include "hgfswentry.h"
+#include <s32strm.h>
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::NewL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CHgFswEntry* CHgFswEntry::NewL()
+    {
+    CHgFswEntry* self = NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::NewLC
+// --------------------------------------------------------------------------
+//
+EXPORT_C CHgFswEntry* CHgFswEntry::NewLC()
+    {
+    CHgFswEntry* self = new ( ELeave ) CHgFswEntry;
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::~CHgFswEntry
+// --------------------------------------------------------------------------
+//
+CHgFswEntry::~CHgFswEntry()
+    {
+    delete iAppName;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::SetWgId
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::SetWgId( TInt aWgId )
+    {
+    iWgId = aWgId;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::SetAppUid
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::SetAppUid( const TUid& aUid )
+    {
+    iAppUid = aUid;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::SetAppNameL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::SetAppNameL( const TDesC& aAppName )
+    {
+    delete iAppName; iAppName = 0;
+    iAppName = aAppName.AllocL();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::SetScreenshotHandle
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::SetScreenshotHandle( TInt aHandle )
+    {
+    iScreenshotHandle = aHandle;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::SetAlwaysShown
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::SetAlwaysShown( TBool aValue )
+    {
+    iAlwaysShown = aValue;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::SetSystemApp
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::SetSystemApp( TBool aValue )
+    {
+    iSystemApp = aValue;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::SetWidget
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::SetWidget( TBool aValue )
+    {
+    iWidget = aValue;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::SetAppIconHandles
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::SetAppIconHandles( TInt aBitmapHandle, TInt aMaskHandle )
+    {
+    iAppIconBitmapHandle = aBitmapHandle;
+    iAppIconMaskHandle = aMaskHandle;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::WgId
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CHgFswEntry::WgId() const
+    {
+    return iWgId;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::AppUid
+// --------------------------------------------------------------------------
+//
+EXPORT_C TUid CHgFswEntry::AppUid() const
+    {
+    return iAppUid;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::AppName
+// --------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CHgFswEntry::AppName() const
+    {
+    return iAppName ? *iAppName : KNullDesC();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::ScreenshotHandle
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CHgFswEntry::ScreenshotHandle() const
+    {
+    return iScreenshotHandle;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::AlwaysShown
+// --------------------------------------------------------------------------
+//
+EXPORT_C TBool CHgFswEntry::AlwaysShown() const
+    {
+    return iAlwaysShown;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::SystemApp
+// --------------------------------------------------------------------------
+//
+EXPORT_C TBool CHgFswEntry::SystemApp() const
+    {
+    return iSystemApp;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::Widget
+// --------------------------------------------------------------------------
+//
+EXPORT_C TBool CHgFswEntry::Widget() const
+    {
+    return iWidget;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::AppIconBitmapHandle
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CHgFswEntry::AppIconBitmapHandle() const
+    {
+    return iAppIconBitmapHandle;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::AppIconMaskHandle
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CHgFswEntry::AppIconMaskHandle() const
+    {
+    return iAppIconMaskHandle;
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::ExternalizeL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::ExternalizeL( RWriteStream& aStream )
+    {
+    aStream.WriteInt32L( iWgId );
+    aStream.WriteInt32L( iAppUid.iUid );
+    aStream << AppName();
+    aStream.WriteInt32L( iScreenshotHandle );
+    aStream.WriteInt32L( iAlwaysShown );
+    aStream.WriteInt32L( iSystemApp );
+    aStream.WriteInt32L( iWidget );
+    aStream.WriteInt32L( iAppIconBitmapHandle );
+    aStream.WriteInt32L( iAppIconMaskHandle );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::InternalizeL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::InternalizeL( RReadStream& aStream )
+    {
+    iWgId = aStream.ReadInt32L();
+    iAppUid = TUid::Uid( aStream.ReadInt32L() );
+    delete iAppName; iAppName = 0;
+    iAppName = HBufC::NewL( aStream, KMaxTInt );
+    iScreenshotHandle = aStream.ReadInt32L();
+    iAlwaysShown = aStream.ReadInt32L();
+    iSystemApp = aStream.ReadInt32L();
+    iWidget = aStream.ReadInt32L();
+    iAppIconBitmapHandle = aStream.ReadInt32L();
+    iAppIconMaskHandle = aStream.ReadInt32L();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::ExternalizeArrayL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::ExternalizeArrayL( RWriteStream& aStream,
+        const RHgFswArray& aArray )
+    {
+    TInt count = aArray.Count();
+    aStream.WriteInt32L( count );
+    for ( TInt i = 0; i < count; ++i )
+        {
+        aArray[i]->ExternalizeL( aStream );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswEntry::InternalizeArrayL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CHgFswEntry::InternalizeArrayL( RReadStream& aStream,
+        RHgFswArray& aArray )
+    {
+    aArray.ResetAndDestroy();
+    TInt count = aStream.ReadInt32L();
+    for ( TInt i = 0; i < count; ++i )
+        {
+        CHgFswEntry* entry = CHgFswEntry::NewLC();
+        entry->InternalizeL( aStream );
+        aArray.AppendL( entry );
+        CleanupStack::Pop( entry );
+        }
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/rom/hgcontextservices.iby	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* ============================================================================
+*  Name        : hgcontextservices.iby
+*  Part of     : Huriganes / context Services
+*  Description : Iby file for Context Services
+*  Version     : %version: sa1spcx1#62 % 
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+#ifndef HGCONTEXTSERVICES_IBY
+#define HGCONTEXTSERVICES_IBY
+
+// Context Services binaries
+file=ABI_DIR/BUILD_DIR/hgcontextservicesutils.dll    SHARED_LIB_DIR/hgcontextservicesutils.dll
+
+// backup registration
+data=DATAZ_/private/20011417/backup_registration.xml    private/20011417/backup_registration.xml
+
+// stub sis
+data=ZSYSTEM/install/hgctxsrv_stub.sis    system/install/hgctxsrv_stub.sis
+
+#endif // HGCONTEXTSERVICES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/sis/stubs/createstubs.bat	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,1 @@
+for %%f in (*.pkg) do makesis -s %%f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/sis/stubs/hgctxsrv_stub.pkg	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,20 @@
+; ------------------------------------------------------------------------------
+; HG Context Services stub SIS package file.
+; Used to enable HG Context Services to be updated from ROM with a SIS package.
+; When you add new files into this stub, please remember to update
+; SIS stub with "makesis -s" command.
+; ------------------------------------------------------------------------------
+;
+;Language - standard language definitions
+&EN
+
+; standard SIS file header
+#{"hgctxutils"},(0x20019569),1,0,0,TYPE=SA
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+""-"Z:\sys\bin\hgcontextservicesutils.dll"
Binary file taskswitcher/contextengine/sis/stubs/hgctxsrv_stub.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/trace/hglogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,219 @@
+/*
+* ==============================================================================
+*  Name        : hglogging.h
+*  Part of     : Teleport / Context Services
+*  Description : Defines all available logging macros.
+*  Version     : %version: 2 %
+*
+*  Copyright © 2008 Nokia. All rights reserved.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia. All rights are reserved. Copying, including 
+*  reproducing, storing, adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia.
+* ==============================================================================
+*/
+
+#ifndef HGLOGLOGUTILS_H
+#define HGLOGLOGUTILS_H
+
+/**
+ * @file
+ * 
+ * TAKING LOGGING INTO USE:
+ * 
+ * This step is needed to do once per component.
+ * 
+ * For each component that uses these common logging macros should specify
+ * their own logging configuration file, which includes this file. In that
+ * configuration file, following constants and macros must be defined.
+ *  For example:
+ * @code
+ * 
+ * _LIT( KHgLogFile, "text_file_for_logging.txt" );
+ * _LIT( KHgLogPath, "folder_for_text_file" );
+ * #define _HGLOG_LOG_COMPONENT_ID <some unique number here>
+ * 
+ * #include "hglogging.h"
+ * 
+ * @/code
+ * 
+ * KHgLogFile   : This is the name of the file, where all the logs for
+ *                this components are being written.
+ * 
+ * KHgLogPath   : This is the folder name under c:\logs, where the file
+ *                is to be stored. For example, if KHgLogPath is "test",
+ *                log file is created into folder c:\logs\test.
+ * 
+ * _HGLOG_LOG_COMPONENT_ID  : Unique number id of the component. This is 
+ *                            for filtering purposes.
+ * 
+ * _HGLOG_RDEBUG    : When defined tracing instead of file logging. 
+ *                    Default is for file logging.
+ * 
+ * --------------------------------------------------------------------------
+ * 
+ * USING LOGGING:
+ * 
+ * Basically the use is simple, register function use with HGLOG_CONTEXT, 
+ * then log function enter by any HGLOG_IN -macro, then possibly use HGLOG
+ * -macros for function logging and finally HGLOG_OUT -macros for returning
+ * from the function.
+ * 
+ * @code
+ * TInt CGood::Example( TInt aSomething )
+ *     {
+ *     // Create log context class, which is maintained for lifetime of the 
+ *     // method. 
+ *     HGLOG_CONTEXT( Example, HGLOG_LOCAL );
+ * 
+ *     // Indicate we are entering the function. 
+ *     HGLOG_IN1( "aSomething contains value %d", aSomething );
+ * 
+ *     // Your buggy code...
+ * 
+ *     // Before leaving, indicate function execution has ended.
+ *     HGLOG_OUT();
+ * 
+ *     return 0;
+ *     }
+ * @/code
+ */
+
+#include <e32def.h>
+#include <e32std.h>
+
+#include "hglogutils.h"
+
+#define HGLOG_API 0
+#define HGLOG_LOCAL 1
+
+#define HGLOG_INFO 0
+#define HGLOG_WARNING 1
+#define HGLOG_ERROR 2
+
+#define HGLOG_ASSERT(_assertion)  __HGLOG_ASSERT_DBG(_assertion) 
+#define HGLOG_TRACE_ASSERT(_assertion) __ASSERT_DEBUG((_assertion), User::Invariant() )
+
+#ifdef _DEBUG
+            
+/*****************************************************************************
+ LOGGING MACROS - LOGGING ON
+*****************************************************************************/             
+
+    /** 
+     * Context initialization 
+     * NOTE: HGLOG_STATIC_CONTEXT is meant for static methods.
+     * 
+     * @param _fn   Name of the function.
+     * @param _vis  Visibility for the client, use values HGLOG_API or HGLOG_LOCAL
+     * @param _thdId For static functions, thread id can be given here.
+     */
+    #define HGLOG_CONTEXT(_fn, _vis ) _THgLogContext _dc((TText*)L ## #_fn, _HGLOG_LOG_COMPONENT_ID, _vis, (TUint)this, RProcess().SecureId().iId )
+    #define HGLOG_STATIC_CONTEXT(_fn, _vis, _thdId) _THgLogContext _dc((TText*)L ## #_fn, _HGLOG_LOG_COMPONENT_ID, _vis, _thdId, RProcess().SecureId().iId )
+
+    /** 
+     * Entering function 
+     * 
+     * @param string    Custom text. Example: HGLOG_IN0( "Yeah!!!" );
+     * @param p1 - p5   For multiple variables in same string.
+     */
+    #define HGLOG_IN() do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s "), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_ENTRY(); } while(0)
+    #define HGLOG0_IN(string) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_ENTRY(); } while(0)
+    #define HGLOG1_IN(string, p1) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1); _MARK_ENTRY(); } while(0)
+    #define HGLOG2_IN(string, p1, p2) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2); _MARK_ENTRY(); } while(0)
+    #define HGLOG3_IN(string, p1, p2, p3) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3); _MARK_ENTRY(); } while(0)
+    #define HGLOG4_IN(string, p1, p2, p3, p4) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4); _MARK_ENTRY(); } while(0)
+    #define HGLOG5_IN(string, p1, p2, p3, p4, p5) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4, p5); _MARK_ENTRY(); } while(0)
+
+    /** Leaving function */
+    #define HGLOG_OUT() do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s "), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_EXIT(); } while(0)
+    #define HGLOG0_OUT(string) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_EXIT(); } while(0)
+    #define HGLOG1_OUT(string, p1) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1); _MARK_EXIT(); } while(0)
+    #define HGLOG2_OUT(string, p1, p2) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2); _MARK_EXIT(); } while(0)
+    #define HGLOG3_OUT(string, p1, p2, p3) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3); _MARK_EXIT(); } while(0)
+    #define HGLOG4_OUT(string, p1, p2, p3, p4) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4); _MARK_EXIT(); } while(0)
+    #define HGLOG5_OUT(string, p1, p2, p3, p4, p5) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4, p5); _MARK_EXIT(); } while(0)
+
+    /** Leaving function with return value */
+    #define HGLOG0_RET(val, fmtstr) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val); _MARK_EXIT(); } while(0); return val;} while(0)
+    #define HGLOG1_RET(val, fmtstr, p1) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1); _MARK_EXIT(); } while(0); return val;} while(0)
+    #define HGLOG2_RET(val, fmtstr, p1, p2) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2); _MARK_EXIT(); } while(0); return val;} while(0)
+    #define HGLOG3_RET(val, fmtstr, p1, p2, p3) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2, p3); _MARK_EXIT(); } while(0); return val;} while(0)
+    #define HGLOG4_RET(val, fmtstr, p1, p2, p3, p4) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2, p3, p4); _MARK_EXIT(); } while(0); return val;} while(0)
+    #define HGLOG5_RET(val, fmtstr, p1, p2, p3, p4, p5) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2, p3, p4, p5); _MARK_EXIT(); } while(0); return val;} while(0)
+
+    /** 
+     * General log lines 
+     * 
+     * @param level     This can be used as internal information 
+     *                  field, such as info, error, warning etc.
+     * @param string    Custom string
+     * @param p1 - p5   For multiple variables in same string.
+     */
+    #define HGLOG0(level, string) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); } while(0)
+    #define HGLOG1(level, string, p1) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1); } while(0)
+    #define HGLOG2(level, string, p1, p2) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2); } while(0)
+    #define HGLOG3(level, string, p1, p2, p3) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3); } while(0)
+    #define HGLOG4(level, string, p1, p2, p3, p4) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4); } while(0)
+    #define HGLOG5(level, string, p1, p2, p3, p4, p5) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4, p5); } while(0)
+
+    /** Error logging */
+    #define __HGLOG_ASSERT_DBG( _assertion ) do { if( _assertion ) { break; } TFileName file; file.Copy( _L8( __FILE__ ) );   _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s Assert:%S:%d:" L ## #_assertion) , _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, &file, __LINE__ ); User::Invariant(); } while( 0 )
+    #define __HGLOG_TRACE_ASSERT_DBG(_assertion, _textToPrint, _panicCode)  do { if (_assertion) { break; } _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s ASSERTION FAILED!!! %s file: %s, line: %s"), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, _textToPrint, __FILE__, __LINE__); User::Panic(_L("AssertionFailed"), _panicCode} while(0)
+    #define HGLOG_TRAPHANDLER() _THgLogTrapHandler _traceTrapHandler; _traceTrapHandler.oldHandler = User::SetTrapHandler(&_traceTrapHandler)
+
+/*****************************************************************************
+ LOGGING MACROS - NO LOGGING
+*****************************************************************************/ 
+#else // _DEBUG
+
+    #define HGLOG_CONTEXT(_fn, _vis )
+    #define HGLOG_STATIC_CONTEXT(_fn, _vis, _thdId)
+
+    #define HGLOG_IN()
+    #define HGLOG0_IN(string)
+    #define HGLOG1_IN(string, p1)
+    #define HGLOG2_IN(string, p1, p2)
+    #define HGLOG3_IN(string, p1, p2, p3)
+    #define HGLOG4_IN(string, p1, p2, p3, p4)
+    #define HGLOG5_IN(string, p1, p2, p3, p4, p5)
+
+    #define HGLOG_OUT()
+    #define HGLOG0_OUT(string)
+    #define HGLOG1_OUT(string, p1)
+    #define HGLOG2_OUT(string, p1, p2)
+    #define HGLOG3_OUT(string, p1, p2, p3)
+    #define HGLOG4_OUT(string, p1, p2, p3, p4)
+    #define HGLOG5_OUT(string, p1, p2, p3, p4, p5)
+
+    #define HGLOG0_RET(val, fmtstr) return val
+    #define HGLOG1_RET(val, fmtstr, p1) return val
+    #define HGLOG2_RET(val, fmtstr, p1, p2) return val
+    #define HGLOG3_RET(val, fmtstr, p1, p2, p3) return val
+    #define HGLOG4_RET(val, fmtstr, p1, p2, p3, p4) return val
+    #define HGLOG5_RET(val, fmtstr, p1, p2, p3, p4, p5) return val
+
+    #define HGLOG0(level, string)
+    #define HGLOG1(level, string, p1)
+    #define HGLOG2(level, string, p1, p2)
+    #define HGLOG3(level, string, p1, p2, p3)
+    #define HGLOG4(level, string, p1, p2, p3, p4)
+    #define HGLOG5(level, string, p1, p2, p3, p4, p5)
+    
+    #define BIND_TRACE_TRAPHANDLER()
+    #define TRACE_DECL() TInt _iTraceThreadId
+    #define TRACE_FAST_CREATE(_thdId) _thdId++;
+    #define TRACE_CREATE()
+
+    #define __HGLOG_ASSERT_DBG(_assertion)
+    #define __TRACE_ASSERT_DBG(_assertion, _message, _panicCode )
+
+#endif // _DEBUG
+
+#endif      // HGLOGLOGUTILS_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/trace/hglogutils.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,212 @@
+/*
+* ==============================================================================
+*  Name        : hglogutils.h
+*  Part of     : Teleport / Context Services
+*  Description : Logging behavior
+*  Version     : %version: 3 %
+*
+*  Copyright © 2008 Nokia. All rights reserved.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia. All rights are reserved. Copying, including 
+*  reproducing, storing, adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia.
+* ==============================================================================
+*/
+
+#ifndef HGLOGUTILS_H
+#define HGLOGUTILS_H
+
+/**
+ * NOTE: This file contains the logic related to logging. Change only if you
+ * know what you're doing.
+ */
+
+
+
+
+
+
+
+
+
+
+#ifdef _DEBUG
+
+#include <e32debug.h>
+#include <e32std.h>
+
+static const TUint HGLOGERR   = 2;  /**< Used to create an error message */
+
+// These macros are real macros, that should be used. For temporary purposes, these
+// are left out and the logging is done by simple entry logging
+#define _HGLOG_UNCONTROLLED_INPUT_MSG  L"%s%d[%x:%x:%x]>%s UNCONTROLLED ENTRY!"
+#define _HGLOG_MULTIPLE_ENTRY_MSG      L"%s%d[%x:%x:%x]%s  ADDITIONAL ENTRY!"
+#define _HGLOG_UNCONTROLLER_EXIT_MSG   L"%s%d[%x:%x:%x]<%s UNCONTROLLED EXIT!"
+#define _HGLOG_MULTIPLE_EXIT_MSG       L"%s%d[%x:%x:%x]%s  ADDITIONAL EXIT!"
+#define _HGLOG_TRAP_HARNESS_ENTRY      L"_D%d[%x:%x:%x]TraceFramework: Entering trap harness"
+#define _HGLOG_TRAP_HARNESS_EXIT       L"_D%d[%x:%x:%x]TraceFramework: Exiting trap harness"
+#define _HGLOG_TRAP_HARNESS_LEAVE      L"_D%d[%x:%x:%x]TraceFramework: ---------- LEAVE OCCURRED !!! ---------- "
+#define _HGLOG_API_PREFIX              L"_A"
+#define _HGLOG_LOCAL_PREFIX            L"_L"
+
+/**
+* @file 
+* trace_utils.h contains definitions needed for advanced tracing features.
+* Tracing can be customized using the following compile time flags:
+* - <b>_DEBUG</b>
+*   - With this flag undefined, all traces are disabled
+* - <b>__KERNEL_MODE__</b>
+*   - if kernel mode flag is defined, kernel macro variants are used (no unicode or shared heap related stuff, faster)
+* - <b>DISABLE_SYNTAX_CHECK</b>
+*   - If this flag is defined, runtime syntax checking features are disabled from traces
+*/
+#ifndef DISABLE_SYNTAX_CHECK
+    #define _MARK_ENTRY() _dc.inOk=ETrue
+    #define _DOINCHK() _dc.DoInChk()
+    #define _CHK_MULTIIN() _dc.ChkMultiIn()
+    #define _CHK_MULTIOUT() _dc.ChkMultiOut()
+    #define _MARK_EXIT() _dc.outOk=ETrue
+#else
+    #define _MARK_ENTRY()
+    #define _DOINCHK()
+    #define _CHK_MULTIIN()
+    #define _CHK_MULTIOUT()
+    #define _MARK_EXIT()
+#endif // DISABLE_SYNTAX_CHECK
+    
+/** For tracing */
+#ifdef _HGLOG_RDEBUG
+    #define _IT(a) (TPtrC((const TText *)(a)))
+    #define _HGLOGPRINTER RDebug::Print        
+        
+/** For filedebug */
+#else   // _HGLOG_RDEBUG
+
+    /** Includes */
+    #include <e32base.h>
+    #include <e32std.h>
+    #include <e32def.h>
+    #include <e32svr.h>
+
+// both of headers defines KLogBufferSize
+#ifndef __COMMSDEBUGUTILITY_H__
+    #include <flogger.h>
+#endif
+
+    #define _IT(a) KHgLogPath, KHgLogFile, EFileLoggingModeAppend, (TPtrC((const TText *)(a)))    
+    #define _HGLOGPRINTER RFileLogger::WriteFormat    
+#endif // _HGLOG_RDEBUG    
+
+class _THgLogContext
+    {
+    public:
+        _THgLogContext(
+            const TText* _fn, 
+            const TUint _id, 
+            const TUint _vis, 
+            const TUint _addr, 
+            const TUint _thdId, 
+            const TUint _category=0 )
+            : 
+            iFn(_fn), 
+            iId(_id), 
+            iApi((TBool)_vis), 
+            iAddr(_addr), 
+            iThdId(_thdId), 
+            iVis((_vis == 0 ? (TText*)_HGLOG_API_PREFIX : (TText*)_HGLOG_LOCAL_PREFIX)),
+            iCategory(_category)            
+        #ifndef DISABLE_SYNTAX_CHECK
+            ,outOk(EFalse), inOk(EFalse)
+        #endif
+            {
+            }
+        ~_THgLogContext() 
+            {
+            #ifndef DISABLE_SYNTAX_CHECK
+                do
+                    {                   
+                    DoInChk();
+                    if (!outOk)
+                        {
+                        _HGLOGPRINTER(_IT(_HGLOG_UNCONTROLLER_EXIT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);
+                        }
+                    } while (0);
+            #endif // DISABLE_SYNTAX_CHECK
+            }
+
+        const TText* iFn;
+        const TUint iId;
+        const TText* iVis;
+        const TUint iAddr;
+        const TInt iThdId;
+        const TBool iApi;
+        const TUint iCategory;
+        
+        #ifndef DISABLE_SYNTAX_CHECK
+            inline void DoInChk()
+                {
+                if (!inOk)
+                    {
+                    _HGLOGPRINTER(_IT(_HGLOG_UNCONTROLLED_INPUT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);
+                    inOk = ETrue;
+                    }
+                }
+                        
+            inline void ChkMultiIn()
+                {
+                if (inOk)
+                    {
+                    _HGLOGPRINTER(_IT(_HGLOG_MULTIPLE_ENTRY_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);                
+                    }
+                }
+    
+            inline void ChkMultiOut()
+                {
+                if (outOk)
+                    {           
+                    _HGLOGPRINTER(_IT(_HGLOG_MULTIPLE_EXIT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);                                        
+                    }
+                }
+
+            TBool inOk;
+            TBool outOk;
+        #endif // DISABLE_SYNTAX_CHECK
+    };
+    
+class _THgLogTrapHandler: public TTrapHandler
+    {
+    public:
+
+        _THgLogTrapHandler(_THgLogContext& _context) : _dc( _context ) 
+            {
+            RThread me;
+            iThdId = (TInt)me.Id();
+            }
+    	void Trap() 
+    	    {
+    	    _HGLOGPRINTER(_IT(_HGLOG_TRAP_HARNESS_ENTRY), 0, HGLOGERR, iThdId, this);
+    	    oldHandler->Trap();
+    	    } 
+    	void UnTrap()
+    	    {
+    	    _HGLOGPRINTER(_IT(_HGLOG_TRAP_HARNESS_EXIT), 0, HGLOGERR, iThdId, this);
+    	    oldHandler->UnTrap();
+    	    }	
+    	void Leave(TInt aValue)
+    	    {
+    	    _HGLOGPRINTER(_IT(_HGLOG_TRAP_HARNESS_LEAVE), 0, HGLOGERR, iThdId, this);
+    	    oldHandler->Leave(aValue);
+    	    }	
+    	TTrapHandler* oldHandler;
+    private:
+        _THgLogContext& _dc;
+        TInt iThdId;
+    };
+    
+#endif // _DEBUG    
+
+#endif // HGLOGUTILS_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,21 @@
+/*
+* ============================================================================
+*  Name        : bld.inf
+*  Part of     : Huriganes / Teleport
+*  Description : Build info file for Teleport
+*  Version     : %version: sa1spcx1#33 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#include "../contextengine/group/bld.inf"
+#include "../teleportui/group/bld.inf"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* ============================================================================
+*  Name        : bld.inf
+*  Part of     : Huriganes / Teleport UI
+*  Description : Build info file
+*  Version     : %version: sa1spcx1#51 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+// iby file
+../rom/hgteleport.iby             CORE_MW_LAYER_IBY_EXPORT_PATH(hgteleport.iby)
+../rom/hgteleportresources.iby    LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(hgteleportresources.iby)
+
+// stub sis
+../sis/stubs/teleport_stub.sis                  /epoc32/data/z/system/install/teleport_stub.sis
+../sis/stubs/teleport_stub.sis                  /epoc32/release/winscw/udeb/z/system/install/teleport_stub.sis
+
+#include "../hgteleportappecom/group/bld.inf"
+#include "../hgteleportapp/group/bld.inf"
+
+PRJ_MMPFILES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/data/hgteleport.rss	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,283 @@
+/*
+* ============================================================================
+*  Name        : hgteleport.rss
+*  Part of     : Hg Teleport
+*  Description : Resource files for teleport app
+*  Version     : %version: sa1spcx1#27 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* 
+*/
+
+NAME HGTL
+
+#include <eikon.rh>
+#include <eikon.rsg>
+#include <avkon.rh>
+#include <avkon.rsg>
+#include <appinfo.rh>
+
+#include <avkon.loc>
+#include <taskswitcher.loc>
+
+#include "hgteleportcommands.hrh"
+
+// ---------------------------------------------------------
+//   
+//    Define the resource file signature 
+//    This resource should be empty.
+//
+// ---------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE { }
+
+// ---------------------------------------------------------
+//   
+//    Default Document Name
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_default_document_name { buf=""; }
+
+// ---------------------------------------------------------
+//   
+//    Define default menu and CBA key.
+//
+// ---------------------------------------------------------
+//
+RESOURCE EIK_APP_INFO
+    {
+    menubar = r_hgteleport_menubar;
+    cba = r_hgteleport_cba_nontouch;
+    }
+
+// ---------------------------------------------------------
+//   
+//    CBA for non-touch.
+//
+// ---------------------------------------------------------
+//
+RESOURCE CBA r_hgteleport_cba_nontouch
+	{
+	flags = 0;
+	buttons = 
+    	{
+    	CBA_BUTTON {id=EAknSoftkeySelect; txt=text_softkey_select;}, // left softkey
+    	CBA_BUTTON {id=EAknSoftkeyBack; txt=text_softkey_back;}, // right softkey
+    	CBA_BUTTON {id=EAknSoftkeySelect; txt=text_softkey_select;} // middle softkey, same as lsk, label is not shown in touch
+    	};
+	}
+
+// ---------------------------------------------------------
+//   
+//    CBA for touch.
+//
+// ---------------------------------------------------------
+//
+RESOURCE CBA r_hgteleport_cba_touch
+	{
+	flags = 0;
+	buttons = 
+    	{
+    	CBA_BUTTON {id=EAknSoftkeySelect; txt=text_softkey_empty;}, // left softkey, no label
+    	CBA_BUTTON {id=EAknSoftkeyBack; txt=text_softkey_back;}, // right softkey
+    	CBA_BUTTON {id=EAknSoftkeySelect; txt=text_softkey_select;} // middle softkey, same as lsk, label is not shown in touch
+    	};
+	}
+
+
+// ---------------------------------------------------------
+//   
+//   r_hgteleport_menubar
+//   Menubar for hgteleport
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_BAR r_hgteleport_menubar
+    {
+    titles =
+        {
+        MENU_TITLE {menu_pane = r_hgteleport_menu;}
+        };
+    }
+
+
+// ---------------------------------------------------------
+//   
+//   r_hgteleport_menu
+//   Menu for "Options"
+//
+// ---------------------------------------------------------
+//
+RESOURCE MENU_PANE r_hgteleport_menu
+    {
+    items = 
+        {
+        MENU_ITEM { command = EHgTeleportCmdHelp; 	 txt = qtn_options_help; },
+        MENU_ITEM { command = EAknSoftkeyExit;   	txt = text_softkey_exit; }
+        };
+    }
+
+// ---------------------------------------------------------
+//   
+//   r_hg_panel_teleport_name
+//   teleport panel name
+//
+// ---------------------------------------------------------
+//
+RESOURCE TBUF r_hg_panel_teleport_name
+    {
+    buf="Task Switcher";
+    }
+
+// ---------------------------------------------------------
+//   
+//   r_hg_teleport_message_dialog_okcancel
+//   message dialog with ok and cancel softkeys labels
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_hg_teleport_message_dialog_okcancel
+    {
+	flags = EGeneralQueryFlags;
+	buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+	items =
+	    {
+		DLG_LINE
+		    {
+			type = EAknCtPopupHeadingPane;
+			id = EAknMessageQueryHeaderId;
+			control = AVKON_HEADING
+			    {
+			    headinglayout = 0;			
+			    };
+		    },
+		DLG_LINE
+	    	{
+			type = EAknCtMessageQuery;
+			id = EAknMessageQueryContentId;
+			control = AVKON_MESSAGE_QUERY { };
+		    }
+	    };
+    }
+
+// ---------------------------------------------------------
+//   
+//   r_hg_teleport_message_dialog_yesno
+//   message dialog with yes and no softkeys labels
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_hg_teleport_message_dialog_yesno
+    {
+	flags = EGeneralQueryFlags;
+	buttons = R_AVKON_SOFTKEYS_YES_NO;
+	items =
+	    {
+		DLG_LINE
+		    {
+			type = EAknCtPopupHeadingPane;
+			id = EAknMessageQueryHeaderId;
+			control = AVKON_HEADING
+			    {
+			    headinglayout = 0;			
+			    };
+		    },
+		DLG_LINE
+	    	{
+			type = EAknCtMessageQuery;
+			id = EAknMessageQueryContentId;
+			control = AVKON_MESSAGE_QUERY { };
+		    }
+	    };
+    }
+
+// ---------------------------------------------------------
+//   
+//   r_hg_teleport_message_dialog_ok
+//   message dialog with ok softkey label
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_hg_teleport_message_dialog_ok
+    {
+	flags = EGeneralQueryFlags;
+	buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+	items =
+	    {
+		DLG_LINE
+		    {
+			type = EAknCtPopupHeadingPane;
+			id = EAknMessageQueryHeaderId;
+			control = AVKON_HEADING
+			    {
+			    headinglayout = 0;			
+			    };
+		    },
+		DLG_LINE
+	    	{
+			type = EAknCtMessageQuery;
+			id = EAknMessageQueryContentId;
+			control = AVKON_MESSAGE_QUERY { };
+		    }
+	    };
+    }
+
+// ---------------------------------------------------------
+//   
+//   r_hg_teleport_fsw_confirm_close_query
+//   shown when Clear key is pressed in FSW
+//
+// ---------------------------------------------------------
+//
+RESOURCE DIALOG r_hg_teleport_fsw_confirm_close_query
+    {
+    flags = EGeneralQueryFlags;
+    buttons = R_AVKON_SOFTKEYS_YES_NO;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtQuery;
+            id = EGeneralQuery;
+            control = AVKON_CONFIRMATION_QUERY
+                {
+                layout = EConfirmationQueryLayout;
+                };
+            }
+        };
+    }
+
+
+
+RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info
+	{
+	short_caption = "Task Switcher";
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO 
+			{
+			caption="Task Switcher";
+			}
+		};
+	}
+
+
+RESOURCE TBUF r_teleport_title { buf = "Task Switcher"; }
+
+RESOURCE TBUF r_teleport_fsw_activate { buf = qtn_task_switcher_popup_open_app; }
+RESOURCE TBUF r_teleport_fsw_close { buf = qtn_task_switcher_popup_close_app; }
+RESOURCE TBUF r_teleport_fsw_close_all { buf = qtn_task_switcher_popup_close_all; }
+RESOURCE TBUF r_teleport_fsw_confirm_close { buf = qtn_memlo_confirm_close; }
+
+RESOURCE TBUF r_task_switcher_heading_applications { buf = qtn_task_switcher_heading_applications; }
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/data/hgteleport_reg.rss	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,31 @@
+/*
+* ============================================================================
+*  Name        : hgteleport_reg.rss
+*  Part of     : Hg Teleport
+*  Description : hgteleport application's registration resource file 
+*  Version     : %version: 3 %
+*
+*  Copyright © 2008-2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.1.1
+*/
+
+#include <appinfo.rh>
+#include <hgteleport.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x20016BF0
+
+RESOURCE APP_REGISTRATION_INFO 
+	{
+	app_file="hgteleport";
+	localisable_resource_file="\\resource\\apps\\hgteleport";
+	localisable_resource_id = R_LOCALISABLE_APP_INFO;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/group/backup_registration.xml	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,20 @@
+<?xml version="1.0" standalone="yes"?>
+<backup_registration version="1.0">
+
+  <passive_backup>
+    <!-- backup all private data -->
+    <include_directory name = "\" />
+  </passive_backup>
+  
+  <!-- backup executables and resources from SIS files -->
+  <system_backup />
+
+  <!-- backup cenrep data -->  
+  <proxy_data_manager sid = "0x10202BE9" />
+
+  <!-- backup sqlite data -->
+  <proxy_data_manager sid = "0x10281E17" />
+  
+  <restore requires_reboot = "no"/>
+
+</backup_registration>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,31 @@
+/*
+* ============================================================================
+*  Name        : bld.inf
+*  Part of     : Hg Teleport
+*  Description : Build information file for hgteleport
+*  Version     : %version: sa1spcx1#32 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+../loc/taskswitcher.loc       MW_LAYER_LOC_EXPORT_PATH(taskswitcher.loc)
+backup_registration.xml     /epoc32/data/z/private/20016BF0/backup_registration.xml
+backup_registration.xml     /epoc32/release/winscw/udeb/z/private/20016BF0/backup_registration.xml
+../inc/hgteleportuid.hrh    |../../inc/hgteleportuid.hrh
+
+PRJ_MMPFILES
+hgteleportapp.mmp
+
+PRJ_TESTMMPFILES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/group/hgteleportapp.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,106 @@
+/*
+* ============================================================================
+*  Name        : hgteleportapp.mmp
+*  Part of     : Hg Teleport
+*  Description : mmp file for teleport application
+*  Version     : %version: sa1spcx1#24 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*
+*/
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include "../inc/hgteleportuid.hrh"
+
+EPOCHEAPSIZE    0x100000 0xa00000  // 1 Mb - 10 Mb
+EPOCSTACKSIZE   0x5000 // 20KB
+
+TARGET          hgteleport.exe
+TARGETTYPE      exe
+UID             0x100039CE KHgTeleportAppUidValue
+CAPABILITY      CAP_APPLICATION NetworkControl PowerMgmt
+VENDORID        VID_DEFAULT
+
+SOURCEPATH      ../src
+SOURCE          hgteleportappui.cpp
+SOURCE          hgteleportapplication.cpp
+SOURCE          hgteleportdocument.cpp
+SOURCE          hgteleport.cpp
+SOURCE          hgteleportappview.cpp
+SOURCE          hgteleportfastswaparea.cpp
+SOURCE          hgteleportfastswapgrid.cpp
+SOURCE          hgteleportdevicestate.cpp
+SOURCE          hgteleporteventcontroler.cpp
+SOURCE          hgteleportphysicsengine.cpp
+SOURCE          hgteleportphysics.cpp
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../inc
+USERINCLUDE     ../../trace
+USERINCLUDE     ../../../contextengine/inc
+
+APP_LAYER_SYSTEMINCLUDE
+
+
+
+LIBRARY         euser.lib
+LIBRARY         apparc.lib
+LIBRARY         cone.lib
+LIBRARY         eikcore.lib
+LIBRARY         avkon.lib
+LIBRARY         apgrfx.lib
+LIBRARY         ws32.lib
+LIBRARY         aknskins.lib
+LIBRARY         egul.lib
+LIBRARY         eikcoctl.lib
+LIBRARY         fbscli.lib
+LIBRARY         aknskinsrv.lib
+LIBRARY		    commonengine.lib
+LIBRARY		    efsrv.lib
+LIBRARY		    estor.lib
+LIBRARY         aknnotify.lib
+LIBRARY         hlplch.lib
+LIBRARY         aknicon.lib
+LIBRARY         bitgdi.lib
+LIBRARY         gdi.lib
+LIBRARY         cdlengine.lib
+LIBRARY         aknlayout2.lib
+LIBRARY         aknlayout2scalable.lib
+LIBRARY         oommonitor.lib
+LIBRARY         hal.lib
+LIBRARY         gfxtrans.lib
+LIBRARY         akntransitionutils.lib
+LIBRARY         bafl.lib
+LIBRARY         akntouchgesturefw.lib
+LIBRARY         aknphysics.lib
+LIBRARY         touchfeedback.lib
+
+
+DEBUGLIBRARY    flogger.lib
+
+
+LIBRARY         hgcontextservicesutils.lib
+LIBRARY         hgfswclient.lib
+LIBRARY         hgfswutils.lib
+
+SOURCEPATH      ../data
+START RESOURCE  hgteleport.rss
+HEADER
+TARGETPATH      APP_RESOURCE_DIR
+LANGUAGE_IDS
+END
+
+SOURCEPATH      ../data
+START RESOURCE  hgteleport_reg.rss
+DEPENDS hgteleport.rsg
+TARGETPATH      /private/10003a3f/apps
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportapplication.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,49 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportapplication.h
+ *  Part of     : Hg Teleport
+ *  Description : Application class
+ *  Version     : %version: 4 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ * Template version: 4.2
+ */
+
+#ifndef HGTELEPORTAPPLICATION_H
+#define HGTELEPORTAPPLICATION_H
+
+#include <e32base.h> 
+#include <aknapp.h>
+
+class CHgTeleportApplication : public CAknApplication
+    {
+public:
+    // from CAknApplication
+    /**
+     * Returns the application DLL UID value
+     *
+     * @since S60 v5.0
+     * @return the UID of this Application/Dll
+     */
+    TUid AppDllUid( ) const;
+
+protected:
+    // from CAknApplication
+    /**
+     * Create a CApaDocument object and return a pointer to it
+     *
+     * @since S60 v5.0
+     * a pointer to the created document
+     */
+    CApaDocument* CreateDocumentL( );
+    };
+
+#endif // HGTELEPORTAPPLICATION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportapplogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,27 @@
+/*
+* ============================================================================
+*  Name        : hgteleportapplogging.h
+*  Part of     : Classic UI / Teleport
+*  Description : Defines logs for hgteleportapp
+*  Version     : %version:  1 % 
+*
+*  Copyright (c) 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.1.1
+*/
+
+#ifdef _DEBUG
+#include "../inc/hgteleportuid.hrh"
+_LIT( KHgLogFile, "hgteleportapp.txt" );
+_LIT( KHgLogPath, "teleport" );
+#define _HGLOG_LOG_COMPONENT_ID KHgTeleportAppUidValue
+
+#endif
+#include "hglogging.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportappui.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,165 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportappui.h
+ *  Part of     : Hg Teleport
+ *  Description : appui
+ *  Version     : %version: sa1spcx1#26 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#ifndef HGTELEPORTAPPUI_H
+#define HGTELEPORTAPPUI_H
+
+#include <e32base.h> 
+#include <aknappui.h>
+
+#include <gfxtranseffect/gfxtranseffect.h>
+#include <akntransitionutils.h>
+
+#include "hgproplistener.h"
+#include "hgcenreplistener.h"
+
+// FORWARD DECLARATIONS
+class CHgTeleportAppView;
+class CHgActionUtility;
+class CHgTeleportDeviceState;
+
+/**
+ * CHgTeleportAppUi
+ * Appui for hg teleport app
+ */
+class CHgTeleportAppUi : public CAknAppUi, 
+                         public MHgPropertyChangeObserver,
+                         public MHgCenrepChangeObserver,
+                         public MGfxTransEffectObserver
+    {
+
+public:
+    /**
+     * Perform the second phase construction of a CHgTeleportAppUi object
+     * this needs to be public due to the way the framework constructs the AppUi
+     */
+    void ConstructL();
+
+    /**
+     * Perform the first phase of two phase construction.
+     * This needs to be public due to the way the framework constructs the AppUi
+     */
+    CHgTeleportAppUi();
+
+    /**
+     * Destroy the object and release all memory objects
+     */
+    ~CHgTeleportAppUi();
+
+public: //effects
+    /**
+     * @return value of theme effects enabled flag
+     */
+    TBool EffectsEnabled() const;
+    
+    /**
+     * Function start transition  
+     */
+    void StartTransion( TUint aTransitionType );
+    
+    /**
+     * from MGfxTransEffectObserver
+     */
+    void TransitionFinished(const CCoeControl* aControl, TUint aAction);
+    
+    void MoveAppToForeground( TUint aTransitionType );
+    void MoveAppToBackground( TUint aTransitionType );
+    
+public:
+    /**
+     * From MHgCenrepChangeObserver
+     */
+    void CenrepChanged( TUint32 aKey, TInt aNewValue );
+    
+
+private:
+
+    // From MHgPropertyChangeObserver
+    void PropertyChanged( TUid aCategory, TUint aKey );
+
+    // From CEikAppUi
+    void HandleResourceChangeL( TInt aType );
+    void HandleForegroundEventL( TBool aForeground );
+    void HandleCommandL( TInt aCommand );
+    
+    void StartTransition( TUint aTranstionId,
+                          TBool aVisibility,
+                          TBool aLayers, 
+                          TUint aSubCom );
+
+private: // New functions
+    
+    /**
+     * Called from HandleForegroundEventL if the app came to foreground.
+     */
+    void HandleSwitchToForegroundEvent();
+    
+    /**
+     * Called from HandleForegroundEventL if the app went to background.
+     */
+    void HandleSwitchToBackgroundEvent();
+
+    /**
+     * Sets P&S property which is used to monitor and set Teleport to 
+     * background/foreground and short/long app key press.
+     * 
+     * @param aValue Property value. 
+     */
+    void SetTeleportStateProperty( TInt aValue );
+    
+    /**
+     * Sends request for close some 
+     * other apps to free memory for 
+     * teleport app
+     */
+    void FreeMemoryRequest();
+
+    static TInt GoToBackgroundTimerCallback( TAny* aParam );
+
+private:
+
+    // Teleport application view, owned
+    CHgTeleportAppView* iAppView;
+    
+    // Listener for app key long press P&S, owned
+    CHgPropertyListener* iPropListener;
+    
+    // Tells if Teleport is in foreground or in background
+    TBool iForeground;
+    
+    // Application arch task which refers to our own app
+    TApaTask iApplicationTask;
+
+    // Device state
+    CHgTeleportDeviceState* iDeviceState;
+
+    // Buffer to keeping some memory allocation while being in background.    
+    TUint8* iMemAllocBuf;
+
+    CPeriodic* iGoToBackgroundTimer;
+    
+    TBool iEffectsEnabled;
+    
+    /**
+     * Cenrep listener for the tfxserver enabled/disabled key.
+     */    
+    CHgCenrepListener* iThemeEffectsEnabledWatcher;
+    };
+
+#endif // HGTELEPORTAPPUI_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportappview.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,250 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportappview.h
+ *  Part of     : Hg Teleport
+ *  Description : appui
+ *  Version     : %version: sa1spcx1#32 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#ifndef HGTELEPORTAPPVIEW_H
+#define HGTELEPORTAPPVIEW_H
+
+#include <e32base.h> 
+#include <coecntrl.h>
+#include <AknPopupFader.h>
+#include "hgteleportdevicestate.h"
+#include "hgteleportdatachangeobserver.h"
+#include "hgteleporteventcontrolerobserver.h"
+
+// FORWARD DECLARATIONS
+class CAknsFrameBackgroundControlContext;
+class CHgTeleportFastSwapArea;
+class CHgTeleportDialog;
+class CAknPopupHeadingPane;
+class CHgTeleportEventControler;
+
+/**
+ * Teleport applicatio view class.
+ */
+class CHgTeleportAppView : public CCoeControl, public MCoeControlObserver,
+        public MHgDeviceStateObserver,
+        public MAknFadedComponent,
+        public MHgTeleportDataChangeObserver,
+        public MHgTeleportEventControlerObserver
+    {
+public:
+
+    /**
+     * Two-phase constructor.
+     * 
+     * @param aRect Area where view should draw itself.
+     */
+    static CHgTeleportAppView* NewL(const TRect& aRect,
+            CHgTeleportDeviceState& aDeviceState);
+
+    /**
+     * @copydoc NewL
+     */
+    static CHgTeleportAppView* NewLC(const TRect& aRect,
+            CHgTeleportDeviceState& aDeviceState);
+
+    /**
+     * Destructor.
+     */
+    ~CHgTeleportAppView();
+
+    /**
+     * Called from appui if the app came to foreground.
+     */
+    void HandleSwitchToForegroundEvent();
+    
+    /**
+     * Called from appui if the app went to background.
+     */
+    void HandleSwitchToBackgroundEvent();
+
+    /**
+     * From CCoeControl      Method handling the pointer events while the fsw is used.
+     *
+     * @param aPointerEvent  Information about the event.
+     */
+    void HandlePointerEventL( const TPointerEvent &aPointerEvent );
+
+public:
+    // from CCoeControl
+    void Draw( const TRect& aRect ) const;
+    TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+    TInt CountComponentControls() const;
+    CCoeControl* ComponentControl(TInt aIndex) const;
+    void SizeChanged();
+    
+    //Own
+    /*
+     * Forward app key handling to fasswaparea control.
+     */
+    void HandleAppKey(TInt aType);
+
+protected:
+    // from MCoeControlObserver
+    void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+
+    // from MHgDeviceStateObserver
+    void HandleDeviceStateChanged( TChangeType aChangeType );
+
+protected: // from MAknFadedComponent
+    TInt CountFadedComponents();
+    CCoeControl* FadedComponent( TInt aIndex );
+
+protected: // from MHgCenrepChangeObserver
+    void CenrepChanged( TUint32 aKey, TInt aNewValue );
+
+protected: // from MHgTeleportDataChangeObserver
+    void DataChanged( CCoeControl* aWhere, TInt aNewCount );
+
+private:
+
+    /**
+     * @copydoc NewL
+     */
+    void ConstructL( const TRect& aRect );
+
+    /**
+     * C++ constructor.
+     */
+    CHgTeleportAppView( CHgTeleportDeviceState& aDeviceState );
+
+    /**
+     * Updates the internal state for currently focused control.
+     * @param   aNewFocusedControl  ptr to new focused control, ownership not taken
+     */    
+    void ChangeFocus( CCoeControl* aNewFocusedControl );
+    
+    /**
+     * Creates components.
+     */
+    void CreateControlsL();
+    
+    /**
+     * Appends component rects to the given array.
+     * @param   aRects  array
+     */
+    void GetRects( RArray<TRect>& aRects );
+    
+    /**
+     * Adds the ptr to the list of dialog pointers.
+     * @param   aDlg    dialog ptr, ownership not taken
+     */
+    void AddDlgSelfPtrL( CHgTeleportDialog* aDlg );
+    
+    /**
+     * Handles key event according to the portrait-style (vertical) layout.
+     */
+    TKeyResponse OfferKeyEventPortraitStyleL( const TKeyEvent& aKeyEvent, TEventCode aType);
+
+    /**
+     * Calculates and returns the following:
+     *   - the rectangle for main_tport_pane
+     *   - the outer rectangle for the frame
+     *   - the inner rectangle for the frame
+     */
+    void UpdatePopupRects(  );
+
+    /**
+     * Updates the text in the applications and suggestions heading panes.
+     */
+    void UpdateHeadingsL();
+    
+    /**
+     * Disables transition animations for teleport app.
+     * (the automatic effects that are applied when coming/leaving foreground)
+     */
+    void DisableAppSwitchEffects();
+    
+    
+public://From MHgTeleportEventControlerObserver
+    /**
+     * Declare drag gesture handling.
+     * @param aOffset - drag distance
+     */
+    virtual void MoveOffset(const TPoint& aOffset);
+    
+    /**
+     * Declare tap gesture handling.
+     * @param aPoint - tap position
+     */
+    virtual void TapL(const TPoint& aPoint);
+    
+    /**
+     * Declare long tap gesture handling.
+     * @param aPoint - tap position
+     */
+    virtual void LongTapL(const TPoint& aPoint);
+    
+    /**
+     * 
+     */
+    virtual void Drag(
+        const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent);
+    
+    /**
+     * Declare animation stop handling
+     */
+    virtual void Stop();
+    
+    /**
+     * Declare getter for view position
+     */
+    virtual TPoint ViewPos() const;
+        
+private: // Data
+
+    // Ref to container for commonly used instances
+    CHgTeleportDeviceState& iDeviceState;
+
+    // Background context, owned
+    CAknsFrameBackgroundControlContext* iBgContext;
+    
+    // Fast Swap area, owned
+    CHgTeleportFastSwapArea* iFastSwapArea;
+
+    /**
+     * Heading pane, own
+     */
+    CAknPopupHeadingPane* iAppsHeading;
+
+    /**
+     * Currently focused control, not own
+     */
+    CCoeControl* iFocused;
+    
+    /**
+     * Rectangle of the control.
+     */
+    TRect iViewRect;
+    
+    /**
+     * Popup fader instance.
+     */
+    TAknPopupFader iPopupFader;
+    
+    /**
+     * Pointer for background image, owned
+     */
+    TRect iBgContextOuterRect;
+    TRect iBgContextInnerRect;
+    CHgTeleportEventControler* iEvtHandler; //own
+    };
+
+#endif // HGTELEPORTAPPVIEW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportcommands.hrh	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* ==============================================================================
+*  Name        : hgteleportcommands.hrh
+*  Part of     : Teleport
+*  Description : command ids
+*  Version     : %version: 1 %
+*
+*  Copyright (c) 2007 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#ifndef __TELEPORTCOMMANDS_HRH__
+#define __TELEPORTCOMMANDS_HRH__
+
+enum
+	{
+	EHgTeleportCmdBase = 20000,
+	EHgTeleportCmdHelp
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportdatachangeobserver.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,36 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportdatachangeinterface.h
+ *  Part of     : Hg Teleport engine
+ *  Description :
+ *  Version     : %version: 1 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+ 
+#ifndef HGTELEPORTDATACHANGEINTERFACE_H
+#define HGTELEPORTDATACHANGEINTERFACE_H
+
+#include <e32base.h>
+
+class CCoeControl;
+
+/**
+ * Callback mixin class to move the whole app to background or foreground.
+ */
+class MHgTeleportDataChangeObserver
+    {
+public:
+    virtual void DataChanged( CCoeControl* aWhere, TInt aNewCount ) = 0;
+    };
+
+#endif // HGTELEPORTDATACHANGEINTERFACE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportdevicestate.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,228 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportdevicestate.h
+ *  Part of     : Hg Teleport
+ *  Description : Device state (touch mode, screen orientation) handler
+ *  Version     : %version: sa1spcx1#11 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ * Template version: 4.2
+ */
+
+#ifndef HGTELEPORTDEVICESTATE_H_
+#define HGTELEPORTDEVICESTATE_H_
+
+#include <e32base.h>
+#include "hgteleportappui.h"
+#include "hgproplistener.h"
+
+/**
+ * Interface for getting notifications about screen orientation
+ * and/or touch state etc. changes.
+ */
+class MHgDeviceStateObserver
+    {
+public:
+    /**
+     * Type of change.
+     */
+    enum TChangeType
+        {
+        // screen orientation (portrait <=> landscape) has changed
+        EOrientation = 0x01,
+        // touch enabled/disabled status has changed
+        ETouchState = 0x02,
+        // skin has changed
+        ESkin = 0x04,
+        // input device mode change
+        EDeviceType = 0x08,
+        // all of the above
+        EAny = 0xFF
+        };
+
+    /**
+     * Called when a change, to which the observer is registered,
+     * has happened.
+     */
+    virtual void HandleDeviceStateChanged( TChangeType aChangeType ) = 0;
+    };
+
+/**
+ * Class for keeping track of screen orientation and touch enabled/disabled changes.
+ */
+class CHgTeleportDeviceState :
+    public CBase,
+    public MHgPropertyChangeObserver
+    {
+public:
+    /**
+     * Enumeration for TouchState().
+     */
+    enum TTouchState
+        {
+        ETouchEnabled,
+        ETouchDisabled
+        };
+
+    /**
+     * Enumeration for Orientation().
+     */
+    enum TOrientation
+        {
+        EPortrait,
+        ELandscape
+        };
+
+    /**
+     * Enumeration for DeviceType().
+     */
+    enum TDeviceType
+        {
+        EHybrid = 0,
+        EFullTouch  = 1
+        };
+
+    /**
+     * Creates a new instance.
+     */
+    static CHgTeleportDeviceState* NewL();
+
+    /**
+     * Destructor.
+     */
+    ~CHgTeleportDeviceState();
+
+    /**
+     * Returns the current state of touch awareness.
+     */
+    TTouchState TouchState() const;
+
+    /**
+     * Returns the current screen orientation.
+     */
+    TOrientation Orientation() const;
+
+    /**
+     * Returns the current device input type.
+     */
+    TDeviceType DeviceType() const;
+
+    /**
+     * Registers an observer.
+     * @param   aObserver   ref to observer
+     * (same observer can be added several times with different mask if needed)
+     * @param   aMask       bitmask composed from TChangeType values
+     * (when to notify the observer)
+     */
+    void AddObserverL( MHgDeviceStateObserver& aObserver, TInt aMask );
+
+    /**
+     * Deregisters the given observer.
+     * @param   aObserver   ref to observer
+     */
+    void RemoveObserver( MHgDeviceStateObserver& aObserver );
+
+    /**
+     * Called from appui.
+     */
+    void HandleResourceChange( TInt aType );
+    
+    //From MHgPropertyChangeObserver
+public:
+    /**
+     * Observer interface for getting notifications about a P&S property change.
+     */
+	virtual void PropertyChanged( TUid aCategory, TUint aKey );
+private:
+    /**
+     * Constructor.
+     */
+    CHgTeleportDeviceState();
+    
+    /**
+     * Performs 2nd phase construction.
+     */
+    void ConstructL();
+
+    /**
+     * Checks if touch is enabled or not and performs
+     * appropriate actions.
+     */
+    void CheckTouchState();
+
+    /**
+     * Checks the screen orientation and performs
+     * appropriate actions.
+     */
+    void CheckOrientation();
+    
+    /**
+     * Checks the device input type.
+     */
+    void CheckDeviceType();
+    
+    /**
+     * Notifies all observers that are registered for the given type.
+     */
+    void NotifyObservers( MHgDeviceStateObserver::TChangeType aType );
+
+    class SObserver;
+
+    /**
+     * Identity function to perform comparison between observer array items.
+     */
+    static TBool ObserverIdentity( const SObserver& aA, const SObserver& aB );
+
+private:
+    /**
+     * Current touch enabled/disabled state.
+     */
+    TTouchState iTouchState;
+    
+    /**
+     * Current screen orientation.
+     */
+    TOrientation iOrientation;
+    
+    /**
+     * Current the device input type.
+     */
+    TDeviceType iDeviceType;
+    
+    /**
+     * Observer array entry struct.
+     */
+    struct SObserver
+        {
+        TInt iMask;
+        MHgDeviceStateObserver* iObserver; // not owned
+        SObserver( TInt aMask, MHgDeviceStateObserver* aObserver )
+            : iMask( aMask ), iObserver( aObserver ) { }
+        };
+        
+    /**
+     * Observer array.
+     */
+    RArray<SObserver> iObservers;
+
+    /**
+     * Counter to indicate that we have not yet returned
+     * from a previous HandleResourceChange.
+     */
+    TInt iResChangeActiveCount;
+    
+    /**
+     * Flip status change observer.
+     */
+    CHgPropertyListener* iFlipStatusObserver;
+    };
+
+#endif // HGTELEPORTDEVICESTATE_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportdocument.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,91 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportdocument.h
+ *  Part of     : Hg Teleport
+ *  Description : Document class
+ *  Version     : %version: sa1spcx1#6 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ * 
+ */
+
+#ifndef HGTELEPORTDOCUMENT_H
+#define HGTELEPORTDOCUMENT_H
+
+#include <e32base.h> 
+#include <AknDoc.h>
+
+class CHgTeleportDocument : public CAknDocument
+    {
+public:
+    /**
+     * Construct a CHgTeleportDocument for the AVKON application aApp
+     * using two phase construction, and return a pointer to the created object
+     * aApp application creating this document
+     *
+     * @since S60 v5.0
+     * @return a pointer to the created instance of CHgTeleportDocument
+     */
+    static CHgTeleportDocument* NewL( CEikApplication& aApp );
+
+    /**
+     * Construct a CHgTeleportDocument for the AVKON application aApp
+     * using two phase construction, and return a pointer to the created object
+     *
+     * @since S60 v5.0
+     * @param aApp application creating this document
+     * @return a pointer to the created instance of CHgTeleportDocument
+     */
+    static CHgTeleportDocument* NewLC( CEikApplication& aApp );
+
+    /**
+     * Destroy the object and release all memory objects
+     *
+     * @since S60 v5.0
+     */
+    ~CHgTeleportDocument( );
+
+    /**
+     * Makes Startup-application hidden in menu shell and fastswap window
+     *
+     * @since S60 v5.0
+     * @param aWgName application windows group name
+     */
+    void UpdateTaskNameL( CApaWindowGroupName* aWgName );
+
+public:
+    // from CAknDocument
+    /**
+     * Create a ChgteleportAppUi object and return a pointer to it
+     *
+     * @since S60 v5.0
+     * @return a pointer to the created instance of the AppUi created
+     */
+    CEikAppUi* CreateAppUiL( );
+
+private:
+    /**
+     * Perform the second phase construction of a CHgTeleportDocument object
+     *
+     * @since S60 v5.0
+     */
+    void ConstructL( );
+
+    /**
+     * Perform the first phase of two phase construction
+     *
+     * @since S60 v5.0
+     * @param aApp application creating this document
+     */
+    CHgTeleportDocument( CEikApplication& aApp );
+    };
+
+#endif // HGTELEPORTDOCUMENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleporteventcontroler.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,177 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleporteventcontroler.h
+ *  Part of     : Hg Teleport
+ *  Description : Gesture and physics helper declaration
+ *  Version     : %version:  3 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#ifndef HGTELEPORTEVENTCONTROLER_H
+#define HGTELEPORTEVENTCONTROLER_H
+
+#include "hgteleporteventcontrolerobserver.h"
+#include <akntouchgesturefw.h>
+#include <aknphysicsobserveriface.h>
+
+class CHgTeleportPhysicsEngine;
+using namespace AknTouchGestureFw;
+/**
+ * CHgTeleportEventControler
+ * Input events handler. Class analyse pointer events and translate it to gesture. Procerss animations physics
+ */
+NONSHARABLE_CLASS(CHgTeleportEventControler): 
+    public CBase,
+    public MAknTouchGestureFwObserver,
+    public MAknPhysicsObserver
+    {
+public:
+    /**
+     * Two phase constructor. Instance is pushed on cleanup stack.
+     * @param aObs - reference to controler observer
+     * @param aEventSrc - reference to control which provide pointer events
+     * @return address of controler instance
+     */
+    static CHgTeleportEventControler* NewLC(MHgTeleportEventControlerObserver& aObs, 
+                                            CCoeControl& aEventSrc);
+    
+    /**
+     * Two phase constructor.
+     * @param aObs - reference to control observer
+     * @param aEventSrc - reference to control which provide pointer events
+     * @return address of controler instance
+     */
+    static CHgTeleportEventControler* NewL(MHgTeleportEventControlerObserver& aObs, 
+                                           CCoeControl& aEventSrc);
+    
+    /**
+     * Destructor
+     */
+    ~CHgTeleportEventControler();
+
+private:
+    /**
+     * First phase construction
+     */
+    CHgTeleportEventControler(MHgTeleportEventControlerObserver& aObserver);
+    
+    /**
+     * Second phase construction
+     * @param aEventSrc - control that provides pointer ivents to handler
+     */
+    void ConstructL(CCoeControl& aEventSrc);
+    
+    /**
+     * Implements gesture handling
+     * @param aEvent - gesture event
+     * @see MAknTouchGestureFwObserver
+     */
+    void HandleTouchGestureL(MAknTouchGestureFwEvent& aEvent);
+    
+    /**
+     * Implements tap gesture handling ( short tap, double tap, long tap )
+     * @param aEvent - tap event
+     */
+    void HandleTapEventL(MAknTouchGestureFwTapEvent& aEvent);
+    
+    /**
+     * Implements drag gesture handling
+     * @param aEvent - drag event
+     */
+    void HandleDragEventL(MAknTouchGestureFwDragEvent& aEvent);
+    
+    /**
+     * Implements flick gesture handling
+     * @param aEvent - drag event
+     */
+    void HandleFlickEventL(MAknTouchGestureFwFlickEvent& aEvent);
+    
+    //From MAknPhysicsObserver
+public:
+    /**
+     * Physics emulation has moved the view.
+     * 
+     * When this method is called client should update its visual and logical
+     * states to reflect the changes caused by view move. Note that if the
+     * parameter @c aDrawNow is @c EFalse client is not allowed to redraw the
+     * display but should only update its logical state.
+     * Physics engine will ensure that the last frame is always drawn.
+     *
+     * @since S60 v5.0
+     *
+     * @param  aNewPosition  The new position of the view.
+     * @param  aDrawNow      @c ETrue if client should redraw the screen,
+     *                       otherwise @c EFalse.
+     * @param  aFlags        Additional flags, not used currently.
+     */
+    virtual void ViewPositionChanged( const TPoint& aNewPosition,
+                              TBool aDrawNow,
+                              TUint aFlags );
+        
+    /**
+     * Physics emulation has stopped moving the view
+     *
+     * @since S60 v5.0
+     */
+    virtual void PhysicEmulationEnded();
+
+    /**
+     * Returns the observer's view position.
+     *
+     * @since S60 v5.0
+     *
+     * @return Physics observer's view position.
+     */
+    virtual TPoint ViewPosition() const;
+    
+public:
+    
+    /**
+     * Initialize animation between current position and destination point
+     * @param aPoint - destination point 
+     */
+    void Animate(const TPoint& aPoint);
+
+    /**
+     * 
+     * @param aWorldSize Physics world size.
+     * @param aViewSize Physics (visible) view size.
+     * @param aLandscape ETrue if physics should work in landscape.     
+     **/
+    void ReInitPhysicsL(const TSize& aWorldSize, 
+                        const TSize& aViewSize,
+                        TBool aLandscape);
+    
+    /**
+     * Stops currently ongoing animation
+     */
+    void StopAnimation();
+    
+private:
+    /**
+     * Controler observer. Not own
+     */
+    MHgTeleportEventControlerObserver& iObserver;
+    
+    /**
+     * Gesture recognition helper. Own
+     */
+    CAknTouchGestureFw* iGestureHelper;
+    
+    /**
+     * Physics helper. Own
+     */
+    CHgTeleportPhysicsEngine* iPhysicsHelper;
+    };
+
+#endif // HGTELEPORTEVENTCONTROLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleporteventcontrolerobserver.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,68 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportgestureobserver.h
+ *  Part of     : Hg Teleport
+ *  Description : Define gesture observer interface
+ *  Version     : %version: 3 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#ifndef HGTELEPORTGESTUREOBSERVER_H
+#define HGTELEPORTGESTUREOBSERVER_H
+
+#include <e32base.h>
+#include <akntouchgesturefw.h>
+
+/**
+ * MHgTeleportGestureObserver
+ * Define gesture observer interface
+ */
+NONSHARABLE_CLASS(MHgTeleportEventControlerObserver)
+    {
+public:
+    /**
+     * Declare drag gesture handling.
+     * @param aOffset - drag distance
+     */
+    virtual void MoveOffset(const TPoint& aOffset)=0;
+    
+    /**
+     * Declare tap gesture handling.
+     * @param aPoint - tap position
+     */
+    virtual void TapL(const TPoint& aPoint)=0;
+    
+    /**
+     * Declare long tap gesture handling.
+     * @param aPoint - tap position
+     */
+    virtual void LongTapL(const TPoint& aPoint)=0;
+    
+    /**
+     * Declare drag gesture handling.
+     * @param aEvent - drag event
+     */
+    virtual void Drag(const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent) =0;
+    
+    /**
+     * Declare animation stop handling
+     */
+    virtual void Stop()=0;
+    
+    /**
+     * Declare getter for view position
+     */
+    virtual TPoint ViewPos() const =0;
+    };
+
+#endif // HGTELEPORTGESTUREOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportfastswaparea.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,459 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportfastswaparea.h
+ *  Part of     : Hg Teleport
+ *  Description : Teleport Fast Swap area UI
+ *  Version     : %version: sa1spcx1#45 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+//macro TASKSWITCHER_USE_CUSTOM_LAYOUT
+#if !defined ( TASKSWITCHER_USE_CUSTOM_LAYOUT )
+    //#define TASKSWITCHER_USE_CUSTOM_LAYOUT 1
+#endif
+
+
+#ifndef HGTELEPORTFASTSWAPAREA_H
+#define HGTELEPORTFASTSWAPAREA_H
+
+#include <e32base.h>
+#include <eikmobs.h>
+#include "hgteleportdevicestate.h"
+#include "hgfswclientobserver.h"
+#include "hgteleportfastswapgrid.h"
+#include "hgteleporteventcontrolerobserver.h"
+
+
+// FORWARD DECLARATIONS
+class CHgFswClient;
+class CHgFswEntry;
+class CAknStylusPopUpMenu;
+class CAknQueryDialog;
+class CHgTeleportEventControler;
+class MHgTeleportDataChangeObserver;
+
+#ifdef TASKSWITCHER_USE_CUSTOM_LAYOUT
+const TInt KFswItemHeight = 250;
+const TInt KFswItemWidth = 240;
+const TInt KFswImageSize = 200;
+const TInt KFswTextHeight = 20;
+const TInt KFswBorderSize = 10;
+const TInt KFswHeadingHeight = 50;
+#endif
+
+/**
+ * Teleport Fast Swap area UI.
+ */
+class CHgTeleportFastSwapArea: public CCoeControl,
+                               public MEikMenuObserver,
+                               public MHgFswObserver,
+                               public MEikListBoxObserver,
+                               public MHgTeleportFastSwapGridObserver,
+                               private MHgTeleportEventControlerObserver,
+                               public MHgDeviceStateObserver,
+                               public MHgTeleportFastSwapTimerObserver
+    {
+public:
+    /**
+     * Two-phase constructor.
+     * 
+     * @param aRect Area where fast swap info & list should draw itself.
+     * @param aParent Parent CoeControl. 
+     */
+    static CHgTeleportFastSwapArea* NewL( const TRect& aRect,
+            CCoeControl& aParent, CHgTeleportDeviceState& aDeviceState,
+            CHgTeleportEventControler& aEventHandler);
+
+    /**
+     * @copydoc NewL
+     */
+    static CHgTeleportFastSwapArea* NewLC( const TRect& aRect,
+            CCoeControl& aParent, CHgTeleportDeviceState& aDeviceState,
+            CHgTeleportEventControler& aEventHandler);
+
+    /**
+     * Destructor.
+     */
+    ~CHgTeleportFastSwapArea();
+
+    /**
+     * Called from appview when coming to foreground.
+     */
+    void HandleSwitchToForegroundEvent();
+    
+    /**
+     * Called from appview when going to background.
+     */
+    void HandleSwitchToBackgroundEvent();
+
+    /**
+     * Called after construction to set up additional properties,
+     * like the control observer.
+     */
+    void Setup( MCoeControlObserver& aControlObserver );
+
+    /**
+     * Saves the index of the currently selected (highlighted) item.
+     */
+    void SaveSelectedIndex();
+    
+    /**
+     * Restores the selection (highlight) position.
+     */
+    void RestoreSelectedIndex();
+
+    // Functions to perform activate, close, close others operations.
+    // They are public so same functionality can be implemented in the
+    // Options menu (appui) for example.
+    
+    /**
+     * Index of highlighted item or KErrNotFound.
+     */
+    TInt SelectedIndex() const;
+    
+    /**
+     * Brings the app corresponding to the item at given index into foreground.
+     */
+    void SwitchToApp( TInt aIndex );
+    
+    /**
+     * Sends close msg to given app.
+     * @param   aIndex      index
+     * @param   aSuppressRendering  content is not refreshed if ETrue
+     */
+    void TryCloseAppL( TInt aIndex, TBool aSuppressRendering = EFalse );
+    
+    /**
+     * Sends close msg to given app if user confirms the query.
+     */
+    void TryCloseAppWithQueryL( TInt aIndex );
+    
+    /**
+     * Tries to Close all applications that cn be closed
+     */
+    void TryCloseAllL();
+    
+    /**
+     * True if it is allowed to ask the given app to close.
+     * @param   aIndex  index
+     */
+    TBool CanClose( TInt aIndex ) const;
+    
+    /**
+     * @param  aSelectedItem  item for which pop up is shown
+     * 
+     * @return ETrue, when number of closable apps is >= 2 or there is at least
+     *                one closable item and non closable item is selected.
+     * @return EFalse, when number of closable apps is < 2.
+     */
+    TBool CanCloseAll( TInt aSelectedItem ) const;
+
+    /**
+     * Returns the number of items in the list.
+     */
+    TInt Count() const;
+
+    /**
+     * Returns the underlying Ganes control pointer.
+     */
+    CCoeControl* GetChildControl() { return iGrid; }
+
+    /**
+     * Sets the data-changed observer.
+     */
+    void SetDataChangeObserver( MHgTeleportDataChangeObserver* aDcObserver );
+
+    /*
+     * Handling short/long app key.
+     */
+    void HandleAppKey(TInt aType);
+
+private:
+
+    /**
+     * @copydoc NewL
+     */
+    void ConstructL( const TRect& aRect );
+
+    /**
+     * C++ constructor.
+     */
+    CHgTeleportFastSwapArea(CCoeControl& aParent,
+            CHgTeleportDeviceState& aDeviceState,
+            CHgTeleportEventControler& aEventHandler);
+    
+    // From MEikListBoxObserver
+    void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType);
+    
+public:
+    /**
+     * Implements drag gesture handling
+     * @see MHgTeleportEventControlerObserver
+     */
+    void MoveOffset(const TPoint&);
+
+    /**
+     * Implements tap gesture handling
+     * @see MHgTeleportEventControlerObserver
+     */
+    void TapL(const TPoint&);
+
+    /**
+     * Implements long tap gesture handling
+     * @see MHgTeleportEventControlerObserver
+     */
+    void LongTapL(const TPoint&);
+
+    /**
+     * Implements drag gesture handling
+     * @see MHgTeleportEventControlerObserver
+     */
+    void Drag(const AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent);
+    
+    /**
+     * Implements animation stop handling
+     * @see MHgTeleportEventControlerObserver
+     */
+    void Stop();
+    
+    /**
+     * Implements view position getter. Returns point in the middle of the
+     * grid view window.
+     * 
+     * @see MHgTeleportEventControlerObserver
+     */
+    TPoint ViewPos()const;
+    
+public:    
+    // from CCoeControl    
+    TInt CountComponentControls() const;
+    CCoeControl* ComponentControl(TInt aIndex) const;
+    void FocusChanged( TDrawNow aDrawNow );
+    void SizeChanged();
+    void Draw( const TRect& aRect ) const;
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+    
+private:
+    // From MHgFswObserver     
+    void HandleFswContentChanged();
+    
+    // From MEikMenuObserver
+    void ProcessCommandL( TInt aCommandId );
+	void SetEmphasis( CCoeControl*, TBool ) { }
+	
+	// From MHgTeleportFastSwapGridObserver
+	void HandleCloseEventL(TInt aItemIdx);
+	
+	// From MHgDeviceStateObserver
+	void HandleDeviceStateChanged( TChangeType aChangeType );
+
+    // From MHgTeleportFastSwapTimerObserver
+    void TimerCompletedL( CHgTeleportFastSwapTimer* aSource );
+	
+// new functions    
+
+    /**
+     * Makes a copy of the given bitmap.
+     * Also scaled to the given size, but maintains aspect ratio,
+     * so the size of the returned bitmap may be less then aSize.
+     */
+    CFbsBitmap* CopyBitmapL( TInt aFbsHandle, TSize aSize );
+
+    /**
+     * Called from HandleFswContentChanged.
+     */    
+    void HandleFswContentChangedL();
+    
+    /**
+     * Shows the content from iArray on the screen.
+     */
+    void RenderContentL();
+    
+    /**
+     * Creates the ganes grid control.
+     */
+    void ReCreateGridL();
+    
+    /**
+     * Returns rectangles for fast swap area controls
+     */
+    void GetFastSwapAreaRects( RArray<TAknLayoutRect>& aRects );
+
+    /**
+     * Creates a stylus popup instance (iPopup) if not yet done.
+     */
+    void PreCreatePopupL();
+
+    /**
+     * Shows the stylus popup menu if not yet visible.
+     * @param   aIndex  index of item in the grid
+     * @param   aPoint  position for the popup
+     */
+    TBool ShowPopupL( TInt aIndex, const TPoint& aPoint );
+    
+    /**
+     * Shows the app close confirmation query.
+     * @param   aIndex  index of item in the grid
+     * @return ETrue if accepted EFalse if canceled
+     */
+    TBool ConfirmCloseL( TInt aIndex );
+
+    /**
+     * Sends the data-changed notification.
+     */   
+    void NotifyChange();
+
+    /**
+     * Chage application order.
+     * move Homescreen to first left position.
+     */   
+    void SwapApplicationOrder( RPointerArray<CHgFswEntry>& aArray );
+    
+    /**
+     * Retrieves and returns size for image graphics.
+     */
+    TSize PreferredImageSize();
+    
+    /**
+     * Retrieves number of items in grid
+     */
+    TInt GridItemCount();
+    
+    /**
+     * Calculates the correct size if aspect ratio needs to be preserved.
+     */
+    TSize CalculateSizePreserveRatio(const TSize& aTargetAreaSize,
+            const TSize& aSourceSize);
+    
+    /**
+     * Selects next item in grid
+     */
+    void SelectNextItem();
+    
+    /**
+     * Highlight current grid'd item and redraw
+     */
+    void ShowHighlight();
+    
+    /**
+     * Centralise most centered item so it was most exposed on the view.
+     * Centered element is being selected by grid.
+     * Animation to the centered element is made after aRedrawDelay time.
+     * 
+     * @param aRedrawDelay - animation delay.
+     */
+    void CenterItem( TInt aRedrawDelay);
+    
+    /**
+     * Returns full grid view size.
+     */
+    TSize GridWorldSize();
+    
+    /**
+     * Updates grid, called for manual grid scroll update
+     * 
+     * @param  aForceRedraw    if set to ETrue - redraw will be forced
+     * @param  aAnimate        set to ETrue to enable animation
+     */
+    void UpdateGrid( TBool aForceRedraw = EFalse,
+                     TBool aAnimate = ETrue );
+    
+    /**
+     * Returns grid view size
+     */
+    TSize ViewSize();
+    
+    /**
+     * Returns the position of the given item inside grid world rect.
+     * Returns point in the middle of the view rectangle.
+     * 
+     * @param  aItemIdx  index of the item for which calculation will be done
+     */
+    TPoint ItemViewPosition( TInt aItemIdx );
+    
+    /**
+     * Returns index of the shown item, based on the logical
+     * position of the grids view. Item that is closest to the
+     * middle of screen is returned.
+     * 
+     * @param  aViewPos  grids view position. This must be point in
+     *                   the middle of the view rectangle
+     * @return  index of the item
+     */
+    TInt ViewToVisibleItem( const TPoint aViewPos );
+    
+    /**
+     * Launches increasing pop-up feedback.
+     */
+    void LaunchPopupFeedback();
+
+private: // Data
+    
+    // parent control
+    CCoeControl& iParent;
+    
+    // device state
+    // not own 
+    CHgTeleportDeviceState& iDeviceState;
+
+    // grid, own
+    CHgTeleportFastSwapGrid* iGrid;
+        
+    // fsw client, own
+    CHgFswClient* iFSClient;
+    // fsw content, ptrs owned
+    RPointerArray<CHgFswEntry> iArray;
+    
+    // index of selected (highlighted) item in the grid
+    // when the fsw was last focused
+    TInt iSavedSelectedIndex;
+    
+    // fsw popup (activate, close, etc.), own
+    CAknStylusPopUpMenu* iPopup;
+    // the aIndex argument of ShowPopupL is stored here
+    TInt iAppIndexForPopup;
+
+    // query shown when pressing Clear key in fsw, own
+    CAknQueryDialog* iConfirmCloseQuery;
+
+    // Timestamp of the last application close operation
+    TTime iTimeOfLastClose;
+    
+    // Observer ptr, may be NULL, not owned
+    MHgTeleportDataChangeObserver* iDcObserver;
+    
+    //Input events handler
+    CHgTeleportEventControler& iEvtHandler;
+    
+    TInt iMaxItemsOnScreen;
+    TInt iPreviousNoOfItems;
+    
+    // Tap event
+    TPointerEvent iTapEvent;
+    CHgTeleportFastSwapTimer* iHighlightTimer;
+    TBool iLongTap;
+    
+    // Grid scrolling
+    TInt iGridItemWidth;
+    
+    CHgTeleportFastSwapTimer* iRedrawTimer; // owned
+    
+    CHgTeleportFastSwapTimer* iUpdateGridTimer;//owned
+    
+    // Key event handling
+    TBool iConsumeEvent;
+    TBool iKeyEvent;
+    };
+
+#endif // HGTELEPORTFASTSWAPAREA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportfastswapgrid.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,274 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportfastswapgrid.h
+ *  Part of     : Hg Teleport
+ *  Description : Teleport Fast Swap area UI
+ *  Version     : %version:  12 %
+ *
+ *  Copyright © 2009 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#ifndef HGTELEPORTFASTSWAPGRID_H_
+#define HGTELEPORTFASTSWAPGRID_H_
+
+#include <AknGrid.h>
+#include <aknconsts.h>
+#include "hgteleportdevicestate.h"
+
+class CAknsFrameBackgroundControlContext;
+class CHgTeleportFastSwapTimer;
+
+/**
+ * Observer for handling fast swap grid events
+ */
+class MHgTeleportFastSwapGridObserver
+    {
+public:
+    /**
+     * Called when close icon is tapped on the grid item.
+     * 
+     * @param  aItemIdx  index of the the item for which close icon
+     *                   has been tapped
+     */
+    virtual void HandleCloseEventL( TInt aItemIdx ) = 0;
+    };
+
+
+class MHgTeleportFastSwapTimerObserver
+    {
+public:
+    /**
+     * Called when timer is completed
+     */
+    virtual void TimerCompletedL( CHgTeleportFastSwapTimer* aSource ) = 0;
+    };
+
+
+/**
+ * Avkon grid implementing custom item drawer
+ */
+class CHgTeleportFastSwapGrid: 
+    public CAknGrid,
+    public MHgDeviceStateObserver
+    {
+public: // enums
+    enum TFastSwapGridBehaviour
+        {
+        // Highlight always visible
+        EHybrid,
+        
+        // Touch only highlight handling
+        ETouchOnly
+        };
+    
+public: // Constructor and destructor
+    CHgTeleportFastSwapGrid();
+    ~CHgTeleportFastSwapGrid();
+    void ConstructL( const CCoeControl* aParent );
+    
+public: // From CCoeControl
+    void HandlePointerEventL( const TPointerEvent &aPointerEvent );
+    TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+    void HandleResourceChange( TInt aType );
+    void SizeChanged();
+    
+public: //From MHgDeviceStateObserver
+    /**
+     * Called when a change, to which the observer is registered,
+     * has happened.
+     */
+    virtual void HandleDeviceStateChanged( TChangeType aChangeType );
+    
+public: // New functions
+
+    /**
+     * Sets fast swap grid observer
+     */
+    void SetFastSwapGridObserver( MHgTeleportFastSwapGridObserver* aObserver  );
+
+    /**
+     * Set indexes of items which can be closed.
+     * Copies item index array.
+     */
+    void SetCloseItemsL( RArray<TInt>& aItemIndex );
+
+    /**
+     * Checks if the item of given index is closable
+     */
+    TBool CanCloseItem( TInt aItemIndex );
+
+    /**
+     * Checks if the given item's close icon has been tapped.
+     */
+    TBool IsItemCloseHit( TInt aItemIndex );
+
+    /**
+     * Resets index of the item that has been close icon hit
+     */
+    void ResetCloseHit();
+    
+    /**
+     * Sets grid behaviour
+     * 
+     * @param  aBehaviour  behaviour to be set
+     */
+    void SetGridBehaviour( TFastSwapGridBehaviour aBehaviour );
+    
+    /**
+     * Getter for grid behaviour
+     * 
+     * @return  girds behaviour
+     */
+    TFastSwapGridBehaviour GridBehaviour();
+    
+    /**
+     * Shows highlight. In touch only behaviour highlight
+     * will be shown only for ammount of time.
+     */
+    void ShowHighlight();
+    
+    /**
+     * Hides highlight.
+     */
+    void HideHighlight();
+    
+    /**
+     * Checks if the highlight is currently visible.
+     * 
+     * @return  ETrue  if highlight is visible
+     *          EFalse if highlight is not visible
+     */
+    TBool IsHighlightVisible();
+    
+    /**
+     * Sets visible view, items outside of view will not be drawn
+     */
+    void SetVisibleViewRect( const TRect aRect );
+    
+    /**
+     * Returns visible view. Items outside of visible rectangle are not drawn.
+     */
+    TRect VisibleViewRect();
+
+private: // From CAknGrid
+    virtual void CreateItemDrawerL();
+
+private: // New functions
+    
+    /**
+     * Loads close icon bitmap and mask
+     */
+    void LoadCloseIcon();
+    
+    /**
+     * Redraws grid and parent controls
+     */
+    void Redraw();
+    
+private: // Data
+    // Background context for grid
+    CAknsFrameBackgroundControlContext* iBgContext;
+    
+    // Close icon handling
+    RArray<TInt> iCloseItems;
+    TInt iCloseIconHitIdx;
+    MHgTeleportFastSwapGridObserver* iFastSwapGridObserver;
+
+    // Highlight handling
+    TFastSwapGridBehaviour iBehaviour;
+    TBool iHighlightVisible;
+    
+    // Visible view rectangle (horizontal scrolling support)
+    TRect iVisibleViewRect;
+    };
+
+
+
+/**
+ * Custom item drawer for drawing grid items
+ */
+class CHgTeleportGridItemDrawer: public CFormattedCellListBoxItemDrawer
+    {
+
+public: // Constructor and destructor
+    CHgTeleportGridItemDrawer( CHgTeleportFastSwapGrid* aGrid,
+                               CFormattedCellListBoxData* aData );
+    ~CHgTeleportGridItemDrawer();
+
+public: // New functions
+
+    /**
+     * Sets close icon drawn for items that can be closed.
+     * Ownership transferred.
+     */
+    void SetCloseIcon( CFbsBitmap* aBmp, CFbsBitmap* aMask );
+
+    /**
+     * Returns close icon coordinates for the given item rectangle
+     */
+    TRect GetCloseIconRect( const TRect& aItemRect ) const;
+    
+    /**
+     * Sets screen offset for the item drawer to not draw items on the
+     * grid edges
+     */
+    void SetEdgeOffset( TInt aLeftOffset, TInt aRightOffset );
+
+private: // From CFormattedCellListBoxItemDrawer
+    void DrawActualItem( TInt aItemIndex, const TRect& aActualItemRect,
+                         TBool aItemIsCurrent, TBool aViewIsEmphasized,
+                         TBool aViewIsDimmed, TBool aItemIsSelected ) const;
+private: // New functions
+    /**
+     * Checks if the item rectangle is visible in the view.
+     * 
+     * @param   aItemRect  rectangle of the item to be checked 
+     * @return  ETrue      if rectangle is fully or partially visible
+     *          EFalse     if rectangle is not visible
+     */
+    TBool IsItemRectVisible( const TRect& aItemRect ) const;
+    
+private: // Data
+    // Not owned
+    CHgTeleportFastSwapGrid* iGrid;
+    // Owned
+    CFbsBitmap* iCloseIcon;
+    CFbsBitmap* iCloseIconMask;
+    
+    TRect iScreenRect;
+    TInt iLeftOffset;
+    TInt iRightOffset;
+    };
+
+
+
+/**
+ * Timer class for handling highlight bevaiour
+ */
+class CHgTeleportFastSwapTimer : public CTimer
+    {
+public:
+    // Constructor
+    CHgTeleportFastSwapTimer( MHgTeleportFastSwapTimerObserver& aObserver );
+    // Destructor
+    ~CHgTeleportFastSwapTimer();
+    // 2nd phase constructor
+    void ConstructL();
+    
+private: // From CTimer
+    void RunL();
+    
+private: // Data
+    MHgTeleportFastSwapTimerObserver* iObserver; // not own
+    };
+
+#endif /* HGTELEPORTFASTSWAPGRID_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportphysics.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,141 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportphysics.h
+ *  Part of     : Hg Teleport
+ *  Description : Application class
+ *  Version     : %version:  %
+ *
+ *  Copyright © 2009 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ * 
+ */
+
+#ifndef HGTELEPORTPHYSICS_H
+#define HGTELEPORTPHYSICS_H
+
+#include <e32base.h>
+#include <e32std.h>
+
+class MAknPhysicsObserver;
+
+/**
+ * Simple physics for grid animation
+ */
+class CHgTeleportPhysics : public CActive
+    {
+public:
+    /*
+     * Destructor
+     */
+    ~CHgTeleportPhysics();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CHgTeleportPhysics* NewL( MAknPhysicsObserver& aObserver );
+
+    /**
+     * Two-phased constructor.
+     */
+    static CHgTeleportPhysics* NewLC( MAknPhysicsObserver& aObserver );
+
+public: // New functions
+    
+    /**
+     * Starts animation
+     * 
+     * @param  aDrag       next drag point
+     * @param  aStartTime  when animation should be started
+     */
+    void StartPhysics( const TPoint& aTarget );
+
+    /**
+     * Stops animation
+     */
+    void StopPhysics();
+    
+private:
+    
+    /**
+     * C++ constructor
+     */
+    CHgTeleportPhysics( MAknPhysicsObserver& aObserver );
+
+    /**
+     * Second-phase constructor
+     */
+    void ConstructL();
+
+private: // From CActive
+    
+    /**
+     * Handles completion
+     */
+    void RunL();
+
+    /**
+     * Called when cancelled
+     */
+    void DoCancel();
+
+    /**
+     * Hanldes error
+     */
+    TInt RunError( TInt aError );
+    
+private: // New functions
+    
+    /**
+     * Calculates animation steps
+     */
+    TInt CalculateAnimationSteps( const TPoint& aTarget );
+
+private:
+
+    enum TPhysicsStatus
+        {
+        EStopped,
+        ERunning,
+        EFinished
+        };
+    
+    /**
+     * Observer
+     */
+    MAknPhysicsObserver& iObserver;
+    
+    /**
+     * Animation timer
+     */
+    RTimer iTimer;
+    
+    /**
+     * Animation state
+     */
+    TPhysicsStatus iPhysicsState;
+    
+    /**
+     * Controls animation refresh rate
+     */
+    TTimeIntervalMicroSeconds32 iAnimationTickTime;
+    
+    /**
+     * Animation ticks counter
+     */
+    TInt iAnimationTicks;
+    
+    /**
+     * Offset of how much view should be moved
+     */
+    RArray<TPoint> iAnimationSteps;
+
+    };
+
+#endif // HGTELEPORTPHYSICS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportphysicsengine.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,117 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportphysicsengine.h
+ *  Part of     : Hg Teleport
+ *  Description : Teleport physic engine
+ *  Version     : %version:  3 %
+ *
+ *  Copyright © 2009 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#ifndef HGTELEPORTPHYSICSENGINE_H_
+#define HGTELEPORTPHYSICSENGINE_H_
+
+#include <e32base.h>
+#include <akntouchgesturefw.h>
+// CLASS DECLARATION
+class CAknPhysics;
+class CHgTeleportPhysics;
+/**
+ * Teleport physic engine implementation
+ */
+class CHgTeleportPhysicsEngine: public CBase
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CHgTeleportPhysicsEngine();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CHgTeleportPhysicsEngine* NewL(MAknPhysicsObserver& aPhysicObserver,
+            CCoeControl& aViewControl);
+
+    /**
+     * Two-phased constructor.
+     */
+    static CHgTeleportPhysicsEngine* NewLC(MAknPhysicsObserver& aPhysicObserver,
+            CCoeControl& aViewControl);
+
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     */
+    CHgTeleportPhysicsEngine();
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL(MAknPhysicsObserver& aPhysicObserver,
+            CCoeControl& aViewControl);
+    
+    
+public:
+    /**
+     * Implements drag gesture handling
+     * @param aEvent - drag event
+     */
+    void HandleDragEvent(AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent);
+    
+    /**
+     */
+    TBool IsRunning() const;
+    
+    /**
+     */
+    void Stop();
+    
+    /**
+     * Initialize animation between current position and destination point
+     * @param aPoint - destination point 
+     */
+    void AnimateToTarget(const TPoint& aPoint);
+    
+    /**
+     * 
+     * @param aWorldSize Physics world size.
+     * @param aViewSize Physics (visible) view size.
+     * @param aLandscape ETrue if physics should work in landscape.     
+     **/
+    void ReInitPhysicsL(const TSize& aWorldSize, 
+                        const TSize& aViewSize,
+                        TBool aLandscape);
+    
+private:
+    /**
+     * Physics. 
+     * Own.
+     */
+    CAknPhysics* iPhysics;
+
+    /**
+     * Drag start time
+     */
+    TTime iStartTime;
+    
+    /**
+     * Teleport physics for item switch animation
+     */
+    CHgTeleportPhysics* iTeleportPhysics;
+
+    };
+
+#endif /* HGTELEPORTPHYSICSENGINE_H_*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/inc/hgteleportuid.hrh	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,25 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportappuid.hrh
+ *  Part of     : Hg Teleport
+ *  Description : Teleport application's UID3
+ *  Version     : %version: 5 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#ifndef HGTELEPORTAPPUID_HRH
+#define HGTELEPORTAPPUID_HRH
+
+#define KHgTeleportAppUidValue      0x20016BF0
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/loc/taskswitcher.loc	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,51 @@
+/*
+* ============================================================================
+*  Name        : taskswitcher.loc
+*  Part of     : Task Switcher
+*  Description : Task Switcher application's localization texts
+*  Version     : %version: 2 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* 
+*/
+
+//d:Popup menu item text
+//d:Activate selected application
+//l:list_single_touch_menu_pane_t1
+//r:5.0
+//
+#define qtn_task_switcher_popup_open_app "Activate"
+
+//d:Popup menu item text
+//d:Close selected application
+//l:list_single_touch_menu_pane_t1
+//r:5.0
+//
+#define qtn_task_switcher_popup_close_app "Close"
+
+//d:Popup menu item text
+//d:Close all application
+//l:list_single_touch_menu_pane_t1
+//r:5.0
+//
+#define qtn_task_switcher_popup_close_all "Close all"
+
+//d:Text for heading pane above the task swapper
+//l:heading_pane_t1
+//r:5.0
+//
+#define qtn_task_switcher_heading_applications "Open applications"
+
+//d:Text for appliactions that has no name
+//l:none
+//r:5.0
+//
+#define qtn_task_switcher_default_task_name "No name"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleport.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,45 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleport.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Main cpp of application. Definition of start function
+ *  Version     : %version: 5 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#include <eikstart.h>
+
+#include "hgteleportapplication.h"
+
+// -----------------------------------------------------------------------------
+// NewApplication
+// Create main class of application
+// -----------------------------------------------------------------------------
+//
+CApaApplication* NewApplication( )
+    {
+    return new CHgTeleportApplication;
+    }
+
+// -----------------------------------------------------------------------------
+// E32Main
+// Application enty point.
+// -----------------------------------------------------------------------------
+//
+TInt E32Main( )
+    {
+    return EikStart::RunApplication( NewApplication );
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleportapplication.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,51 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportapplication.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Application class
+ *  Version     : %version: 5 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ * 
+ */
+
+#include "hgteleportdocument.h"
+#include "hgteleportapplication.h"
+#include "hgteleportuid.hrh"
+
+// UID for the application, this should correspond
+// to the uid defined in the mmp file
+static const TUid KUidHgTeleportApp = { KHgTeleportAppUidValue };
+
+// -----------------------------------------------------------------------------
+// CHgTeleportApplication::CreateDocumentL( )
+// Create a CApaDocument object and return a pointer to it
+// -----------------------------------------------------------------------------
+//
+CApaDocument* CHgTeleportApplication::CreateDocumentL( )
+    {
+    CApaDocument* document = CHgTeleportDocument::NewL( *this );
+    return document;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportApplication::AppDllUid( )
+// Returns the application DLL UID value
+// -----------------------------------------------------------------------------
+//
+TUid CHgTeleportApplication::AppDllUid( ) const
+    {
+    // Return the UID for the hgteleport application
+    return KUidHgTeleportApp;
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleportappui.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,582 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportappui.cpp
+ *  Part of     : Hg Teleport
+ *  Description : AppUi class
+ *  Version     : %version: sa1spcx1#55 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#include "hgteleportappui.h"
+#include "hgteleportappview.h"
+#include "hgteleportapplogging.h"
+#include "hgteleportdevicestate.h"
+#include "hgteleportuid.hrh"
+#include "hgteleportcommands.hrh"
+#include <akntitle.h>
+#include <hlplch.h>
+#include <avkon.rsg>
+#include <bautils.h>
+#include <AknUtils.h>
+#include <hgteleport.rsg>
+#include <pslninternalcrkeys.h>
+#include <oommonitorsession.h>
+#include <hal.h>
+#include <hal_data.h>
+#include <akntranseffect.h>
+
+
+// AknCapServer UID, used for P&S category
+const TUid KTeleportStateCategory = { 0x10207218 };
+
+// Teleport UI, used as P&S key
+const TInt KTeleportStateKey = KHgTeleportAppUidValue;
+
+// Values for Teleport launching P&S
+const TInt KTeleportBackgroundValue = 1;
+const TInt KTeleportForegroundValue = KTeleportBackgroundValue << 1;
+const TInt KTeleportShortAppKeyPressed = KTeleportForegroundValue << 1;
+const TInt KTeleportLongAppKeyPressed = KTeleportShortAppKeyPressed << 1;
+
+//short/long App key values 
+const TInt KAppKeyTypeShort = 1;
+const TInt KAppKeyTypeLong = 2;
+
+//values for checking the OOM
+const TInt KMemoryRequestAmountInBytes = 524288;
+const TInt KMinMemoryAmountInBytes = 524288;
+const TInt KMemoryToBeReservedInBytes = 524288; // 512 KB
+
+// time to wait before sending the task to background
+// (must give time to animation)
+const TInt KWaitBeforeGoingToBackground = 100000;
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::ConstructL()
+// ConstructL is called by the application framework
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::ConstructL()
+    {
+    HGLOG_CONTEXT( CHgTeleportAppUi::ConstructL, HGLOG_LOCAL );
+    HGLOG_IN();
+
+#ifdef _DEBUG
+    // create log folder
+	_LIT( KLogPath, "c:\\logs\\teleport\\" );
+	RFs fs;
+	if ( fs.Connect() == KErrNone )
+		{
+		fs.MkDirAll( KLogPath );
+		fs.Close();
+		}
+#endif
+
+    // Initialise app UI with standard value.
+    BaseConstructL( CAknAppUi::EAknEnableSkin | CAknAppUi::EAknEnableMSK );
+
+#ifndef _DEBUG
+    // set as system application (in release build) so we never get closed
+    iEikonEnv->SetSystem( ETrue );
+#endif
+
+    //Initialize effects change observation
+    iThemeEffectsEnabledWatcher =
+        CHgCenrepListener::NewL( KCRUidThemes, KThemesTransitionEffects, *this );
+    CenrepChanged( KThemesTransitionEffects, iThemeEffectsEnabledWatcher->Value() );
+    
+    // Hide status pane
+    StatusPane()->MakeVisible( EFalse );
+
+    // Change CBA if needed, default is non-touch in rss
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        Cba()->SetCommandSetL( R_HGTELEPORT_CBA_TOUCH );
+        }
+    Cba()->MakeVisible(EFalse);
+
+    // Create timer
+    iGoToBackgroundTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+
+    // Create commonly used instances (device state only?)
+    iDeviceState = CHgTeleportDeviceState::NewL();
+
+    // Create UI
+    iAppView = CHgTeleportAppView::NewL( ApplicationRect(), *iDeviceState );
+    AddToStackL( iAppView );
+    
+    //Enable effects
+    GfxTransEffect::Enable();
+    GfxTransEffect::Register(iAppView,TUid::Uid(KHgTeleportAppUidValue));
+    GfxTransEffect::SetTransitionObserver(this);
+
+    // Listen for change in the value of the teleport state property.
+    iPropListener = new ( ELeave ) CHgPropertyListener(
+            KTeleportStateCategory, KTeleportStateKey, *this );
+
+    // Initialise the application task object with the window group id of
+    // our application ( so that it represent our app )
+    iApplicationTask.SetWgId( iCoeEnv->RootWin().Identifier() );
+
+    // And finally, go to background.
+    MoveAppToBackground( AknTransEffect::ENone );
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::CHgTeleportAppUi()
+// Perform the first phase of two phase construction
+// -----------------------------------------------------------------------------
+//
+CHgTeleportAppUi::CHgTeleportAppUi(): iForeground( ETrue ),
+                                      iApplicationTask( iCoeEnv->WsSession() )
+    {
+    // no implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::~CHgTeleportAppUi()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CHgTeleportAppUi::~CHgTeleportAppUi()
+    {
+    if( GfxTransEffect::IsRegistered( iAppView ) )
+        {
+        GfxTransEffect::Deregister(iAppView);
+        
+        }
+    GfxTransEffect::SetTransitionObserver(0);
+    
+    delete iGoToBackgroundTimer;
+    delete iPropListener;
+
+    // destroy UI first
+    if ( iAppView )
+        {
+        RemoveFromStack( iAppView );
+        delete iAppView;
+        }
+
+    delete iDeviceState;
+    delete iMemAllocBuf;
+    delete iThemeEffectsEnabledWatcher;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::EffectsEnabled
+// -----------------------------------------------------------------------------
+//
+TBool CHgTeleportAppUi::EffectsEnabled() const
+    {
+    return iEffectsEnabled;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::StartTransion
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::StartTransion( TUint aTransitionType )
+    {
+    if( !EffectsEnabled() )
+        {
+        return;
+        }
+    switch(aTransitionType)
+        {
+    case AknTransEffect::EApplicationStart:
+        StartTransition( aTransitionType, 
+                         ETrue, 
+                         EFalse, 
+                         CAknTransitionUtils::EForceVisible);
+        break;
+    case AknTransEffect::EApplicationExit:
+        StartTransition( aTransitionType, 
+                         EFalse, 
+                         EFalse, 
+                         CAknTransitionUtils::EForceInvisible );
+        break;
+    case AknTransEffect::EApplicationStartRect:
+        StartTransition( aTransitionType, 
+                         EFalse, 
+                         ETrue, 
+                         CAknTransitionUtils::EForceInvisible );
+        break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::StartTransition
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::StartTransition( TUint aTranstionId,
+                                        TBool aVisibility,
+                                        TBool aLayers, 
+                                        TUint aSubCom )
+    {
+    const TDesC8* ptr = reinterpret_cast<const TDesC8*>(iAppView);
+    GfxTransEffect::Abort(iAppView);
+    GfxTransEffect::Begin( iAppView, aTranstionId );
+    GfxTransEffect::SetDemarcation( iAppView, iAppView->Rect() );
+    GfxTransEffect::NotifyExternalState( ECaptureComponentsBegin, ptr );
+    iAppView->MakeVisible( aVisibility );
+    CAknTransitionUtils::MakeVisibleSubComponents( 
+        iAppView,
+        static_cast<CAknTransitionUtils::TMakeVisibleSubComponentsInfo>(aSubCom) );
+    GfxTransEffect::NotifyExternalState( ECaptureComponentsEnd, ptr );
+    GfxTransEffect::End( iAppView );
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::TransitionFinished
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::TransitionFinished(const CCoeControl* aControl, 
+                                          TUint aAction)
+    {
+    /*if( aControl == iAppView )
+        {
+		@TODO IMPLEMENT
+        }*/
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::HandleCommandL()
+// Takes care of command handling.
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::HandleCommandL( TInt aCommand )
+    {
+    switch ( aCommand )
+        {
+        case EAknCmdExit:
+        case EEikCmdExit:
+            Exit();
+            break;
+
+        case EAknSoftkeyExit:
+        case EAknSoftkeyBack:
+            // RSK => just hide
+            MoveAppToBackground( AknTransEffect::EApplicationExit );
+            break;
+
+        case EHgTeleportCmdHelp:
+            {
+            MoveAppToBackground( AknTransEffect::EApplicationExit );
+            CArrayFix<TCoeHelpContext>* buf = CCoeAppUi::AppHelpContextL();
+            HlpLauncher::LaunchHelpApplicationL( iCoeEnv->WsSession(), buf );
+            }
+            break;
+
+        case EAknSoftkeySelect:
+            {
+            // select is generated by lsk and msk (see the resource file)
+            // Simulate a middle key press to the controls.
+            // Note that SimulateKeyEventL must not be used here or else it
+            // will end up in an infinite loop.
+            TKeyEvent keyEvent;
+            keyEvent.iCode = EKeyOK;
+            keyEvent.iScanCode = EStdKeyDevice3;
+            keyEvent.iModifiers = keyEvent.iRepeats = 0;
+            iAppView->OfferKeyEventL( keyEvent, EEventKeyDown );
+            iAppView->OfferKeyEventL( keyEvent, EEventKey );
+            iAppView->OfferKeyEventL( keyEvent, EEventKeyUp );
+            }
+            break;
+
+        default:
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::HandleForegroundEventL
+// Called by the system when the app is moved to foreground or background.
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::HandleForegroundEventL( TBool aForeground )
+    {
+    HGLOG_CONTEXT( HandleForegroundEventL, HGLOG_LOCAL );
+    HGLOG1_IN( "aForeground = %d", aForeground );
+
+    // These calls may be redundant but the functions will do nothing if the
+    // state has already been changed.
+    // Both this function and the 'manual' MoveAppTo functions must fire the events
+    // because in some cases only one of them will run (e.g. when bringing to foreground
+    // not with the hw key but by other means etc.)
+    if ( aForeground )
+        {
+        HandleSwitchToForegroundEvent();
+        }
+    else
+        {
+        HandleSwitchToBackgroundEvent();
+        }
+
+    // Call Base class method
+    CAknAppUi::HandleForegroundEventL( aForeground );
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::PropertyChanged
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::PropertyChanged( TUid aCategory, TUint aKey )
+    {
+    HGLOG_CONTEXT( PropertyChanged, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    TInt value( 0 );
+
+    if ( RProperty::Get( aCategory, aKey, value ) == KErrNone )
+        {
+        if ( iForeground && (value & KTeleportBackgroundValue) )
+            {
+            MoveAppToBackground( AknTransEffect::EApplicationExit );
+            }
+        else if ( !iForeground && (value & KTeleportForegroundValue) )
+            {
+            MoveAppToForeground( AknTransEffect::EApplicationStart );
+            }
+        else if( value & KTeleportLongAppKeyPressed )
+            {
+            if(!iForeground)
+                {
+                MoveAppToBackground( AknTransEffect::EApplicationExit );
+                }
+            else
+                {
+                iAppView->HandleAppKey(KAppKeyTypeLong);
+                }
+            }
+        else if(  value & KTeleportShortAppKeyPressed )
+            {
+            iAppView->HandleAppKey(KAppKeyTypeShort);
+            }
+        }
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::HandleResourceChangeL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::HandleResourceChangeL( TInt aType )
+    {
+    // Must call base class implementation first,
+    // sizes from LayoutMetricsRect etc. will only be correct after this.
+    CAknAppUi::HandleResourceChangeL( aType );
+    if( aType == KEikDynamicLayoutVariantSwitch && iAppView )
+        {
+        iAppView->SetRect( ApplicationRect() );
+        }
+    // forward event
+    iDeviceState->HandleResourceChange( aType );
+    iAppView->HandleResourceChange( aType );
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::MoveAppToBackground()
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::MoveAppToBackground( TUint aTransitionType )
+    {
+    HGLOG_CONTEXT( MoveAppToBackground, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    if ( AknTransEffect::ENone == aTransitionType || !EffectsEnabled() )
+        {
+        GoToBackgroundTimerCallback( this );
+        }
+    else
+        {
+        StartTransion(AknTransEffect::EApplicationExit);
+        iGoToBackgroundTimer->Cancel();
+        iGoToBackgroundTimer->Start( 
+                KWaitBeforeGoingToBackground, 
+                0,
+                TCallBack( GoToBackgroundTimerCallback, this ) );
+        }
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::CenrepChanged
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::CenrepChanged( TUint32 aKey, TInt aNewValue )
+    {
+    iEffectsEnabled = !(aNewValue & AknTransEffect::EFullScreenTransitionsOff);
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::GoToBackgroundTimerCallback
+// -----------------------------------------------------------------------------
+//
+TInt CHgTeleportAppUi::GoToBackgroundTimerCallback( TAny* aParam )
+    {
+    CHgTeleportAppUi* self = static_cast<CHgTeleportAppUi*>( aParam );
+    if ( self->iGoToBackgroundTimer )
+        {
+        self->iGoToBackgroundTimer->Cancel();
+        }
+
+    // Request window server to bring our application
+    // to background
+    self->iApplicationTask.SendToBackground();
+
+    // Notify
+    self->HandleSwitchToBackgroundEvent();
+
+    return 0;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::MoveAppToForeground()
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::MoveAppToForeground( TUint  /*aTransitionType*/ )
+    {
+    HGLOG_CONTEXT( MoveAppToForeground, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    // Request window server to bring our application
+    // to foreground
+    iApplicationTask.BringToForeground();
+
+    // Notify
+    HandleSwitchToForegroundEvent();
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::HandleSwitchToBackgroundEvent
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::HandleSwitchToBackgroundEvent()
+    {
+    HGLOG_CONTEXT( HandleSwitchToBackgroundEvent, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    // must not do anything if iForeground is already up-to-date
+    // exclude cases with dialogs like power menu, memory card
+    if( iForeground && !IsFaded() )  
+        {
+        iForeground = EFalse;
+        SetTeleportStateProperty( KTeleportBackgroundValue );
+
+        //allocating extra memory space
+        if ( !iMemAllocBuf )
+            {
+            iMemAllocBuf =
+                (TUint8*) User::Alloc( KMemoryToBeReservedInBytes );
+            }
+
+        // notify view
+        iAppView->HandleSwitchToBackgroundEvent();
+        }
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::HandleSwitchToForegroundEvent
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::HandleSwitchToForegroundEvent()
+    {
+    HGLOG_CONTEXT( HandleSwitchToForegroundEvent, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    // must not do anything if iForeground is already up-to-date
+    if ( !iForeground )
+        {
+        //freeing extra memory space
+        delete iMemAllocBuf;
+        iMemAllocBuf = NULL;
+
+        TInt freeRamMemory;
+        HAL::Get( HALData::EMemoryRAMFree, freeRamMemory );
+        if ( freeRamMemory <= KMinMemoryAmountInBytes )
+            {
+            FreeMemoryRequest();
+            }
+
+        iForeground = ETrue;
+        SetTeleportStateProperty( KTeleportForegroundValue );
+
+        // notify view
+        iAppView->HandleSwitchToForegroundEvent();
+        }
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::SetTeleportShowProperty
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::SetTeleportStateProperty( TInt aValue )
+    {
+    HGLOG_CONTEXT( CHgTeleportAppUi::SetTeleportShowProperty, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    if ( RProperty::Set(
+            KTeleportStateCategory, KTeleportStateKey, aValue ) != KErrNone )
+        {
+        TInt error = RProperty::Define(
+                KTeleportStateCategory, KTeleportStateKey, RProperty::EInt );
+        if ( error != KErrNone )
+            {
+            HGLOG1( HGLOG_INFO, "RProperty::Define Error: %d", error );
+            }
+
+        error = RProperty::Set( KTeleportStateCategory, KTeleportStateKey, aValue );
+        if ( error != KErrNone )
+            {
+            HGLOG1( HGLOG_INFO, "RProperty::Set Error: %d", error );
+            }
+        }
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppUi::FreeMemoryRequest
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppUi::FreeMemoryRequest()
+    {
+    HGLOG_CONTEXT( CHgTeleportAppUi::FreeMemoryRequest, HGLOG_LOCAL );
+    HGLOG_IN();
+    ROomMonitorSession oomMs;
+    TInt error = oomMs.Connect();
+    if ( error != KErrNone)
+        {
+        HGLOG1( HGLOG_INFO, "Could not connect to ROomMonitorSession, %d", error );
+        }
+    else
+        {
+        oomMs.RequestFreeMemory( KMemoryRequestAmountInBytes );
+        oomMs.Close();
+        }
+    HGLOG_OUT();
+    }
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleportappview.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,734 @@
+ /*
+ * ============================================================================
+ *  Name        : hgteleportappview.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Teleport view class
+ *  Version     : %version: sa1spcx1#54 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#include <AknUtils.h>
+#include <AknsUtils.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <AknsFrameBackgroundControlContext.h>
+#include <AknsDrawUtils.h>
+#include <eikmenub.h>
+#include <gfxtranseffect/gfxtranseffect.h>
+#include <akntransitionutils.h>
+#include <akntranseffect.h>
+#include <aknPopupHeadingPane.h>
+#include <StringLoader.h>
+#include <hgteleport.rsg>
+#include <touchfeedback.h>
+
+#include "hgteleportappview.h"
+#include "hgteleportappui.h"
+#include "hgteleportapplogging.h"
+#include "hgteleportfastswaparea.h"
+#include "hgteleporteventcontroler.h"
+#include "hgteleportuid.hrh"
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::NewL
+// -----------------------------------------------------------------------------
+//
+CHgTeleportAppView* CHgTeleportAppView::NewL( const TRect& aRect,
+        CHgTeleportDeviceState& aDeviceState )
+    {
+    CHgTeleportAppView* self = CHgTeleportAppView::NewLC( aRect, aDeviceState );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::NewLC
+// -----------------------------------------------------------------------------
+//
+CHgTeleportAppView* CHgTeleportAppView::NewLC( const TRect& aRect,
+        CHgTeleportDeviceState& aDeviceState )
+    {
+    CHgTeleportAppView* self = new (ELeave) CHgTeleportAppView( aDeviceState );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::CHgTeleportAppView
+// -----------------------------------------------------------------------------
+//
+CHgTeleportAppView::CHgTeleportAppView(CHgTeleportDeviceState& aDeviceState)
+        : iDeviceState( aDeviceState )
+    {
+    // no implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// InvalidateWindows
+// -----------------------------------------------------------------------------
+//
+static void InvalidateWindows( CCoeControl* aControl )
+    {
+    if ( aControl )
+        {
+        if ( aControl->OwnsWindow() )
+            {
+            static_cast<RWindow*>( aControl->DrawableWindow() )->ClearRedrawStore();
+            }
+
+        for ( TInt i = aControl->CountComponentControls() - 1; i >= 0; --i )
+            {
+            InvalidateWindows( aControl->ComponentControl( i ) );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::~CHgTeleportAppView
+// -----------------------------------------------------------------------------
+//
+CHgTeleportAppView::~CHgTeleportAppView()
+    {
+    GfxTransEffect::SetTransitionObserver( 0 );
+    if ( GfxTransEffect::IsRegistered( this ) )
+        {
+        MakeVisible( EFalse ); 
+        CAknTransitionUtils::MakeVisibleSubComponents( this,
+            CAknTransitionUtils::EForceInvisible );
+        GfxTransEffect::Deregister( this );
+        }
+    delete iBgContext;
+    delete iFastSwapArea;
+    delete iAppsHeading;
+    
+    delete iEvtHandler;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::ConstructL( const TRect& aRect )
+    {
+    HGLOG_CONTEXT( CHgTeleportAppView::ConstructL, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    // Create a window for this application view
+    CreateWindowL();
+
+    // Store rect
+    TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+    TAknLayoutRect mainView;
+    mainView.LayoutRect( aRect,
+            AknLayoutScalable_Apps::main_tport_pane( variety ) );
+    iViewRect = mainView.Rect();
+
+    // Background control context is for a frame
+    UpdatePopupRects();
+    iBgContext = CAknsFrameBackgroundControlContext::NewL(
+               KAknsIIDQsnFrPopup,
+               iBgContextOuterRect,
+               iBgContextInnerRect,
+               ETrue );
+    iBgContext->SetFrameRects(iBgContextOuterRect, iBgContextInnerRect);
+    iBgContext->SetCenter( KAknsIIDQsnFrPopupCenter );
+
+    HGLOG4( HGLOG_INFO, "view rect = %d %d %d %d",
+        iViewRect.iTl.iX, iViewRect.iTl.iY,
+        iViewRect.iBr.iX, iViewRect.iBr.iY );
+
+    // Create components
+    CreateControlsL();
+
+    // Hide 'active applications' item in Options menu
+    CEikMenuBar* menub = iEikonEnv->AppUiFactory()->MenuBar();
+    if ( menub )
+        {
+        menub->SetMenuType( CEikMenuBar::EMenuOptionsNoTaskSwapper );
+        }
+
+    // Register for notifications about orientation etc. changes
+    iDeviceState.AddObserverL( *this, MHgDeviceStateObserver::EAny );
+    SetRect( iViewRect );
+    //SetExtentToWholeScreen();
+    iViewRect = Rect();
+    // try to enable window transparency
+    if( CAknEnv::Static()->TransparencyEnabled() )
+        {
+        Window().SetRequiredDisplayMode( EColor16MA );
+        if ( Window().SetTransparencyAlphaChannel() == KErrNone )
+            {
+            Window().SetBackgroundColor( ~0 );
+            }
+        }
+    
+    DrawableWindow()->EnableBackup(EWindowBackupFullScreen);
+    Window().SetOrdinalPosition( 0, ECoeWinPriorityNormal );
+    SetComponentsToInheritVisibility(ETrue);
+    MakeVisible(ETrue);
+    // Ready to be drawn
+    ActivateL();
+    
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::DisableAppSwitchEffects
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::DisableAppSwitchEffects()
+    {
+    TInt flags = AknTransEffect::TParameter::ENoEffects;
+    GfxTransEffect::BeginFullScreen(
+        AknTransEffect::ENone,
+        TRect(0,0,0,0),
+        AknTransEffect::EParameterType,
+        AknTransEffect::GfxTransParam( TUid::Uid(KHgTeleportAppUidValue), flags ) );
+    }
+        
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::GetPopupRects
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::UpdatePopupRects(  )
+    {
+    HGLOG_CONTEXT( UpdatePopupRects, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+    
+    TAknLayoutRect bgTport;
+    bgTport.LayoutRect( iViewRect,
+        AknLayoutScalable_Apps::bg_popup_window_pane_cp01( variety ) );
+    iBgContextOuterRect = bgTport.Rect();
+    bgTport.LayoutRect( iBgContextOuterRect,
+        AknLayoutScalable_Avkon::aid_inside_area_window_primary( variety ) );
+    iBgContextInnerRect = bgTport.Rect();
+    HGLOG4( HGLOG_INFO, "outer rect for popup = %d %d %d %d",
+            iBgContextOuterRect.iTl.iX, iBgContextOuterRect.iTl.iY,
+            iBgContextOuterRect.iBr.iX, iBgContextOuterRect.iBr.iY );
+    HGLOG4( HGLOG_INFO, "inner rect for popup = %d %d %d %d",
+            iBgContextInnerRect.iTl.iX, iBgContextInnerRect.iTl.iY,
+            iBgContextInnerRect.iBr.iX, iBgContextInnerRect.iBr.iY );
+   
+#ifdef TASKSWITCHER_USE_CUSTOM_LAYOUT
+    if ( iFastSwapArea )
+        {
+        iBgContextOuterRect = iFastSwapArea->Rect();
+        iBgContextInnerRect = iFastSwapArea->Rect();
+        }
+#endif
+    
+    HGLOG_OUT();
+    }
+    
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::CreateControlsL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::CreateControlsL()
+    {
+    RArray<TRect> rects;
+    CleanupClosePushL( rects );
+    rects.ReserveL( 2 ); // so appending in GetRects cannot fail
+    GetRects( rects );
+
+    iEvtHandler = CHgTeleportEventControler::NewL(*this, *this);
+    iFastSwapArea = CHgTeleportFastSwapArea::NewL(rects[1], *this,
+            iDeviceState, *iEvtHandler);
+    iAppsHeading = new ( ELeave ) CAknPopupHeadingPane;
+
+    iFastSwapArea->SetMopParent( this );
+    iFastSwapArea->SetFocusing( ETrue );
+    iFastSwapArea->Setup( *this );
+    iFastSwapArea->SetDataChangeObserver( this );
+    
+    iAppsHeading->SetContainerWindowL( *this );
+    iAppsHeading->ConstructL( KNullDesC() );
+    iAppsHeading->SetLayout( CAknPopupHeadingPane::EListHeadingPane ); 
+
+    //TODO: check why we need to set rect (set already in contructL)
+    iFastSwapArea->SetRect( rects[1] ); // cannot be before iAppsHeading constructL
+    iAppsHeading->SetRect( rects[0] );
+    
+    CleanupStack::PopAndDestroy( &rects );
+    
+    UpdateHeadingsL();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::GetRects
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::GetRects( RArray<TRect>& aRects )
+    {
+    HGLOG_CONTEXT( CHgTeleportAppView::GetRects, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+#ifndef TASKSWITCHER_USE_CUSTOM_LAYOUT
+    TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+    
+    TAknLayoutRect appsLabel;
+    TAknLayoutRect fastSwapAreaPane;
+
+    appsLabel.LayoutRect( iViewRect,
+            AknLayoutScalable_Apps::heading_pane_cp07( variety ) );
+    HGLOG4( HGLOG_INFO, "apps heading rect = %d %d %d %d",
+            appsLabel.Rect().iTl.iX, appsLabel.Rect().iTl.iY,
+            appsLabel.Rect().iBr.iX, appsLabel.Rect().iBr.iY );
+
+    
+    fastSwapAreaPane.LayoutRect( iViewRect,
+            AknLayoutScalable_Apps::tport_appsw_pane( variety ) );
+    HGLOG4( HGLOG_INFO, "fsw rect = %d %d %d %d",
+            fastSwapAreaPane.Rect().iTl.iX, fastSwapAreaPane.Rect().iTl.iY,
+            fastSwapAreaPane.Rect().iBr.iX, fastSwapAreaPane.Rect().iBr.iY );
+
+    aRects.Append( appsLabel.Rect() );
+    aRects.Append( fastSwapAreaPane.Rect() );
+#else
+    TRect tempRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, tempRect);
+    tempRect.iTl = TPoint(0,0);
+    TRect fastSwapRect, headingRect;
+    fastSwapRect.iTl = TPoint(KFswBorderSize, (tempRect.Height() - KFswItemHeight - KFswHeadingHeight) / 2 + KFswHeadingHeight);
+    fastSwapRect.iBr = TPoint(tempRect.iBr.iX - KFswBorderSize, fastSwapRect.iTl.iY + KFswItemHeight);
+    headingRect.iTl = TPoint(KFswBorderSize, fastSwapRect.iTl.iY - KFswHeadingHeight);
+    headingRect.iBr = TPoint(fastSwapRect.iBr.iX, fastSwapRect.iTl.iY);
+    aRects.Append( headingRect );
+    aRects.Append( fastSwapRect );
+#endif
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::SizeChanged
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::SizeChanged()
+    {
+    HGLOG_CONTEXT( CHgTeleportAppView::SizeChanged, HGLOG_LOCAL );
+    HGLOG_IN();
+    UpdatePopupRects();
+    iBgContext->SetFrameRects(iBgContextOuterRect, iBgContextInnerRect);
+    if ( iFastSwapArea && iAppsHeading  )
+        {
+        RArray<TRect> rects;
+        // make sure that appending in GetRect cannot fail
+        if ( rects.Reserve( 2 ) == KErrNone )
+            {
+            GetRects( rects );
+            iAppsHeading->SetRect( rects[0] );
+            iFastSwapArea->SetRect( rects[1] );
+            
+            DrawDeferred();
+            }
+        rects.Close();
+
+        // Focus jumps back to fsw
+        ChangeFocus( iFastSwapArea );
+        }
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::Draw
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::Draw( const TRect& aRect ) const
+    {
+    if ( aRect == Rect() )
+        {
+        CWindowGc& gc = SystemGc();
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+        AknsDrawUtils::DrawFrame( skin,
+               gc,
+               iBgContextOuterRect,
+               iBgContextInnerRect,
+               KAknsIIDQsnFrPopup,
+               KAknsIIDQsnFrPopupCenter );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::MopSupplyObject
+// -----------------------------------------------------------------------------
+//
+TTypeUid::Ptr CHgTeleportAppView::MopSupplyObject( TTypeUid aId )
+    {
+    if ( aId.iUid == MAknsControlContext::ETypeId )
+        {
+        return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+        }
+    return CCoeControl::MopSupplyObject( aId );
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::OfferKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CHgTeleportAppView::OfferKeyEventL(
+        const TKeyEvent& aKeyEvent,
+        TEventCode aType )
+    {
+    HGLOG_CONTEXT( OfferKeyEventL, HGLOG_LOCAL );
+    HGLOG2_IN( "iCode = %d type = %d", aKeyEvent.iCode, aType );
+
+    TKeyResponse result = EKeyWasNotConsumed;
+
+    // Always use the portrait version, the layout in landscape is now
+    // similar to portrait.
+    result = OfferKeyEventPortraitStyleL( aKeyEvent, aType );
+
+    // handle some other keys
+    if ( result == EKeyWasNotConsumed && aType == EEventKey )
+        {
+        switch ( aKeyEvent.iCode )
+            {
+            case EKeyYes: // send (green) key
+                result = EKeyWasConsumed;
+                break;
+            }
+        }
+
+    // forward to focused control if not yet handled
+    if ( result == EKeyWasNotConsumed && iFocused )
+        {
+        result = iFocused->OfferKeyEventL( aKeyEvent, aType );
+        }
+
+    HGLOG1_OUT( "response = %d", result );
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::OfferKeyEventPortraitStyleL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CHgTeleportAppView::OfferKeyEventPortraitStyleL(
+        const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/)
+    {
+    TKeyResponse result = EKeyWasNotConsumed;
+    return result;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::CountComponentControls
+// -----------------------------------------------------------------------------
+//
+TInt CHgTeleportAppView::CountComponentControls() const
+    {
+    return 2;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::ComponentControl
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CHgTeleportAppView::ComponentControl( TInt aIndex ) const
+    {
+    switch ( aIndex )
+        {
+        case 0:
+            return iFastSwapArea;
+        case 1:
+            return iAppsHeading;
+        default:
+            return NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::HandleSwitchToBackgroundEvent
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::HandleSwitchToBackgroundEvent()
+    {
+    // Stop animation and unfade
+    GfxTransEffect::Abort();
+    iPopupFader.FadeBehindPopup( this, NULL, EFalse );
+    
+    GfxTransEffect::Begin( this, 5);
+    // Forward event to interested controls
+    iFastSwapArea->HandleSwitchToBackgroundEvent();
+
+    // Hide
+    MakeVisible( EFalse );
+    //GfxTransEffect::NotifyExternalState( ENotifyGlobalAbort );
+    CAknTransitionUtils::MakeVisibleSubComponents( this,
+        CAknTransitionUtils::EForceInvisible );
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::HandleSwitchToForegroundEvent
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::HandleSwitchToForegroundEvent()
+    {
+    Window().Invalidate(Rect());
+    
+    // Fade behind the pop-up
+    iPopupFader.FadeBehindPopup( this, NULL, ETrue );
+
+    DrawDeferred(); // otherwise some parts may not be drawn properly
+
+    // Focus jumps back to fsw
+    ChangeFocus( iFastSwapArea );
+
+    // Forward event to interested controls
+    iFastSwapArea->HandleSwitchToForegroundEvent();
+
+    // Start animation
+    CHgTeleportAppUi* appui =
+        static_cast<CHgTeleportAppUi*>( iEikonEnv->AppUi() );
+    if ( appui->EffectsEnabled() )
+        {
+        InvalidateWindows( this );
+        appui->StartTransion(AknTransEffect::EApplicationStart);
+        }
+    else
+        {
+        CAknTransitionUtils::MakeVisibleSubComponents( this,
+            CAknTransitionUtils::EForceVisible );
+        MakeVisible( ETrue );
+        }
+    
+    DrawDeferred();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::ChangeFocus
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::ChangeFocus( CCoeControl* aNewFocusedControl )
+    {
+    if ( iFocused != aNewFocusedControl )
+        {
+        if ( iFocused )
+            {
+            iFocused->SetFocus( EFalse, EDrawNow );
+            }
+        iFocused = aNewFocusedControl;
+        if ( iFocused )
+            {
+            iFocused->SetFocus( ETrue, EDrawNow );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::HandleControlEventL
+// EEventRequestFocus must be handled to have proper focus change also with
+// pointer events.
+// Observed controls are the ganes list and grid.
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::HandleControlEventL( CCoeControl* aControl,
+        TCoeEvent aEventType )
+    {
+    switch ( aEventType )
+        {
+        case EEventRequestFocus:
+            // must use the parent because aControl is the ganes control
+            ChangeFocus( aControl->Parent() );
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::HandleDeviceStateChanged
+// Called when screen orientation, touch awareness, or the skin has been changed.
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::HandleDeviceStateChanged( TChangeType /*aChangeType*/ )
+    {
+    HGLOG_CONTEXT( HandleDeviceStateChanged, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    // Just set all the sizes, even when there is a skin change, because this will
+    // guarantee proper redraw also with the ganes controls.
+
+    iViewRect = Rect();
+    HGLOG4( HGLOG_INFO, "setting rect %d %d %d %d",
+        iViewRect.iTl.iX, iViewRect.iTl.iY,
+        iViewRect.iBr.iX, iViewRect.iBr.iY );
+    SetRect( iViewRect );
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::CountFadedComponents
+// -----------------------------------------------------------------------------
+//
+TInt CHgTeleportAppView::CountFadedComponents()
+    {
+    return 3;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::FadedComponent
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CHgTeleportAppView::FadedComponent( TInt aIndex )
+    {
+    // well, these are in fact the components that will _not_ be faded...
+    // Must return the bottom-level controls here, e.g. the ganes controls, not the wrappers over them.
+    switch ( aIndex )
+        {
+        case 0:
+            return this;
+        case 1:
+            return iFastSwapArea->GetChildControl();
+        case 2:
+            return iAppsHeading;
+//        case 3:
+//            return iEikonEnv->AppUiFactory()->Cba();
+        default:
+            return NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::HandlePointerEventL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::HandlePointerEventL( const TPointerEvent &aPointerEvent )
+    {
+    MTouchFeedback* feedback = MTouchFeedback::Instance();
+    if(0 != feedback &&
+       (TPointerEvent::EButton1Down == aPointerEvent.iType || 
+       TPointerEvent::EButton1Up == aPointerEvent.iType))
+        {
+        feedback->InstantFeedback(this,
+                                  ETouchFeedbackBasic, 
+                                  ETouchFeedbackVibra, 
+                                  aPointerEvent);
+        } 
+    iFastSwapArea->HandlePointerEventL(aPointerEvent);
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::DataChanged
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::DataChanged( CCoeControl* /*aWhere*/, TInt /*aNewCount*/ )
+    {
+    TRAP_IGNORE( UpdateHeadingsL() );
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::UpdateHeadingsL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::UpdateHeadingsL()
+    {
+#ifndef TASKSWITCHER_USE_CUSTOM_LAYOUT
+    HBufC* text = StringLoader::LoadLC(
+        R_TASK_SWITCHER_HEADING_APPLICATIONS );
+#else
+    _LIT( KTitle, "Task switcher" );
+    HBufC* text = KTitle().AllocLC();
+#endif
+    iAppsHeading->SetTextL( *text );
+    iAppsHeading->DrawDeferred();
+    CleanupStack::PopAndDestroy( text );
+
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::HandleAppKey
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::HandleAppKey(TInt aType)
+    {
+    iFastSwapArea->HandleAppKey(aType);
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::MoveOffset
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::MoveOffset(const TPoint& aOffset)
+    {
+    iFastSwapArea->MoveOffset(aOffset);
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::TapL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::TapL(const TPoint& aPoint)
+    {
+    if(iFastSwapArea->Rect().Contains(aPoint))
+        {
+        iFastSwapArea->TapL(aPoint);
+        }
+    else if( !iAppsHeading->Rect().Contains(aPoint))
+        {
+        //move task switcher to background
+        iEikonEnv->EikAppUi()->HandleCommandL(EAknSoftkeyExit);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::LongTapL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::LongTapL(const TPoint& aPoint)
+    {
+    if(iFastSwapArea->Rect().Contains(aPoint))
+        {
+        iFastSwapArea->LongTapL(aPoint);
+        }
+    else if( !iAppsHeading->Rect().Contains(aPoint))
+        {
+        //move task switcher to background
+        iEikonEnv->EikAppUi()->HandleCommandL(EAknSoftkeyExit);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::Drag()
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::Drag(const MAknTouchGestureFwDragEvent& aEvent)
+    {
+    iFastSwapArea->Drag(aEvent);
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::Stop
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportAppView::Stop()
+    {
+    iFastSwapArea->Stop();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportAppView::ViewPos
+// -----------------------------------------------------------------------------
+//
+TPoint CHgTeleportAppView::ViewPos() const
+    {
+    return iFastSwapArea->ViewPos();
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleportdevicestate.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,274 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportdevicestate.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Device state (touch mode, screen orientation) handler
+ *  Version     : %version: sa1spcx1#14 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ * Template version: 4.2
+ */
+
+#include "hgteleportdevicestate.h"
+#include <AknUtils.h>
+#include <hwrmdomainpskeys.h>
+
+#include "hgteleportapplogging.h"
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDeviceState::NewL
+// -----------------------------------------------------------------------------
+//
+CHgTeleportDeviceState* CHgTeleportDeviceState::NewL()
+    {
+    CHgTeleportDeviceState* self = new ( ELeave ) CHgTeleportDeviceState;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDeviceState::CHgTeleportDeviceState
+// -----------------------------------------------------------------------------
+//
+CHgTeleportDeviceState::CHgTeleportDeviceState()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDeviceState::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportDeviceState::ConstructL()
+    {
+    iFlipStatusObserver = new ( ELeave ) CHgPropertyListener(KPSUidHWRM,	
+		KHWRMFlipStatus, *this);
+    // check if touch is enabled or not
+    CheckTouchState();
+    // are we in portrait or landscape
+    CheckOrientation();
+    // checks the qwerty input mode.
+    CheckDeviceType();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDeviceState::~CHgTeleportDeviceState
+// -----------------------------------------------------------------------------
+//
+CHgTeleportDeviceState::~CHgTeleportDeviceState()
+    {
+    iObservers.Close();
+    delete iFlipStatusObserver;
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::HandleResourceChange
+// --------------------------------------------------------------------------
+//
+void CHgTeleportDeviceState::HandleResourceChange( TInt aType )
+    {
+    HGLOG_CONTEXT( HandleResourceChange, HGLOG_LOCAL );
+    HGLOG2_IN( "aType = %d (active count = %d)", aType, iResChangeActiveCount );
+
+    // increase function entrance count
+    ++iResChangeActiveCount;
+    // if we are still in a previous call then do nothing else
+    if ( iResChangeActiveCount == 1 )
+        {
+        // the active count may increase during execution of the body of the loop
+        // (if some observers have active scheduler waits, for example)
+        while ( iResChangeActiveCount > 0 )
+            {
+            if ( aType == KEikDynamicLayoutVariantSwitch )
+                {
+                HGLOG0( HGLOG_INFO, "dyn layout var switch" );
+                // This might be a screen orientation or touch-nontouch switch,
+                // so let's check the situation and notify observers if needed.
+                CheckTouchState();
+                CheckOrientation();
+                }
+            else if ( aType == KAknsMessageSkinChange )
+                {
+                HGLOG0( HGLOG_INFO, "skin change" );
+                NotifyObservers( MHgDeviceStateObserver::ESkin );
+                }
+            --iResChangeActiveCount;
+            }
+        }
+        
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::PropertyChanged
+// --------------------------------------------------------------------------
+//
+void CHgTeleportDeviceState::PropertyChanged(TUid aCategory, TUint aKey)
+    {
+    HGLOG_CONTEXT( PropertyChanged, HGLOG_LOCAL );
+    HGLOG2_IN( "aKey = %d aNewValue = %d", aCategory, aKey );
+    CheckDeviceType();
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::CheckTouchState
+// --------------------------------------------------------------------------
+//
+void CHgTeleportDeviceState::CheckTouchState()
+    {
+    HGLOG_CONTEXT( CheckTouchState, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    TTouchState oldValue = iTouchState;
+    iTouchState = AknLayoutUtils::PenEnabled() ? ETouchEnabled : ETouchDisabled;
+    if ( iTouchState != oldValue )
+        {
+        NotifyObservers( MHgDeviceStateObserver::ETouchState );
+        }
+
+    HGLOG1_OUT( "new value for iTouchState: %d", iTouchState );
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::CheckOrientation
+// --------------------------------------------------------------------------
+//
+void CHgTeleportDeviceState::CheckOrientation()
+    {
+    HGLOG_CONTEXT( CheckOrientation, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    TRect rect;
+    AknLayoutUtils::LayoutMetricsRect ( AknLayoutUtils::EScreen, rect );
+    TOrientation oldValue = iOrientation;
+    iOrientation = rect.Width() > rect.Height() ? ELandscape : EPortrait;
+    if ( iOrientation != oldValue )
+        {
+        NotifyObservers( MHgDeviceStateObserver::EOrientation );
+        }
+
+    HGLOG1_OUT( "new value for iOrientation: %d", iOrientation );
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::DeviceType
+// --------------------------------------------------------------------------
+//
+void CHgTeleportDeviceState::CheckDeviceType()
+    {
+    HGLOG_CONTEXT( CheckQwerty, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    TInt oldDeviceType = iDeviceType;
+    TInt value( 0 );
+    if( RProperty::Get( KPSUidHWRM, KHWRMFlipStatus, value ) == KErrNone )
+    	{
+    	iDeviceType = (value == EPSHWRMFlipOpen ? EHybrid : EFullTouch);
+    	}
+    
+    if( iDeviceType != oldDeviceType )
+        {
+        NotifyObservers( MHgDeviceStateObserver::EDeviceType);
+        }
+
+    HGLOG1_OUT( "new value for iDeviceType: %d", iDeviceType );
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::TouchState
+// --------------------------------------------------------------------------
+//
+CHgTeleportDeviceState::TTouchState CHgTeleportDeviceState::TouchState() const
+    {
+    return iTouchState;
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::Orientation
+// --------------------------------------------------------------------------
+//
+CHgTeleportDeviceState::TOrientation CHgTeleportDeviceState::Orientation() const
+    {
+    return iOrientation;
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::Qwerty
+// --------------------------------------------------------------------------
+//
+CHgTeleportDeviceState::TDeviceType CHgTeleportDeviceState::DeviceType() const
+    {
+    return iDeviceType;
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::ObserverIdentity
+// --------------------------------------------------------------------------
+//
+TBool CHgTeleportDeviceState::ObserverIdentity( const SObserver& aA,
+        const SObserver& aB )
+    {
+    return aA.iObserver == aB.iObserver;
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::AddDeviceStateObserverL
+// --------------------------------------------------------------------------
+//
+void CHgTeleportDeviceState::AddObserverL( MHgDeviceStateObserver& aObserver,
+        TInt aMask )
+    {
+    iObservers.AppendL( SObserver( aMask, &aObserver ) );
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::RemoveObserver
+// --------------------------------------------------------------------------
+//
+void CHgTeleportDeviceState::RemoveObserver( MHgDeviceStateObserver& aObserver )
+    {
+    for ( ; ; )
+        {
+        TInt pos = iObservers.Find( SObserver( MHgDeviceStateObserver::EAny,
+            &aObserver ), ObserverIdentity );
+        if ( pos >= 0 )
+            {
+            iObservers.Remove( pos );
+            }
+        else
+            {
+            break;
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportDeviceState::NotifyObservers
+// --------------------------------------------------------------------------
+//
+void CHgTeleportDeviceState::NotifyObservers(
+        MHgDeviceStateObserver::TChangeType aType )
+    {
+    for ( TInt i = 0, ie = iObservers.Count(); i != ie; ++i )
+        {
+        const SObserver& obs( iObservers[i] );
+        if ( obs.iMask & aType )
+            {
+            obs.iObserver->HandleDeviceStateChanged( aType );
+            }
+        }
+    }
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleportdocument.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,106 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportdocument.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Document class
+ *  Version     : %version: 4 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ * 
+ */
+
+#include <apgwgnam.h>
+
+#include "hgteleportappui.h"
+#include "hgteleportdocument.h"
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDocument::NewLC( )
+// Create a CHgTeleportDocument object and return a pointer to it
+// -----------------------------------------------------------------------------
+//
+CHgTeleportDocument* CHgTeleportDocument::NewL( CEikApplication& aApp )
+    {
+    CHgTeleportDocument* self = NewLC ( aApp );
+    CleanupStack::Pop ( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDocument::NewLC( )
+// Create a CHgTeleportDocument object and return a pointer to it
+// -----------------------------------------------------------------------------
+//
+CHgTeleportDocument* CHgTeleportDocument::NewLC( CEikApplication& aApp )
+    {
+    CHgTeleportDocument* self = new ( ELeave ) CHgTeleportDocument( aApp );
+    CleanupStack::PushL ( self );
+    self->ConstructL ( );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDocument::ConstructL( )
+// Second phase constructor
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportDocument::ConstructL( )
+    {
+    // no implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDocument::~CHgTeleportDocument( )
+// First phase constructor
+// -----------------------------------------------------------------------------
+//
+CHgTeleportDocument::CHgTeleportDocument( CEikApplication& aApp ) :
+    CAknDocument( aApp )
+    {
+    // no implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDocument::~CHgTeleportDocument( )
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CHgTeleportDocument::~CHgTeleportDocument( )
+    {
+    // no implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDocument::CreateAppUiL( )
+// Create a CHgTeleportAppUi object and return a pointer to it
+// -----------------------------------------------------------------------------
+//
+CEikAppUi* CHgTeleportDocument::CreateAppUiL( )
+    {
+    // Create the application user interface, and return a pointer to it,
+    // the framework takes ownership of this object
+    CEikAppUi* appUi = new ( ELeave ) CHgTeleportAppUi;
+    return appUi;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportDocument::UpdateTaskNameL( )
+// Makes app hidden in fastswap window
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportDocument::UpdateTaskNameL( CApaWindowGroupName* aWgName )
+    {
+    CEikDocument::UpdateTaskNameL ( aWgName );
+    aWgName->SetHidden ( ETrue );
+    }
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleporteventcontroler.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,195 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleporteventcontroler.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Gesture and physics helper declaration
+ *  Version     : %version: 5 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+#include "hgteleporteventcontroler.h"
+#include "hgteleportphysicsengine.h"
+
+// -----------------------------------------------------------------------------
+// NewLC
+// -----------------------------------------------------------------------------
+//
+CHgTeleportEventControler* CHgTeleportEventControler::NewLC(
+    MHgTeleportEventControlerObserver& aObserver,
+    CCoeControl& aEventSrc)
+    {
+    CHgTeleportEventControler* self = 
+        new(ELeave)CHgTeleportEventControler(aObserver);
+    CleanupStack::PushL(self);
+    self->ConstructL(aEventSrc);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// NewL
+// -----------------------------------------------------------------------------
+//
+CHgTeleportEventControler* CHgTeleportEventControler::NewL(
+    MHgTeleportEventControlerObserver& aObserver,
+    CCoeControl& aEventSrc)
+    {
+    CHgTeleportEventControler* self = 
+        CHgTeleportEventControler::NewLC(aObserver, aEventSrc);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// ~CHgTeleportPointerHandler
+// -----------------------------------------------------------------------------
+//
+CHgTeleportEventControler::~CHgTeleportEventControler()
+    {
+    delete iGestureHelper;
+    delete iPhysicsHelper;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPointerHandler
+// -----------------------------------------------------------------------------
+//
+CHgTeleportEventControler::CHgTeleportEventControler(
+    MHgTeleportEventControlerObserver& aObserver)
+    :
+    CBase(),
+    iObserver(aObserver)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEventControler::ConstructL(CCoeControl& aEventSrc)
+    {
+    iGestureHelper = 
+        AknTouchGestureFw::CAknTouchGestureFw::NewL(*this, aEventSrc);
+    iGestureHelper->SetGestureInterestL(EAknTouchGestureFwAll);
+    iPhysicsHelper = CHgTeleportPhysicsEngine::NewL(*this, aEventSrc);
+    }
+
+// -----------------------------------------------------------------------------
+// HandleTouchGestureL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEventControler::HandleTouchGestureL(
+    AknTouchGestureFw::MAknTouchGestureFwEvent& aEvent)
+    {
+    if (AknTouchGestureFwEventDrag(aEvent))
+        {
+        HandleDragEventL(*AknTouchGestureFwEventDrag(aEvent));
+        }
+    else if (AknTouchGestureFwEventTap(aEvent))
+        {
+        HandleTapEventL(*AknTouchGestureFwEventTap(aEvent));
+        }
+    //ignore flick and pinch events
+    }
+
+// -----------------------------------------------------------------------------
+// HandleTapEventL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEventControler::HandleTapEventL(
+    MAknTouchGestureFwTapEvent& aEvent)
+    {
+    if(EAknTouchGestureFwLongTap == aEvent.Type())
+        {
+        iObserver.LongTapL(aEvent.Position());
+        }
+    else if(EAknTouchGestureFwTap == aEvent.Type())
+        {
+        if( iPhysicsHelper->IsRunning())
+            {
+            iPhysicsHelper->Stop();
+            }
+        else
+            {
+            iObserver.TapL(aEvent.Position());
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// HandleDragEventL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEventControler::HandleDragEventL(
+    MAknTouchGestureFwDragEvent& aEvent)
+    {
+    iObserver.Drag(aEvent);
+    iPhysicsHelper->HandleDragEvent(aEvent);
+    }
+
+// -----------------------------------------------------------------------------
+// PhysicEmulationEnded
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEventControler::ViewPositionChanged(const TPoint& aNewPosition,
+    TBool /*aDrawNow*/,
+    TUint /*aFlags*/)
+    {
+    iObserver.MoveOffset(aNewPosition);
+    }
+
+// -----------------------------------------------------------------------------
+// PhysicEmulationEnded
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEventControler::PhysicEmulationEnded()
+    {
+    iObserver.Stop();
+    }
+
+// -----------------------------------------------------------------------------
+// ViewPosition
+// -----------------------------------------------------------------------------
+//
+TPoint CHgTeleportEventControler::ViewPosition() const
+    {
+    return iObserver.ViewPos();
+    }
+
+// -----------------------------------------------------------------------------
+// Animate
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEventControler::Animate(const TPoint& aPoint)
+    {
+    iPhysicsHelper->AnimateToTarget(aPoint);
+    }
+
+// -----------------------------------------------------------------------------
+// ReInitPhysicL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEventControler::ReInitPhysicsL(const TSize& aWorldSize,
+        const TSize& aViewSize, TBool aLandscape)
+    {
+    iPhysicsHelper->ReInitPhysicsL( aWorldSize, aViewSize, aLandscape);
+    }
+
+// -----------------------------------------------------------------------------
+// StopAnimation
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEventControler::StopAnimation()
+    {
+    iPhysicsHelper->Stop();
+    }
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleportfastswaparea.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,1642 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportfastswaparea.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Teleport Fast Swap area UI
+ *  Version     : %version: sa1spcx1#74 %
+ *
+ *  Copyright © 2008 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#include <gulicon.h>
+#include <eikenv.h>
+#include <AknUtils.h>
+#include <AknIconUtils.h>
+#include <AknIconArray.h>
+#include <aknstyluspopupmenu.h>
+#include <AknQueryDialog.h>
+#include <StringLoader.h>
+#include <hgteleport.rsg>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <aknlists.h>
+#include <touchfeedback.h>
+#include <akntransitionutils.h>
+#include <akntranseffect.h>
+
+#include "hgteleportfastswaparea.h"
+#include "hgteleportapplogging.h"
+#include "hgfswclient.h"
+#include "hgteleportappui.h"
+#include "hgteleportdatachangeobserver.h"
+#include "hgteleporteventcontroler.h"
+
+/** command ids for the fsw popup */
+enum TPopupCommands
+    {
+    EFswCmdClose = 10000,
+    EFswCmdCloseAll
+    };
+
+/** Number of closable applications, to show "close all" option. */
+const TInt KHgMaxClosableApps = 2;
+
+/** Interval until which no change in the fsw content is rendered
+    after starting the closing of an application. */
+const TInt KRefreshDelayAfterClose = 2; // seconds
+
+/** Uid of Active Idle application. 
+    Used when movind Ai to specified position.*/
+const TUid KAiUid = TUid::Uid( 0x102750F0 );
+    
+/** Position of Ai in fsw grid.*/
+const TInt KAiPosition = 0;
+
+/** Default grid item to highlight.*/
+const TInt KItemToHighlight = 3;
+
+const TInt KAppKeyTypeShort = 1;
+const TInt KAppKeyTypeLong = 2;
+
+const TInt KLayoutItemCount = 3;
+
+const TInt KRedrawTime = 250000; // 0.25 sec
+const TInt KHighlighActivationTime = 100000; // 100 ms
+const TInt KUpdateGridTime = 1000000; // 1 s
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::NewL
+// -----------------------------------------------------------------------------
+//
+CHgTeleportFastSwapArea* CHgTeleportFastSwapArea::NewL( const TRect& aRect,
+    CCoeControl& aParent, CHgTeleportDeviceState& aDeviceState, 
+    CHgTeleportEventControler& aEventHandler )
+    {
+    CHgTeleportFastSwapArea* self = CHgTeleportFastSwapArea::NewLC(aRect,
+            aParent, aDeviceState, aEventHandler);
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::NewLC
+// -----------------------------------------------------------------------------
+//
+CHgTeleportFastSwapArea* CHgTeleportFastSwapArea::NewLC( const TRect& aRect,
+    CCoeControl& aParent, CHgTeleportDeviceState& aDeviceState,
+    CHgTeleportEventControler& aEventHandler)
+    {
+    CHgTeleportFastSwapArea* self = new (ELeave) CHgTeleportFastSwapArea(
+            aParent, aDeviceState, aEventHandler);
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::CHgTeleportFastSwapArea
+// -----------------------------------------------------------------------------
+//
+CHgTeleportFastSwapArea::CHgTeleportFastSwapArea(CCoeControl& aParent,
+    CHgTeleportDeviceState& aDeviceState,
+    CHgTeleportEventControler& aEventHandler) :
+    iParent(aParent), iDeviceState(aDeviceState), iEvtHandler(aEventHandler),
+    iPreviousNoOfItems(0)
+    {
+    // no implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::~CHgTeleportFastSwapArea
+// -----------------------------------------------------------------------------
+//
+CHgTeleportFastSwapArea::~CHgTeleportFastSwapArea()
+    {
+    iArray.ResetAndDestroy();
+    delete iGrid;
+    delete iFSClient;
+    delete iPopup;
+    delete iConfirmCloseQuery;
+    delete iHighlightTimer;
+    delete iRedrawTimer;
+    delete iUpdateGridTimer;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::ConstructL( const TRect& aRect )
+    {
+    SetContainerWindowL( iParent );
+
+    SetRect( aRect );
+
+    // setup ganes grid
+    ReCreateGridL();
+
+    // create stylus popup instance
+    PreCreatePopupL();
+
+    // connect to fsw server
+    iFSClient = CHgFswClient::NewL();
+    
+    iEvtHandler.ReInitPhysicsL(GridWorldSize(), ViewSize(), ETrue);
+    
+    // add self to device state observer
+    iDeviceState.AddObserverL( *this, EDeviceType );
+    
+    iHighlightTimer = new (ELeave) CHgTeleportFastSwapTimer( *this );
+    iHighlightTimer->ConstructL();
+    
+    iRedrawTimer = new (ELeave) CHgTeleportFastSwapTimer( *this );
+    iRedrawTimer->ConstructL();
+
+    iUpdateGridTimer = new (ELeave) CHgTeleportFastSwapTimer( *this );
+    iUpdateGridTimer->ConstructL();
+    
+    ActivateL();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ReCreateGridL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::ReCreateGridL()
+    {
+    MCoeControlObserver* obs = NULL;
+    TBool wasHighlight = iDeviceState.DeviceType() == 
+                             CHgTeleportDeviceState::EHybrid ? ETrue : EFalse;
+    if ( iGrid )
+        {
+        obs = iGrid->Observer();
+        iDeviceState.RemoveObserver(*iGrid);
+        wasHighlight = iGrid->IsHighlightVisible();
+        delete iGrid;
+        iGrid = NULL;
+        }
+    
+    iGrid = new( ELeave ) CHgTeleportFastSwapGrid;
+    iGrid->ConstructL( this );
+    iDeviceState.AddObserverL(*iGrid, MHgDeviceStateObserver::ESkin);
+    
+    AknListBoxLayouts::SetupStandardGrid( *iGrid );
+    
+    RArray<TAknLayoutRect> rects;
+    CleanupClosePushL(rects);
+    rects.ReserveL(KLayoutItemCount);
+    GetFastSwapAreaRects(rects);
+    TAknLayoutRect gridAppPane = rects[0];
+    TAknLayoutRect gridItem = rects[1];
+    TAknLayoutRect gridImage = rects[2];
+    CleanupStack::PopAndDestroy(&rects);
+    
+    TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+    iGrid->SetRect(gridAppPane.Rect());
+    iGrid->SetVisibleViewRect(gridAppPane.Rect());
+    TAknLayoutScalableParameterLimits gridParams = 
+        AknLayoutScalable_Apps::cell_tport_appsw_pane_ParamLimits( variety );
+    TPoint empty( ELayoutEmpty, ELayoutEmpty );
+    
+#ifndef TASKSWITCHER_USE_CUSTOM_LAYOUT
+    AknListBoxLayouts::SetupFormGfxCell( *iGrid, iGrid->ItemDrawer(), 0,
+            AknLayoutScalable_Apps::cell_tport_appsw_pane_g1( variety ).LayoutLine(),
+            empty, empty );
+#else
+    TRect imageRect;
+    TRect textRect;
+    TInt leftMargin = ( KFswItemWidth - KFswImageSize ) / 2;
+    TInt topMargin = ( KFswItemHeight - KFswImageSize - KFswTextHeight ) / 3;
+    textRect.iTl = TPoint( leftMargin, topMargin );
+    textRect.iBr = TPoint( leftMargin + KFswImageSize, topMargin + KFswTextHeight );
+    imageRect.iTl = TPoint( leftMargin, topMargin * 2 + KFswTextHeight );
+    imageRect.iBr = TPoint( leftMargin + KFswImageSize, topMargin * 2 + KFswTextHeight + KFswImageSize );
+    
+    AknListBoxLayouts::SetupFormGfxCell( *iGrid, iGrid->ItemDrawer(), 0 /*Column index*/,
+                                         imageRect.iTl.iX  /*Left pos*/, imageRect.iTl.iY /*Top pos*/,
+                                         0 /*unused*/, 0 /*unused*/,
+                                         imageRect.Width() /*Icon width*/,
+                                         imageRect.Height() /*Icon height*/,
+                                         imageRect.iTl /*Start pos*/,
+                                         imageRect.iBr /*End pos*/ );
+#endif
+
+    // Setup text layout
+    TRgb textColor;
+    AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), textColor,
+            KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG9 );
+    
+    TAknLayoutText textLayout;
+    textLayout.LayoutText(
+            Rect(),
+            AknLayoutScalable_Apps::cell_tport_appsw_pane_t1( variety ).LayoutLine() );
+    
+    // Because textLayout.BaselineOffset() does not work (missing lib entry),
+    // we need to calculate offset ourselves
+#ifndef TASKSWITCHER_USE_CUSTOM_LAYOUT
+    TInt baselineOffset = textLayout.TextRect().iBr.iY - textLayout.TextRect().iTl.iY;
+    AknListBoxLayouts::SetupFormTextCell( *iGrid, iGrid->ItemDrawer(), 1 /*Column index*/,
+                                          textLayout.Font() /*Font type*/,
+                                          textColor.Color16() /*color*/,
+                                          textLayout.TextRect().iTl.iX /*Left margin*/, 0 /*unused*/,
+                                          baselineOffset /*Baseline*/, 0 /*Text width*/,
+                                          textLayout.Align() /*Text alignment*/,
+                                          TPoint(0,0) /*Start pos*/,
+                                          TPoint(0,0) /*End pos*/);
+#else    
+    TInt baselineOffset = textRect.iBr.iY - textRect.iTl.iY;
+    AknListBoxLayouts::SetupFormTextCell( *iGrid, iGrid->ItemDrawer(), 1 /*Column index*/,
+                                          textLayout.Font() /*Font type*/,
+                                          textColor.Color16() /*color*/,
+                                          textRect.iTl.iX /*Left margin*/, 0 /*unused*/,
+                                          baselineOffset /*Baseline*/, 0 /*Text width*/,
+                                          CGraphicsContext::ECenter /*Text alignment*/,
+                                          TPoint(0,0) /*Start pos*/,
+                                          TPoint(0,0) /*End pos*/);
+#endif
+    
+    // Setup grid observers
+    if ( obs )
+        {
+        iGrid->SetObserver( obs );
+        }
+    iGrid->SetListBoxObserver(this);
+    iGrid->SetFastSwapGridObserver(this);
+    iGrid->SetContainerWindowL(*this);
+    
+#ifndef TASKSWITCHER_USE_CUSTOM_LAYOUT
+    iMaxItemsOnScreen = Rect().Width() / gridItem.Rect().Width();
+    iGridItemWidth = gridItem.Rect().Width();
+#else
+    iMaxItemsOnScreen = Rect().Width() / KFswItemWidth;
+    iGridItemWidth = KFswItemWidth;
+#endif
+    
+    iGrid->ItemDrawer()->ColumnData()->SetDrawBackground(EFalse);
+    
+    // Update state
+    HandleDeviceStateChanged( EDeviceType );
+    if( wasHighlight )
+        {
+        iGrid->ShowHighlight();
+        }
+    else
+        {
+        iGrid->HideHighlight();
+        }
+    
+    // Make sure that there is an ActivateL call even when we are not
+    // called from ConstructL. (in order to have the grid's parent ptr set properly)
+    ActivateL();
+    }
+
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::GetFastSwapAreaRects
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::GetFastSwapAreaRects( RArray<TAknLayoutRect>& aRects )
+    {
+    TAknLayoutRect gridAppPane;
+    TAknLayoutRect gridItem;
+    TAknLayoutRect gridImage;
+    
+    TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+    
+    gridAppPane.LayoutRect( Rect(), 
+            AknLayoutScalable_Apps::tport_appsw_pane( variety ) );
+    aRects.Append(gridAppPane);
+    
+    gridItem.LayoutRect( gridAppPane.Rect(),
+            AknLayoutScalable_Apps::cell_tport_appsw_pane( variety, 0, 0 ) );
+    aRects.Append(gridItem);
+    
+    gridImage.LayoutRect( gridItem.Rect(),
+            AknLayoutScalable_Apps::cell_tport_appsw_pane_g1( variety ) ); 
+    aRects.Append(gridImage);
+    }
+
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::Setup
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::Setup( MCoeControlObserver& aControlObserver )
+    {
+    iGrid->SetObserver( &aControlObserver );
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::SizeChanged
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::SizeChanged()
+    {
+    HGLOG_CONTEXT( CHgTeleportFastSwapArea::SizeChanged, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    if ( iGrid )
+        {
+        // Grid needs to be recreated to proper reinitilize
+        // data with new layout values
+        TInt selIdx = SelectedIndex();
+        TRAPD(err, 
+              ReCreateGridL();
+              iEvtHandler.ReInitPhysicsL(GridWorldSize(), ViewSize(), ETrue););
+        if ( err != KErrNone )
+            {
+            HGLOG1( HGLOG_INFO, "ReCreateGridL leaves with %d", err );
+            }
+        HandleFswContentChanged();
+        iGrid->SetCurrentDataIndex(selIdx);
+        UpdateGrid(ETrue, EFalse);
+        DrawDeferred();
+        }
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::Draw
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::Draw( const TRect& /*aRect*/ ) const
+    {
+    CWindowGc& gc = SystemGc();
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
+    AknsDrawUtils::Background( skin,
+           cc,
+           this,
+           gc,
+           Rect() );
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::SwitchToApp
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::SwitchToApp( TInt aIndex )
+    {
+    if ( aIndex >= 0 && aIndex < iArray.Count() )
+        {
+        TInt wgId = iArray[aIndex]->WgId();
+        // Move other app to foreground and then move ourselves to background.
+        // Order is important and cannot be reversed.
+        iFSClient->SwitchToApp( wgId );
+        // We do not want to come back to teleport if the activated app is closed.
+        // Therefore teleport must be moved to background.
+        CHgTeleportAppUi* appui =
+            static_cast<CHgTeleportAppUi*>( iEikonEnv->AppUi() );
+        appui->MoveAppToBackground( AknTransEffect::EApplicationStartRect );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::TryCloseAppL
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::TryCloseAppL( TInt aIndex,
+        TBool aSuppressRendering )
+    {
+    HGLOG_CONTEXT( TryCloseAppL, HGLOG_LOCAL );
+    HGLOG2_IN( "%d %d", aIndex, aSuppressRendering );
+
+    if ( aIndex >= 0 && aIndex < iArray.Count() && CanClose( aIndex ) )
+        {
+        TInt wgId = iArray[aIndex]->WgId();
+        iFSClient->CloseApp( wgId );
+        // The fsw content will change sooner or later
+        // but the updated content (without the closed app) will not
+        // come very fast. It looks better to the user if the item
+        // in the grid is removed right here, right now.
+        // If the app does not close for some reason then this is
+        // not fully correct but the app will then reappear on the next
+        // content-changed notification anyway.
+        delete iArray[aIndex];
+        iArray.Remove( aIndex );
+        NotifyChange();
+        if ( !aSuppressRendering )
+            {
+            RenderContentL();
+            }
+        // Update item selection on the screen if last item was deleted
+        TInt newItemCount = GridItemCount();
+        if ( aIndex == newItemCount )
+            {
+            newItemCount--;
+            iGrid->SetCurrentDataIndex(newItemCount);
+            }
+        iTimeOfLastClose.HomeTime();
+        }
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::TryCloseAppWithQueryL
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::TryCloseAppWithQueryL( TInt aIndex )
+    {
+    if ( aIndex >= 0 && aIndex < iArray.Count()
+            && CanClose( aIndex )
+            && ConfirmCloseL( aIndex ) )
+        {
+        TryCloseAppL( aIndex );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::TryCloseAllL
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::TryCloseAllL()
+    {
+    // note the direction of the loop, this is needed because
+    // TryCloseAppL may modify the array
+    TBool changed = EFalse;
+    for ( TInt i = iArray.Count() - 1; i >= 0; --i )
+        {
+        if ( CanClose( i ) )
+            {
+            TryCloseAppL( i, ETrue );
+            changed = ETrue;
+            }
+        }
+    if ( changed )
+        {
+        RenderContentL();
+        RestoreSelectedIndex();
+        iGrid->DrawNow();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::CanClose
+// --------------------------------------------------------------------------
+//
+TBool CHgTeleportFastSwapArea::CanClose( TInt aIndex ) const
+    {
+    CHgFswEntry* e = iArray[aIndex];
+    return !e->AlwaysShown() && !e->SystemApp();
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::CanCloseOthers
+// --------------------------------------------------------------------------
+//
+TBool CHgTeleportFastSwapArea::CanCloseAll( TInt aSelectedItem ) const
+    {
+    TInt count( 0 );
+
+    // Count number of closable applications and if number exceeds 2 finish
+    // counting, because it is already enough to show the option.
+    for ( TInt i = iArray.Count(); --i >= 0 && count < KHgMaxClosableApps; )
+        {
+        if ( CanClose( i ) )
+            {
+            count++;
+            }
+        }
+    return ( count >= KHgMaxClosableApps ) ||
+           ( count && !CanClose( aSelectedItem ) );
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::HandleFswContentChanged
+// From MHgFswObserver
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::HandleFswContentChanged()
+    {
+    HGLOG_CONTEXT( HandleFswContentChanged, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    TRAPD( err, HandleFswContentChangedL() );
+    if ( err != KErrNone )
+        {
+        HGLOG1( HGLOG_INFO, "leave occured: %d", err );
+        }
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::HandleFswContentChangedL
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::HandleFswContentChangedL()
+    {
+    HGLOG_CONTEXT( HandleFswContentChangedL, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    // If there was an app close operation started during the last
+    // few seconds then stop, to prevent flickering.
+    TTime now;
+    now.HomeTime();
+    TTimeIntervalSeconds iv;
+    if ( now.SecondsFrom( iTimeOfLastClose, iv ) == KErrNone
+            && iv.Int() <= KRefreshDelayAfterClose )
+        {
+        HGLOG1_OUT( "difference since last close is only %d sec, stop", iv.Int() );
+        return;
+        }
+
+    // get current content from fastswap server
+    iFSClient->GetContentL( iArray );
+    SwapApplicationOrder( iArray );
+
+#ifdef _DEBUG
+    for ( TInt i = 0, ie = iArray.Count(); i != ie; ++i )
+        {
+        CHgFswEntry* e = iArray[i];
+        const TDesC& name( e->AppName() );
+        HGLOG4( HGLOG_INFO, "[%d]: %d %d %S", i, e->WgId(), e->AppUid(), &name );
+        }
+#endif
+
+    // draw
+    RenderContentL();
+
+    // notify observer, if present
+    NotifyChange();
+
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::RenderContentL
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::RenderContentL()
+    {
+    HGLOG_CONTEXT( RenderContentL, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    _LIT(KSeparator, "\t");
+    
+    CArrayPtr<CGulIcon>* iconArray = new ( ELeave ) CAknIconArray( iArray.Count() );
+    CleanupStack::PushL( iconArray );
+    CDesCArrayFlat* textArray = new ( ELeave ) CDesCArrayFlat( iArray.Count() );
+    CleanupStack::PushL( textArray );
+    RArray<TInt> closeItemArray;
+    CleanupClosePushL(closeItemArray);
+    
+    TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+    RArray<TAknLayoutRect> rects;
+    CleanupClosePushL(rects);
+    rects.ReserveL(KLayoutItemCount);
+    GetFastSwapAreaRects(rects);
+    TAknLayoutRect gridItem = rects[1];
+    CleanupStack::PopAndDestroy(&rects);
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+#ifndef TASKSWITCHER_USE_CUSTOM_LAYOUT
+        iGrid->SetLayoutL( EFalse, EFalse, ETrue, iArray.Count(), 1, gridItem.Rect().Size() );
+#else
+        TSize itemSize( KFswItemWidth, KFswItemHeight );
+        iGrid->SetLayoutL( EFalse, EFalse, ETrue, iArray.Count(), 1, itemSize );
+#endif
+        }
+    else
+        {
+#ifndef TASKSWITCHER_USE_CUSTOM_LAYOUT
+        iGrid->SetLayoutL( EFalse, ETrue, ETrue, iArray.Count(), 1, gridItem.Rect().Size() );
+#else
+        TSize itemSize( KFswItemWidth, KFswItemHeight );
+        iGrid->SetLayoutL( EFalse, ETrue, ETrue, iArray.Count(), 1, itemSize );
+#endif
+        }
+    
+    for ( TInt i = 0, ie = iArray.Count(); i != ie; ++i )
+        {
+        const TDesC& appName( iArray[i]->AppName() );
+        const TInt formatLen = 3 + 2;
+        RBuf formAppName;
+        CleanupClosePushL(formAppName);
+        formAppName.CreateL(appName.Length() + formatLen);
+        formAppName.AppendNum(i);
+        formAppName.Append(KSeparator);
+        formAppName.Append(appName);
+        textArray->AppendL(formAppName);
+        CleanupStack::PopAndDestroy(&formAppName);
+        TSize sz = PreferredImageSize();
+
+        // take the screenshot or appicon+mask and make a copy and scale
+        CFbsBitmap* bitmap = 0;
+        TInt h = iArray[i]->ScreenshotHandle();
+        HGLOG2( HGLOG_INFO, "'%S' screenshot handle %d", &appName, h );
+        TInt maskh = 0;
+        CFbsBitmap* mask = 0;
+        if ( !h )
+            {
+            h = iArray[i]->AppIconBitmapHandle();
+            maskh = iArray[i]->AppIconMaskHandle();
+            HGLOG1( HGLOG_INFO, "using appicon, handle = %d", h );
+            }
+        __ASSERT_DEBUG( h, User::Invariant() );
+        bitmap = CopyBitmapL( h, sz );
+        CleanupStack::PushL( bitmap );
+        if ( maskh )
+            {
+            mask = CopyBitmapL( maskh, sz );
+            }
+        CleanupStack::PushL( mask );
+
+        CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
+        CleanupStack::PushL(icon);
+        iconArray->AppendL(icon);
+        CleanupStack::Pop( 3, bitmap ); // mask, bitmap, icon
+        
+        // Check if item can be closed
+        if ( CanClose(i) && AknLayoutUtils::PenEnabled() )
+            {
+            closeItemArray.AppendL(i);
+            }
+        }
+    // Setup grid
+    iGrid->Model()->SetItemTextArray(textArray);
+    CArrayPtr<CGulIcon>* oldIconArray =
+        iGrid->ItemDrawer()->FormattedCellData()->IconArray();
+    if(oldIconArray)
+        {
+        delete oldIconArray;
+        oldIconArray = NULL;
+        }
+    iGrid->ItemDrawer()->FormattedCellData()->SetIconArrayL(iconArray);
+    iGrid->SetCloseItemsL(closeItemArray);
+    
+    // Cleanup
+    CleanupStack::PopAndDestroy(&closeItemArray);
+    CleanupStack::Pop(textArray);
+    CleanupStack::Pop(iconArray);
+    
+    iGrid->ScrollBarFrame()->SetScrollBarVisibilityL(
+                CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff);
+    
+    // refresh the items in the grid
+    if(iPreviousNoOfItems < iArray.Count())
+        {
+        iGrid->HandleItemAdditionL();
+        }
+    else if(iPreviousNoOfItems > iArray.Count())
+        {
+        iGrid->HandleItemRemovalL();
+        }
+    iPreviousNoOfItems = iArray.Count();
+    iEvtHandler.ReInitPhysicsL( GridWorldSize(), ViewSize(), ETrue );
+    UpdateGrid( ETrue );
+    
+    HGLOG_OUT();
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::CopyBitmapL
+// Copy and scale.
+// --------------------------------------------------------------------------
+//
+CFbsBitmap* CHgTeleportFastSwapArea::CopyBitmapL( TInt aFbsHandle, TSize aSize )
+    {
+    CFbsBitmap* ret = new (ELeave) CFbsBitmap();
+    CleanupStack::PushL( ret );
+
+    CFbsBitmap* bmp = new (ELeave) CFbsBitmap();
+    CleanupStack::PushL( bmp );
+    User::LeaveIfError( bmp->Duplicate( aFbsHandle ) );
+
+    // do not always use aSize, preserving the aspect ratio is quite
+    // important when showing app icons instead of screenshots
+    TSize sz = CalculateSizePreserveRatio( aSize, bmp->SizeInPixels() );
+
+    User::LeaveIfError( ret->Create( sz, bmp->DisplayMode() ) );
+
+    AknIconUtils::ScaleBitmapL( sz, ret, bmp );
+
+    CleanupStack::PopAndDestroy( bmp );
+    CleanupStack::Pop( ret );
+
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::CountComponentControls
+// --------------------------------------------------------------------------
+//
+TInt CHgTeleportFastSwapArea::CountComponentControls() const
+    {
+    return 1;
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ComponentControl
+// --------------------------------------------------------------------------
+//
+CCoeControl* CHgTeleportFastSwapArea::ComponentControl( TInt aIndex ) const
+    {
+    if ( aIndex == 0 )
+        {
+        return iGrid;
+        }
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::HandleSwitchToBackgroundEvent
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::HandleSwitchToBackgroundEvent()
+    {
+    // stop listening for changes in fsw content
+    iFSClient->CancelSubscribe();
+    // get rid of the close confirmation query if shown
+    delete iConfirmCloseQuery; // this will cause ExecuteLD to return with 0
+    iConfirmCloseQuery = 0;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::HandleSwitchToForegroundEvent
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::HandleSwitchToForegroundEvent()
+    {
+    HGLOG_CONTEXT( CHgTeleportFastSwapArea::HandleSwitchToForegroundEvent, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    // get the current task list
+    HandleFswContentChanged();
+    // and then start listening for changes
+    iFSClient->Subscribe( *this );
+    
+    if ( iDeviceState.DeviceType() == CHgTeleportDeviceState::EFullTouch )
+        {
+        iGrid->HideHighlight();
+        }
+    else
+        {
+        iGrid->ShowHighlight();
+        }
+    
+    RestoreSelectedIndex();
+    UpdateGrid(ETrue, EFalse);
+    
+    iRedrawTimer->Cancel();
+    iRedrawTimer->After(KRedrawTime);
+    
+    // give feedback
+    LaunchPopupFeedback();
+
+    HGLOG_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::FocusChanged
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::FocusChanged( TDrawNow /*aDrawNow*/ )
+    {
+    if ( IsFocused() )
+        {
+        // if in non-touch mode then select (highlight) some item
+        if ( !AknLayoutUtils::PenEnabled()
+            && SelectedIndex() == KErrNotFound
+            && GridItemCount() )
+            {
+            RestoreSelectedIndex();
+            }
+        }
+    else
+        {
+        // store the currently selected index if there is one
+        SaveSelectedIndex();
+        }
+    iGrid->DrawDeferred();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::OfferKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CHgTeleportFastSwapArea::OfferKeyEventL(
+        const TKeyEvent& aKeyEvent,
+        TEventCode aType )
+    {
+    iKeyEvent = ETrue;
+    // handle the 'clear' key
+    if ( aType == EEventKey && aKeyEvent.iCode == EKeyBackspace )
+        {
+        TInt idx = SelectedIndex();
+        if ( idx >= 0 )
+            {
+            TryCloseAppWithQueryL( idx );
+            }
+        return EKeyWasConsumed;
+        }
+    
+    //do not forward the event until item is higlighted
+    if( aKeyEvent.iScanCode == EStdKeyLeftArrow ||
+        aKeyEvent.iScanCode == EStdKeyRightArrow )
+        {
+        if ( !iGrid->IsHighlightVisible() )
+            {
+            if ( aType == EEventKey )
+                {
+                ShowHighlight();
+                iConsumeEvent = ETrue;
+                }
+            return EKeyWasConsumed;
+            }
+        else if(iConsumeEvent)
+            {
+            if (aType == EEventKeyUp)
+                {
+                return EKeyWasConsumed;
+                }
+            iConsumeEvent = EFalse;
+            }
+        }
+    
+    // pass the event to grid
+    // do not pass down and up arrow key events
+    if ( aKeyEvent.iScanCode != EStdKeyUpArrow &&
+         aKeyEvent.iScanCode != EStdKeyDownArrow )
+        {
+        TBool animate(ETrue);
+        TBool redraw(EFalse);
+        TInt prevItem = SelectedIndex();
+        TKeyResponse response = iGrid->OfferKeyEventL( aKeyEvent, aType );
+        if ( prevItem != SelectedIndex() && // item changed
+             ( ( prevItem == 0 &&
+                 SelectedIndex() == GridItemCount() - 1 &&
+                 GridItemCount() > iMaxItemsOnScreen + 1 ) || // loop from first to last item
+               ( prevItem == GridItemCount() - 1 &&
+                 SelectedIndex() == 0 &&
+                 GridItemCount() > iMaxItemsOnScreen + 1) // loop from last to first item
+              ) // loop
+            )
+            {
+            // Loop occured
+            animate = EFalse;
+            }
+        if ( prevItem != SelectedIndex() )
+            {
+            redraw = ETrue;
+            iGrid->ShowHighlight();
+            }
+        UpdateGrid( redraw, animate );
+        return response;
+        }
+    
+    return EKeyWasNotConsumed;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::HandlePointerEventL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+    {
+    iKeyEvent = EFalse;
+    if(aPointerEvent.iType == TPointerEvent::EButton1Down)
+        {
+        iTapEvent = aPointerEvent;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ConfirmCloseL
+// -----------------------------------------------------------------------------
+//
+TBool CHgTeleportFastSwapArea::ConfirmCloseL( TInt aIndex )
+    {
+    HBufC* msg = StringLoader::LoadLC( R_TELEPORT_FSW_CONFIRM_CLOSE,
+        iArray[aIndex]->AppName() );
+    iConfirmCloseQuery = CAknQueryDialog::NewL(
+        CAknQueryDialog::EConfirmationTone );
+    iConfirmCloseQuery->SetPromptL( *msg );
+    CleanupStack::PopAndDestroy( msg );
+    TBool ok = iConfirmCloseQuery->ExecuteLD(
+        R_HG_TELEPORT_FSW_CONFIRM_CLOSE_QUERY );
+    iConfirmCloseQuery = 0;
+    return ok;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::SelectedIndex
+// -----------------------------------------------------------------------------
+//
+TInt CHgTeleportFastSwapArea::SelectedIndex() const
+    {
+    return iGrid->CurrentDataIndex();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::SaveSelectedIndex
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::SaveSelectedIndex()
+    {
+    iSavedSelectedIndex = SelectedIndex();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::RestoreSelectedIndex
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::RestoreSelectedIndex()
+    {
+    iSavedSelectedIndex = KErrNotFound;
+    if ( GridItemCount() )
+        {
+        // highlight second recent item (that has index 2) if possible
+        TInt highlightItem = 0;
+        TInt count = GridItemCount();
+        while( highlightItem < count 
+            && highlightItem < KItemToHighlight )
+            {
+            ++highlightItem;
+            }
+        iSavedSelectedIndex = highlightItem - 1;//count from 0
+        iGrid->SetCurrentItemIndex( iSavedSelectedIndex );
+        TBool forceRedraw(ETrue);
+        UpdateGrid(forceRedraw);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ProcessCommandL
+// Handle fsw popup commands
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::ProcessCommandL( TInt aCommandId )
+    {
+    switch ( aCommandId )
+        {
+        case EFswCmdClose:
+            TryCloseAppL( iAppIndexForPopup );
+            break;
+
+        case EFswCmdCloseAll:
+            TryCloseAllL();
+            break;
+
+        case KErrCancel:
+            // popup dismisses automatically when tapping outside or when switching to other app
+            break;
+        }
+    iTapEvent.iType = TPointerEvent::EButton1Up;
+    iGrid->HandlePointerEventL(iTapEvent);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::HandleCloseEventL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::HandleCloseEventL(TInt aItemIdx)
+    {
+    if ( !iLongTap )
+        {
+        TryCloseAppWithQueryL( aItemIdx );
+        }
+    // Simulate long tap to prevent item activation
+    iLongTap = ETrue;
+    iTapEvent.iType = TPointerEvent::EButton1Up;
+    iGrid->HandlePointerEventL(iTapEvent);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::HandleDeviceStateChanged
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::HandleDeviceStateChanged( TChangeType aChangeType )
+    {
+    if ( aChangeType == EDeviceType )
+        {
+        CHgTeleportDeviceState::TDeviceType state = iDeviceState.DeviceType();
+        switch ( state )
+            {
+            case CHgTeleportDeviceState::EHybrid:
+                {
+                iGrid->SetGridBehaviour( CHgTeleportFastSwapGrid::EHybrid );
+                }
+                break;
+            case CHgTeleportDeviceState::EFullTouch:
+                {
+                iGrid->SetGridBehaviour( CHgTeleportFastSwapGrid::ETouchOnly );
+                }
+                break;
+            default:
+                break;
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::TimerCompletedL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::TimerCompletedL( CHgTeleportFastSwapTimer* aSource )
+    {
+    if(aSource == iHighlightTimer)
+        {
+        iTapEvent.iType = TPointerEvent::EButton1Up;
+        iGrid->HandlePointerEventL(iTapEvent);
+        }
+    else if(aSource == iRedrawTimer)
+        {
+        DrawNow();
+        }
+    else if( aSource == iUpdateGridTimer )
+        {
+        UpdateGrid(ETrue, ETrue);
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::PreCreatePopupL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::PreCreatePopupL()
+    {
+    if ( !iPopup )
+        {
+        iPopup = CAknStylusPopUpMenu::NewL( this, Rect().iTl );
+        HBufC* text = StringLoader::LoadLC( R_TELEPORT_FSW_CLOSE );
+        iPopup->AddMenuItemL( *text, EFswCmdClose );
+        CleanupStack::PopAndDestroy( text );
+        text = StringLoader::LoadLC( R_TELEPORT_FSW_CLOSE_ALL );
+        iPopup->AddMenuItemL( *text, EFswCmdCloseAll );
+        CleanupStack::PopAndDestroy( text );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ShowPopupL
+// -----------------------------------------------------------------------------
+//
+TBool CHgTeleportFastSwapArea::ShowPopupL( TInt aIndex, const TPoint& aPoint )
+    {
+    TBool showPopUp(EFalse);
+    TBool showPopupItem;
+    // hide 'close' if app cannot be closed
+    showPopupItem = CanClose( aIndex );
+    iPopup->SetItemDimmed( EFswCmdClose, !showPopupItem );
+    showPopUp = showPopUp || showPopupItem;
+    // hide 'close all' if there are no applications to close.
+    showPopupItem = CanCloseAll( aIndex );
+    iPopup->SetItemDimmed( EFswCmdCloseAll, !showPopupItem );
+    showPopUp = showPopUp || showPopupItem;
+
+    if(showPopUp)
+        {
+        // give feedback
+        LaunchPopupFeedback();
+        // save index for later use & show popup
+        iAppIndexForPopup = aIndex;
+        iPopup->SetPosition( aPoint, CAknStylusPopUpMenu::EPositionTypeLeftBottom );
+        iPopup->ShowMenu();
+        }
+    return showPopUp;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::Count
+// -----------------------------------------------------------------------------
+//
+TInt CHgTeleportFastSwapArea::Count() const
+    {
+    return iArray.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::SetDataChangeObserver
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::SetDataChangeObserver(
+        MHgTeleportDataChangeObserver* aDcObserver )
+    {
+    iDcObserver = aDcObserver;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::NotifyChange
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::NotifyChange()
+    {
+    if ( iDcObserver )
+        {
+        iDcObserver->DataChanged( this, Count() );
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::SwapApplicationOrder
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::SwapApplicationOrder( 
+    RPointerArray<CHgFswEntry>& aArray )
+    {
+    for ( TInt i = 0; i < aArray.Count(); ++i )
+        {
+        if( aArray[i]->AppUid() == KAiUid )
+            {
+            CHgFswEntry* homescreenEntry(0);
+            homescreenEntry = aArray[i];
+            aArray.Remove(i);
+            aArray.Insert(homescreenEntry, KAiPosition);
+            break;
+            }
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::PreferredImageSize
+// -----------------------------------------------------------------------------
+//
+TSize CHgTeleportFastSwapArea::PreferredImageSize()
+    {
+#ifndef TASKSWITCHER_USE_CUSTOM_LAYOUT
+    TAknLayoutRect gridImage;
+    TRAP_IGNORE(
+        RArray<TAknLayoutRect> rects;
+        CleanupClosePushL(rects);
+        rects.ReserveL(KLayoutItemCount);
+        GetFastSwapAreaRects(rects);
+        gridImage = rects[2];
+        CleanupStack::PopAndDestroy(&rects);
+        );
+    return gridImage.Rect().Size();
+#else
+    return TSize( KFswImageSize, KFswImageSize );
+#endif
+    }
+    
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::GridItemCount
+// -----------------------------------------------------------------------------
+//
+TInt CHgTeleportFastSwapArea::GridItemCount()
+    {
+    return iGrid->Model()->ItemTextArray()->MdcaCount();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::HandleListBoxEventL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType)
+    {
+    if ( aListBox == iGrid )
+        {
+        switch ( aEventType )
+            {
+            case EEventEnterKeyPressed:
+            case EEventItemClicked:
+                {
+                if (!iLongTap)
+                    {
+                    SwitchToApp(SelectedIndex());
+                    }
+                }
+                break;
+            case EEventPenDownOnItem:
+                {
+                iGrid->HideHighlight();
+                iGrid->ShowHighlight();
+                if (!iLongTap )
+                    {
+                    iHighlightTimer->Cancel();
+                    iHighlightTimer->After(KHighlighActivationTime);
+                    }
+                }
+                break;
+            default:
+                break;
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::CalculateSizePreserveRatio
+// --------------------------------------------------------------------------
+//
+TSize CHgTeleportFastSwapArea::CalculateSizePreserveRatio(
+        const TSize& aTargetAreaSize,
+        const TSize& aSourceSize )
+    {
+    TSize sz;
+    if ( aSourceSize.iWidth > aSourceSize.iHeight )
+        {
+        sz.iWidth = aTargetAreaSize.iWidth;
+        TReal ratio = aSourceSize.iWidth / (TReal) aSourceSize.iHeight;
+        sz.iHeight = sz.iWidth / ratio;
+        }
+    else
+        {
+        sz.iHeight = aTargetAreaSize.iHeight;
+        TReal ratio = aSourceSize.iHeight / (TReal) aSourceSize.iWidth;
+        sz.iWidth = sz.iHeight / ratio;
+        }
+    return sz;
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::SelectNextItem
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::SelectNextItem()
+    {
+    iKeyEvent = ETrue;
+    TBool forceRedraw(ETrue);
+    TBool animate(ETrue);
+    TInt selectedItem = SelectedIndex();
+    selectedItem++;
+    if ( selectedItem == GridItemCount() )
+        {
+        // Last item is selected, move to first one
+        selectedItem = 0;
+        animate = EFalse;
+        }
+    iGrid->SetCurrentItemIndex(selectedItem);
+    UpdateGrid(forceRedraw, animate);
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ShowHiglight
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::ShowHighlight()
+    {
+    iGrid->ShowHighlight();
+    UpdateGrid(ETrue, EFalse);
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::CenterItem
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::CenterItem(TInt aRedrawDelay)
+    {
+    if( iMaxItemsOnScreen < GridItemCount() )
+        {
+        TInt visibleItem = ViewToVisibleItem( ViewPos() );
+        if(iKeyEvent)
+            {
+            visibleItem = SelectedIndex();
+            }
+        iGrid->SetCurrentDataIndex( visibleItem );
+        }
+
+    iUpdateGridTimer->Cancel();
+    iUpdateGridTimer->After(aRedrawDelay);
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::GridWorldSize
+// --------------------------------------------------------------------------
+//
+TSize CHgTeleportFastSwapArea::GridWorldSize()
+    {
+    return TSize( GridItemCount() * iGridItemWidth, Rect().Height() );
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::UpdateGrid
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::UpdateGrid( TBool aForceRedraw, TBool aAnimate )
+    {
+    TPoint targetPoint = ItemViewPosition( SelectedIndex() );
+    if ( aForceRedraw || targetPoint.iX != ViewPos().iX )
+        {
+        if ( aAnimate )
+            {
+            iEvtHandler.Animate( targetPoint );
+            }
+        else
+            {
+            MoveOffset(targetPoint);
+            iEvtHandler.StopAnimation();
+            }
+        if ( aForceRedraw )
+            {
+            iGrid->DrawNow();
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::HandleAppKey
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::HandleAppKey(TInt aType)
+    {
+    if( aType == KAppKeyTypeShort )
+        {
+        if(iGrid->IsHighlightVisible())
+            {
+            SelectNextItem();
+            }
+        else
+            {
+            ShowHighlight();
+            }
+        }
+    else if( aType == KAppKeyTypeLong )
+        {
+        SwitchToApp( SelectedIndex() );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::MoveOffset
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::MoveOffset(const TPoint& aPoint)
+    {
+    HGLOG_CONTEXT( CHgTeleportFastSwapArea::MoveOffset, HGLOG_LOCAL );
+    HGLOG2_IN("Old position x: %d, y:%d", ViewPos().iX, ViewPos().iY);
+    HGLOG2_IN("New position x: %d, y:%d", aPoint.iX, aPoint.iY);
+    HGLOG_OUT();
+    
+    TInt currentXPos = aPoint.iX;
+    currentXPos -= Rect().Width() / 2;
+    TRect gridViewRect = Rect();
+    gridViewRect.iTl.iX = -currentXPos;
+    // Take edge offset into account
+    gridViewRect.iTl.iX += Rect().iTl.iX;
+    if(GridItemCount() <= iMaxItemsOnScreen)
+        {
+        // Center view
+        gridViewRect.iTl.iX += ( Rect().Width() - GridItemCount() * iGridItemWidth ) / 2;
+        }
+    iGrid->SetRect( gridViewRect );
+    DrawNow();
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::Tap
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::TapL(const TPoint& aPoint)
+    {
+    iLongTap = EFalse;
+    if(iGrid->Rect().Contains(aPoint))
+        {
+        //provide tap pointer event to grid
+        iGrid->HandlePointerEventL(iTapEvent);
+        }
+    else
+        {
+        //move task switcher to background
+        iEikonEnv->EikAppUi()->HandleCommandL(EAknSoftkeyExit);
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::LongTap
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::LongTapL(const TPoint& aPoint)
+    {
+    iLongTap = ETrue;
+    TInt index(KErrNotFound);
+    if( iGrid->GridView()->XYPosToItemIndex(aPoint,index) )
+        {
+        if ( AknLayoutUtils::LayoutMirrored() )
+            {
+            // Calculate logical item index
+            index = GridItemCount() - 1 - index;
+            }
+        SaveSelectedIndex();
+        iGrid->HandlePointerEventL(iTapEvent);
+        if ( !ShowPopupL(index, aPoint) )
+            {
+            TapL(aPoint);
+            }
+        }
+    else
+        {
+        TapL(aPoint);
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::Drag
+// --------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::Drag(
+    const MAknTouchGestureFwDragEvent& /*aEvent*/)
+    {
+    iGrid->HideHighlight();
+    CenterItem( KUpdateGridTime );
+    DrawNow();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ViewSize
+// -----------------------------------------------------------------------------
+//
+TSize CHgTeleportFastSwapArea::ViewSize()
+    {
+    return TSize(Rect().Width(), Rect().Height());  
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::Stop
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::Stop()
+    {    
+    CenterItem( KUpdateGridTime );
+    DrawNow();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ViewSize
+// -----------------------------------------------------------------------------
+//
+TPoint CHgTeleportFastSwapArea::ViewPos() const
+    {
+    TPoint retVal;
+    retVal.iY = iGrid->Rect().iTl.iY + Rect().Height() / 2;
+    retVal.iX = - (iGrid->Rect().iTl.iX - Rect().iTl.iX) + Rect().Width() / 2 ;
+    TInt gridItemCount = iGrid->Model()->ItemTextArray()->MdcaCount();
+    if( gridItemCount <= iMaxItemsOnScreen)
+        {
+        // View centered
+        retVal.iX += ( Rect().Width() - gridItemCount * iGridItemWidth ) / 2;
+        }
+    return retVal;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ItemPosition
+// -----------------------------------------------------------------------------
+//
+TPoint CHgTeleportFastSwapArea::ItemViewPosition( TInt aItemIdx )
+    {
+    TPoint retVal = Rect().iTl;
+    if ( aItemIdx == 0 )
+        {
+        // First item
+        if( AknLayoutUtils::LayoutMirrored() )
+            {
+            if ( GridItemCount() > iMaxItemsOnScreen )
+                {
+                retVal.iX = GridWorldSize().iWidth - Rect().Width();
+                }
+            else
+                {
+                retVal.iX = 0;
+                }
+            }
+        else // normal layout
+            {
+            retVal.iX = 0;
+            }
+        }
+    else if ( aItemIdx == GridItemCount() - 1 )
+        {
+        // Last item selected
+        if( AknLayoutUtils::LayoutMirrored() )
+            {
+            retVal.iX = 0;
+            }
+        else // normal layout
+            {
+            if ( GridItemCount() > iMaxItemsOnScreen )
+                {
+                retVal.iX = GridWorldSize().iWidth - Rect().Width();
+                }
+            else
+                {
+                retVal.iX = 0;
+                }
+            }
+        }
+    else
+        {
+        // Middle item
+        TInt screenMiddleItemOffset = ( Rect().Width() - iGridItemWidth ) / 2;
+        if( AknLayoutUtils::LayoutMirrored() )
+            {
+            retVal.iX = iGridItemWidth * ( GridItemCount() - 1 - aItemIdx ) - screenMiddleItemOffset;
+            }
+        else // normal layout
+            {
+            retVal.iX = iGridItemWidth * aItemIdx - screenMiddleItemOffset;
+            }
+        if ( retVal.iX < 0 )
+            {
+            retVal.iX = 0;
+            }
+        else if ( retVal.iX + Rect().Width() > GridWorldSize().iWidth )
+            {
+            retVal.iX = GridWorldSize().iWidth - Rect().Width();
+            }
+        }
+    
+    // Return middle of the view rectangle
+    retVal.iX += Rect().Width() / 2;
+    
+    return retVal;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::ViewToVisibleItem
+// -----------------------------------------------------------------------------
+//
+TInt CHgTeleportFastSwapArea::ViewToVisibleItem( const TPoint aViewPos )
+    {
+    TInt retVal(0);
+    TPoint absViewPos = aViewPos;
+    absViewPos.iX -= Rect().Width() / 2;
+    if ( absViewPos.iX < 0 )
+        {
+        if ( AknLayoutUtils::LayoutMirrored() )
+            {
+            // View crossed left border of grid world rect, last item selected
+            retVal = GridItemCount() - 1;
+            }
+        else // normal layout
+            {
+            // View crossed left border of grid world rect, first item selected
+            retVal = 0;
+            }
+        }
+    else if ( absViewPos.iX + Rect().Width() > GridWorldSize().iWidth )
+        {
+        if ( AknLayoutUtils::LayoutMirrored() )
+            {
+            // View crossed right border of grid world rect, first item selected
+            retVal = 0;
+            }
+        else // normal layout
+            {
+            // View crossed right border of grid world rect, last item selected
+            retVal = GridItemCount() - 1;
+            }
+        }
+    else
+        {
+        TInt offsetCheck = GridWorldSize().iWidth;
+        // View inside of grid world rect
+        for ( TInt i = 0 ; i < GridItemCount(); i++ )
+            {
+            TInt offset = aViewPos.iX - ItemViewPosition( i ).iX;
+            if ( Abs( offset ) <= offsetCheck )
+                {
+                offsetCheck = Abs( offset );
+                retVal = i;
+                }
+            else
+                {
+                break;
+                }
+            }
+        }
+    return retVal;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapArea::LaunchPopupFeedback
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapArea::LaunchPopupFeedback()
+    {
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        MTouchFeedback* feedback = MTouchFeedback::Instance();
+        if ( feedback )
+            {
+            TTouchLogicalFeedback fbLogicalType = ETouchFeedbackPopUp;
+            if ( CAknTransitionUtils::TransitionsEnabled(
+                 AknTransEffect::EComponentTransitionsOff ) )
+                {
+                fbLogicalType = ETouchFeedbackIncreasingPopUp;
+                }
+            feedback->InstantFeedback( this,
+                                       fbLogicalType,
+                                       ETouchFeedbackVibra,
+                                       TPointerEvent() );
+            }
+        }
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleportfastswapgrid.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,625 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportfastswapgrid.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Teleport Fast Swap area UI
+ *  Version     : %version:  19 %
+ *
+ *  Copyright © 2009 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+
+#include <avkon.mbg>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <AknsFrameBackgroundControlContext.h>
+#include <touchfeedback.h>
+
+#include "hgteleportfastswapgrid.h"
+
+// TODO: Layout update
+const TInt KCloseIconSize = 30;
+
+
+ /* ================================================================================
+  * CHgTeleportFastSwapGrid
+  * ================================================================================
+  */
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::CHgTeleportFastSwapGrid
+// -----------------------------------------------------------------------------
+//
+CHgTeleportFastSwapGrid::CHgTeleportFastSwapGrid()
+: CAknGrid(),
+  iCloseIconHitIdx( KErrNotFound ),
+  iBehaviour( ETouchOnly ),
+  iHighlightVisible( EFalse )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::~CHgTeleportFastSwapGrid
+// -----------------------------------------------------------------------------
+//
+CHgTeleportFastSwapGrid::~CHgTeleportFastSwapGrid()
+    {
+    iCloseItems.Close();
+    delete iBgContext;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::ConstructL( const CCoeControl* aParent )
+    {
+    CAknGrid::ConstructL( aParent, EAknListBoxSelectionGrid );
+    SetPrimaryScrollingType(CAknGridView::EScrollFollowsItemsAndLoops);
+    SetSecondaryScrollingType(CAknGridView::EScrollFollowsItemsAndLoops);
+    iBgContext = CAknsFrameBackgroundControlContext::NewL(
+               KAknsIIDQsnFrPopup,
+               TRect(),
+               TRect(),
+               ETrue );
+    iBgContext->SetCenter( KAknsIIDQsnFrPopupCenter );
+    iVisibleViewRect = TRect( 0, 0, 0, 0 );
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::HandlePointerEventL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::HandlePointerEventL( const TPointerEvent &aPointerEvent )
+    {
+    TBool eventHandled( EFalse );
+    if ( aPointerEvent.iType == TPointerEvent::EButton1Up &&
+         iCloseIconHitIdx == KErrNotFound )
+        {
+        // Check if close icon has been hit
+        // Find hit item
+        TInt hitItem( KErrNotFound );
+        for ( TInt i = 0; i < Model()->NumberOfItems(); i++ )
+            {
+            if ( GridView()->XYPosToItemIndex( aPointerEvent.iParentPosition, i ) )
+                {
+                hitItem = i;
+                break;
+                }
+            }
+        if ( hitItem != KErrNotFound )
+            {
+            // Item found, check if close icon has been hit
+            TPoint itemPos = GridView()->ItemPos( hitItem );
+            TSize itemSize = GridView()->ItemSize( hitItem );
+            TRect itemRect( itemPos, itemSize );
+            CHgTeleportGridItemDrawer* itemDrawer =
+                static_cast<CHgTeleportGridItemDrawer*>( ItemDrawer() );
+            TRect closeIconRect = itemDrawer->GetCloseIconRect( itemRect );
+            if ( closeIconRect.Contains( aPointerEvent.iParentPosition ) )
+                {
+                // Close icon hit
+                iCloseIconHitIdx = hitItem;
+                eventHandled = ETrue;
+                // Hide highlight to mark close icon
+                HideHighlight();
+                // Update current item and redraw grid
+                SetCurrentItemIndex( hitItem );
+                DrawNow();
+                if ( iFastSwapGridObserver )
+                    {
+                    MTouchFeedback* feedback = MTouchFeedback::Instance();
+                    feedback->InstantFeedback(this,
+                                              ETouchFeedbackBasicButton, 
+                                              ETouchFeedbackVibra, 
+                                              aPointerEvent);
+                    iFastSwapGridObserver->HandleCloseEventL( hitItem );
+                    }
+                ResetCloseHit();
+                if ( GridBehaviour() == EHybrid )
+                    {
+                    ShowHighlight();
+                    }
+                else
+                    {
+                    Redraw();
+                    }
+                }
+            }
+        }
+    
+    if ( !eventHandled )
+        {
+        CAknGrid::HandlePointerEventL( aPointerEvent );
+        Redraw();
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::HandleDeviceStateChanged
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::HandleDeviceStateChanged( TChangeType aChangeType )
+    {
+    if ( aChangeType == ESkin )
+        {
+        LoadCloseIcon();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::MopSupplyObject
+// -----------------------------------------------------------------------------
+//
+TTypeUid::Ptr CHgTeleportFastSwapGrid::MopSupplyObject( TTypeUid aId )
+    {
+    if ( aId.iUid == MAknsControlContext::ETypeId )
+        {
+        return MAknsControlContext::SupplyMopObject( aId, iBgContext );
+        }
+    return CCoeControl::MopSupplyObject( aId );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::HandleResourceChange
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::HandleResourceChange( TInt aType )
+    {
+    if ( aType != KEikDynamicLayoutVariantSwitch )
+        {
+        CAknGrid::HandleResourceChange( aType );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::SizeChanged
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::SizeChanged()
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::SetFastSwapGridObserver
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::SetFastSwapGridObserver( MHgTeleportFastSwapGridObserver* aObserver )
+    {
+    iFastSwapGridObserver = aObserver;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::CreateItemDrawerL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::CreateItemDrawerL()
+    {
+    TRect availableRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, availableRect);
+    TAknLayoutRect fastSwapAreaPane;
+    TInt variety = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+    fastSwapAreaPane.LayoutRect( availableRect,
+            AknLayoutScalable_Apps::tport_appsw_pane( variety ) );
+    const TInt leftOffset = fastSwapAreaPane.Rect().iTl.iX;
+    const TInt rightOffset = availableRect.Width() - fastSwapAreaPane.Rect().iBr.iX;
+    
+    CFormattedCellGridData* data = CFormattedCellGridData::NewL();
+    CleanupStack::PushL( data );
+    CHgTeleportGridItemDrawer* itemDrawer =
+        new ( ELeave ) CHgTeleportGridItemDrawer( this, data );
+    CleanupStack::PushL( itemDrawer );
+    itemDrawer->SetEdgeOffset( leftOffset, rightOffset );
+    iItemDrawer = itemDrawer;
+    CleanupStack::Pop( itemDrawer );
+    CleanupStack::Pop( data );
+    LoadCloseIcon();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::SetCloseItemsL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::SetCloseItemsL( RArray<TInt>& aItemIndex )
+    {
+    iCloseItems.Close();
+    for ( TInt i = 0; i < aItemIndex.Count(); i++ )
+        {
+        iCloseItems.AppendL( aItemIndex[i] );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::CanCloseItem
+// -----------------------------------------------------------------------------
+//
+TBool CHgTeleportFastSwapGrid::CanCloseItem( TInt aItemIndex )
+    {
+    return iCloseItems.Find(aItemIndex) != KErrNotFound;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::ItemCloseHit
+// -----------------------------------------------------------------------------
+//
+TBool CHgTeleportFastSwapGrid::IsItemCloseHit( TInt aItemIndex )
+    {
+    return iCloseIconHitIdx == aItemIndex;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::ResetCloseHit
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::ResetCloseHit()
+    {
+    iCloseIconHitIdx = KErrNotFound;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::SetBehaviour
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::SetGridBehaviour( TFastSwapGridBehaviour aBehaviour )
+    {
+    iBehaviour = aBehaviour;
+    switch ( iBehaviour )
+        {
+        case ETouchOnly:
+            {
+            HideHighlight();
+            }
+            break;
+        default:
+            {
+            ShowHighlight();
+            }
+            break;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::GridBehaviour
+// -----------------------------------------------------------------------------
+//
+CHgTeleportFastSwapGrid::TFastSwapGridBehaviour CHgTeleportFastSwapGrid::GridBehaviour()
+    {
+    return iBehaviour;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::ShowHighlight
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::ShowHighlight()
+    {
+    if ( !iHighlightVisible )
+        {
+        // Draw highlight
+        iHighlightVisible = ETrue;
+        Redraw();
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::HideHighlight
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::HideHighlight()
+    {
+    if ( iHighlightVisible )
+        {
+        iHighlightVisible = EFalse;
+        Redraw();
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::IsHighlightVisible
+// -----------------------------------------------------------------------------
+//
+TBool CHgTeleportFastSwapGrid::IsHighlightVisible()
+    {
+    return iHighlightVisible;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::SetVisibleViewRect
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::SetVisibleViewRect( const TRect aRect )
+    {
+    iVisibleViewRect = aRect;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::VisibleViewRect
+// -----------------------------------------------------------------------------
+//
+TRect CHgTeleportFastSwapGrid::VisibleViewRect()
+    {
+    TRect retVal;
+    TRect emptyRect = TRect( 0, 0, 0, 0 );
+    if ( iVisibleViewRect == emptyRect )
+        {
+        retVal = Rect();
+        }
+    else
+        {
+        retVal = iVisibleViewRect;
+        }
+    return retVal;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::LoadCloseIconL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::LoadCloseIcon()
+    {
+    // Load and set close icon
+    CFbsBitmap* icon = NULL;
+    CFbsBitmap* mask = NULL;
+
+    TRAP_IGNORE(AknsUtils::CreateIconLC( AknsUtils::SkinInstance(),
+                KAknsIIDQgnIndiItutListCollapse,
+                icon,
+                mask,
+                KAvkonBitmapFile,
+                EMbmAvkonQgn_indi_button_preview_close,
+                EMbmAvkonQgn_indi_button_preview_close_mask
+                );
+                CleanupStack::Pop( 2 ); // codescanner::cleanup
+                );
+
+    // TODO: Layout update
+    AknIconUtils::SetSize( icon, TSize( KCloseIconSize, KCloseIconSize ), EAspectRatioPreserved );
+    AknIconUtils::SetSize( mask, TSize( KCloseIconSize, KCloseIconSize ), EAspectRatioPreserved );
+
+    static_cast<CHgTeleportGridItemDrawer*>(iItemDrawer)->SetCloseIcon( icon, mask );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportFastSwapGrid::Redraw
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapGrid::Redraw()
+    {
+    DrawDeferred();
+    CCoeControl* ctrlToRedraw = Parent();
+    if ( ctrlToRedraw )
+        {
+        ctrlToRedraw->DrawDeferred();
+        ctrlToRedraw = ctrlToRedraw->Parent();
+        if ( ctrlToRedraw )
+            {
+            ctrlToRedraw->DrawNow();
+            }
+        }
+    }
+
+
+/* ================================================================================
+ * CHgTeleportGridItemDrawer
+ * ================================================================================
+ */
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridItemDrawer::CHgTeleportGridItemDrawer
+// -----------------------------------------------------------------------------
+//
+CHgTeleportGridItemDrawer::CHgTeleportGridItemDrawer(
+        CHgTeleportFastSwapGrid* aGrid,
+        CFormattedCellListBoxData* aData )
+: CFormattedCellListBoxItemDrawer( aGrid->Model(),
+        NULL,
+        aData ),
+  iGrid( aGrid )
+    {
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, iScreenRect);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridItemDrawer::~CHgTeleportGridItemDrawer
+// -----------------------------------------------------------------------------
+//
+CHgTeleportGridItemDrawer::~CHgTeleportGridItemDrawer()
+    {
+    delete iCloseIcon;
+    delete iCloseIconMask;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridItemDrawer::SetCloseIcon
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportGridItemDrawer::SetCloseIcon( CFbsBitmap* aBmp, CFbsBitmap* aMask )
+    {
+    delete iCloseIcon;
+    iCloseIcon = aBmp;
+    delete iCloseIconMask;
+    iCloseIconMask = aMask;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridItemDrawer::GetCloseIconRect
+// -----------------------------------------------------------------------------
+//
+TRect CHgTeleportGridItemDrawer::GetCloseIconRect( const TRect& aItemRect ) const
+    {
+    // TODO: layout update
+    const TInt KRightMargin = 7;
+    const TInt KTopMargin = 34;
+    TRect retVal( TPoint(aItemRect.iBr.iX - KCloseIconSize - KRightMargin,
+                         aItemRect.iTl.iY + KTopMargin),
+                         TSize( KCloseIconSize, KCloseIconSize ) );
+    return retVal;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridItemDrawer::SetEdgeOffset
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportGridItemDrawer::SetEdgeOffset( TInt aLeftOffset, TInt aRightOffset )
+    {
+    iLeftOffset = aLeftOffset;
+    iRightOffset = aRightOffset;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridItemDrawer::DrawActualItem
+// -----------------------------------------------------------------------------
+//
+ void CHgTeleportGridItemDrawer::DrawActualItem( TInt aItemIndex, const TRect& aActualItemRect,
+                                                 TBool aItemIsCurrent, TBool aViewIsEmphasized,
+                                                 TBool aViewIsDimmed, TBool aItemIsSelected ) const
+    {
+    if ( IsItemRectVisible( aActualItemRect ) )
+        {
+        // Calculate offset of the visible rectangle
+        TRect drawRect = aActualItemRect;
+        if ( drawRect.iTl.iX < iLeftOffset )
+            {
+            drawRect.iTl.iX = iLeftOffset;
+            }
+        if ( iScreenRect.Width() - drawRect.iBr.iX < iRightOffset )
+            {
+            drawRect.iBr.iX = iScreenRect.Width() - iRightOffset;
+            }
+        iGc->SetClippingRect(drawRect);
+        
+        // Check for item highlight
+        TBool itemIsCurrent = !iGrid->IsHighlightVisible() ? EFalse : aItemIsCurrent;
+        
+        // Draw item
+        CFormattedCellListBoxItemDrawer::DrawActualItem(aItemIndex, aActualItemRect,
+                itemIsCurrent, aViewIsEmphasized, aViewIsDimmed, aItemIsSelected );
+        
+        if ( iGrid->CanCloseItem( aItemIndex ) && iCloseIcon && iCloseIconMask )
+            {
+            TRect closeIconRect = GetCloseIconRect( aActualItemRect );
+            // Draw frame
+            // TODO: layout update
+            const TInt KFrameGrow = 5;
+            TRect innerRect = closeIconRect;
+            TRect outerRect = innerRect;
+            outerRect.Grow(KFrameGrow, KFrameGrow);
+            MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+            if ( iGrid->IsItemCloseHit( aItemIndex ) )
+                {
+                AknsDrawUtils::DrawFrame(skin, *iGc, outerRect, innerRect,
+                        KAknsIIDQgnFrSctrlButtonPressed, KAknsIIDQgnFrSctrlButtonCenterPressed);
+                }
+            else
+                {
+                AknsDrawUtils::DrawFrame(skin, *iGc, outerRect, innerRect,
+                        KAknsIIDQgnFrSctrlButton, KAknsIIDQgnFrSctrlButtonCenter);
+                }
+            // Draw close icon
+            TRect sourceRect( TPoint(0,0), iCloseIcon->SizeInPixels() );
+            iGc->DrawBitmapMasked( closeIconRect, iCloseIcon, sourceRect, iCloseIconMask, ETrue );
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridItemDrawer::DrawActualItem
+// -----------------------------------------------------------------------------
+//
+TBool CHgTeleportGridItemDrawer::IsItemRectVisible( const TRect& aItemRect ) const
+    {
+    TBool retVal( EFalse );
+    TRect viewRect = iGrid->VisibleViewRect();
+    if ( // left edge of item rectangle on screen
+         ( aItemRect.iTl.iX >= viewRect.iTl.iX && aItemRect.iTl.iX <= viewRect.iBr.iX ) ||
+         // right edge of item rectangle on screen
+         ( aItemRect.iBr.iX >= viewRect.iTl.iX && aItemRect.iBr.iX <= viewRect.iBr.iX )
+        )
+        {
+        retVal = ETrue;
+        }
+    return retVal;
+    }
+ 
+ 
+ 
+ /* ================================================================================
+  * CHgTeleportGridHighlightTimer
+  * ================================================================================
+  */
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridHighlightTimer::CHgTeleportGridHighlightTimer
+// -----------------------------------------------------------------------------
+//
+CHgTeleportFastSwapTimer::CHgTeleportFastSwapTimer( MHgTeleportFastSwapTimerObserver& aObserver )
+: CTimer( EPriorityStandard ),
+  iObserver( &aObserver )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridHighlightTimer::CHgTeleportGridHighlightTimer
+// -----------------------------------------------------------------------------
+//
+CHgTeleportFastSwapTimer::~CHgTeleportFastSwapTimer()
+    {
+    Cancel();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridHighlightTimer::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapTimer::ConstructL()
+    {
+    CTimer::ConstructL();
+    CActiveScheduler::Add( this );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportGridHighlightTimer::CHgTeleportGridHighlightTimer
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportFastSwapTimer::RunL()
+    {
+    iObserver->TimerCompletedL(this);
+    }
+ 
+ // End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleportphysics.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,212 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportphysics.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Application class
+ *  Version     : %version:  4 %
+ *
+ *  Copyright © 2009 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ * 
+ */
+
+#include <aknphysicsobserveriface.h>
+
+#include "hgteleportphysics.h"
+
+const TInt KSingleItemChangeAnimTime = 1000000; // 1 second
+const TInt KAnimationFrameCount = 15; // 15 frames per second
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::CHgTeleportPhysics
+// -----------------------------------------------------------------------------
+//
+CHgTeleportPhysics::CHgTeleportPhysics( MAknPhysicsObserver& aObserver ) :
+    CActive( EPriorityStandard ), iObserver( aObserver )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::NewLC
+// -----------------------------------------------------------------------------
+//
+CHgTeleportPhysics* CHgTeleportPhysics::NewLC( MAknPhysicsObserver& aObserver )
+    {
+    CHgTeleportPhysics* self = new ( ELeave ) CHgTeleportPhysics( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::NewL
+// -----------------------------------------------------------------------------
+//
+CHgTeleportPhysics* CHgTeleportPhysics::NewL( MAknPhysicsObserver& aObserver )
+    {
+    CHgTeleportPhysics* self = CHgTeleportPhysics::NewLC( aObserver );
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportPhysics::ConstructL()
+    {
+    User::LeaveIfError( iTimer.CreateLocal() );
+    CActiveScheduler::Add( this );
+    // Animation parameters
+    const TInt KInitValue = 0;
+    iAnimationTickTime = KSingleItemChangeAnimTime / KSingleItemChangeAnimTime;
+    iPhysicsState = EStopped;
+    iAnimationTicks = KInitValue;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::~CHgTeleportPhysics
+// -----------------------------------------------------------------------------
+//
+CHgTeleportPhysics::~CHgTeleportPhysics()
+    {
+    Cancel();
+    iTimer.Close();
+    iAnimationSteps.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportPhysics::DoCancel()
+    {
+    iTimer.Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::StartPhysics
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportPhysics::StartPhysics( const TPoint& aTarget )
+    {
+    Cancel();
+    // Setup animation
+    TPoint currentPoint = iObserver.ViewPosition();
+    if ( currentPoint.iX != aTarget.iX )
+        {
+        iAnimationTicks = 0;
+        if ( CalculateAnimationSteps( aTarget ) == KErrNone )
+            {
+            // Request
+            iTimer.After( iStatus, 0 );
+            SetActive();
+            }
+        else
+            {
+            // If calculation failes (no memory) or there is
+            // only a small step, set view to target
+            iObserver.ViewPositionChanged( aTarget, ETrue, 0);
+            iObserver.PhysicEmulationEnded();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::StopPhysics
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportPhysics::StopPhysics()
+    {
+    Cancel();
+    if ( iPhysicsState == ERunning || iPhysicsState == EFinished )
+        {
+        iObserver.PhysicEmulationEnded();
+        }
+    iPhysicsState = EStopped;
+    iAnimationTicks = 0;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::RunL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportPhysics::RunL()
+    {
+    if ( iPhysicsState == EStopped )
+        {
+        // Start animation
+        iPhysicsState = ERunning;
+        iTimer.After( iStatus, iAnimationTickTime );
+        SetActive();
+        }
+    else if ( iPhysicsState == ERunning )
+        {
+        // Ongoing animation
+        if ( iAnimationTicks >= 0 && iAnimationTicks < KAnimationFrameCount )
+            {
+            iObserver.ViewPositionChanged( iObserver.ViewPosition()+iAnimationSteps[iAnimationTicks], ETrue, 0 );
+            }
+        iAnimationTicks++;
+        if ( iAnimationTicks >= KAnimationFrameCount )
+            {
+            iPhysicsState = EFinished;
+            }
+        iTimer.After( iStatus, iAnimationTickTime );
+        SetActive();
+        }
+    else if ( iPhysicsState == EFinished )
+        {
+        iAnimationTicks = 0;
+        iPhysicsState = EStopped;
+        iObserver.PhysicEmulationEnded();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::RunError
+// -----------------------------------------------------------------------------
+//
+TInt CHgTeleportPhysics::RunError( TInt /*aError*/ )
+    {
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysics::CalculateAnimationSteps
+// -----------------------------------------------------------------------------
+//
+TInt CHgTeleportPhysics::CalculateAnimationSteps( const TPoint& aTarget )
+    {
+    TInt retVal( KErrNone );
+    iAnimationSteps.Reset();
+    retVal = iAnimationSteps.Reserve( KAnimationFrameCount );
+    if ( retVal == KErrNone )
+        {
+        TInt yValue = aTarget.iY;
+        TPoint currentPos = iObserver.ViewPosition();
+        TInt moveLen = aTarget.iX - currentPos.iX;
+        if ( moveLen > KAnimationFrameCount || moveLen < -KAnimationFrameCount )
+            {
+            TInt singleStep = moveLen / KAnimationFrameCount;
+            for ( TInt i = 0; i < KAnimationFrameCount - 1; i++ )
+                {
+                iAnimationSteps.Append( TPoint( singleStep, yValue ) );
+                }
+            TInt lastStep = moveLen - ( ( KAnimationFrameCount - 1 ) * singleStep );
+            iAnimationSteps.Append( TPoint( lastStep, yValue ) );
+            }
+        else
+            {
+            retVal = KErrArgument;
+            }
+        }
+    return retVal;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportapp/src/hgteleportphysicsengine.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,143 @@
+/*
+ * ============================================================================
+ *  Name        : hgteleportphysicsengine.cpp
+ *  Part of     : Hg Teleport
+ *  Description : Teleport physics
+ *  Version     : %version:  5 %
+ *
+ *  Copyright © 2009 Nokia.  All rights reserved.
+ *  This material, including documentation and any related computer
+ *  programs, is protected by copyright controlled by Nokia.  All
+ *  rights are reserved.  Copying, including reproducing, storing,
+ *  adapting or translating, any or all of this material requires the
+ *  prior written consent of Nokia.  This material also contains
+ *  confidential information which may not be disclosed to others
+ *  without the prior written consent of Nokia.
+ * ============================================================================
+ *
+ */
+#include <aknphysics.h>
+
+#include "hgteleportphysicsengine.h"
+#include "hgteleportphysics.h"
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysicsHandler::CHgTeleportPhysicsHandler
+// -----------------------------------------------------------------------------
+//
+CHgTeleportPhysicsEngine::CHgTeleportPhysicsEngine()
+    {
+    // No implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysicsEngine::~CHgTeleportPhysicsEngine
+// -----------------------------------------------------------------------------
+//
+CHgTeleportPhysicsEngine::~CHgTeleportPhysicsEngine()
+    {
+    delete iTeleportPhysics;
+    delete iPhysics;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysicsEngine::NewLC
+// -----------------------------------------------------------------------------
+//
+CHgTeleportPhysicsEngine* CHgTeleportPhysicsEngine::NewLC(
+        MAknPhysicsObserver& aPhysicObserver, CCoeControl& aViewControl)
+    {
+    CHgTeleportPhysicsEngine* self = new (ELeave) CHgTeleportPhysicsEngine();
+    CleanupStack::PushL(self);
+    self->ConstructL(aPhysicObserver, aViewControl);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysicsEngine::NewL
+// -----------------------------------------------------------------------------
+//
+CHgTeleportPhysicsEngine* CHgTeleportPhysicsEngine::NewL(
+        MAknPhysicsObserver& aPhysicObserver, CCoeControl& aViewControl)
+    {
+    CHgTeleportPhysicsEngine* self = CHgTeleportPhysicsEngine::NewLC(
+            aPhysicObserver, aViewControl);
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysicsEngine::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportPhysicsEngine::ConstructL(MAknPhysicsObserver& aPhysicObserver,
+        CCoeControl& aViewControl)
+    {
+    iPhysics = CAknPhysics::NewL(aPhysicObserver, &aViewControl);//TODO:
+    iTeleportPhysics = CHgTeleportPhysics::NewL(aPhysicObserver);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysicsEngine::IsRunning
+// -----------------------------------------------------------------------------
+//
+TBool CHgTeleportPhysicsEngine::IsRunning() const
+    {
+    return iPhysics->OngoingPhysicsAction() != CAknPhysics::EAknPhysicsActionNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysicsEngine::HandleDragEvent
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportPhysicsEngine::HandleDragEvent(
+        AknTouchGestureFw::MAknTouchGestureFwDragEvent& aEvent)
+    {
+    if (AknTouchGestureFw::EAknTouchGestureFwStart == aEvent.State())
+        {
+        iPhysics->StopPhysics();
+        iStartTime.HomeTime();
+        }
+    else if (AknTouchGestureFw::EAknTouchGestureFwOn == aEvent.State())
+        {
+        TPoint deltaPoint(aEvent.PreviousPosition() - aEvent.CurrentPosition());
+        iPhysics->RegisterPanningPosition(deltaPoint);
+        }
+    else //AknTouchGestureFw::EAknTouchGestureFwStop
+        {
+        TPoint drag(aEvent.PreviousPosition() - aEvent.CurrentPosition());
+        iPhysics->StartPhysics(drag, iStartTime);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysicsEngine::Stop
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportPhysicsEngine::Stop()
+    {
+    iPhysics->StopPhysics();
+    iTeleportPhysics->StopPhysics();
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysicsEngine::AnimateToTargetL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportPhysicsEngine::AnimateToTarget(const TPoint& aPoint)
+    {
+    iTeleportPhysics->StartPhysics(aPoint);
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportPhysicsEngine::ReInitPhysicsL
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportPhysicsEngine::ReInitPhysicsL(const TSize& aWorldSize,
+        const TSize& aViewSize, TBool aLandscape)
+    {
+    iPhysics->InitPhysicsL(aWorldSize, aViewSize, aLandscape);
+    }
+
+//End file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportappecom/data/hgteleportappecom.rss	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,49 @@
+/*
+* ============================================================================
+*  Name        : hgteleportappecom.rss
+*  Part of     : Teleport
+*  Description : Ecom registration file for alternate fast swap plugin
+*  Version     : %version: sa1spcx1#2.1.2 %
+*
+*  Copyright (C) 2009 Nokia Corporation.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia Corporation. All rights are reserved. Copying, 
+*  including reproducing, storing,  adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia Corporation. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia Corporation.
+*
+* ============================================================================
+*/
+
+#include <ecom/registryinfo.rh>
+#include "hgteleportappecomconst.hrh"
+#include "akncapserveralternatefspluginconst.hrh"
+
+RESOURCE REGISTRY_INFO theInfo
+    {
+    // UID for the DLL
+    dll_uid = KHgTeleportAppPluginDllUid;
+    // Declare array of interface info
+    interfaces = 
+        {
+        INTERFACE_INFO
+            {
+            // UID of interface that is implemented
+            interface_uid = KAknCapServerAlternateFsPluginInterfaceUid;
+            implementations = 
+                {
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid = KHgTeleportAppPluginImplementationUid;
+                    version_no         = 1;
+                    display_name       = "";
+                    default_data       = "";
+                    opaque_data        = "";
+                    }
+                };
+            }
+        };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportappecom/group/bld.inf	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,29 @@
+/*
+* ============================================================================
+*  Name        : bld.inf
+*  Part of     : Teleport
+*  Description : Teleport application ecom plugin
+*  Version     : %version: 3 %
+*
+*  Copyright © 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+hgteleportappecom.mmp
+
+PRJ_TESTMMPFILES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportappecom/group/hgteleportappecom.mmp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,49 @@
+/*
+* ============================================================================
+*  Name        : hgteleportappecom.cpp
+*  Part of     : Teleport
+*  Description : Teleport application ecom plugin
+*  Version     : %version: 5 %
+*
+*  Copyright © 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+#include "../inc/hgteleportappecomconst.hrh"
+
+TARGET          hgteleportappecom.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D KHgTeleportAppPluginDllUid
+CAPABILITY      CAP_ECOM_PLUGIN
+
+SOURCEPATH      ../src
+SOURCE          proxy.cpp
+SOURCE          hgteleportappecom.cpp
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../trace
+
+APP_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH      ../data
+START RESOURCE  hgteleportappecom.rss
+TARGET          hgteleportappecom.rsc
+TARGETPATH      /resource/plugins
+END
+
+LIBRARY         euser.lib 
+LIBRARY         ecom.lib
+LIBRARY         apgrfx.lib
+LIBRARY         cone.lib
+
+DEBUGLIBRARY    flogger.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportappecom/inc/hgteleportappecom.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,108 @@
+/*
+* ============================================================================
+*  Name        : hgteleportappecom.h
+*  Part of     : Teleport
+*  Description : Teleport application ecom plugin
+*  Version     : %version: sa1spcx1#4.1.3 %
+*
+*  Copyright © 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#ifndef HGTELEPORTAPPECOM_H
+#define HGTELEPORTAPPECOM_H
+
+#include <e32base.h>
+#include <akncapserveralternatefsplugin.h>
+
+/**
+ * Teleport ecom plugin which is loaded by AknCapServer as an alternate Fast 
+ * Swap. Uses P&S to show/dismiss the Teleport application. 
+ */
+class CHgTeleportEcomPlugin : public CAknCapAppServerAlternateFs
+    {
+public:
+    
+    /**
+     * Symbian two phased constructors.
+     *
+     * @return CHgTeleportEcomPlugin pointer.
+     */
+    static CHgTeleportEcomPlugin* NewL();
+    
+    /**
+     * Destructor.
+     */
+    ~CHgTeleportEcomPlugin();
+    
+public: 
+    
+    // From CAknCapAppServerAlternateFs
+    /**
+     * Shows the alternate fast swap.
+     */
+    virtual void Show();
+
+    /**
+     * Dismisses the alternate fast swap.
+     */
+    virtual void Dismiss();
+
+    /**
+     * Checks if alternate fast swap is currently visible.
+     * 
+     * @return ETrue If alternate FS is visible.
+     */    
+    virtual TBool IsVisible();
+
+    /**
+     * Checks if alternate fast swap is ready to be shown.
+     * 
+     * @return ETrue If alternate FS is ready.
+     */    
+    virtual TBool IsReady();
+
+    /**
+     * Forward long app key to the alternate fast swap.
+     */
+    virtual void HandleLongAppKeyPress();
+
+    /**
+     * Forward short app key to the alternate fast swap.
+     */
+    virtual void HandleShortAppKeyPress();
+
+private:
+
+    /**
+     * Default constructor, implicitly called by NewL().
+     */
+    CHgTeleportEcomPlugin();
+    
+    /**
+     * 2nd phase construction, called by NewL().
+     */
+    void ConstructL();
+    
+    /**
+     * Sets the P&S property to given value.
+     * 
+     * @param aValue Value
+     */
+    void SetTeleportStateProperty( TInt aValue );
+    
+    /**
+     * Defines the P&S property.
+     */
+    void DefineTeleportStateProperty();
+
+    };
+    
+#endif // HGTELEPORTAPPECOM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportappecom/inc/hgteleportappecomconst.hrh	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,25 @@
+/*
+* ============================================================================
+*  Name        : hgteleportappecomconst.hrh
+*  Part of     : Teleport
+*  Description : Teleport application ecom plugin UIDs
+*  Version     : %version: 3 %
+*
+*  Copyright © 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+
+#ifndef HGTELEPORTAPPECOMCONST_HRH
+#define HGTELEPORTAPPECOMCONST_HRH
+                          
+#define KHgTeleportAppPluginDllUid 0x2001FD72
+#define KHgTeleportAppPluginImplementationUid 0x2001FD72
+
+#endif // HGTELEPORTAPPECOMCONST_HRH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportappecom/inc/hgteleportappecomlogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* ============================================================================
+*  Name        : hgteleportappecomlogging.h
+*  Part of     : Classic UI / Teleport
+*  Description : Defines logs for hgteleportappecom
+*  Version     : %version:  1 % 
+*
+*  Copyright (c) 2009 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.1.1
+*/
+
+#ifdef _DEBUG
+_LIT( KHgLogFile, "hgteleportappecom.txt" );
+_LIT( KHgLogPath, "teleport" );
+#define _HGLOG_LOG_COMPONENT_ID KHgTeleportAppPluginDllUid
+
+#endif
+#include "hglogging.h"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportappecom/src/hgteleportappecom.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,253 @@
+/*
+ * ===========================================================================
+ *  Name        : hgteleportappecom.cpp
+ *  Part of     : Teleport
+ *  Description : Teleport application ecom plugin
+ *  Version     : %version:  sa1spcx1#8.1.2 %
+ *
+ *  Copyright © 2009 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+ 
+#include <e32property.h>
+#include <apgtask.h>
+#include <eikenv.h>
+
+#include "hgteleportappecomconst.hrh"
+#include "hgteleportappecom.h"
+
+#include "hgteleportappecomlogging.h"
+
+// AknCapServer UID, used for P&S category
+const TUid KTeleportStateCategory = { 0x10207218 };
+
+// Teleport UI, used as P&S key
+const TInt KTeleportStateKey = 0x20016BF0;
+
+// Values for Teleport launching P&S
+const TInt KTeleportBackgroundValue = 1;
+const TInt KTeleportForegroundValue = KTeleportBackgroundValue << 1;
+const TInt KTeleportShortAppKeyPressed = KTeleportForegroundValue << 1;
+const TInt KTeleportLongAppKeyPressed = KTeleportShortAppKeyPressed << 1;
+
+// Teleport application UID, for checking if teleport is running
+const TUid KTeleportAppUidValue = { 0x20016BF0 };
+
+// ---------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::CHgTeleportEcomPlugin()
+// Default constructor for first phase construction.
+// ---------------------------------------------------------------------------
+//
+CHgTeleportEcomPlugin::CHgTeleportEcomPlugin()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::NewL()
+// Standard NewL.
+// ---------------------------------------------------------------------------
+//
+CHgTeleportEcomPlugin* CHgTeleportEcomPlugin::NewL()
+    {
+    CHgTeleportEcomPlugin* self = new ( ELeave ) CHgTeleportEcomPlugin;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::ConstructL()
+// 2nd phase construction.
+// ---------------------------------------------------------------------------
+//
+void CHgTeleportEcomPlugin::ConstructL()
+    {
+    HGLOG_CONTEXT( CHgTeleportEcomPlugin::ConstructL, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    DefineTeleportStateProperty();
+    
+    HGLOG_OUT();
+    }
+
+// ---------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::~CHgTeleportEcomPlugin()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CHgTeleportEcomPlugin::~CHgTeleportEcomPlugin()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::Show
+// ---------------------------------------------------------------------------
+//
+void CHgTeleportEcomPlugin::Show()
+    {
+    HGLOG_CONTEXT( CHgTeleportEcomPlugin::Show, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    TInt value( 0 );
+    RProperty::Get( KTeleportStateCategory, KTeleportStateKey, value );
+    value &= ~KTeleportBackgroundValue;
+    value |= KTeleportForegroundValue;
+    SetTeleportStateProperty( value );  
+    
+    HGLOG_OUT();    
+    }
+
+// ---------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::Dismiss
+// ---------------------------------------------------------------------------
+//
+void CHgTeleportEcomPlugin::Dismiss()
+    {
+    HGLOG_CONTEXT( CHgTeleportEcomPlugin::Dismiss, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    TInt value( 0 );
+    RProperty::Get( KTeleportStateCategory, KTeleportStateKey, value );
+    value &= ~KTeleportForegroundValue;
+    value |= KTeleportBackgroundValue;
+    SetTeleportStateProperty( value );  
+    
+    HGLOG_OUT();     
+    }
+
+// ---------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::HandleLongAppKeyPress
+// ---------------------------------------------------------------------------
+//
+void CHgTeleportEcomPlugin::HandleLongAppKeyPress()
+    {
+    HGLOG_CONTEXT( CHgTeleportEcomPlugin::Show, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    TInt value( 0 );
+    RProperty::Get( KTeleportStateCategory, KTeleportStateKey, value );
+    value &= ~KTeleportShortAppKeyPressed;
+    value |= KTeleportLongAppKeyPressed;
+    SetTeleportStateProperty( value );    
+    
+    HGLOG_OUT();    
+    }
+
+// ---------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::HandleShortAppKeyPress
+// ---------------------------------------------------------------------------
+//
+void CHgTeleportEcomPlugin::HandleShortAppKeyPress()
+    {
+    HGLOG_CONTEXT( CHgTeleportEcomPlugin::Dismiss, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    TInt value( 0 );
+    RProperty::Get( KTeleportStateCategory, KTeleportStateKey, value );
+    value &= ~KTeleportLongAppKeyPressed;
+    value |= KTeleportShortAppKeyPressed;
+    SetTeleportStateProperty( value ); 
+    
+    HGLOG_OUT();     
+    }
+
+// ---------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::IsVisible
+// ---------------------------------------------------------------------------
+//
+TBool CHgTeleportEcomPlugin::IsVisible()
+    {
+    HGLOG_CONTEXT( CHgTeleportEcomPlugin::IsVisible, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    TInt value( 0 );
+    RProperty::Get( KTeleportStateCategory, KTeleportStateKey, value );
+    if ( value & KTeleportForegroundValue )
+        {
+        HGLOG_OUT();
+        return ETrue;
+        }
+    HGLOG_OUT();
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::IsReady
+// ---------------------------------------------------------------------------
+//
+TBool CHgTeleportEcomPlugin::IsReady()
+    {
+    HGLOG_CONTEXT( CHgTeleportEcomPlugin::IsReady, HGLOG_LOCAL );
+    HGLOG_IN();
+
+    TBool ret = EFalse;    
+    CEikonEnv* eikonEnv = CEikonEnv::Static();
+    
+    if ( eikonEnv )
+        {
+        TApaTaskList taskList( eikonEnv->WsSession() );
+        TApaTask task = taskList.FindApp( KTeleportAppUidValue ); 
+    
+        if ( task.Exists() )
+            {
+            ret = ETrue;
+            }
+        }
+    
+    HGLOG1_OUT( "IsReady returns: %d", ret );
+    return ret;
+    }
+    
+// -----------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::SetTeleportStateProperty
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEcomPlugin::SetTeleportStateProperty( TInt aValue )
+    {
+    HGLOG_CONTEXT( CHgTeleportEcomPlugin::SetTeleportShowProperty, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    if ( RProperty::Set( 
+            KTeleportStateCategory, KTeleportStateKey, aValue ) != KErrNone )
+        {
+        DefineTeleportStateProperty();
+        TInt error = 
+            RProperty::Set( KTeleportStateCategory, KTeleportStateKey, aValue );
+        if ( error != KErrNone )
+            {
+            HGLOG1( HGLOG_INFO, "RProperty::Set Error: %d", error ); 
+            }        
+        }
+    
+    HGLOG_OUT();    
+    }
+
+// -----------------------------------------------------------------------------
+// CHgTeleportEcomPlugin::DefineTeleportStateProperty
+// -----------------------------------------------------------------------------
+//
+void CHgTeleportEcomPlugin::DefineTeleportStateProperty()
+    {
+    HGLOG_CONTEXT( CHgTeleportEcomPlugin::DefineTeleportShowProperty, HGLOG_LOCAL );
+    HGLOG_IN();
+    
+    TInt error = RProperty::Define( 
+            KTeleportStateCategory, KTeleportStateKey, RProperty::EInt );
+    if ( error != KErrNone )
+        {
+        HGLOG1( HGLOG_INFO, "RProperty::Define Error: %d", error );
+        }              
+    
+    HGLOG_OUT();
+    }
+
+// End of file 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/hgteleportappecom/src/proxy.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,45 @@
+/*
+* ==============================================================================
+*  Name        : proxy.cpp
+*  Part of     : Teleport
+*  Description : Teleport application ecom plugin
+*  Version     : %version: 2 %
+*
+*  Copyright (c) 2008 Nokia Corporation.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia Corporation. All rights are reserved. Copying, 
+*  including reproducing, storing, adapting or stranslating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia Corporation. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+// INCLUDE FILES
+#include <e32std.h>
+#include <ecom/implementationproxy.h>
+
+#include "hgteleportappecom.h"
+#include "hgteleportappecomconst.hrh"
+
+// Provides a key value pair table, this is used to identify
+// the correct construction function for the requested interface.
+const TImplementationProxy ImplementationTable[] = 
+    {
+    IMPLEMENTATION_PROXY_ENTRY( 
+        KHgTeleportAppPluginImplementationUid,
+        CHgTeleportEcomPlugin::NewL )
+    };
+
+// Function used to return an instance of the proxy table.
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( 
+    TInt& aTableCount )
+    {
+    aTableCount 
+        = sizeof ( ImplementationTable ) / sizeof( TImplementationProxy );
+    return ImplementationTable;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/inc/hggraphicids.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* ==============================================================================
+*  Name        : hggraphicids.h
+*  Part of     : Hg Graphics Loader
+*  Description : Header file containing ID list
+*  Version     : %version: 1 %
+*
+*  Copyright (c) 2007 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#ifndef __HGGRAPHICIDS_H__
+#define __HGGRAPHICIDS_H__
+
+#include <e32base.h>
+
+/**
+ * Logical IDs for all icons used in Teleport.
+ */
+enum THgGraphicId
+    {
+    EHgGraphicIdLAST
+    };
+
+#endif // __HGGRAPHICIDS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/inc/hggraphictab.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,51 @@
+/*
+* ==============================================================================
+*  Name        : hggraphictab.h
+*  Part of     : Hg Graphics Loader
+*  Description : Header file with filename and skin id tables
+*  Version     : %version: 1 %
+*
+*  Copyright (c) 2007 Nokia Corporation.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* ==============================================================================
+*/
+
+#ifndef __HGGRAPHICTAB_H__
+#define __HGGRAPHICTAB_H__
+
+#include <e32base.h>
+
+#include <AknUtils.h>
+#include <AknsUtils.h>          // skinned icons
+#include <AknsConstants.h>      // skinned icon ids
+
+
+/**
+ * Name of image file in case icon is not available from the skin.
+ * Path should not be included.
+ * Use _S( "" ) if skin id should be used instead.
+ * Order and count must match THgGraphicId. (except the last-marker)
+ */
+static const TText* const KHgGraphicFiles[] =
+    {
+    _S( "" )
+    };
+
+/**
+ * Skin related IDs. Not in use yet.
+ * Use all zeros if image file should be used instead.
+ * Order and count must match THgGraphicId. (except the last-marker)
+ */
+static const TAknsItemID KHgGraphicSkinIds[] =
+    {
+    KAknsIIDNone
+    };
+
+#endif // __HGGRAPHICTAB_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/rom/hgteleport.iby	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* ============================================================================
+*  Name        : hgteleport.iby
+*  Part of     : Huriganes
+*  Description : Iby file for teleport
+*  Version     : %version: sa1spcx1#41.1.6 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+#ifndef __HURIGANESTELEPORT_IBY__
+#define __HURIGANESTELEPORT_IBY__
+
+// AknCapServer alternate fast swap plugin
+ECOM_PLUGIN( hgteleportappecom.dll, hgteleportappecom.rsc )
+
+data=DATAZ_/private/10003a3f/apps/hgteleport_reg.rsc                            private/10003a3f/import/apps/hgteleport_reg.rsc
+file=ABI_DIR/BUILD_DIR/hgteleport.exe                                           PROGRAMS_DIR/hgteleport.exe
+
+// backup registration
+data=DATAZ_/private/20016BF0/backup_registration.xml                            private/20016BF0/backup_registration.xml
+
+// stub sis
+data=ZSYSTEM/install/teleport_stub.sis                  system/install/teleport_stub.sis
+
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/rom/hgteleportresources.iby	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,24 @@
+/*
+* ============================================================================
+*  Name        : hgteleportresources.iby
+*  Part of     : Huriganes
+*  Description : Iby file for teleport resources
+*  Version     : %version: sa1spcx1#14.1.2.1.6 %
+*
+*  Copyright © 2008 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+*/
+#ifndef __HURIGANESTELEPORTRES_IBY__
+#define __HURIGANESTELEPORTRES_IBY__
+
+// resources for teleport app
+data=DATAZ_/APP_RESOURCE_DIR/hgteleport.rsc    APP_RESOURCE_DIR/hgteleport.rsc
+
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/sis/stubs/createstubs.bat	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,1 @@
+for %%f in (*.pkg) do makesis -s %%f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/sis/stubs/teleport_stub.pkg	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,25 @@
+; ------------------------------------------------------------------------------
+; HG Teleport stub SIS package file.
+; Used to enable HG Teleport to be updated from ROM with a SIS package.
+; When you add new files into this stub, please remember to update
+; SIS stub with "makesis -s" command.
+; ------------------------------------------------------------------------------
+;
+;Language - standard language definitions
+&EN
+
+; standard SIS file header
+#{"teleport"},(0x20016BF0),1,0,0,TYPE=SA
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+""-"Z:\sys\bin\hgteleport.exe"
+""-"Z:\resource\apps\hgteleport.r??"
+""-"Z:\private\10003a3f\import\apps\hgteleport_reg.rsc"
+
+""-"Z:\sys\bin\hgteleportappecom.dll"
+""-"Z:\resource\plugins\hgteleportappecom.rsc"
Binary file taskswitcher/teleportui/sis/stubs/teleport_stub.sis has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/sis/teleport.pkg	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,25 @@
+; ------------------------------------------------------------------------------
+; HG Teleport stub SIS package file.
+; Used to enable HG Teleport to be updated from ROM with a SIS package.
+; When you add new files into this stub, please remember to update
+; SIS stub with "makesis -s" command.
+; ------------------------------------------------------------------------------
+;
+;Language - standard language definitions
+&EN
+
+; standard SIS file header
+#{"teleport"},(0x20016BF0),1,0,0,TYPE=SA, RU
+
+;Localized Vendor Name
+%{"Nokia"}
+
+;Unique Vendor name
+:"Nokia"
+
+"/epoc32/release/armv5/urel/hgteleport.exe" - "!:\sys\bin\hgteleport.exe"
+"/epoc32/data/z/resource/apps/hgteleport.rsc" - "!:\resource\apps\hgteleport.rsc"
+"/epoc32/data/z/private/10003a3f/apps/hgteleport_reg.rsc" - "!:\private\10003a3f\import\apps\hgteleport_reg.rsc"
+
+"/epoc32/release/armv5/urel/hgteleportappecom.dll" - "!:\sys\bin\hgteleportappecom.dll"
+"/epoc32/data/z/resource/plugins/hgteleportappecom.rsc" - "!:\resource\plugins\hgteleportappecom.rsc"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/trace/hglogging.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,219 @@
+/*
+* ==============================================================================
+*  Name        : hglogging.h
+*  Part of     : Teleport / Teleport UI
+*  Description : Defines all available logging macros.
+*  Version     : %version: 2 %
+*
+*  Copyright © 2008 Nokia. All rights reserved.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia. All rights are reserved. Copying, including 
+*  reproducing, storing, adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia.
+* ==============================================================================
+*/
+
+#ifndef HGLOGLOGUTILS_H
+#define HGLOGLOGUTILS_H
+
+/**
+ * @file
+ * 
+ * TAKING LOGGING INTO USE:
+ * 
+ * This step is needed to do once per component.
+ * 
+ * For each component that uses these common logging macros should specify
+ * their own logging configuration file, which includes this file. In that
+ * configuration file, following constants and macros must be defined.
+ *  For example:
+ * @code
+ * 
+ * _LIT( KHgLogFile, "text_file_for_logging.txt" );
+ * _LIT( KHgLogPath, "folder_for_text_file" );
+ * #define _HGLOG_LOG_COMPONENT_ID <some unique number here>
+ * 
+ * #include "hglogging.h"
+ * 
+ * @/code
+ * 
+ * KHgLogFile   : This is the name of the file, where all the logs for
+ *                this components are being written.
+ * 
+ * KHgLogPath   : This is the folder name under c:\logs, where the file
+ *                is to be stored. For example, if KHgLogPath is "test",
+ *                log file is created into folder c:\logs\test.
+ * 
+ * _HGLOG_LOG_COMPONENT_ID  : Unique number id of the component. This is 
+ *                            for filtering purposes.
+ * 
+ * _HGLOG_RDEBUG    : When defined tracing instead of file logging. 
+ *                    Default is for file logging.
+ * 
+ * --------------------------------------------------------------------------
+ * 
+ * USING LOGGING:
+ * 
+ * Basically the use is simple, register function use with HGLOG_CONTEXT, 
+ * then log function enter by any HGLOG_IN -macro, then possibly use HGLOG
+ * -macros for function logging and finally HGLOG_OUT -macros for returning
+ * from the function.
+ * 
+ * @code
+ * TInt CGood::Example( TInt aSomething )
+ *     {
+ *     // Create log context class, which is maintained for lifetime of the 
+ *     // method. 
+ *     HGLOG_CONTEXT( Example, HGLOG_LOCAL );
+ * 
+ *     // Indicate we are entering the function. 
+ *     HGLOG_IN1( "aSomething contains value %d", aSomething );
+ * 
+ *     // Your buggy code...
+ * 
+ *     // Before leaving, indicate function execution has ended.
+ *     HGLOG_OUT();
+ * 
+ *     return 0;
+ *     }
+ * @/code
+ */
+
+#include <e32def.h>
+#include <e32std.h>
+
+#include "hglogutils.h"
+
+#define HGLOG_API 0
+#define HGLOG_LOCAL 1
+
+#define HGLOG_INFO 0
+#define HGLOG_WARNING 1
+#define HGLOG_ERROR 2
+
+#define HGLOG_ASSERT(_assertion)  __HGLOG_ASSERT_DBG(_assertion) 
+#define HGLOG_TRACE_ASSERT(_assertion) __ASSERT_DEBUG((_assertion), User::Invariant() )
+
+#ifdef _DEBUG
+            
+/*****************************************************************************
+ LOGGING MACROS - LOGGING ON
+*****************************************************************************/             
+
+    /** 
+     * Context initialization 
+     * NOTE: HGLOG_STATIC_CONTEXT is meant for static methods.
+     * 
+     * @param _fn   Name of the function.
+     * @param _vis  Visibility for the client, use values HGLOG_API or HGLOG_LOCAL
+     * @param _thdId For static functions, thread id can be given here.
+     */
+    #define HGLOG_CONTEXT(_fn, _vis ) _THgLogContext _dc((TText*)L ## #_fn, _HGLOG_LOG_COMPONENT_ID, _vis, (TUint)this, RProcess().SecureId().iId )
+    #define HGLOG_STATIC_CONTEXT(_fn, _vis, _thdId) _THgLogContext _dc((TText*)L ## #_fn, _HGLOG_LOG_COMPONENT_ID, _vis, _thdId, RProcess().SecureId().iId )
+
+    /** 
+     * Entering function 
+     * 
+     * @param string    Custom text. Example: HGLOG_IN0( "Yeah!!!" );
+     * @param p1 - p5   For multiple variables in same string.
+     */
+    #define HGLOG_IN() do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s "), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_ENTRY(); } while(0)
+    #define HGLOG0_IN(string) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_ENTRY(); } while(0)
+    #define HGLOG1_IN(string, p1) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1); _MARK_ENTRY(); } while(0)
+    #define HGLOG2_IN(string, p1, p2) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2); _MARK_ENTRY(); } while(0)
+    #define HGLOG3_IN(string, p1, p2, p3) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3); _MARK_ENTRY(); } while(0)
+    #define HGLOG4_IN(string, p1, p2, p3, p4) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4); _MARK_ENTRY(); } while(0)
+    #define HGLOG5_IN(string, p1, p2, p3, p4, p5) do { _CHK_MULTIIN(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]>%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4, p5); _MARK_ENTRY(); } while(0)
+
+    /** Leaving function */
+    #define HGLOG_OUT() do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s "), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_EXIT(); } while(0)
+    #define HGLOG0_OUT(string) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); _MARK_EXIT(); } while(0)
+    #define HGLOG1_OUT(string, p1) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1); _MARK_EXIT(); } while(0)
+    #define HGLOG2_OUT(string, p1, p2) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2); _MARK_EXIT(); } while(0)
+    #define HGLOG3_OUT(string, p1, p2, p3) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3); _MARK_EXIT(); } while(0)
+    #define HGLOG4_OUT(string, p1, p2, p3, p4) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4); _MARK_EXIT(); } while(0)
+    #define HGLOG5_OUT(string, p1, p2, p3, p4, p5) do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## string), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4, p5); _MARK_EXIT(); } while(0)
+
+    /** Leaving function with return value */
+    #define HGLOG0_RET(val, fmtstr) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val); _MARK_EXIT(); } while(0); return val;} while(0)
+    #define HGLOG1_RET(val, fmtstr, p1) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1); _MARK_EXIT(); } while(0); return val;} while(0)
+    #define HGLOG2_RET(val, fmtstr, p1, p2) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2); _MARK_EXIT(); } while(0); return val;} while(0)
+    #define HGLOG3_RET(val, fmtstr, p1, p2, p3) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2, p3); _MARK_EXIT(); } while(0); return val;} while(0)
+    #define HGLOG4_RET(val, fmtstr, p1, p2, p3, p4) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2, p3, p4); _MARK_EXIT(); } while(0); return val;} while(0)
+    #define HGLOG5_RET(val, fmtstr, p1, p2, p3, p4, p5) do { do { _DOINCHK(); _CHK_MULTIOUT(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s " L ## fmtstr), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, val, p1, p2, p3, p4, p5); _MARK_EXIT(); } while(0); return val;} while(0)
+
+    /** 
+     * General log lines 
+     * 
+     * @param level     This can be used as internal information 
+     *                  field, such as info, error, warning etc.
+     * @param string    Custom string
+     * @param p1 - p5   For multiple variables in same string.
+     */
+    #define HGLOG0(level, string) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn); } while(0)
+    #define HGLOG1(level, string, p1) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1); } while(0)
+    #define HGLOG2(level, string, p1, p2) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2); } while(0)
+    #define HGLOG3(level, string, p1, p2, p3) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3); } while(0)
+    #define HGLOG4(level, string, p1, p2, p3, p4) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4); } while(0)
+    #define HGLOG5(level, string, p1, p2, p3, p4, p5) do { _DOINCHK(); _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]%s " L ## string), _dc.iVis, level, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, p1, p2, p3, p4, p5); } while(0)
+
+    /** Error logging */
+    #define __HGLOG_ASSERT_DBG( _assertion ) do { if( _assertion ) { break; } TFileName file; file.Copy( _L8( __FILE__ ) );   _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s Assert:%S:%d:" L ## #_assertion) , _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, &file, __LINE__ ); User::Invariant(); } while( 0 )
+    #define __HGLOG_TRACE_ASSERT_DBG(_assertion, _textToPrint, _panicCode)  do { if (_assertion) { break; } _HGLOGPRINTER(_IT(L ## "%s%d[%x:%x:%x]<%s ASSERTION FAILED!!! %s file: %s, line: %s"), _dc.iVis, _dc.iCategory, _dc.iId, _dc.iThdId, _dc.iAddr, _dc.iFn, _textToPrint, __FILE__, __LINE__); User::Panic(_L("AssertionFailed"), _panicCode} while(0)
+    #define HGLOG_TRAPHANDLER() _THgLogTrapHandler _traceTrapHandler; _traceTrapHandler.oldHandler = User::SetTrapHandler(&_traceTrapHandler)
+
+/*****************************************************************************
+ LOGGING MACROS - NO LOGGING
+*****************************************************************************/ 
+#else // _DEBUG
+
+    #define HGLOG_CONTEXT(_fn, _vis )
+    #define HGLOG_STATIC_CONTEXT(_fn, _vis, _thdId)
+
+    #define HGLOG_IN()
+    #define HGLOG0_IN(string)
+    #define HGLOG1_IN(string, p1)
+    #define HGLOG2_IN(string, p1, p2)
+    #define HGLOG3_IN(string, p1, p2, p3)
+    #define HGLOG4_IN(string, p1, p2, p3, p4)
+    #define HGLOG5_IN(string, p1, p2, p3, p4, p5)
+
+    #define HGLOG_OUT()
+    #define HGLOG0_OUT(string)
+    #define HGLOG1_OUT(string, p1)
+    #define HGLOG2_OUT(string, p1, p2)
+    #define HGLOG3_OUT(string, p1, p2, p3)
+    #define HGLOG4_OUT(string, p1, p2, p3, p4)
+    #define HGLOG5_OUT(string, p1, p2, p3, p4, p5)
+
+    #define HGLOG0_RET(val, fmtstr) return val
+    #define HGLOG1_RET(val, fmtstr, p1) return val
+    #define HGLOG2_RET(val, fmtstr, p1, p2) return val
+    #define HGLOG3_RET(val, fmtstr, p1, p2, p3) return val
+    #define HGLOG4_RET(val, fmtstr, p1, p2, p3, p4) return val
+    #define HGLOG5_RET(val, fmtstr, p1, p2, p3, p4, p5) return val
+
+    #define HGLOG0(level, string)
+    #define HGLOG1(level, string, p1)
+    #define HGLOG2(level, string, p1, p2)
+    #define HGLOG3(level, string, p1, p2, p3)
+    #define HGLOG4(level, string, p1, p2, p3, p4)
+    #define HGLOG5(level, string, p1, p2, p3, p4, p5)
+    
+    #define BIND_TRACE_TRAPHANDLER()
+    #define TRACE_DECL() TInt _iTraceThreadId
+    #define TRACE_FAST_CREATE(_thdId) _thdId++;
+    #define TRACE_CREATE()
+
+    #define __HGLOG_ASSERT_DBG(_assertion)
+    #define __TRACE_ASSERT_DBG(_assertion, _message, _panicCode )
+
+#endif // _DEBUG
+
+#endif      // HGLOGLOGUTILS_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/teleportui/trace/hglogutils.h	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,208 @@
+/*
+* ==============================================================================
+*  Name        : hglogutils.h
+*  Part of     : Teleport / Teleport UI
+*  Description : Logging behavior
+*  Version     : %version: 3 %
+*
+*  Copyright © 2008 Nokia. All rights reserved.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia. All rights are reserved. Copying, including 
+*  reproducing, storing, adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia.
+* ==============================================================================
+*/
+
+#ifndef HGLOGUTILS_H
+#define HGLOGUTILS_H
+
+/**
+ * NOTE: This file contains the logic related to logging. Change only if you
+ * know what you're doing.
+ */
+
+
+
+
+
+
+
+
+
+
+#ifdef _DEBUG
+
+#include <e32std.h>
+#include <e32debug.h>
+
+static const TUint HGLOGERR   = 2;  /**< Used to create an error message */
+
+// These macros are real macros, that should be used. For temporary purposes, these
+// are left out and the logging is done by simple entry logging
+#define _HGLOG_UNCONTROLLED_INPUT_MSG  L"%s%d[%x:%x:%x]>%s UNCONTROLLED ENTRY!"
+#define _HGLOG_MULTIPLE_ENTRY_MSG      L"%s%d[%x:%x:%x]%s  ADDITIONAL ENTRY!"
+#define _HGLOG_UNCONTROLLER_EXIT_MSG   L"%s%d[%x:%x:%x]<%s UNCONTROLLED EXIT!"
+#define _HGLOG_MULTIPLE_EXIT_MSG       L"%s%d[%x:%x:%x]%s  ADDITIONAL EXIT!"
+#define _HGLOG_TRAP_HARNESS_ENTRY      L"_D%d[%x:%x:%x]TraceFramework: Entering trap harness"
+#define _HGLOG_TRAP_HARNESS_EXIT       L"_D%d[%x:%x:%x]TraceFramework: Exiting trap harness"
+#define _HGLOG_TRAP_HARNESS_LEAVE      L"_D%d[%x:%x:%x]TraceFramework: ---------- LEAVE OCCURRED !!! ---------- "
+#define _HGLOG_API_PREFIX              L"_A"
+#define _HGLOG_LOCAL_PREFIX            L"_L"
+
+/**
+* @file 
+* trace_utils.h contains definitions needed for advanced tracing features.
+* Tracing can be customized using the following compile time flags:
+* - <b>_DEBUG</b>
+*   - With this flag undefined, all traces are disabled
+* - <b>__KERNEL_MODE__</b>
+*   - if kernel mode flag is defined, kernel macro variants are used (no unicode or shared heap related stuff, faster)
+* - <b>DISABLE_SYNTAX_CHECK</b>
+*   - If this flag is defined, runtime syntax checking features are disabled from traces
+*/
+#ifndef DISABLE_SYNTAX_CHECK
+    #define _MARK_ENTRY() _dc.inOk=ETrue
+    #define _DOINCHK() _dc.DoInChk()
+    #define _CHK_MULTIIN() _dc.ChkMultiIn()
+    #define _CHK_MULTIOUT() _dc.ChkMultiOut()
+    #define _MARK_EXIT() _dc.outOk=ETrue
+#else
+    #define _MARK_ENTRY()
+    #define _DOINCHK()
+    #define _CHK_MULTIIN()
+    #define _CHK_MULTIOUT()
+    #define _MARK_EXIT()
+#endif // DISABLE_SYNTAX_CHECK
+    
+/** For tracing */
+#ifdef _HGLOG_RDEBUG
+    #define _IT(a) (TPtrC((const TText *)(a)))
+    #define _HGLOGPRINTER RDebug::Print        
+        
+/** For filedebug */
+#else   // _HGLOG_RDEBUG
+
+    /** Includes */
+    #include <e32base.h>
+    #include <e32std.h>
+    #include <e32def.h>
+    #include <e32svr.h>
+    #include <flogger.h>
+    
+    #define _IT(a) KHgLogPath, KHgLogFile, EFileLoggingModeAppend, (TPtrC((const TText *)(a)))    
+    #define _HGLOGPRINTER RFileLogger::WriteFormat    
+#endif // _HGLOG_RDEBUG    
+
+class _THgLogContext
+    {
+    public:
+        _THgLogContext(
+            const TText* _fn, 
+            const TUint _id, 
+            const TUint _vis, 
+            const TUint _addr, 
+            const TUint _thdId, 
+            const TUint _category=0 )
+            : 
+            iFn(_fn), 
+            iId(_id), 
+            iApi((TBool)_vis), 
+            iAddr(_addr), 
+            iThdId(_thdId), 
+            iVis((_vis == 0 ? (TText*)_HGLOG_API_PREFIX : (TText*)_HGLOG_LOCAL_PREFIX)),
+            iCategory(_category)            
+        #ifndef DISABLE_SYNTAX_CHECK
+            ,outOk(EFalse), inOk(EFalse)
+        #endif
+            {
+            }
+        ~_THgLogContext() 
+            {
+            #ifndef DISABLE_SYNTAX_CHECK
+                do
+                    {                   
+                    DoInChk();
+                    if (!outOk)
+                        {
+                        _HGLOGPRINTER(_IT(_HGLOG_UNCONTROLLER_EXIT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);
+                        }
+                    } while (0);
+            #endif // DISABLE_SYNTAX_CHECK
+            }
+
+        const TText* iFn;
+        const TUint iId;
+        const TText* iVis;
+        const TUint iAddr;
+        const TInt iThdId;
+        const TBool iApi;
+        const TUint iCategory;
+        
+        #ifndef DISABLE_SYNTAX_CHECK
+            inline void DoInChk()
+                {
+                if (!inOk)
+                    {
+                    _HGLOGPRINTER(_IT(_HGLOG_UNCONTROLLED_INPUT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);
+                    inOk = ETrue;
+                    }
+                }
+                        
+            inline void ChkMultiIn()
+                {
+                if (inOk)
+                    {
+                    _HGLOGPRINTER(_IT(_HGLOG_MULTIPLE_ENTRY_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);                
+                    }
+                }
+    
+            inline void ChkMultiOut()
+                {
+                if (outOk)
+                    {           
+                    _HGLOGPRINTER(_IT(_HGLOG_MULTIPLE_EXIT_MSG), iVis, iCategory, iId, iThdId, iAddr, iFn);                                        
+                    }
+                }
+
+            TBool inOk;
+            TBool outOk;
+        #endif // DISABLE_SYNTAX_CHECK
+    };
+    
+class _THgLogTrapHandler: public TTrapHandler
+    {
+    public:
+
+        _THgLogTrapHandler(_THgLogContext& _context) : _dc( _context ) 
+            {
+            RThread me;
+            iThdId = (TInt)me.Id();
+            }
+    	void Trap() 
+    	    {
+    	    _HGLOGPRINTER(_IT(_HGLOG_TRAP_HARNESS_ENTRY), 0, HGLOGERR, iThdId, this);
+    	    oldHandler->Trap();
+    	    } 
+    	void UnTrap()
+    	    {
+    	    _HGLOGPRINTER(_IT(_HGLOG_TRAP_HARNESS_EXIT), 0, HGLOGERR, iThdId, this);
+    	    oldHandler->UnTrap();
+    	    }	
+    	void Leave(TInt aValue)
+    	    {
+    	    _HGLOGPRINTER(_IT(_HGLOG_TRAP_HARNESS_LEAVE), 0, HGLOGERR, iThdId, this);
+    	    oldHandler->Leave(aValue);
+    	    }	
+    	TTrapHandler* oldHandler;
+    private:
+        _THgLogContext& _dc;
+        TInt iThdId;
+    };
+    
+#endif // _DEBUG    
+
+#endif // HGLOGUTILS_H
\ No newline at end of file