# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1265061853 -7200 # Node ID c743ef5928baffb5cb752d14d4c83c1289d00fee # Parent 4d54b72983ae615f16c50a36b12954ff7d8e9964 Revision: 201003 Kit: 201005 diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/data/qhd_tch/desktop_20026f4f/hsps/00/desktopconfiguration.dtd --- a/idlehomescreen/data/qhd_tch/desktop_20026f4f/hsps/00/desktopconfiguration.dtd Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/data/qhd_tch/desktop_20026f4f/hsps/00/desktopconfiguration.dtd Tue Feb 02 00:04:13 2010 +0200 @@ -29,7 +29,7 @@ qtn_desktop_configuration_name.description "Shortcut widget name" qtn_desktop_configuration_name.parents "" --> - + - + diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/data/qhd_tch/desktop_20026f4f/loc/desktopconfiguration.loc --- a/idlehomescreen/data/qhd_tch/desktop_20026f4f/loc/desktopconfiguration.loc Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/data/qhd_tch/desktop_20026f4f/loc/desktopconfiguration.loc Tue Feb 02 00:04:13 2010 +0200 @@ -19,10 +19,10 @@ // l: listrow_wgtman_pane_t1 // w: // r: TB9.2 -#define qtn_desktop_configuration_name "Shortcut" +#define qtn_desktop_configuration_name "Shortcuts" // d: Shortcut widget description // l: listrow_wgtman_pane_t2 // w: // r: TB9.2 -#define qtn_desktop_configuration_desc "Provides quick access to your favorite applications from Home Screen." +#define qtn_desktop_configuration_desc "Quick access to your favorite applications from Home Screen." diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/data/qhd_tch/desktop_20026f4f/rom/desktop_resources.iby --- a/idlehomescreen/data/qhd_tch/desktop_20026f4f/rom/desktop_resources.iby Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/data/qhd_tch/desktop_20026f4f/rom/desktop_resources.iby Tue Feb 02 00:04:13 2010 +0200 @@ -23,16 +23,16 @@ // Enabled by DTD-localization tools, language specific #if defined (__LOCALES_37_IBY__) -data=ZPRIVATE\200159c0\install\desktop_20026f4f\xuikon\37\desktop_20026f4f.o0037 \private\200159c0\install\desktop_20026f4f\xuikon\37\desktop_20026f4f.o0037 +data=ZPRIVATE\200159c0\install\desktop_20026f4f\xuikon\37\desktop.o0037 \private\200159c0\install\desktop_20026f4f\xuikon\37\desktop.o0037 #endif #if defined (__LOCALES_50_IBY__) -data=ZPRIVATE\200159c0\install\desktop_20026f4f\xuikon\50\desktop_20026f4f.o0050 \private\200159c0\install\desktop_20026f4f\xuikon\50\desktop_20026f4f.o0050 +data=ZPRIVATE\200159c0\install\desktop_20026f4f\xuikon\50\desktop.o0050 \private\200159c0\install\desktop_20026f4f\xuikon\50\desktop.o0050 #endif #if defined (__LOCALES_57_IBY__) -data=ZPRIVATE\200159c0\install\desktop_20026f4f\xuikon\57\desktop_20026f4f.o0057 \private\200159c0\install\desktop_20026f4f\xuikon\57\desktop_20026f4f.o0057 +data=ZPRIVATE\200159c0\install\desktop_20026f4f\xuikon\57\desktop.o0057 \private\200159c0\install\desktop_20026f4f\xuikon\57\desktop.o0057 #endif #if defined (__LOCALES_94_IBY__) -data=ZPRIVATE\200159c0\install\desktop_20026f4f\xuikon\94\desktop_20026f4f.o0094 \private\200159c0\install\desktop_20026f4f\xuikon\94\desktop_20026f4f.o0094 +data=ZPRIVATE\200159c0\install\desktop_20026f4f\xuikon\94\desktop.o0094 \private\200159c0\install\desktop_20026f4f\xuikon\94\desktop.o0094 #endif data=ZPRIVATE\200159c0\install\desktop_20026f4f\hsps\00\icon.mif \private\200159c0\install\desktop_20026f4f\hsps\00\icon.mif diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/data/qhd_tch/profile_2001cb7c/hsps/00/profileconfiguration.dtd --- a/idlehomescreen/data/qhd_tch/profile_2001cb7c/hsps/00/profileconfiguration.dtd Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/data/qhd_tch/profile_2001cb7c/hsps/00/profileconfiguration.dtd Tue Feb 02 00:04:13 2010 +0200 @@ -1,14 +1,14 @@ - + - + diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/data/qhd_tch/profile_2001cb7c/loc/profileconfiguration.loc --- a/idlehomescreen/data/qhd_tch/profile_2001cb7c/loc/profileconfiguration.loc Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/data/qhd_tch/profile_2001cb7c/loc/profileconfiguration.loc Tue Feb 02 00:04:13 2010 +0200 @@ -20,10 +20,10 @@ // l: listrow_wgtman_pane_t1 // w: // r: TB9.2 -#define qtn_profile_configuration_name "Profile" +#define qtn_profile_configuration_name "Time & profile" // d: profile widget description // l: listrow_wgtman_pane_t2 // w: // r: TB9.2 -#define qtn_profile_configuration_desc "Provides quick access to calendar, time&date and change profile." \ No newline at end of file +#define qtn_profile_configuration_desc "Quick access to time, date and change profile." \ No newline at end of file diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/inc/xndepthfirsttreeiterator.h --- a/idlehomescreen/inc/xndepthfirsttreeiterator.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/inc/xndepthfirsttreeiterator.h Tue Feb 02 00:04:13 2010 +0200 @@ -111,9 +111,11 @@ // ----------------------------------------------------------------------------- // template< class T > CXnDepthFirstTreeIterator< T >::CXnDepthFirstTreeIterator( - T* aStartNode ) : iStart( aStartNode ), iStack( KMemoryAlocS ) + T* aStartNode ): + iStart( aStartNode ), + iCurrent( aStartNode ), + iStack( KMemoryAlocS ) { - } // ----------------------------------------------------------------------------- @@ -207,4 +209,4 @@ #endif // CXNDEPTHFIRSTTREEITERATOR_H -// End of File \ No newline at end of file +// End of File diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/loc/activeidle3.loc --- a/idlehomescreen/loc/activeidle3.loc Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/loc/activeidle3.loc Tue Feb 02 00:04:13 2010 +0200 @@ -290,3 +290,10 @@ // r: TB9.2 // #define qtn_hs_slideshow "Slideshow" + +// d: Shown when user select corrupted image file as a wallpaper +// l: popup_note_window +// w: +// r: TB9.2 +// +#define qtn_hs_corrupted_image_note "Unable to select. Image corrupted or format not supported." diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/data/widgetmanagerview.rss --- a/idlehomescreen/widgetmanager/data/widgetmanagerview.rss Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/data/widgetmanagerview.rss Tue Feb 02 00:04:13 2010 +0200 @@ -179,6 +179,21 @@ { buf = qtn_wm_uninst_not_allowed; } + +RESOURCE TBUF r_qtn_wm_uninstall_widget_query + { + buf = qtn_wm_uninstall_widget_query; + } + +RESOURCE TBUF r_qtn_wm_uninst_process_busy + { + buf = qtn_wm_uninst_process_busy; + } + +RESOURCE TBUF r_qtn_wm_uninstall_text + { + buf = qtn_wm_uninstall_text; + } // ---------------------------------------------------- // Wm Details dialog diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/group/widgetmanager.mmp --- a/idlehomescreen/widgetmanager/group/widgetmanager.mmp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/group/widgetmanager.mmp Tue Feb 02 00:04:13 2010 +0200 @@ -51,6 +51,7 @@ SOURCE wmportalbutton.cpp SOURCE wmwidgetloaderao.cpp SOURCE wmconfiguration.cpp +SOURCE wminstaller.cpp SOURCEPATH ../data START RESOURCE 20026F53.rss diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/inc/wmdetailsdlg.h --- a/idlehomescreen/widgetmanager/inc/wmdetailsdlg.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/inc/wmdetailsdlg.h Tue Feb 02 00:04:13 2010 +0200 @@ -24,6 +24,7 @@ #include // FORWARD DECLARATIONS +class CAknMarqueeControl; class CEikRichTextEditor; class CAknsBasicBackgroundControlContext; @@ -43,8 +44,7 @@ const TDesC& aDescription, TBool aCanBeAdded, const CFbsBitmap* aLogoBmp, - const CFbsBitmap* aLogoMask, - CAknsBasicBackgroundControlContext* aBgContext ); + const CFbsBitmap* aLogoMask ); /** Destructor. */ ~CWmDetailsDlg(); @@ -55,7 +55,6 @@ TInt ExecuteLD(); private: // Functions from base classes - /** From CEikDialog Initializes dialog before layout*/ void PreLayoutDynInitL(); @@ -65,7 +64,8 @@ TBool OkToExitL(TInt aButtonId); /** From CCoeControl Handles key events */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,TEventCode aType ); + TKeyResponse OfferKeyEventL( + const TKeyEvent& aKeyEvent,TEventCode aType ); /** From CEikDialog Called by framework when dialog is activated */ void ActivateL(); @@ -83,13 +83,22 @@ TInt CountComponentControls() const; CCoeControl* ComponentControl(TInt aIndex) const; void Draw( const TRect& aRect ) const; + void FocusChanged( TDrawNow aDrawNow ); + +private: // new functions - /** Desired rect for dialog */ - TRect WmDetailsDialogRect(); - /** Insert and format content */ void InsertAndFormatContentL(); + /** Redraw call back for marque control */ + static TInt RedrawCallback( TAny* aPtr ); + + /** start marque control */ + void StartMarquee(); + + /** stop marque control */ + void StopMarquee(); + private: /** Constructor for performing 1st stage construction */ @@ -100,8 +109,7 @@ const TDesC& aName, const TDesC& aDescription, const CFbsBitmap* aLogoBmp, - const CFbsBitmap* aLogoMask, - CAknsBasicBackgroundControlContext* aBgContext ); + const CFbsBitmap* aLogoMask ); private: @@ -115,6 +123,11 @@ */ CEikRichTextEditor* iRtEditor; + /** + * Marquee control + */ + CAknMarqueeControl* iMarquee; + /** * Name of widget */ @@ -139,6 +152,11 @@ * ETrue if widget can be added to HS */ TBool iCanBeAdded; + + /** + * ETrue if widget name needs to be scrolled. + */ + TBool iNeedToScroll; }; #endif ___WMDETAILSDLG_H__ diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/inc/wminstaller.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/widgetmanager/inc/wminstaller.h Tue Feb 02 00:04:13 2010 +0200 @@ -0,0 +1,108 @@ +/* +* 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: +* Handles istalling for wm +* +*/ + +#ifndef __WMINSTALLER_ +#define __WMINSTALLER_ + +#include //installer + +class CIdle; +class CWmWidgetData; +class TUid; + +/** + * CWmInstaller + */ +NONSHARABLE_CLASS( CWmInstaller ) : public CActive + { +public: + /** + * Two-phased constructors. + */ + static CWmInstaller* NewL(); + static CWmInstaller* NewLC(); + + /** Destructor */ + ~CWmInstaller(); + +private: + /** constructor */ + CWmInstaller(); + + /** 2nd phase constructor */ + void ConstructL(); + +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: + + static TInt CloseSwiSession( TAny* aPtr ); + +public: + /** + * Uninstall given widget + * + * @param aData widget to unistall + */ + void UninstallL( CWmWidgetData* aData ); + + /** + * Returns wrt widget uid current been unistalled. + * If installer is not active returns KNullUid. + */ + TUid UninstallUid(); + +private: + + /** + * instance of the CIdle class for async swinstaller delete + */ + CIdle* iIdle; + + /** + * silent installer + */ + SwiUI::RSWInstSilentLauncher iInstaller; + + /** + * wrt widget that is currently been uninstalled + */ + TUid iUid; + }; + +#endif // __WMPLUGIN_ diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/inc/wmlistbox.h --- a/idlehomescreen/widgetmanager/inc/wmlistbox.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/inc/wmlistbox.h Tue Feb 02 00:04:13 2010 +0200 @@ -379,11 +379,6 @@ RWidgetDataValues iWidgetDatas; /** - * array of trashed widget data objects, not visible in list. - */ - RPointerArray iTrashedData; - - /** * the currently active item ADD button's rectangle, for push recognition */ TRect iButtonRect; diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/inc/wmplugin.h --- a/idlehomescreen/widgetmanager/inc/wmplugin.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/inc/wmplugin.h Tue Feb 02 00:04:13 2010 +0200 @@ -31,6 +31,8 @@ class CWmResourceLoader; class CWmMainContainer; class CWmEffectManager; +class CWmWidgetData; +class CWmInstaller; /** * CWmPlugin @@ -139,7 +141,12 @@ /** prestored action to be executed. */ void ExecuteCommandL(); - + + /** + * reference to iWmInstaller + */ + CWmInstaller& WmInstaller(); + private: /** constructor */ CWmPlugin(); @@ -165,7 +172,6 @@ */ CWmMainContainer* iWmMainContainer; - /** * resource loader */ @@ -202,6 +208,11 @@ * being activated upon deletion. */ CActiveSchedulerWait* iWait; + + /* + * Handles installation + */ + CWmInstaller* iWmInstaller; }; #endif // __WMPLUGIN_ diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/inc/wmresourceloader.h --- a/idlehomescreen/widgetmanager/inc/wmresourceloader.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/inc/wmresourceloader.h Tue Feb 02 00:04:13 2010 +0200 @@ -69,6 +69,12 @@ /** wrt specific description text */ const TDesC& WrtDescription(); + /** uninstalling text to replace widget name */ + const TDesC& Uninstalling(); + + /** query popup*/ + TBool QueryPopupL( TInt aResourceId, const TDesC& aString ); + private: // internal methods /** constructor */ @@ -124,6 +130,10 @@ */ HBufC* iWrtDescription; + /** + * text to replace title + */ + HBufC* iUninstalling; }; #endif // WMRESOURCELOADER_H_ diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/inc/wmwidgetdata.h --- a/idlehomescreen/widgetmanager/inc/wmwidgetdata.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/inc/wmwidgetdata.h Tue Feb 02 00:04:13 2010 +0200 @@ -26,7 +26,6 @@ #include #include #include -#include //installer #include "wmimageconverter.h" @@ -46,7 +45,7 @@ * handling the list item. */ NONSHARABLE_CLASS( CWmWidgetData ) - : public CActive + : public CBase , public MConverterObserver { @@ -88,28 +87,6 @@ /** 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( const TSize& aLogoSize, @@ -130,11 +107,6 @@ public: // external handles - /** - * Init uninstallation of widget. - */ - void UnInstallL(); - /** current uninstall animation bitmap */ const CFbsBitmap* AnimationBitmap( const TSize& aSize ); @@ -239,6 +211,9 @@ /** sets the widget data validity */ inline void SetValid( TBool aValid ); + /** start animation for uninstallation*/ + void VisualizeUninstallL(); + protected: // from MConverterObserver /** image conversin completed */ @@ -247,11 +222,9 @@ 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( @@ -269,9 +242,6 @@ /* reference to resource loader */ CWmResourceLoader& iWmResourceLoader; - /* instance of the CIdle class for async iconStr handling*/ - CIdle* iIdle; - /* the image converter utility */ CWmImageConverter* iImageConverter; @@ -318,11 +288,6 @@ TBool iFireLogoChanged; /** - * silent install launcher. - */ - SwiUI::RSWInstSilentLauncher iInstaller; - - /** * ActiveSchedulerWait used to wait while logo image * is being prepaired. */ @@ -344,7 +309,6 @@ /** returns the pointed widget name */ inline TPtrC16 MdcaPoint(TInt aIndex) const; - }; #include "wmwidgetdata.inl" diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/inc/wmwidgetloaderao.h --- a/idlehomescreen/widgetmanager/inc/wmwidgetloaderao.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/inc/wmwidgetloaderao.h Tue Feb 02 00:04:13 2010 +0200 @@ -121,6 +121,8 @@ /** persistent widget order */ CWmPersistentWidgetOrder* iWidgetOrder; + /** uid of currently unistalled widget */ + TUid iUninstallUid; }; #endif // WMWIDGETLOADERAO_H_ diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/loc/widgetmanagerview.loc --- a/idlehomescreen/widgetmanager/loc/widgetmanagerview.loc Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/loc/widgetmanagerview.loc Tue Feb 02 00:04:13 2010 +0200 @@ -38,7 +38,7 @@ // w: // r: TB9.2 // -#define qtn_options_wm_add "Add To Homescreen" +#define qtn_options_wm_add "Add To Home screen" // d: Launch-menuitem in Options-menu // d: @@ -92,8 +92,7 @@ // w: // r: TB9.2 // -#define qtn_options_wm_show_details "Details" - +#define qtn_options_wm_details "Details" // MISC @@ -105,7 +104,7 @@ // w: // r: TB9.2 // -#define qtn_wm_ovi_store_title "Ovi Store" +#define qtn_wm_ovi_store_title "Get more" // d: Info popup to indicate that an item can not be added to home screen // d: because current view is full @@ -114,16 +113,16 @@ // w: // r: TB9.2 // -#define qtn_hs_add_widget_no_space_note "Not enough space to add new widget to active page. Remove some content first" +#define qtn_hs_add_widget_no_space_note "Not enough space to add new widget to active page. Remove some content first." // d: Info popup to indicate that an item can not be added to home screen -// d: because maximum instance count of current widget would be exceeded +// d: because maximum instance count of current widget would be exceeded in whole Home screen // d: // l: popup_note_window // w: // r: TB9.2 // -#define qtn_hs_add_widget_max_count_note "Unable to add. Home screen does not allow more instances of this widget" +#define qtn_hs_add_widget_max_count_note "Unable to add. Home screen does not allow more instances of this widget." // d: widget details dialog left softkey for adding widget to home screen // d: Note: widgets dialog is not necessarily full screen width, which may affect @@ -150,7 +149,7 @@ // w: // r: TB9.2 // -#define qtn_wm_uninst_not_allowed "%U can not be uninstalled " +#define qtn_wm_uninst_not_allowed "%U can not be uninstalled" // d: widget details dialog default text for wrt widgets // d: @@ -159,5 +158,40 @@ // w: // r: TB9.2 // -#define qtn_wm_widget_details_wrt "HomeScreen application that uses internet connection to show dynamic updates from web" +#define qtn_wm_widget_details_wrt "Home Screen application that uses internet connection to show dynamic updates from web." + +// d: Query for unistallation +// d: +// d: +// l: query +// w: +// r: TB9.2 +// +#define qtn_wm_uninstall_widget_query "Uninstall %U?" +// d: Note when installer allready inuse +// d: +// d: +// l: popup_note_window +// w: +// r: TB9.2 +// +#define qtn_wm_uninst_process_busy "Installation process already ongoing. Try again later." + +// d: Note when trying to add widget hs and max number of allowed instances +// d: of that widget is already reached in active page +// d: +// l: popup_note_window +// w: +// r: TB9.2 +// +#define qtn_hs_add_widget_max_reached "Unable to add. No more instances allowed of this item for active page." + +// d: Replace widget name when uninstalling +// d: +// d: +// l: listrow_wgtman_pane_t1 +// w: +// r: TB9.2 +// +#define qtn_wm_uninstall_text "Uninstalling.." diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/src/wmdetailsdlg.cpp --- a/idlehomescreen/widgetmanager/src/wmdetailsdlg.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/src/wmdetailsdlg.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -28,7 +28,7 @@ #include #include #include - +#include #include #include "widgetmanager.hrh" #include "wmdetailsdlg.h" @@ -40,24 +40,6 @@ // MEMBER FUNCTIONS // --------------------------------------------------------- -// FullScreenRect -// rectangle representing the screen -// --------------------------------------------------------- -// -TRect FullScreenRect() - { - TRect screen; - CCoeEnv* env = CCoeEnv::Static(); - if ( env ) - { - CWsScreenDevice* screenDevice = env->ScreenDevice(); - if ( screenDevice ) - screen.SetRect( TPoint(0,0), screenDevice->SizeInPixels() ); - } - return screen; - } - -// --------------------------------------------------------- // CWmDetailsDlg::NewL // --------------------------------------------------------- // @@ -66,12 +48,11 @@ const TDesC& aDescription, TBool aCanBeAdded, const CFbsBitmap* aLogoBmp, - const CFbsBitmap* aLogoMask, - CAknsBasicBackgroundControlContext* aBgContext ) + const CFbsBitmap* aLogoMask ) { CWmDetailsDlg* self = new ( ELeave ) CWmDetailsDlg( aCanBeAdded ); CleanupStack::PushL( self ); - self->ConstructL( aName, aDescription, aLogoBmp, aLogoMask, aBgContext ); + self->ConstructL( aName, aDescription, aLogoBmp, aLogoMask ); CleanupStack::Pop( self ); return self; } @@ -82,9 +63,10 @@ // CWmDetailsDlg::CWmDetailsDlg( TBool aCanBeAdded ) : CAknDialog(), - iCanBeAdded( aCanBeAdded ) + iCanBeAdded( aCanBeAdded ), + iNeedToScroll( EFalse ) { - iBorder = TGulBorder::ERaisedControl; + iBorder = TGulBorder::ERaisedControl; } // --------------------------------------------------------- @@ -93,13 +75,16 @@ // CWmDetailsDlg::~CWmDetailsDlg() { + StopMarquee(); iEikonEnv->RemoveFromStack( iRtEditor ); iEikonEnv->RemoveFromStack( this ); delete iRtEditor; + delete iMarquee; delete iName; delete iDescription; delete iLogoBmp; - delete iLogoMask; + delete iLogoMask; + delete iBgContext; } // ----------------------------------------------------------------------------- @@ -126,8 +111,7 @@ const TDesC& aName, const TDesC& aDescription, const CFbsBitmap* aLogoBmp, - const CFbsBitmap* aLogoMask, - CAknsBasicBackgroundControlContext* aBgContext ) + const CFbsBitmap* aLogoMask ) { if ( !aLogoBmp ) { @@ -136,10 +120,12 @@ CAknDialog::ConstructL( R_AVKON_DIALOG_EMPTY_MENUBAR ); - iBgContext = aBgContext; + iBgContext = CAknsBasicBackgroundControlContext::NewL( + KAknsIIDQsnFrPopupCenter, TRect(0,0,1,1), EFalse); + iName = aName.AllocL(); iDescription = aDescription.AllocL(); - + // create bitmap and duplicate handle iLogoBmp = new ( ELeave ) CFbsBitmap; TSize newSize = TSize( aLogoBmp->SizeInPixels().iWidth , @@ -155,7 +141,7 @@ User::LeaveIfError( iLogoMask->Create( newSize, aLogoMask->DisplayMode() ) ); User::LeaveIfError( iLogoMask->Duplicate( aLogoMask->Handle() ) ); } - + iEikonEnv->AddWindowShadow( static_cast(this) ); } @@ -195,11 +181,17 @@ EEikEdwinDisplayOnly | EEikEdwinReadOnly ); - iRtEditor->SetSkinBackgroundControlContextL( iBgContext ); - CEikScrollBarFrame* scrollBarFrame = iRtEditor->CreateScrollBarFrameL(); scrollBarFrame->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EOff ); + CEikScrollBarFrame::EOff ); // set to EAuto + // when layout fixed. ~wk04_2010 + // currently scrollbar overlaps cba. + + iMarquee = CAknMarqueeControl::NewL(); + TCallBack callback( RedrawCallback, this ); + iMarquee->SetRedrawCallBack( callback ); + iMarquee->SetLoops( 1 ); + iMarquee->SetContainerWindowL( *this ); InsertAndFormatContentL(); iRtEditor->UpdateScrollBarsL(); @@ -212,14 +204,8 @@ void CWmDetailsDlg::InsertAndFormatContentL() { CRichText* richText = iRtEditor->RichText(); - const TInt KMinTxtLength = 100; richText->Reset(); - if ( iDescription->Des().Length() <= KMinTxtLength ) - { - richText->InsertL( richText->DocumentLength(), - CEditableText::ELineBreak ); - } richText->InsertL( richText->DocumentLength(), *iDescription ); // change the color of the text according to the skin color @@ -263,7 +249,12 @@ // TInt CWmDetailsDlg::CountComponentControls() const { - return iRtEditor ? 1 : 0; + TInt count( 0 ); + if ( iRtEditor ) + count++; + if ( iMarquee ) + count++; + return count; } //------------------------------------------------------------------------------ @@ -276,6 +267,8 @@ { case 0: return iRtEditor; + case 1: + return iMarquee; default: return NULL; } @@ -294,43 +287,17 @@ } // ----------------------------------------------------------------------------- -// CWmDetailsDlg::WmDetailsDialogRect -// ----------------------------------------------------------------------------- -// -TRect CWmDetailsDlg::WmDetailsDialogRect() - { - TRect mainPane, dlgRect; - TPoint topLeft; - TInt desiredW, desiredH; - AknLayoutUtils::LayoutMetricsRect( - AknLayoutUtils::EApplicationWindow, mainPane ); - - if ( Layout_Meta_Data::IsLandscapeOrientation() ) - { - desiredW = ( mainPane.Width() - (mainPane.Width()/4) ); - desiredH = ( mainPane.Height() - (mainPane.Height()/5) ); - topLeft.iX = ( ( mainPane.Width() - desiredW ) /2); - topLeft.iY = ( ( mainPane.Height() - desiredH ) /2); - dlgRect.SetRect( topLeft, TSize( desiredW, desiredH ) ); - } - else - { - desiredH = ( mainPane.Height() - (mainPane.Height()/4) ); - desiredW = ( mainPane.Width() - (mainPane.Width()/5) ); - topLeft.iX = ( ( mainPane.Width() - desiredW ) /2); - topLeft.iY = ( ( mainPane.Height() - desiredH ) /2); - dlgRect.SetRect( topLeft, TSize( desiredW, desiredH ) ); - } - return dlgRect; - } - -// ----------------------------------------------------------------------------- // CWmDetailsDlg::SetSizeAndPosition // ----------------------------------------------------------------------------- // void CWmDetailsDlg::SetSizeAndPosition( const TSize& /*aSize*/ ) { - SetRect( WmDetailsDialogRect() ); + TRect mainPane; + AknLayoutUtils::LayoutMetricsRect( + AknLayoutUtils::EApplicationWindow, mainPane ); + TAknWindowLineLayout dlgWindow = AknLayoutScalable_Apps + ::popup_wgtman_window().LayoutLine(); + AknLayoutUtils::LayoutControl( this, mainPane, dlgWindow ); } // ----------------------------------------------------------------------------- @@ -341,32 +308,29 @@ { CAknDialog::SizeChanged(); TRect rect = Rect(); - if ( iBgContext ) { iBgContext->SetRect( FullScreenRect() ); } + if ( iBgContext ) { iBgContext->SetRect( rect ); } if ( iRtEditor ) { - const TInt offSet = 5; - TRect cbaRect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EControlPane, cbaRect ); - - TInt logoH = iLogoBmp->SizeInPixels().iHeight; - - TInt height, width; - if ( Layout_Meta_Data::IsLandscapeOrientation() ) - { - height = ( (rect.Height() - logoH) - (cbaRect.Height() * 2) - offSet ); + TAknLayoutRect layoutRect; + TAknWindowLineLayout contentPane = AknLayoutScalable_Apps + ::wgtman_content_pane().LayoutLine(); + TAknWindowLineLayout rtePane = AknLayoutScalable_Apps + ::wgtman_list_pane().LayoutLine(); + layoutRect.LayoutRect( rect, contentPane ); + AknLayoutUtils::LayoutControl( iRtEditor, layoutRect.Rect(), rtePane ); + CEikScrollBarFrame* sbFrame = iRtEditor->ScrollBarFrame(); + if ( sbFrame && sbFrame->VScrollBarVisibility() != CEikScrollBarFrame::EOff ) + { + CEikScrollBar* scrollBar = sbFrame->VerticalScrollBar(); + TAknWindowLineLayout scrollPane = AknLayoutScalable_Apps + ::scroll_pane_cp036().LayoutLine(); + AknLayoutUtils::LayoutControl( scrollBar, layoutRect.Rect(), scrollPane ); } - else - { - height = ( (rect.Height() - logoH) - (cbaRect.Height() * 1.5) - offSet ); - } - - width = ( rect.Width() - (CEikScrollBar::DefaultScrollBarBreadth() * 4 ) - offSet ); - TPoint point = TPoint( rect.iTl.iX + offSet, rect.iTl.iY + logoH + offSet ); - TSize size = TSize( width, height ); - iRtEditor->SetRect( TRect( point, size ) ); TRAP_IGNORE( iRtEditor->SetSkinBackgroundControlContextL( iBgContext ); InsertAndFormatContentL(); ); + + StartMarquee(); } } @@ -453,58 +417,62 @@ gc.SetBrushStyle( CGraphicsContext::ENullBrush ); } - // to fix scrollbar background issue in richtext editor - if ( iRtEditor ) - { - MAknsControlContext* ccRte = AknsDrawUtils::ControlContext( iRtEditor ); - AknsDrawUtils::Background( skin, ccRte, iRtEditor, gc, iRtEditor->Rect() ); - } - // draw logo - TRect bmpRect( TPoint(0,0), TSize( iLogoBmp->SizeInPixels() ) ); - TPoint point = TPoint( innerRect.iTl.iX + offSet, - innerRect.iTl.iY + offSet ); + TAknLayoutRect layoutRect; + TAknWindowLineLayout headingPane = AknLayoutScalable_Apps + ::wgtman_heading_pane().LayoutLine(); + layoutRect.LayoutRect( rect, headingPane ); - if ( iLogoBmp && iLogoMask ) + if( iLogoBmp && iLogoMask ) { - gc.BitBltMasked( point, iLogoBmp, - bmpRect, iLogoMask, ETrue ); + TAknLayoutRect logoLayout; + logoLayout.LayoutRect( layoutRect.Rect(),AknLayoutScalable_Apps + ::wgtman_heading_pane_g1().LayoutLine() ); + logoLayout.DrawImage( gc, iLogoBmp, iLogoMask ); } - else - { - gc.BitBlt( point, iLogoBmp, bmpRect ); - } - - // draw name - point.iX += (bmpRect.Width() + offSet); AknsUtils::GetCachedColor( skin, color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); // DRAW TEXT - const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontPrimaryFont ); + TAknTextLineLayout titleTextLayout = + AknLayoutScalable_Apps::wgtman_heading_pane_t1().LayoutLine(); + TAknLayoutText textLayoutTitle; + textLayoutTitle.LayoutText( layoutRect.Rect(), titleTextLayout ); + + const CFont* font = textLayoutTitle.Font(); + if ( !font ) + { + font = AknLayoutUtils::FontFromId( EAknLogicalFontPrimaryFont ); + } + gc.UseFont( font ); gc.SetPenColor( color ); gc.SetPenStyle( CGraphicsContext::ESolidPen ); - point.iY += (bmpRect.Height() - (font->HeightInPixels() /2 ) ); - CGraphicsContext::TDrawTextParam param; - HBufC* buf = iName->Des().Alloc(); - if ( buf ) + TBool truncate( ETrue ); + + // check if name needs scrolling + if ( textLayoutTitle.Font()->TextWidthInPixels( *iName ) > + textLayoutTitle.TextRect().Width() && IsFocused() ) { - TPtr bufPtr = buf->Des(); - TextUtils::ClipToFit( bufPtr, *font, (innerRect.Width() - point.iX ) ); - gc.DrawText( bufPtr ,point, param ); - delete buf; + const_cast(*this).iNeedToScroll = ETrue; + const_cast(*this).StartMarquee(); + truncate = iMarquee->DrawText( + gc, textLayoutTitle.TextRect(), *iName, + (textLayoutTitle.TextRect().Height() - font->FontMaxDescent()), + CGraphicsContext::ELeft, *font ); } - else + + if ( truncate ) { - gc.DrawText( *iName ,point, param ); + const_cast(*this).StopMarquee(); + textLayoutTitle.DrawText( gc, *iName, ETrue, color ); } - + gc.DiscardFont(); - + // draw the rounded rectangle as border const TInt KFrameRoundRadius = 3; const TInt KBorderWidth = 2; @@ -528,5 +496,67 @@ gc.SetPenStyle( CGraphicsContext::ENullPen ); } +// --------------------------------------------------------- +// CWmDetailsDlg::RedrawCallback +// --------------------------------------------------------- +// +TInt CWmDetailsDlg::RedrawCallback( TAny* aPtr ) + { + CWmDetailsDlg* self = + static_cast( aPtr ); + if ( !self->iNeedToScroll ) + { + self->StopMarquee(); + } + self->DrawDeferred(); + return static_cast( ETrue ); + } + +// --------------------------------------------------------- +// CWmDetailsDlg::StartMarquee +// --------------------------------------------------------- +// +void CWmDetailsDlg::StartMarquee() + { + if ( iMarquee && iNeedToScroll && + !iMarquee->IsMarqueeOn() ) + { + iMarquee->Reset(); + iMarquee->EnableMarquee( iNeedToScroll ); + iMarquee->Start(); + } + } + +// --------------------------------------------------------- +// CWmDetailsDlg::StopMarquee +// --------------------------------------------------------- +// +void CWmDetailsDlg::StopMarquee() + { + if ( iMarquee && iMarquee->IsMarqueeOn() ) + { + iMarquee->EnableMarquee( EFalse ); + iMarquee->Stop(); + } + } + +// --------------------------------------------------------- +// CWmDetailsDlg::FocusChanged +// --------------------------------------------------------- +// +void CWmDetailsDlg::FocusChanged( TDrawNow aDrawNow ) + { + CCoeControl::FocusChanged( aDrawNow ); + if ( IsFocused() ) + { + StartMarquee(); + } + else + { + StopMarquee(); + } + } + + // End of File diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/src/wmimageconverter.cpp --- a/idlehomescreen/widgetmanager/src/wmimageconverter.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/src/wmimageconverter.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -862,7 +862,7 @@ iMask = mask; TInt err = AknIconUtils::SetSize( iBitmap , iSize, EAspectRatioNotPreserved ); - if ( KErrNone == err ) + if ( KErrNone == err && iMask ) { err = AknIconUtils::SetSize( iMask , iSize, EAspectRatioNotPreserved ); } diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/src/wminstaller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/widgetmanager/src/wminstaller.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -0,0 +1,190 @@ +/* +* 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: +* widget manager plugin implementation +* +*/ + +#include + +#include "wminstaller.h" +#include "wmwidgetdata.h" + + +// CONSTANTS +_LIT8( KWrtMime, "application/x-nokia-widget"); + +// --------------------------------------------------------- +// CWmInstaller::NewL +// --------------------------------------------------------- +// +CWmInstaller* CWmInstaller::NewL() + { + CWmInstaller* self = CWmInstaller::NewLC(); + CleanupStack::Pop(); // self; + return self; + } + +// --------------------------------------------------------- +// CWmInstaller::NewLC +// --------------------------------------------------------- +// +CWmInstaller* CWmInstaller::NewLC() + { + CWmInstaller* self = new ( ELeave ) CWmInstaller(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------- +// CWmInstaller::CWmInstaller +// --------------------------------------------------------- +// +CWmInstaller::CWmInstaller() : CActive( EPriorityStandard ) + { + iUid = KNullUid; + iIdle = NULL; + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------- +// CWmInstaller::ConstructL +// --------------------------------------------------------- +// +void CWmInstaller::ConstructL() + { + iIdle = CIdle::NewL( CActive::EPriorityStandard ); + } + +// --------------------------------------------------------- +// CWmInstaller::~CWmInstaller +// --------------------------------------------------------- +// +CWmInstaller::~CWmInstaller() + { + Cancel(); + + if ( iIdle && iIdle->IsActive() ) + { + iIdle->Cancel(); + } + delete iIdle; + } + +// --------------------------------------------------------- +// CWmInstaller::DoCancel +// --------------------------------------------------------- +// +void CWmInstaller::DoCancel() + { + if ( IsActive() ) + { + iInstaller.CancelAsyncRequest( + SwiUI::ERequestSilentUninstall ); + + // close session + iInstaller.Close(); + } + } + +// --------------------------------------------------------- +// CWmInstaller::RunL +// --------------------------------------------------------- +// +void CWmInstaller::RunL() + { + // close SWI session + if ( iIdle && iIdle->IsActive() ) + { + iIdle->Cancel(); + } + iIdle->Start( TCallBack( CloseSwiSession, this ) ); + } + +// --------------------------------------------------------- +// CWmInstaller::CloseSwiSession +// --------------------------------------------------------- +// +TInt CWmInstaller::CloseSwiSession( TAny* aPtr ) + { + CWmInstaller* self = static_cast< CWmInstaller* >( aPtr ); + if ( self->iIdle->IsActive() ) + { + self->iIdle->Cancel(); + } + + self->iUid = KNullUid; + + self->iInstaller.Close(); + return KErrNone; + } + +// --------------------------------------------------------- +// CWmInstaller::RunError +// --------------------------------------------------------- +// +TInt CWmInstaller::RunError(TInt /*aError*/) + { + // close SWI session + if ( iIdle && iIdle->IsActive() ) + { + iIdle->Cancel(); + } + iIdle->Start( TCallBack( CloseSwiSession, this ) ); + + return KErrNone; + } + +// --------------------------------------------------------- +// CWmInstaller::UninstallL +// --------------------------------------------------------- +// +void CWmInstaller::UninstallL( CWmWidgetData* aData ) + { + if ( IsActive() ) + { + User::Leave( KErrInUse ); + } + else + { + User::LeaveIfError( iInstaller.Connect() ); + iUid = aData->PublisherUid(); + SwiUI::TUninstallOptions optionsUninstall; + optionsUninstall.iBreakDependency = SwiUI::EPolicyAllowed; + optionsUninstall.iKillApp = SwiUI::EPolicyAllowed; + SwiUI::TUninstallOptionsPckg uninstallOptionsPkg( optionsUninstall ); + iInstaller.SilentUninstall( iStatus, iUid, + uninstallOptionsPkg, KWrtMime ); + + aData->VisualizeUninstallL(); + SetActive(); + } + } + +// --------------------------------------------------------- +// CWmInstaller::Uid +// --------------------------------------------------------- +// +TUid CWmInstaller::UninstallUid() + { + if ( IsActive() ) + { + return iUid; + } + else + { + return KNullUid; + } + } diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/src/wmlistbox.cpp --- a/idlehomescreen/widgetmanager/src/wmlistbox.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/src/wmlistbox.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -444,7 +444,6 @@ CWmListBox::~CWmListBox() { iWidgetDatas.ResetAndDestroy(); - iTrashedData.ResetAndDestroy(); } // --------------------------------------------------------- @@ -517,19 +516,9 @@ 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; - } + // delete now + delete data; + data = NULL; } // --------------------------------------------------------- diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/src/wmmaincontainer.cpp --- a/idlehomescreen/widgetmanager/src/wmmaincontainer.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/src/wmmaincontainer.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -65,6 +65,7 @@ #include "wmportalbutton.h" #include "wmwidgetloaderao.h" #include "wmconfiguration.h" +#include "wminstaller.h" // CONSTANTS const TInt KTextLimit = 40; // Text-limit for find-field @@ -213,31 +214,13 @@ else { // two buttons - // ********************************** - // we do not have layouts for two buttons yet - layout manually - TAknWindowLineLayout btnPane = AknLayoutScalable_Apps - ::wgtman_btn_pane( iLandscape ? 1 : 0 ).LayoutLine(); - TAknLayoutRect layoutrect; - layoutrect.LayoutRect( rect, btnPane ); - TRect r( layoutrect.Rect() ); - TRect r1, r2; - const TInt gap = 3; - if ( iLandscape ) - { - r1 = TRect( r.iTl, TSize( r.Width(), r.Height() / 2 - gap ) ); - r2 = r1; - r2.Move( 0, r.Height() / 2 + gap ); - } - else - { - r1 = TRect( r.iTl, TSize( r.Width() / 2 - gap, r.Height() ) ); - r2 = r1; - if (iMirrored) r1.Move( r.Width() / 2 + gap, 0 ); - else r2.Move( r.Width() / 2 + gap, 0 ); - } - iPortalButtonOne->SetRect( r1 ); - iPortalButtonTwo->SetRect( r2 ); - // ************************************* + TInt variety = (iLandscape ? 3 : 2); + TAknWindowLineLayout oviBtnLayout = AknLayoutScalable_Apps + ::wgtman_btn_pane( variety ).LayoutLine(); + TAknWindowLineLayout operatorBtnLayout = AknLayoutScalable_Apps + ::wgtman_btn_pane_cp_01( variety ).LayoutLine(); + AknLayoutUtils::LayoutControl( iPortalButtonOne, rect, oviBtnLayout ); + AknLayoutUtils::LayoutControl( iPortalButtonTwo, rect, operatorBtnLayout ); } // layout iWidgetsList @@ -927,7 +910,7 @@ { TBool retVal = EFalse; CWmWidgetData* data = iWidgetsList->WidgetData(); - if ( WidgetSelected() && data ) + if ( WidgetSelected() && data && !data->IsUninstalling() ) { if ( data->HsContentInfo().CanBeAdded() ) retVal = ETrue; @@ -943,7 +926,7 @@ { TBool retVal( EFalse ); CWmWidgetData* data = iWidgetsList->WidgetData(); - if ( WidgetSelected() && data ) + if ( WidgetSelected() && data && !data->IsUninstalling() ) { if ( data->WidgetType() == CWmWidgetData::ECps && data->PublisherUid() != KNullUid ) @@ -961,13 +944,17 @@ TBool CWmMainContainer::CanDoLaunch() { TBool retVal(EFalse); + if ( WidgetSelected() ) { - CWmWidgetData* data = iWidgetsList->WidgetData(); - if ( data && data->WidgetType() == CWmWidgetData::ECps && - data->PublisherUid() != KNullUid ) + CWmWidgetData* data = iWidgetsList->WidgetData(); + if ( data && !data->IsUninstalling() ) { - retVal = ETrue; + if ( data->WidgetType() == CWmWidgetData::ECps && + data->PublisherUid() != KNullUid ) + { + retVal = ETrue; + } } } return retVal; @@ -1002,7 +989,8 @@ // TBool CWmMainContainer::CanDoDetails() { - return ( WidgetSelected() && iWidgetsList->WidgetData() ); + return ( WidgetSelected() && iWidgetsList->WidgetData() + && !iWidgetsList->WidgetData()->IsUninstalling() ); } // --------------------------------------------------------- @@ -1021,7 +1009,7 @@ void CWmMainContainer::AddWidgetToHomeScreenL() { CWmWidgetData* data = iWidgetsList->WidgetData(); - if ( !iClosingDown && data ) + if ( !iClosingDown && data && !data->IsUninstalling() ) { if ( iFindbox && iFindPaneIsVisible ) { @@ -1200,7 +1188,21 @@ { if ( CanDoUninstall() ) { - iWidgetsList->WidgetData()->UnInstallL(); + CWmWidgetData* data = iWidgetsList->WidgetData(); + if ( data ) + { + if ( iWmPlugin.ResourceLoader().QueryPopupL( + R_QTN_WM_UNINSTALL_WIDGET_QUERY, data->Name() ) ) + { + + TRAPD( err, iWmPlugin.WmInstaller().UninstallL( data ) ); + if ( err != KErrNone ) + { + iWmPlugin.ResourceLoader().InfoPopupL( + R_QTN_WM_UNINST_PROCESS_BUSY, KNullDesC ); + } + } + } } } @@ -1283,17 +1285,11 @@ void CWmMainContainer::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType ) { - if ( aEventType == EEventEnterKeyPressed || - aEventType == EEventItemSingleClicked ) + if ( ( aEventType == EEventEnterKeyPressed || + aEventType == EEventItemSingleClicked ) + && !iClosingDown ) { - if ( iFindPaneIsVisible ) - { - DeactivateFindPaneL(); - } - else if ( !iClosingDown ) - { - AddWidgetToHomeScreenL(); - } + AddWidgetToHomeScreenL(); } } @@ -1314,7 +1310,7 @@ CWmDetailsDlg* dlg = CWmDetailsDlg::NewL( data->Name(), data->Description(), data->HsContentInfo().CanBeAdded(), - logo, mask, iBgContext ); + logo, mask ); if ( dlg && dlg->ExecuteLD() == ECbaAddToHs ) { diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/src/wmplugin.cpp --- a/idlehomescreen/widgetmanager/src/wmplugin.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/src/wmplugin.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -23,7 +23,9 @@ #include #include #include +#include #include +#include #include "wmcommon.h" #include "widgetmanager.hrh" @@ -32,7 +34,9 @@ #include "wmresourceloader.h" #include "wmplugin.h" #include "wmeffectmanager.h" -#include +#include "wmwidgetdata.h" +#include "wminstaller.h" + // --------------------------------------------------------- // CWmPlugin::NewL @@ -40,8 +44,8 @@ // CWmPlugin* CWmPlugin::NewL() { - CWmPlugin* self=new(ELeave) CWmPlugin(); - CleanupStack::PushL(self); + CWmPlugin* self = new( ELeave ) CWmPlugin(); + CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop(self); return self; @@ -99,6 +103,7 @@ delete iEffectManager; delete iPostponedContent; delete iWait; + delete iWmInstaller; } // --------------------------------------------------------- @@ -117,7 +122,7 @@ void CWmPlugin::ConstructL() { iWmMainContainer = NULL; - + // store static view app ui CEikonEnv* eikonEnv = CEikonEnv::Static(); if ( !eikonEnv ) User::Leave( KErrUnknown ); @@ -138,6 +143,8 @@ CleanupStack::PushL( mainView ); iViewAppUi->AddViewL( mainView ); CleanupStack::Pop( mainView ); + + iWmInstaller = CWmInstaller::NewL(); } // --------------------------------------------------------- @@ -199,7 +206,7 @@ // Don't forward numeric keys to phone ForwardNumericKeysToPhone( EFalse ); - } + } // --------------------------------------------------------- // CWmPlugin::MainViewDeactivated @@ -276,7 +283,7 @@ ResourceLoader().InfoPopupL( R_QTN_HS_HS_MEMORY_FULL, KNullDesC ); } - else if ( err != KErrNone ) + else if ( ( err != KErrNone ) && ( err != KErrDiskFull ) ) { ResourceLoader().ErrorPopup( err ); } @@ -334,4 +341,14 @@ } } +// --------------------------------------------------------- +// CWmPlugin::WmInstaller +// --------------------------------------------------------- +// +CWmInstaller& CWmPlugin::WmInstaller() + { + return *iWmInstaller; + } + // End of file + diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/src/wmportalbutton.cpp --- a/idlehomescreen/widgetmanager/src/wmportalbutton.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/src/wmportalbutton.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -320,9 +320,18 @@ { TBool landscape = Layout_Meta_Data::IsLandscapeOrientation(); TAknLayoutRect imageLayout; - imageLayout.LayoutRect( Rect(), - AknLayoutScalable_Apps::wgtman_btn_pane_g1( - landscape ? 1 : 0).LayoutLine() ); + if ( iWmMainContainer->Configuration().PortalButtonCount() == 1 ) + { + imageLayout.LayoutRect( Rect(), AknLayoutScalable_Apps:: + wgtman_btn_pane_g1( landscape ? 1 : 0).LayoutLine() ); + } + else + { + TInt variety = (landscape ? 5 : 4); + imageLayout.LayoutRect( Rect(), AknLayoutScalable_Apps + ::wgtman_btn_pane_g1( variety ).LayoutLine() ); + } + return imageLayout.Rect().Size(); } @@ -439,9 +448,17 @@ if ( iButtonIcon && iButtonIconMask ) { TAknLayoutRect imageLayout; - imageLayout.LayoutRect( rect, - AknLayoutScalable_Apps::wgtman_btn_pane_g1( - landscape ? 1 : 0).LayoutLine() ); + if ( iWmMainContainer->Configuration().PortalButtonCount() == 1 ) + { + imageLayout.LayoutRect( rect, AknLayoutScalable_Apps:: + wgtman_btn_pane_g1( landscape ? 3 : 0).LayoutLine() ); + } + else + { + TInt variety = (landscape ? 7 : 4); + imageLayout.LayoutRect( rect, AknLayoutScalable_Apps + ::wgtman_btn_pane_g1( variety ).LayoutLine() ); + } imageLayout.DrawImage( gc, iButtonIcon, iButtonIconMask ); } @@ -449,8 +466,9 @@ if ( !landscape ) { TAknTextComponentLayout leftLayout; - leftLayout = AknLayoutScalable_Apps::wgtman_btn_pane_t1( - landscape ? 1 : 0 ); + TInt variety = + ((iWmMainContainer->Configuration().PortalButtonCount()== 2)? 4:0 ); + leftLayout = AknLayoutScalable_Apps::wgtman_btn_pane_t1( variety ); DrawText( gc, state->Text(), leftLayout, 1 ); } } diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/src/wmresourceloader.cpp --- a/idlehomescreen/widgetmanager/src/wmresourceloader.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/src/wmresourceloader.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -66,6 +66,7 @@ delete iNote; delete iNoDescription; delete iWrtDescription; + delete iUninstalling; } // --------------------------------------------------------- @@ -84,6 +85,9 @@ iWrtDescription = StringLoader::LoadL( R_QTN_WM_WIDGET_DETAILS_WRT, &iEnv ); + + iUninstalling = StringLoader::LoadL( + R_QTN_WM_UNINSTALL_TEXT, &iEnv ); } // --------------------------------------------------------- @@ -188,6 +192,18 @@ } // --------------------------------------------------------- +// CWmResourceLoader::QueryPopupL +// --------------------------------------------------------- +// +TBool CWmResourceLoader::QueryPopupL( TInt aResourceId, const TDesC& aString ) + { + HBufC* queryMsg = LoadStringLC( aResourceId, aString, &iEnv ); + TBool resp = iEnv.QueryWinL( *queryMsg, KNullDesC ); + CleanupStack::PopAndDestroy( queryMsg ); + return resp; + } + +// --------------------------------------------------------- // CWmResourceLoader::ErrorPopup // --------------------------------------------------------- // @@ -214,5 +230,14 @@ return *iWrtDescription; } +// --------------------------------------------------------- +// CWmResourceLoader::Uninstalling +// --------------------------------------------------------- +// +const TDesC& CWmResourceLoader::Uninstalling() + { + return *iUninstalling; + } + // end of file diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/src/wmwidgetdata.cpp --- a/idlehomescreen/widgetmanager/src/wmwidgetdata.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/src/wmwidgetdata.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -29,6 +29,7 @@ #include #include #include +#include #include "wmwidgetdata.h" #include "wmwidgetdataobserver.h" @@ -36,9 +37,6 @@ #include "wmresourceloader.h" #include "wmcommon.h" -// CONSTANTS -_LIT8( KWrtMime, "application/x-nokia-widget"); - // --------------------------------------------------------- // CWmWidgetData::NewL // --------------------------------------------------------- @@ -79,10 +77,8 @@ // CWmWidgetData::CWmWidgetData( const TSize& aLogoSize, CWmResourceLoader& aWmResourceLoader ) - : CActive( EPriorityStandard ), - iWmResourceLoader( aWmResourceLoader ) + : iWmResourceLoader( aWmResourceLoader ) { - iIdle = NULL; iLogoImage = NULL; iLogoImageMask = NULL; iHsContentInfo = NULL; @@ -93,7 +89,6 @@ iAnimationIndex = 0; iAsyncUninstalling = EFalse; iFireLogoChanged = EFalse; - CActiveScheduler::Add( this ); } // --------------------------------------------------------- @@ -108,7 +103,6 @@ // start decoding the icon iImageConverter = CWmImageConverter::NewL( this ); - iIdle = CIdle::NewL( CActive::EPriorityStandard ); iWait = new (ELeave) CActiveSchedulerWait(); iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard ); @@ -149,12 +143,6 @@ // CWmWidgetData::~CWmWidgetData() { - Cancel(); - if ( iIdle && iIdle->IsActive() ) - { - iIdle->Cancel(); - } - delete iIdle; if ( iWait && iWait->IsStarted() ) { iWait->AsyncStop(); @@ -308,6 +296,7 @@ else if ( KErrNone != err && iFireLogoChanged ) { FireDataChanged(); // draw default icon + iFireLogoChanged = EFalse; } } @@ -466,51 +455,15 @@ } // --------------------------------------------------------- -// 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() - { +void CWmWidgetData::VisualizeUninstallL() + { + DestroyAnimData(); + PrepairAnimL(); + + iHsContentInfo->SetNameL( iWmResourceLoader.Uninstalling() ); iAsyncUninstalling = ETrue; iAnimationIndex = 0; const TInt tickInterval = 400000; @@ -588,22 +541,6 @@ } // --------------------------------------------------------- -// 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 // --------------------------------------------------------- // @@ -660,64 +597,5 @@ 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 diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/src/wmwidgetloaderao.cpp --- a/idlehomescreen/widgetmanager/src/wmwidgetloaderao.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/src/wmwidgetloaderao.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -23,6 +23,7 @@ #include "wmpersistentwidgetorder.h" #include "wmlistbox.h" #include "wmwidgetloaderao.h" +#include "wminstaller.h" #include // content control api #include // content control api @@ -123,6 +124,10 @@ // void CWmWidgetLoaderAo::DoLoadWidgetsL() { + // Check if unistallation is ongoing for for some widget + // iUninstallUid is null no uninstallation is ongoing + iUninstallUid = iWmPlugin.WmInstaller().UninstallUid(); + // 1. load the widgets array MHsContentController& controller = iWmPlugin.ContentController(); CHsContentInfoArray* contentInfoArray = CHsContentInfoArray::NewL(); @@ -257,6 +262,12 @@ widgetData->SetPersistentWidgetOrder( iWidgetOrder ); widgetData->SetValid( ETrue ); iWidgetsList.AddWidgetDataL( widgetData, EFalse ); + if ( iUninstallUid != KNullUid + && iUninstallUid == widgetData->PublisherUid() ) + { + widgetData->VisualizeUninstallL(); + } + CleanupStack::Pop( widgetData ); } diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/widgetmanager/tsrc/wmunittest/group/wmunittest.mmp --- a/idlehomescreen/widgetmanager/tsrc/wmunittest/group/wmunittest.mmp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/widgetmanager/tsrc/wmunittest/group/wmunittest.mmp Tue Feb 02 00:04:13 2010 +0200 @@ -51,6 +51,7 @@ SOURCE wmportalbutton.cpp SOURCE wmwidgetloaderao.cpp SOURCE wmconfiguration.cpp +SOURCE wminstaller.cpp SOURCEPATH ../src SOURCE wmunittest.cpp diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluicontroller/group/bld.inf --- a/idlehomescreen/xmluicontroller/group/bld.inf Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluicontroller/group/bld.inf Tue Feb 02 00:04:13 2010 +0200 @@ -49,7 +49,7 @@ END START EXTENSION s60/mifconv -OPTION TARGETFILE ailaunch_aif.mif +OPTION TARGETFILE homescreen_aif.mif OPTION SOURCES -c8,8 qgn_menu_idlestate END diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluicontroller/group/icons_aif_bitmaps.mk --- a/idlehomescreen/xmluicontroller/group/icons_aif_bitmaps.mk Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluicontroller/group/icons_aif_bitmaps.mk Tue Feb 02 00:04:13 2010 +0200 @@ -22,7 +22,7 @@ TARGETDIR=$(ZDIR)\resource\apps HEADERDIR=$(EPOCROOT)epoc32\include -ICONTARGETFILENAME=$(TARGETDIR)\ailaunch_aif.mbm +ICONTARGETFILENAME=$(TARGETDIR)\homescreen_aif.mbm MAKMAKE : mifconv $(ICONTARGETFILENAME) \ diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluicontroller/group/icons_aif_scalable.mk --- a/idlehomescreen/xmluicontroller/group/icons_aif_scalable.mk Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluicontroller/group/icons_aif_scalable.mk Tue Feb 02 00:04:13 2010 +0200 @@ -11,7 +11,7 @@ # # Contributors: # -# Description: scalable icons makefile for project ailaunch +# Description: scalable icons makefile for project home screen # ifeq (WINS,$(findstring WINS,$(PLATFORM))) @@ -22,7 +22,7 @@ TARGETDIR=$(ZDIR)\resource\apps HEADERDIR=$(EPOCROOT)epoc32\include -ICONTARGETFILENAME=$(TARGETDIR)\ailaunch_aif.mif +ICONTARGETFILENAME=$(TARGETDIR)\homescreen_aif.mif MAKMAKE : ; diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/renderingplugins/xnanimationfactory/inc/xnanimationadapter.h --- a/idlehomescreen/xmluirendering/renderingplugins/xnanimationfactory/inc/xnanimationadapter.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/renderingplugins/xnanimationfactory/inc/xnanimationadapter.h Tue Feb 02 00:04:13 2010 +0200 @@ -118,12 +118,6 @@ // UI node, not owned CXnNodePluginIf& iNode; - - // display on(block) or off(none) - TBool iDisplay; - - // Whether the animation started or not - TBool iAnimationSarted; // Image Skind Id TAknsItemID iSkinId; diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/renderingplugins/xnanimationfactory/src/xnanimationadapter.cpp --- a/idlehomescreen/xmluirendering/renderingplugins/xnanimationfactory/src/xnanimationadapter.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/renderingplugins/xnanimationfactory/src/xnanimationadapter.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -25,7 +25,6 @@ #include "xnanimationadapter.h" -const TInt KPeriodicTimerInterval5Sec(100000); // 0.1 sec // ============================ MEMBER FUNCTIONS =============================== // ----------------------------------------------------------------------------- @@ -53,7 +52,6 @@ { CXnControlAdapter::ConstructL( aNode ); iSkinId = KAknsIIDNone; - iAnimationSarted = EFalse; } // ----------------------------------------------------------------------------- @@ -72,12 +70,7 @@ // CXnAnimationAdapter::~CXnAnimationAdapter() { - if (iPeriodicTimer) - { - iPeriodicTimer->Cancel(); - delete iPeriodicTimer; - iPeriodicTimer = NULL; - } + StopAnimation(); } @@ -108,12 +101,10 @@ if( display == XnPropertyNames::style::common::display::KBlock ) { - iDisplay = ETrue; StartAnimation(); } else { - iDisplay = EFalse; StopAnimation(); } } @@ -126,7 +117,12 @@ // void CXnAnimationAdapter::MakeVisible( TBool aVisible ) { - if( aVisible ) + TBool visible( IsVisible() ? ETrue : EFalse ); + if ( visible == aVisible ) { return; } + + CCoeControl::MakeVisible( aVisible ); + + if ( aVisible ) { StartAnimation(); } @@ -134,7 +130,6 @@ { StopAnimation(); } - CCoeControl::MakeVisible( aVisible ); } // ----------------------------------------------------------------------------- @@ -143,9 +138,9 @@ // void CXnAnimationAdapter::Update() { - if (iAnimationSarted ) + if ( iPeriodicTimer && iPeriodicTimer->IsActive() ) { - switch(iSkinId.iMinor ) + switch( iSkinId.iMinor ) { case EAknsMinorGenericQgnHomeRefreshing1: { @@ -183,7 +178,7 @@ { CXnAnimationAdapter* self = static_cast (aAny); - // Update widget every 5 seconds + // Update widget self->Update(); return KErrNone; // Return value ignored by CPeriodic @@ -195,15 +190,15 @@ // void CXnAnimationAdapter::StartAnimation() { - if ( !iAnimationSarted && iDisplay ) + if ( !iPeriodicTimer && IsVisible() ) { TRAPD(err, iPeriodicTimer = CPeriodic::NewL(CActive::EPriorityIdle) ); if ( err == KErrNone ) { - iPeriodicTimer->Start( KPeriodicTimerInterval5Sec, - KPeriodicTimerInterval5Sec, TCallBack( TimerCallBack, this ) ); + const TInt KPeriodicTimerInterval = 100000; // 0.1 sec + iPeriodicTimer->Start( KPeriodicTimerInterval, + KPeriodicTimerInterval, TCallBack( TimerCallBack, this ) ); iSkinId = KAknsIIDQgnHomeRefreshing1; - iAnimationSarted = ETrue; } } } @@ -214,14 +209,13 @@ // void CXnAnimationAdapter::StopAnimation() { - if ( iAnimationSarted ) + if ( iPeriodicTimer && iPeriodicTimer->IsActive() ) { iPeriodicTimer->Cancel(); - delete iPeriodicTimer; - iPeriodicTimer = NULL; - iSkinId = KAknsIIDNone; - iAnimationSarted = EFalse; } + delete iPeriodicTimer; + iPeriodicTimer = NULL; + iSkinId = KAknsIIDNone; } // End of File diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/renderingplugins/xnclockfactory/src/xnclockadapter.cpp --- a/idlehomescreen/xmluirendering/renderingplugins/xnclockfactory/src/xnclockadapter.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/renderingplugins/xnclockfactory/src/xnclockadapter.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -274,7 +274,7 @@ { if( iForeground ) { - iClockControl->StartTimer(); + UpdateDisplay(); // starts timer after update } else { diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/renderingplugins/xnmenufactory/src/xnmenuadapter.cpp --- a/idlehomescreen/xmluirendering/renderingplugins/xnmenufactory/src/xnmenuadapter.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/renderingplugins/xnmenufactory/src/xnmenuadapter.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -1096,7 +1096,7 @@ // void CXnMenuAdapter::SetSoftkeyAppearanceL( CXnSoftkeyItem& aItem ) { - if( IsNodeVisibleL( *aItem.iNode) ) + if( iContainer && IsNodeVisibleL( *aItem.iNode) ) { if( aItem.iImageOn ) { @@ -1104,16 +1104,13 @@ } else if( aItem.iLabel )// change label { - TBool left( EFalse ); if ( aItem.iPosition == CEikButtonGroupContainer::ELeftSoftkeyPosition ) { - left = ETrue; - EikSoftkeyImage::SetLabel( iContainer,left ); + EikSoftkeyImage::SetLabel( iContainer, ETrue ); } else if ( aItem.iPosition == CEikButtonGroupContainer::ERightSoftkeyPosition ) { - left = EFalse; - EikSoftkeyImage::SetLabel( iContainer,left ); + EikSoftkeyImage::SetLabel( iContainer, EFalse ); } iContainer->SetCommandL( aItem.iPosition, aItem.iCommandId, *aItem.iLabel ); diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/inc/xnbackgroundmanager.h --- a/idlehomescreen/xmluirendering/uiengine/inc/xnbackgroundmanager.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/inc/xnbackgroundmanager.h Tue Feb 02 00:04:13 2010 +0200 @@ -42,8 +42,7 @@ * @since S60 v5.0 */ NONSHARABLE_CLASS( CXnBackgroundManager ) : public CCoeControl, - public MAknsSkinChangeObserver, public MCoeViewActivationObserver, - public MDiskNotifyHandlerCallback + public MAknsSkinChangeObserver, public MDiskNotifyHandlerCallback { public: @@ -64,6 +63,7 @@ * * @since S60 5.0 * @param aFileName WallpaperImage image path and filename to be cached + * @param aViewData Page that owns the given wallpaper. * @return Error code. */ TInt CacheWallpaperL( const TDesC& aFileName, CXnViewData& aViewData ); @@ -73,8 +73,17 @@ * * @since S60 5.0 * @param aFileName WallpaperImage image path and filename + * @return Error code. */ - void AddWallpaperL( const TDesC& aFileName ); + TInt AddWallpaperL( const TDesC& aFileName ); + + /** + * Deletes wallpaper from the given page as well as from the cache. + * + * @since S60 5.0 + * @param aViewData Page where the wallpaper is to be destroyed. + */ + void DeleteWallpaper( CXnViewData& aViewData ); /** * Checks whether page specific wallpaper feature is activated or not. @@ -98,7 +107,14 @@ * @param aNewView New view */ void WallpaperChanged( CXnViewData& aOldView, CXnViewData& aNewView ); - + +public: // Functions from base classes + + /** + * @see CCoeControl + */ + void MakeVisible( TBool aVisible ); + private: // Functions from base classes /** @@ -110,7 +126,7 @@ * see CCoeControl */ void SizeChanged(); - + /** * see MAknsSkinChangeObserver */ @@ -129,16 +145,10 @@ const TAknsSkinStatusPackageChangeReason aReason ); /** - * @see MCoeViewActivationObserver - */ - void HandleViewActivation( const TVwsViewId& aNewlyActivatedViewId, - const TVwsViewId& aViewIdToBeDeactivated ); - - /** * From MDiskNotifyHandlerCallback. */ void HandleNotifyDisk( TInt aError, const TDiskEvent& aEvent ); - + private: /** @@ -157,12 +167,13 @@ void UpdateWallpapersL(); void CleanCache(); void RemoveWallpaperL( CXnViewData& aViewData ); - void RemoveWallpaperFromCache( const TDesC& aFileName ); + void RemoveWallpaperFromCache( const TDesC& aFileName, CXnViewData* aViewData = NULL ); void RemovableDiskInsertedL(); void CheckFeatureTypeL(); - void AddPageSpecificWallpaperL( const TDesC& aFileName ); - void AddCommonWallpaperL( const TDesC& aFileName, TBool aSave = ETrue ); + TInt AddPageSpecificWallpaperL( const TDesC& aFileName ); + TInt AddCommonWallpaperL( const TDesC& aFileName, TBool aSave = ETrue ); void ReadWallpaperFromCenrepL(); + void UpdateScreen(); private: // data @@ -215,12 +226,11 @@ * 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. + * True if screen needs to be drawn when view becomes visible. */ - TBool iTransparencyEnabled; + TBool iScreenUpdateNeeded; /** * Pointer to wallpaper image. This is used only if same wallpaper diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/inc/xnbgcontrol.h --- a/idlehomescreen/xmluirendering/uiengine/inc/xnbgcontrol.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/inc/xnbgcontrol.h Tue Feb 02 00:04:13 2010 +0200 @@ -24,9 +24,9 @@ #include // User includes +#include "xnuistatelistener.h" // Forward declarations -class CAknsLayeredBackgroundControlContext; /** * Background appearance drawer @@ -35,7 +35,7 @@ * @lib xn3layoutengine.lib * @since S60 5.0 */ -NONSHARABLE_CLASS( CXnBgControl ) : public CCoeControl +NONSHARABLE_CLASS( CXnBgControl ) : public CCoeControl , public MXnUiStateObserver { public: // Constructors and destructor @@ -100,11 +100,51 @@ // new functions void SetCompoundControl( CCoeControl* aControl ); + /** + * Service for removing grabbing controls + */ + void ResetGrabbingL(); + + /** + * Prepares control for destroying + */ + void PrepareDestroy(); + +private: + // new functions + + /** + * Removes recursively grabbing controls + */ + void RemoveGrabbingControL( const CCoeControl* aControl, const TPointerEvent& aEvent ) const; + +private: + // from MXnUiStateObserver + + /** + * @see MXnUiStateObserver + */ + void NotifyForegroundChanged( TForegroundStatus aStatus ); + + /** + * @see MXnUiStateObserver + */ + void NotifyLightStatusChanged( TBool aLightsOn ); + + /** + * @see MXnUiStateObserver + */ + void NotifyInCallStateChaged( TBool aInCall ); + private: // data /** Compound Control, Not owned */ CCoeControl* iControl; + + /** stored point of EButton1Down */ + TPoint iHitpoint; + }; #endif // _XNBGCONTROL_H diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/inc/xneditor.h --- a/idlehomescreen/xmluirendering/uiengine/inc/xneditor.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/inc/xneditor.h Tue Feb 02 00:04:13 2010 +0200 @@ -195,14 +195,6 @@ */ 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 @@ -310,8 +302,6 @@ CHspsWrapper* iHspsWrapper; /** CPS wrapper, owned */ CCpsWrapper* iCpsWrapper; - /** Provides background services, owned */ - CXnBackgroundManager* iBgManager; /** Publisher map, owned */ CPublisherMap* iPublisherMap; /** Add widget listquery, not owned */ diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/inc/xnviewadapter.h --- a/idlehomescreen/xmluirendering/uiengine/inc/xnviewadapter.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/inc/xnviewadapter.h Tue Feb 02 00:04:13 2010 +0200 @@ -33,6 +33,7 @@ class CXnControlAdapter; class CXnKeyEventDispatcher; class CXnBgControl; +class CXnBackgroundManager; class CXnFocusControl; // Class declaration @@ -93,7 +94,15 @@ * return Bg control */ CCoeControl& BgControl() const; - + + /** + * Gets background manager + * + * @since S60 5.0 + * return Background manager + */ + CXnBackgroundManager& BgManager() const; + /** * Gets focus control * @@ -202,6 +211,8 @@ CXnAppUiAdapter& iAppUiAdapter; /** Bg control, Owned */ CXnBgControl* iBgControl; + /** Background manager, Owned */ + CXnBackgroundManager* iBgManager; /** Focus control, Owned */ CXnFocusControl* iFocusControl; /* Event dispatcher, Owned */ diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/inc/xnwallpaperview.h --- a/idlehomescreen/xmluirendering/uiengine/inc/xnwallpaperview.h Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/inc/xnwallpaperview.h Tue Feb 02 00:04:13 2010 +0200 @@ -26,10 +26,25 @@ class CXnWallpaperContainer; class CXnUiEngine; +class TVwsViewId; +class CPeriodic; // CONSTANTS const TUid KWallpaperViewUid = { 0x200286DB }; +/** +* Data structure to be used with timer callback. +* +* @since S60 v5.0 +*/ +NONSHARABLE_STRUCT( TXnWallpaperViewData ) + { + TBool iMultiple; + TUid iAppUid; + TUid iViewUid; + CPeriodic* iTimer; // Not own. + }; + // CLASS DECLARATION /** @@ -81,6 +96,11 @@ */ void ConstructL(); + /** + * Callback function to be used with CPeriodic. + */ + static TInt TimerCallbackL( TAny *aPtr ); + private: // data /** @@ -93,6 +113,18 @@ * Reference to uiengine. */ CXnUiEngine& iEngine; + + /** + * Data structure, that is transferred to TimerCallback. + */ + TXnWallpaperViewData iData; + + /** + * Periodic timer. + * Own. + */ + CPeriodic* iTimer; + }; #endif // CXNWALLPAPERVIEW_H diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnbackgroundmanager.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnbackgroundmanager.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnbackgroundmanager.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -55,8 +55,7 @@ // CXnBackgroundManager::CXnBackgroundManager( CXnViewManager& aViewManager, CHspsWrapper& aWrapper ) : iViewManager( aViewManager ), - iHspsWrapper( aWrapper ), - iTransparencyEnabled( ETrue ) + iHspsWrapper( aWrapper ) { } @@ -65,10 +64,7 @@ // ----------------------------------------------------------------------------- // void CXnBackgroundManager::ConstructL() - { - // Register for view activation & deactivation - iViewManager.AppUiAdapter().AddViewActivationObserverL( this ); - + { CreateWindowL(); iBgContext = CAknsLayeredBackgroundControlContext::NewL( @@ -133,27 +129,23 @@ // void CXnBackgroundManager::Draw(const TRect& aRect) const { - if( iTransparencyEnabled ) + if( iFeatureSuppoted ) { - if( iFeatureSuppoted ) + CXnViewData& viewData( iViewManager.ActiveViewData() ); + CFbsBitmap* wallpaper = viewData.WallpaperImage(); + if( wallpaper ) { - CXnViewData& viewData( iViewManager.ActiveViewData() ); - CFbsBitmap* wallpaper = viewData.WallpaperImage(); - if( wallpaper ) - { - SystemGc().BitBlt( TPoint(0, 0), wallpaper ); - return; - } + SystemGc().BitBlt( TPoint(0, 0), wallpaper ); + return; } - else if( iBgImage ) - { - SystemGc().BitBlt( TPoint(0, 0), iBgImage ); - return; - } } + else if( iBgImage ) + { + SystemGc().BitBlt( TPoint(0, 0), iBgImage ); + return; + } MAknsSkinInstance* skin( AknsUtils::SkinInstance() ); - AknsDrawUtils::Background( skin, iBgContext, this, - SystemGc(), aRect ); + AknsDrawUtils::Background( skin, iBgContext, this, SystemGc(), aRect ); } // ----------------------------------------------------------------------------- @@ -180,6 +172,21 @@ } // ----------------------------------------------------------------------------- +// CXnBackgroundManager::MakeVisible +// ----------------------------------------------------------------------------- +// +void CXnBackgroundManager::MakeVisible( TBool aVisible ) + { + CCoeControl::MakeVisible( aVisible ); + if ( aVisible && iScreenUpdateNeeded ) + { + iScreenUpdateNeeded = EFalse; + DrawNow(); + } + } + + +// ----------------------------------------------------------------------------- // Handle disk drive notifications. // ----------------------------------------------------------------------------- // @@ -243,18 +250,49 @@ // CXnBackgroundManager::AddWallpaperL // --------------------------------------------------------------------------- // -void CXnBackgroundManager::AddWallpaperL( const TDesC& aFileName ) +TInt CXnBackgroundManager::AddWallpaperL( const TDesC& aFileName ) + { + TInt retVal = KErrNone; + if( iFeatureSuppoted ) + { + retVal = AddPageSpecificWallpaperL( aFileName ); + } + else + { + retVal = AddCommonWallpaperL( aFileName ); + } + return retVal; + } + +// --------------------------------------------------------------------------- +// CXnBackgroundManager::DeleteWallpaper +// --------------------------------------------------------------------------- +// +void CXnBackgroundManager::DeleteWallpaper( CXnViewData& aViewData ) { if( iFeatureSuppoted ) { - AddPageSpecificWallpaperL( aFileName ); + const TDesC& path = aViewData.WallpaperImagePath(); + if( path != KNullDesC ) + { + RemoveWallpaperFromCache( path, &aViewData ); + TRAP_IGNORE( aViewData.SetWallpaperImagePathL( KNullDesC ) ); + aViewData.SetWallpaperImage( NULL ); + } } else { - AddCommonWallpaperL( aFileName ); + if( iBgImagePath ) + { + iSkinSrv.RemoveWallpaper( *iBgImagePath ); + delete iBgImagePath; + iBgImagePath = NULL; + } + delete iBgImage; + iBgImage = NULL; } } - + // --------------------------------------------------------------------------- // CXnBackgroundManager::ActivatedL // --------------------------------------------------------------------------- @@ -273,7 +311,7 @@ if( iFeatureSuppoted && aOldView.WallpaperImagePath().Compare( aNewView.WallpaperImagePath() ) ) { - DrawNow(); + UpdateScreen(); TInt err = AknsWallpaperUtils::SetIdleWallpaper( aNewView.WallpaperImagePath(), NULL ); if( err == KErrNone ) { @@ -446,7 +484,7 @@ } else if ( aReason == EAknsSkinStatusConfigurationDeployed ) { - DrawNow(); + UpdateScreen(); } } @@ -459,27 +497,6 @@ { } -// ---------------------------------------------------------------------------- -// 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 // ----------------------------------------------------------------------------- @@ -493,16 +510,21 @@ // CXnBackgroundManager::RemoveWallpaper // ----------------------------------------------------------------------------- // -void CXnBackgroundManager::RemoveWallpaperFromCache( const TDesC& aFileName ) +void CXnBackgroundManager::RemoveWallpaperFromCache( const TDesC& aFileName, + CXnViewData* aViewData ) { - CXnViewData& activeViewData( iViewManager.ActiveViewData() ); + CXnViewData* currentViewData( aViewData ); + if( !currentViewData ) + { + currentViewData = &iViewManager.ActiveViewData(); + } CXnRootData& rootData = iViewManager.ActiveAppData(); RPointerArray& rootDataArr = rootData.PluginData(); for( TInt i = 0; i < rootDataArr.Count(); i++ ) { CXnViewData* viewData = static_cast( rootDataArr[i] ); - if( viewData == &activeViewData ) + if( currentViewData == viewData ) { continue; } @@ -587,7 +609,7 @@ } if( drawingNeeded ) { - DrawNow(); + UpdateScreen(); } } else @@ -634,8 +656,9 @@ // CXnBackgroundManager::AddPageSpecificWallpaperL // --------------------------------------------------------------------------- // -void CXnBackgroundManager::AddPageSpecificWallpaperL( const TDesC& aFileName ) +TInt CXnBackgroundManager::AddPageSpecificWallpaperL( const TDesC& aFileName ) { + TInt err = KErrNone; CXnViewData& viewData( iViewManager.ActiveViewData() ); const TDesC& old = viewData.WallpaperImagePath(); @@ -656,10 +679,10 @@ } else { - return; + // image is corrupted or format is not supported + return KErrCACorruptContent; } } - // WallpaperImage changed back to default. Update view data. else { @@ -668,27 +691,29 @@ } // Update screen - DrawNow(); - - TInt err = AknsWallpaperUtils::SetIdleWallpaper( aFileName, NULL ); + UpdateScreen(); + + err = AknsWallpaperUtils::SetIdleWallpaper( aFileName, NULL ); if( err == KErrNone ) { - iIntUpdate++; - } + iIntUpdate++; + } } + return err; } - + // --------------------------------------------------------------------------- // CXnBackgroundManager::AddCommonWallpaperL // --------------------------------------------------------------------------- // -void CXnBackgroundManager::AddCommonWallpaperL( const TDesC& aFileName, +TInt CXnBackgroundManager::AddCommonWallpaperL( const TDesC& aFileName, TBool aSave ) { + TInt err = KErrNone; // Remove old from the cache if( iBgImagePath ) { - iSkinSrv.RemoveWallpaper( aFileName ); + iSkinSrv.RemoveWallpaper( *iBgImagePath ); delete iBgImagePath; iBgImagePath = NULL; } @@ -703,7 +728,8 @@ TRAP( err, iSkinSrv.AddWallpaperL( aFileName, iRect.Size() ) ); if( err ) { - return; + // image is corrupted or format is not supported + return KErrCACorruptContent; } TRAP( err, iBgImage = iSkinSrv.WallpaperImageL( aFileName ) ); if( err ) @@ -711,12 +737,13 @@ iSkinSrv.RemoveWallpaper( aFileName ); delete iBgImage; iBgImage = NULL; - return; + // image is corrupted or format is not supported + return KErrCACorruptContent; } } // Update screen - DrawNow(); + UpdateScreen(); // Save path to cenrep if( aSave ) @@ -724,11 +751,13 @@ SaveWallpaperL(); } - TInt err = AknsWallpaperUtils::SetIdleWallpaper( aFileName, NULL ); - if( !err ) + err = AknsWallpaperUtils::SetIdleWallpaper( aFileName, NULL ); + if( err == KErrNone ) { - iIntUpdate++; - } + iIntUpdate++; + } + + return err; } // --------------------------------------------------------------------------- @@ -784,11 +813,27 @@ } } } - DrawNow(); + UpdateScreen(); } CleanupStack::PopAndDestroy( repository ); } } +// --------------------------------------------------------------------------- +// CXnBackgroundManager::UpdateScreen +// --------------------------------------------------------------------------- +// +void CXnBackgroundManager::UpdateScreen() + { + if( !IsVisible() ) + { + iScreenUpdateNeeded = ETrue; + } + else + { + DrawNow(); + } + } + // End of File diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnbgcontrol.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnbgcontrol.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnbgcontrol.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -17,18 +17,11 @@ // System includes #include -#include -#include -#include -#include -#include // User includes #include "xnappuiadapter.h" #include "xnuiengine.h" #include "xneditmode.h" -#include "xnviewadapter.h" -#include "xnfocuscontrol.h" #include "xnbgcontrol.h" @@ -77,6 +70,7 @@ // ----------------------------------------------------------------------------- // CXnBgControl::CXnBgControl() + : iHitpoint( TPoint( -1,-1 ) ) { } @@ -106,6 +100,10 @@ MakeVisible( ETrue ); SetComponentsToInheritVisibility( ETrue ); + + static_cast< CXnAppUiAdapter* >( iAvkonAppUi ) + ->UiStateListener().AddObserver( *this ); + } // ----------------------------------------------------------------------------- @@ -178,6 +176,19 @@ // void CXnBgControl::HandlePointerEventL( const TPointerEvent& aPointerEvent ) { + switch( aPointerEvent.iType ) + { + case TPointerEvent::EButton1Down: + iHitpoint = aPointerEvent.iPosition; + break; + + case TPointerEvent::EButton1Up: + break; + + default: + break; + } + CXnAppUiAdapter* appui( static_cast< CXnAppUiAdapter* >( iAvkonAppUi ) ); appui->UiEngine().DisableRenderUiLC(); @@ -222,5 +233,94 @@ iControl = aControl; } +// ----------------------------------------------------------------------------- +// CXnBgControl::ResetGrabbingL() +// Service for removing grabbing controls +// ----------------------------------------------------------------------------- +// +void CXnBgControl::ResetGrabbingL() + { + TPointerEvent event; + event.iType = TPointerEvent::EButton1Up; + + RemoveGrabbingControL( this, event ); + + iHitpoint.SetXY( -1, -1 ); + } + +// ----------------------------------------------------------------------------- +// CXnBgControl::PrepareDestroy() +// Prepares control for destroying +// ----------------------------------------------------------------------------- +// +void CXnBgControl::PrepareDestroy() + { + static_cast< CXnAppUiAdapter* >( iAvkonAppUi ) + ->UiStateListener().RemoveObserver( *this ); + } + +// ----------------------------------------------------------------------------- +// CXnBgControl::RemoveGrabbingControL() +// Removes recursively grabbing controls +// ----------------------------------------------------------------------------- +// +void CXnBgControl::RemoveGrabbingControL( const CCoeControl* aControl, + const TPointerEvent& aEvent ) const + { + TInt count = aControl->CountComponentControls(); + + for( TInt i = 0; i < count; i++ ) + { + CCoeControl* child = aControl->ComponentControl( i ); + + if( child && child->Rect().Contains( iHitpoint ) ) + { + child->CCoeControl::HandlePointerEventL( aEvent ); + RemoveGrabbingControL( child, aEvent ); + } + } + } + +// ----------------------------------------------------------------------------- +// CXnBgControl::NotifyForegroundChanged() +// Notifies foreground changes. +// ----------------------------------------------------------------------------- +// +void CXnBgControl::NotifyForegroundChanged( TForegroundStatus aStatus ) + { + switch( aStatus ) + { + case EForeground: + break; + + case EUnknown: + case EBackground: + case EPartialForeground: + default: + TRAP_IGNORE( ResetGrabbingL(); ) + break; + } + } + +// ----------------------------------------------------------------------------- +// CXnBgControl::NotifyLightStatusChanged() +// Notifies primary display light status is changed. +// ----------------------------------------------------------------------------- +// +void CXnBgControl::NotifyLightStatusChanged( TBool /*aLightsOn*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// CXnBgControl::NotifyInCallStateChaged() +// Notifies in-call state is changed. +// ----------------------------------------------------------------------------- +// +void CXnBgControl::NotifyInCallStateChaged( TBool /*aInCall*/ ) + { + + } + // End of file diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xncomposer.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xncomposer.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xncomposer.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -33,7 +33,8 @@ #include "xnpanic.h" #include "xnplugindefs.h" #include "xnviewmanager.h" -#include "xneditor.h" +#include "xnappuiadapter.h" +#include "xnviewadapter.h" #include "xnbackgroundmanager.h" // Constants @@ -608,8 +609,8 @@ aViewData.SetUseEmptyWidget( UseEmptyWidget( *viewRoot ) ); // Read wallpaper image path from HSPS - CXnBackgroundManager& bgManager = aViewData.ViewManager(). - Editor().BgManager(); + CXnAppUiAdapter* appui = static_cast< CXnAppUiAdapter* >( iAvkonAppUi ); + CXnBackgroundManager& bgManager = appui->ViewAdapter().BgManager(); // if page specific wallpaper feature is enabled if( bgManager.ActivatedL() ) diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xncontroladapterimpl.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xncontroladapterimpl.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xncontroladapterimpl.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -60,6 +60,7 @@ #include "xnscrollablecontroladapter.h" #include "xnfocuscontrol.h" #include "xneditmode.h" +#include "xnbgcontrol.h" _LIT8(KScrollableBoxNodeName, "scrollablebox"); @@ -3900,8 +3901,9 @@ // Ignore events bg.IgnoreEventsUntilNextPointerUp(); - - // Indicate long tap has taken plave + static_cast(&bg)->ResetGrabbingL(); + + // Indicate long tap has taken plave iLongtap = ETrue; CXnNode* hold = BuildTriggerNodeL( *engine, @@ -3926,17 +3928,21 @@ { const TPointerEvent& event( aPointerEvent ); + CXnNode* node( &iNode.Node() ); + CXnUiEngine* engine( node->UiEngine() ); + + // Forward event to gesture helper if( PassEventToGestureHelperL( aPointerEvent ) ) - { + { + CXnAppUiAdapter& appui( engine->AppUiAdapter() ); + CCoeControl& bg( appui.ViewAdapter().BgControl() ); + static_cast(&bg)->ResetGrabbingL(); + // Swipe took place, consume this event return ETrue; } - CXnNode* node( &iNode.Node() ); - - CXnUiEngine* engine( node->UiEngine() ); - TBool menuBar( node == engine->MenuBarNode() ); if ( menuBar ) diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xneditor.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xneditor.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xneditor.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -312,7 +312,6 @@ iCpsWrapper = CCpsWrapper::NewL( *this ); iHspsWrapper = CHspsWrapper::NewL( aUid, this ); iRepository= CRepository::NewL( TUid::Uid( KCRUidActiveIdleLV ) ); - iBgManager = CXnBackgroundManager::NewL( iViewManager, *iHspsWrapper ); } // --------------------------------------------------------------------------- @@ -327,7 +326,6 @@ delete iHspsWrapper; delete iPublisherMap; delete iRepository; - delete iBgManager; } // ----------------------------------------------------------------------------- @@ -1597,15 +1595,6 @@ } // ----------------------------------------------------------------------------- -// CXnEditor::BgManager -// ----------------------------------------------------------------------------- -// -CXnBackgroundManager& CXnEditor::BgManager() const - { - return *iBgManager; - } - -// ----------------------------------------------------------------------------- // from MHsContentController // ----------------------------------------------------------------------------- // diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnnodeimpl.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnnodeimpl.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnnodeimpl.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -4477,7 +4477,7 @@ } else if ( nameString == XnPropertyNames::action::event::KSetWallpaper ) { - aEngine.Editor()->BgManager().SetWallpaperL(); + aEngine.AppUiAdapter().ViewAdapter().BgManager().SetWallpaperL(); return ETrue; } diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnodtparser.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnodtparser.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnodtparser.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -1094,29 +1094,37 @@ break; } } - - CXnExtRenderingPluginWrapper* wrapper = - CXnExtRenderingPluginWrapper::NewL( aNode.PluginIfL(), *adapter ); - CleanupStack::PushL( wrapper ); - - parentAdapter->AppendChildL( *wrapper, aNode ); - CleanupStack::Pop( wrapper ); - component->SetControlAdapter( wrapper ); - - aNode.ComponentNodeImpl()->SetComponent( component ); - - component->SetNode( aNode.PluginIfL() ); - - wrapper->SetComponent( component ); - - wrapper->SetComponentsToInheritVisibility( ETrue ); - - wrapper->ActivateL(); - - CleanupStack::Pop( component ); - - return ETrue; + if( parentAdapter ) + { + CXnExtRenderingPluginWrapper* wrapper = + CXnExtRenderingPluginWrapper::NewL( aNode.PluginIfL(), *adapter ); + CleanupStack::PushL( wrapper ); + + parentAdapter->AppendChildL( *wrapper, aNode ); + CleanupStack::Pop( wrapper ); + + component->SetControlAdapter( wrapper ); + + aNode.ComponentNodeImpl()->SetComponent( component ); + + component->SetNode( aNode.PluginIfL() ); + + wrapper->SetComponent( component ); + + wrapper->SetComponentsToInheritVisibility( ETrue ); + + wrapper->ActivateL(); + + CleanupStack::Pop( component ); + + return ETrue; + } + else + { + CleanupStack::Pop( component ); + return EFalse; + } } else { diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnuiengine.rss --- a/idlehomescreen/xmluirendering/uiengine/src/xnuiengine.rss Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnuiengine.rss Tue Feb 02 00:04:13 2010 +0200 @@ -160,3 +160,8 @@ { buf = qtn_hs_operation_failed_no_disk; } + +RESOURCE TBUF r_qtn_hs_corrupted_image_note + { + buf = qtn_hs_corrupted_image_note; + } diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnuiengineimpl.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnuiengineimpl.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnuiengineimpl.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -59,6 +59,11 @@ #include "xntimemon.h" #endif +#ifdef _XN3_DEBUG_ +#include "xndepthfirsttreeiterator.h" // for TraceTreeL +#endif + + // CONSTANTS const TInt KXnBorderThin = 1; const TInt KXnBorderMedium = 3; @@ -8940,7 +8945,7 @@ // Bg rect is always screen size. TRect bgRect; AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, bgRect ); - Editor()->BgManager().SetRect( bgRect ); + iAppUiAdapter.ViewAdapter().BgManager().SetRect( bgRect ); iEditMode->HandleScreenDeviceChangedL(); diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnviewadapter.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnviewadapter.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnviewadapter.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -38,6 +38,8 @@ #include "xntype.h" #include "xnbgcontrol.h" #include "xnfocuscontrol.h" +#include "xneditor.h" +#include "xnbackgroundmanager.h" #include "xnviewadapter.h" #include "xnmenu.h" @@ -158,6 +160,7 @@ delete iDeactivate; delete iEditState; delete iBgControl; + delete iBgManager; delete iFocusControl; } @@ -190,6 +193,9 @@ iBgControl = CXnBgControl::NewL(); iBgControl->SetMopParent( this ); + iBgManager = CXnBackgroundManager::NewL( iAppUiAdapter.ViewManager(), + iAppUiAdapter.ViewManager().Editor().HspsWrapper() ); + iFocusControl = CXnFocusControl::NewL( iAppUiAdapter ); iEventDispatcher = @@ -241,6 +247,7 @@ void CXnViewAdapter::PrepareDestroy() { iAppUiAdapter.UiStateListener().RemoveObserver( *this ); + iBgControl->PrepareDestroy(); TRAP_IGNORE( DeactivateContainerL() ); @@ -274,6 +281,16 @@ } // ----------------------------------------------------------------------------- +// CXnViewAdapter::BgManager +// Returns background manager. +// ----------------------------------------------------------------------------- +// +CXnBackgroundManager& CXnViewAdapter::BgManager() const + { + return *iBgManager; + } + +// ----------------------------------------------------------------------------- // CXnViewAdapter::BgControl // Returns focus control. // ----------------------------------------------------------------------------- @@ -323,6 +340,7 @@ } iBgControl->MakeVisible( ETrue ); + iBgManager->MakeVisible( ETrue ); // Set the active container ActivateContainerL( iAppUiAdapter.ViewManager().ActiveViewData() ); @@ -345,6 +363,8 @@ TRAP_IGNORE( DeactivateContainerL() ); iBgControl->MakeVisible( EFalse ); + iBgManager->MakeVisible( EFalse ); + iFocusControl->MakeVisible( EFalse ); iFlags.Clear( EIsActivated ); @@ -480,7 +500,7 @@ CXnEditMode* editMode = iAppUiAdapter.UiEngine().EditMode(); if( editMode ) { - editMode->StopDraggingL(); + TRAP_IGNORE( editMode->StopDraggingL() ); } iFocusControl->MakeVisible( EFalse ); diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnviewmanager.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnviewmanager.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnviewmanager.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -872,7 +872,6 @@ if ( next.Occupied() && !next.Active() ) { iAppUiAdapter.ViewAdapter().ActivateContainerL( next ); - UpdateWallpaperL( current, next ); } } @@ -895,7 +894,6 @@ if ( prev.Occupied() && !prev.Active() ) { iAppUiAdapter.ViewAdapter().ActivateContainerL( prev ); - UpdateWallpaperL( current, prev ); } } @@ -1083,6 +1081,9 @@ iAppUiAdapter.ViewAdapter().ActivateContainerL( next ); } + // Remove wallpaper from cache + iAppUiAdapter.ViewAdapter().BgManager().DeleteWallpaper( *view ); + retval = iHspsWrapper->RemovePluginL( view->PluginId() ); // Notify observers of view list change @@ -1137,6 +1138,9 @@ CXnViewData* view( static_cast< CXnViewData* >( views[ index ] ) ); + // Remove wallpaper from cache + iAppUiAdapter.ViewAdapter().BgManager().DeleteWallpaper( *view ); + // Remove plugin from HSPS iHspsWrapper->RemovePluginL( view->PluginId() ); @@ -1296,7 +1300,8 @@ iHspsWrapper->SetActivePluginL( aViewToActivate.PluginId() ); // Cache update is needed after view activation - UpdateCachesL(); + UpdateCachesL(); + UpdateWallpaperL( viewToDeactivate, aViewToActivate ); } else { @@ -1310,7 +1315,7 @@ NotifyViewActivatedL( aViewToActivate ); UpdatePageManagementInformationL(); -#ifdef _XN_PERFORMANCE_TEST_ + #ifdef _XN_PERFORMANCE_TEST_ RDebug::Print( _L( "CXnViewManager::NotifyContainerChangedL - end" ) ); #endif //_XN_PERFORMANCE_TEST_ } @@ -1641,7 +1646,7 @@ // void CXnViewManager::UpdateWallpaperL( CXnViewData& aCurrent, CXnViewData& aNew ) { - iEditor->BgManager().WallpaperChanged( aCurrent, aNew ); + iAppUiAdapter.ViewAdapter().BgManager().WallpaperChanged( aCurrent, aNew ); } // ----------------------------------------------------------------------------- diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnwallpaperview.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnwallpaperview.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnwallpaperview.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -20,8 +20,10 @@ #include "xnwallpaperview.h" #include "xnwallpapercontainer.h" #include "xnuiengine.h" -#include "xneditor.h" +#include "xnappuiadapter.h" +#include "xnviewadapter.h" #include "xnbackgroundmanager.h" +#include // SYSTEM INCLUDE FILES #include @@ -29,6 +31,9 @@ #include #include #include +#include +#include +#include _LIT8( KMulti, "multi" ); const TInt KFileArrayGranularity = 6; @@ -51,6 +56,7 @@ void CXnWallpaperView::ConstructL() { BaseConstructL(); + iTimer = CPeriodic::NewL( CActive::EPriorityIdle ); } // ----------------------------------------------------------------------------- @@ -77,6 +83,7 @@ delete iContainer; iContainer = NULL; } + delete iTimer; } // ----------------------------------------------------------------------------- @@ -97,7 +104,8 @@ TUid /*aCustomMessageId*/, const TDesC8& aCustomMessage ) { - iAvkonAppUi->StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL ); + iAvkonAppUi->StatusPane()->SwitchLayoutL( + R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ); iAvkonAppUi->StatusPane()->DrawNow(); if ( !iContainer ) { @@ -107,31 +115,22 @@ iContainer->DrawNow(); } - CDesCArrayFlat* files = - new (ELeave) CDesCArrayFlat( KFileArrayGranularity ); - CleanupStack::PushL( files ); - TBool selected = EFalse; + iData.iAppUid = aPrevViewId.iAppUid; + iData.iViewUid = aPrevViewId.iViewUid; + iData.iMultiple = EFalse; + iData.iTimer = iTimer; - TBool multiple=EFalse; if( aCustomMessage == KMulti ) { - multiple = ETrue; + iData.iMultiple = ETrue; } - TRAPD( err, selected = MGFetch::RunL( *files, EImageFile, multiple ) ); - if ( err == KErrNone && - selected && - files->MdcaCount() > 0 ) + + // Run image selection dialog asynchronously + if ( iTimer->IsActive() ) { - // set wallpaper. - if( files->MdcaCount() == 1 ) - { - iEngine.Editor()->BgManager().AddWallpaperL( files->MdcaPoint( 0 ) ); - } + iTimer->Cancel(); } - CleanupStack::PopAndDestroy( files ); - - iAvkonAppUi->ActivateViewL( aPrevViewId ); - + iTimer->Start( 0, 1000, TCallBack( TimerCallbackL, &iData ) ); } // ----------------------------------------------------------------------------- @@ -148,4 +147,54 @@ } } +// ----------------------------------------------------------------------------- +// CXnWallpaperView::TimerCallback +// ----------------------------------------------------------------------------- +// +TInt CXnWallpaperView::TimerCallbackL(TAny *aPtr) + { + TInt errAddWallpaper = KErrNone; + + TXnWallpaperViewData* data = reinterpret_cast( aPtr ); + data->iTimer->Cancel(); + + CDesCArrayFlat* files = + new (ELeave) CDesCArrayFlat( KFileArrayGranularity ); + CleanupStack::PushL( files ); + TBool selected = EFalse; + + TRAPD( err, selected = MGFetch::RunL( *files, EImageFile, data->iMultiple ) ); + if ( err == KErrNone && + selected && + files->MdcaCount() > 0 ) + { + // set wallpaper. + if( files->MdcaCount() == 1 ) + { + CXnAppUiAdapter* appui = static_cast< CXnAppUiAdapter* >( iAvkonAppUi ); + CXnBackgroundManager& bgManager = appui->ViewAdapter().BgManager(); + errAddWallpaper = bgManager.AddWallpaperL( files->MdcaPoint( 0 ) ); + } + } + CleanupStack::PopAndDestroy( files ); + + if( errAddWallpaper == KErrCACorruptContent ) + { + //load message text + HBufC* msg = StringLoader::LoadLC( R_QTN_HS_CORRUPTED_IMAGE_NOTE ); + //ensure that dialog will not disappear immediatelly - by const. param + CAknErrorNote* dialog = new (ELeave) CAknErrorNote( true ); + CleanupStack::PushL( dialog ); + //show dialog to user and destroy it + dialog->ExecuteLD( *msg ); + CleanupStack::Pop( dialog ); + CleanupStack::PopAndDestroy( msg ); + } + + iAvkonAppUi->ActivateViewL( TVwsViewId( data->iAppUid, data->iViewUid ) ); + + return EFalse; + } + + // End of File diff -r 4d54b72983ae -r c743ef5928ba idlehomescreen/xmluirendering/uiengine/src/xnwidgetextensionadapter.cpp --- a/idlehomescreen/xmluirendering/uiengine/src/xnwidgetextensionadapter.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnwidgetextensionadapter.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -106,19 +106,10 @@ CXnType* typeInfo = iNode.Node().Type(); const TDesC8& type = typeInfo->Type(); - if ( type == KPopUpText ) - { - // popup element does not capture pointer events - SetPointerCapture( ETrue ); - } - else + if ( ( type != KPopUpText ) && + ( Window().SetTransparencyAlphaChannel() == KErrNone ) ) { - // widget extension node - SetPointerCapture( ETrue ); - if ( Window().SetTransparencyAlphaChannel() == KErrNone ) - { - Window().SetBackgroundColor( ~0 ); - } + Window().SetBackgroundColor( ~0 ); } iUiEngine = iNode.Node().UiEngine(); CXnControlAdapter::ConstructL( iNode ); @@ -142,78 +133,77 @@ return; } + SetPointerCapture( aVisible ); + CXnPluginData& plugin( iAppUiAdapter->ViewManager().ActiveViewData().Plugin( &iNode.Node() ) ); plugin.SetIsDisplayingPopup( aVisible, &iNode.Node() ); - if ( aVisible ) - { - - CXnType* typeInfo = iNode.Node().Type(); - const TDesC8& type = typeInfo->Type(); + CXnType* typeInfo = iNode.Node().Type(); + const TDesC8& type = typeInfo->Type(); - if ( type == KPopUpText ) - { - // read position-hint property and set-up its variable - CXnProperty* positionHintProp = NULL; - TRAP_IGNORE( positionHintProp = iNode.Node().GetPropertyL( KPositionHint ) ); - - if ( positionHintProp ) + if ( type != KPopUpText ) + { + DrawableWindow()->FadeBehind( aVisible ); + } + + if ( aVisible && type == KPopUpText ) + { + // read position-hint property and set-up its variable + CXnProperty* positionHintProp = NULL; + TRAP_IGNORE( positionHintProp = iNode.Node().GetPropertyL( KPositionHint ) ); + + if ( positionHintProp ) + { + const TDesC8& displayHintVal = positionHintProp->StringValue(); + + if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KAboveLeft ) + { + iPositionHint = EAboveLeft; + } + else if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KAboveRight ) + { + iPositionHint = EAboveRight; + } + else if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KBelowLeft ) + { + iPositionHint = EBelowLeft; + } + else if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KBelowRight ) { - const TDesC8& displayHintVal = positionHintProp->StringValue(); - - if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KAboveLeft ) - { - iPositionHint = EAboveLeft; - } - else if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KAboveRight ) - { - iPositionHint = EAboveRight; - } - else if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KBelowLeft ) - { - iPositionHint = EBelowLeft; - } - else if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KBelowRight ) - { - iPositionHint = EBelowRight; - } - else if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KRight ) - { - iPositionHint = ERight; - } - else if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KLeft ) - { - iPositionHint = ELeft; - } - else - { - // if the value if of unknown type, use default one - if ( AknLayoutUtils::LayoutMirrored() ) - { - iPositionHint = EAboveRight; - } - else - { - iPositionHint = EAboveLeft; - } + iPositionHint = EBelowRight; + } + else if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KRight ) + { + iPositionHint = ERight; + } + else if ( displayHintVal == XnPropertyNames::tooltip::positionhint::KLeft ) + { + iPositionHint = ELeft; + } + else + { + // if the value if of unknown type, use default one + if ( AknLayoutUtils::LayoutMirrored() ) + { + iPositionHint = EAboveRight; } - - if ( iPositionHint != ENone ) - { - // the popup is going visible and position-hind is available - // calculate its position - CalculatePosition(); - } + else + { + iPositionHint = EAboveLeft; + } + } + + if ( iPositionHint != ENone ) + { + // the popup is going visible and position-hind is available + // calculate its position + CalculatePosition(); } - } - DrawableWindow()->FadeBehind( ETrue ); + } } - else - { - DrawableWindow()->FadeBehind( EFalse ); - } + CCoeControl::MakeVisible( aVisible ); } @@ -255,39 +245,42 @@ CXnNode* parentN(iUiEngine->FindNodeByIdL( parentIdVal, iNode.Node().Namespace() ) ); - TRect clientRect = - static_cast ( *iAppUiAdapter ).ClientRect(); - TRect parentRect = parentN->Rect(); - parentRect.Move( clientRect.iTl ); - - if ( !parentRect.Contains( aPointerEvent.iParentPosition ) ) + if ( parentN ) { - // tap was neither in popup nor in its parent - - // we can close it - if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) + TRect clientRect = + static_cast ( *iAppUiAdapter ).ClientRect(); + TRect parentRect = parentN->Rect(); + parentRect.Move( clientRect.iTl ); + + if ( !parentRect.Contains( aPointerEvent.iParentPosition ) ) { - CXnDomStringPool* sp = - iNode.Node().DomNode()->StringPool(); - CXnProperty* prop = CXnProperty::NewL( KDisplay, KNone, - CXnDomPropertyValue::EString, *sp ); - CleanupStack::PushL( prop ); - iNode.Node().SetPropertyL( prop ); - CleanupStack::Pop( prop ); + // tap was neither in popup nor in its parent - + // we can close it + if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) + { + CXnDomStringPool* sp = + iNode.Node().DomNode()->StringPool(); + CXnProperty* prop = CXnProperty::NewL( KDisplay, KNone, + CXnDomPropertyValue::EString, *sp ); + CleanupStack::PushL( prop ); + iNode.Node().SetPropertyL( prop ); + CleanupStack::Pop( prop ); + return; + } + } + else + { + // tap was made inside of popup parent + // we pass the event to it after + // recalculating the taping point + TPointerEvent newPointerEvent; + newPointerEvent.Copy( aPointerEvent ); + newPointerEvent.iPosition = TPoint( + aPointerEvent.iParentPosition - clientRect.iTl ); + parentN->Control()->HandlePointerEventL( newPointerEvent ); return; } } - else - { - // tap was made inside of popup parent - // we pass the event to it after - // recalculating the taping point - TPointerEvent newPointerEvent; - newPointerEvent.Copy( aPointerEvent ); - newPointerEvent.iPosition = TPoint( - aPointerEvent.iParentPosition - clientRect.iTl ); - parentN->Control()->HandlePointerEventL( newPointerEvent ); - return; - } } } } diff -r 4d54b72983ae -r c743ef5928ba menufw/menufwui/matrixmenu/src/mmappui.cpp --- a/menufw/menufwui/matrixmenu/src/mmappui.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/menufw/menufwui/matrixmenu/src/mmappui.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -12,8 +12,8 @@ * Contributors: * * Description: Application UI class -* Version : %version: MM_176.1.28.1.60 % << Don't touch! Updated by Synergy at check-out. -* Version : %version: MM_176.1.28.1.60 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: MM_176.1.28.1.61 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: MM_176.1.28.1.61 % << Don't touch! Updated by Synergy at check-out. * */ @@ -1805,12 +1805,6 @@ if( iCurrentContainer != aWidgetContainer ) { - if( iCurrentContainer && aWidgetContainer && - iCurrentContainer->WidgetType() != aWidgetContainer->WidgetType() ) - { - StartLayoutSwitchFullScreen(); - } - TBool highlightVisibleBefore = iCurrentContainer != NULL && iCurrentContainer->IsHighlightVisible(); diff -r 4d54b72983ae -r c743ef5928ba menufw/menufwui/mmwidgets/inc/mmgridview.h --- a/menufw/menufwui/mmwidgets/inc/mmgridview.h Tue Jan 26 11:48:23 2010 +0200 +++ b/menufw/menufwui/mmwidgets/inc/mmgridview.h Tue Feb 02 00:04:13 2010 +0200 @@ -12,7 +12,7 @@ * Contributors: * * Description: CMmGridView declaration -* Version : %version: MM_24.1.8 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: MM_24.1.9 % << Don't touch! Updated by Synergy at check-out. * */ @@ -133,6 +133,12 @@ * @param aItemHeight New height in pixels for this view’s items. */ void SetItemHeight(TInt aItemHeight); + + /** + * Updates various member variables in this grid view and related objects + * with item dimensions taken from the template library. + */ + void UpdateItemHeightAndWidth(); private: diff -r 4d54b72983ae -r c743ef5928ba menufw/menufwui/mmwidgets/src/mmgrid.cpp --- a/menufw/menufwui/mmwidgets/src/mmgrid.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/menufw/menufwui/mmwidgets/src/mmgrid.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -12,7 +12,7 @@ * Contributors: * * Description: -* Version : %version: MM_97 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: MM_98 % << Don't touch! Updated by Synergy at check-out. * */ @@ -96,7 +96,7 @@ CListItemDrawer* itemDrawer = aListBox->View()->ItemDrawer(); CWindowGc* originalGc = itemDrawer->Gc(); if ( customGc == originalGc ) - { + { return NULL; } else @@ -867,7 +867,7 @@ // void CMmGrid::UpdateScrollBarsL() { - TBool redrawNeeded = HandleScrollbarVisibilityChangeL(); + TBool visibilityChanged = HandleScrollbarVisibilityChangeL(); if (ScrollBarFrame()->VerticalScrollBar()->IsVisible()) { CAknGrid::UpdateScrollBarsL(); @@ -876,6 +876,11 @@ iMmDrawer->TemplateLibrary()->SetScrollbarWidthL( ScrollBarFrame()->VerticalScrollBar()->Rect().Width() + ScrollBarOffset() ); FixViewForMirroredLayout(); + if ( visibilityChanged ) + { + CMmGridView* view = static_cast( iView ); + view->UpdateItemHeightAndWidth(); + } } // ----------------------------------------------------------------------------- diff -r 4d54b72983ae -r c743ef5928ba menufw/menufwui/mmwidgets/src/mmgridview.cpp --- a/menufw/menufwui/mmwidgets/src/mmgridview.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/menufw/menufwui/mmwidgets/src/mmgridview.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -214,14 +214,7 @@ // void CMmGridView::Draw(const TRect* aClipRect) const { - CMmListBoxItemDrawer* itemDrawer = - STATIC_CAST( CMmListBoxItemDrawer*, ItemDrawer() ); - TSize size = itemDrawer->GetItemSize( 0, EFalse ); - if ( itemDrawer->ItemCellSize() != size ) - { - const_cast( this )->SetItemHeight( size.iHeight ); - const_cast( this )->SetColumnWidth( size.iWidth ); - } + const_cast( this )->UpdateItemHeightAndWidth(); DoDraw( aClipRect ); } @@ -299,4 +292,23 @@ CAknGridView::SetItemHeight(aItemHeight); } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CMmGridView::UpdateItemHeightAndWidth() + { + if ( iModel && iModel->NumberOfItems() ) + { + CMmListBoxItemDrawer* itemDrawer = + STATIC_CAST( CMmListBoxItemDrawer*, ItemDrawer() ); + TSize size = itemDrawer->GetItemSize( 0, EFalse ); + if ( itemDrawer->ItemCellSize() != size ) + { + const_cast( this )->SetItemHeight( size.iHeight ); + const_cast( this )->SetColumnWidth( size.iWidth ); + } + } + } + //End of file diff -r 4d54b72983ae -r c743ef5928ba menufw/menufwui/mmwidgets/src/mmlistboxitemdrawer.cpp --- a/menufw/menufwui/mmwidgets/src/mmlistboxitemdrawer.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/menufw/menufwui/mmwidgets/src/mmlistboxitemdrawer.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -128,6 +128,7 @@ void CMmListBoxItemDrawer::InvalidateCache() { iItemsDataCache->Invalidate(); + // this is needed to get iColors initialized on first use: } // ----------------------------------------------------------------------------- @@ -300,7 +301,7 @@ TInt drawnItemIndex = iFloatingItems[i].GetDrawnItemIndex(); TSize size = iWidget->View()->ItemSize( drawnItemIndex ); TRect rect( iFloatingItems[i].GetItemPosition(), iFloatingItems[i].GetItemPosition() + size); - + if (rect.Intersects(currentlyDrawnRect)) { TInt tempZoomIconIndex = iZoomIconIndex; @@ -314,7 +315,7 @@ { ClearFlags( CListItemDrawer::EPressedDownState ); } - + DrawActualItem( drawnItemIndex, rect, ETrue, EFalse, EFalse, EFalse ); iIconAnimationZoomRatio = tempZoomRatio; iZoomIconIndex = tempZoomIconIndex; @@ -444,13 +445,13 @@ { DrawBackgroundAndSeparatorLines( aItemTextRect ); } - + if ( !iUseCache || !cache->IsValid() ) { SetupSubCellsL( aItemIsCurrent, aItemIndex ); } __ASSERT_DEBUG( cache->IsValid(), User::Invariant() ); - + FormattedCellData()->SetIconArray( cache->GetIconListL() ); TBool isFloating = !iUseCache && IsFloating( aItemIndex ); @@ -462,7 +463,7 @@ CFormattedCellListBoxData* data = static_cast(iData); data->EnableMarqueeL( EFalse ); - + TBool highlightShown = ETrue; if (FormattedCellData()->RespectFocus() && !aViewIsEmphasized) { @@ -668,22 +669,22 @@ if ( !aDragged ) { AknsUtils::GetCachedColor( skin, colors.iText, KAknsIIDQsnTextColors, - EAknsCIQsnTextColorsCG6 ); + EAknsCIQsnTextColorsCG9 ); AknsUtils::GetCachedColor( skin, colors.iBack , KAknsIIDQsnTextColors, - EAknsCIQsnOtherColorsCG9 ); + EAknsCIQsnOtherColorsCG6 ); AknsUtils::GetCachedColor( skin, colors.iHighlightedText, - KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG10 ); + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG11 ); AknsUtils::GetCachedColor( skin, colors.iHighlightedBack, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); } else { AknsUtils::GetCachedColor( skin, colors.iText, KAknsIIDQsnTextColors, - EAknsCIQsnTextColorsCG10 ); + EAknsCIQsnTextColorsCG11 ); AknsUtils::GetCachedColor( skin, colors.iBack , KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); AknsUtils::GetCachedColor( skin, colors.iHighlightedText, - KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG10 ); + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG11 ); AknsUtils::GetCachedColor( skin, colors.iHighlightedBack, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); } @@ -778,7 +779,7 @@ { return TSize( 1, 1 ); } - + TSize size; CMmCacheForItem* cache = NULL; @@ -787,19 +788,19 @@ { cache = NULL; } - + if ( cache ) { cache->InvalidateIfCacheMayNotBeUsed( aItemIsCurrent, iLastSubcellsSetupCode ); } - + if ( !iUseCache || !cache || !cache->IsValid() ) { const TDesC8& mm_template = iMmModel->GetAttributeAsText (aItemIndex, KMmTemplate8); TRect viewRect = iWidget->View()->ViewRect(); - + TBool landscapeOrientation = viewRect.Width() > viewRect.Height(); // Layout_Meta_Data::IsLandscapeOrientation cannot be used here because it // might happen that GetSize (this method) gets called immediately after @@ -810,7 +811,7 @@ // cause the template library to fill the internal cache for landscape mode // with parameters calculated according to the outdated ViewRect. - + if ( iTemplateLibrary->GetSize( size, iWidgetType, mm_template, landscapeOrientation, aItemIsCurrent, viewRect ) != KErrNone ) @@ -973,7 +974,7 @@ MmEffects::KNoAnimationFramesCount, iWidget->View() ); floatingItem.SetManualDelete( ETrue ); AddFloatingItemL(floatingItem, 0); - + ClearFlags( CListItemDrawer::EPressedDownState ); } @@ -1044,7 +1045,7 @@ { iIsIndicatorItem = ETrue; SetRedrawItemBackground( EFalse ); - + DrawActualItem( aItemIndex, AdjustItemRect( aItemIndex ) , EFalse, EFalse, EFalse, EFalse); SetRedrawItemBackground( ETrue ); @@ -1340,19 +1341,19 @@ { CMmCacheForItem* cache = iItemsDataCache->GetItemCacheL( aItemIndex ); cache->SetValidL( EFalse ); - + const TDesC8& mmTemplate = iMmModel->GetAttributeAsText( aItemIndex, KMmTemplate8 ); if ( !mmTemplate.Compare( KNullDesC8 ) || !mmTemplate.Compare( KEmpty8 ) ) { User::Leave( KErrNotFound ); } cache->SetTemplateL( mmTemplate ); - + cache->ClearIconArray(); cache->SetCurrent( aItemIsCurrent ); - + TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation(); - + RBuf& itemText = cache->GetItemTextForModifications(); itemText.Close(); itemText.CreateL( MmTemplateContants::KItemSubCellsText ); @@ -1369,9 +1370,9 @@ iTemplateLibrary->GetMoveIndicatorChildrenL( iWidgetType, templateChildArray, mmTemplate, landscapeOrientation, aItemIsCurrent ); } - + iLastSubcellsSetupCode.Clear(); - + //Backdrop icon as first element to draw TInt subcellIncrement( 0 ); if ( GetBackdropVisibility( aItemIndex, aItemIsCurrent ) ) @@ -1379,7 +1380,7 @@ SetupBackdropSubcellL( templateChildArray, aItemIndex, itemText, subcellIncrement ); iItemHasBackdrop = ETrue; } - else + else { iItemHasBackdrop = EFalse; } @@ -1409,13 +1410,13 @@ { SetupSubNoCellL( i, aItemIndex ); } - + iLastSubcellsSetupCode.AddTemplateInfo( iItemsDataCache->GetTemplateIdentifierL( mmTemplate ) ); iLastSubcellsSetupCode.AddIsCurrentInfo( aItemIsCurrent ); CleanupStack::PopAndDestroy( &templateChildArray ); - + cache->SetSubcellsSetupCode( iLastSubcellsSetupCode ); // the line below is here only to make the cached information complete GetItemSize( aItemIndex, aItemIsCurrent ); @@ -1471,14 +1472,14 @@ // // ----------------------------------------------------------------------------- // -void CMmListBoxItemDrawer::DrawActualItem(TInt aItemIndex, - const TRect& aActualItemRect, TBool aItemIsCurrent, +void CMmListBoxItemDrawer::DrawActualItem(TInt aItemIndex, + const TRect& aActualItemRect, TBool aItemIsCurrent, TBool aViewIsEmphasized, TBool /*aViewIsDimmed*/, TBool aItemIsSelected) const { - if (Properties(aItemIndex).IsSelectionHidden()) - { - aItemIsSelected = EFalse; + if (Properties(aItemIndex).IsSelectionHidden()) + { + aItemIsSelected = EFalse; } DrawItemText(aItemIndex,aActualItemRect,aItemIsCurrent, aViewIsEmphasized,aItemIsSelected); @@ -1488,7 +1489,7 @@ // // ----------------------------------------------------------------------------- // -TBool CMmListBoxItemDrawer::GetHighlightVisibility( TInt aItemIndex, +TBool CMmListBoxItemDrawer::GetHighlightVisibility( TInt aItemIndex, TBool aItemIsCurrent, TBool aAllowHighlightForNonDraggedItem ) const { TBool highlightVisibility(EFalse); @@ -1497,7 +1498,7 @@ TBool currentlyDraggedItem = ItemHasFloatingType( aItemIndex, EDrag ) || ItemHasFloatingType( aItemIndex, EDragTransition ); - + if ( ( STATIC_CAST(CMmWidgetContainer*,Widget()->Parent())->IsHighlightVisible() && aItemIsCurrent && aAllowHighlightForNonDraggedItem ) || currentlyDraggedItem ) @@ -1512,18 +1513,18 @@ // // ----------------------------------------------------------------------------- // -TBool CMmListBoxItemDrawer::GetBackdropVisibility( TInt aItemIndex, +TBool CMmListBoxItemDrawer::GetBackdropVisibility( TInt aItemIndex, TBool aItemIsCurrent ) const { TBool currentlyDraggedItem = ItemHasFloatingType( aItemIndex, EDrag ) || ItemHasFloatingType( aItemIndex, EDragTransition ); - + return IsEditMode() /* draw the backdrop only in edit mode */ && !currentlyDraggedItem /* backdrop is disabled for dragged items */ && !iIsIndicatorItem /* in non-touch backdrop is not drawn, just "move indicators" */ && !iLeftOverAreaUnderAnimatedItem /* is the currently drawn item the area left over behind dragged item*/ - && !( STATIC_CAST( CMmWidgetContainer*,Widget()->Parent() )->IsHighlightVisible() + && !( STATIC_CAST( CMmWidgetContainer*,Widget()->Parent() )->IsHighlightVisible() && aItemIsCurrent );/*if the timer is active then we want to draw highlight (not backdrop) on the current index*/ } @@ -1531,7 +1532,7 @@ // // ----------------------------------------------------------------------------- // -TBool CMmListBoxItemDrawer::ItemHasFloatingType( TInt aItemIndex, +TBool CMmListBoxItemDrawer::ItemHasFloatingType( TInt aItemIndex, TMmFloatingItemType aFloatingType) const { TBool hasFloatingType( EFalse ); diff -r 4d54b72983ae -r c743ef5928ba menufw/menufwui/mmwidgets/src/mmwidgetcontainer.cpp --- a/menufw/menufwui/mmwidgets/src/mmwidgetcontainer.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/menufw/menufwui/mmwidgets/src/mmwidgetcontainer.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -12,7 +12,7 @@ * Contributors: * * Description: -* Version : %version: MM_71.1.17.1.49 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: MM_71.1.17.1.51 % << Don't touch! Updated by Synergy at check-out. * */ @@ -1948,11 +1948,10 @@ } } - if ( iListBoxObserver && !iLongTapInProgress ) + if ( iListBoxObserver && !iLongTapInProgress && !iDrawer->IsDraggable() ) { iListBoxObserver->HandleListBoxEventL( aListBox, aEventType ); } - } //End of file diff -r 4d54b72983ae -r c743ef5928ba menufw/menusuites/foldersuite/data/items_nontouch.xml --- a/menufw/menusuites/foldersuite/data/items_nontouch.xml Tue Jan 26 11:48:23 2010 +0200 +++ b/menufw/menusuites/foldersuite/data/items_nontouch.xml Tue Feb 02 00:04:13 2010 +0200 @@ -105,7 +105,7 @@ - + diff -r 4d54b72983ae -r c743ef5928ba menufw/menusuites/foldersuite/data/items_touch.xml --- a/menufw/menusuites/foldersuite/data/items_touch.xml Tue Jan 26 11:48:23 2010 +0200 +++ b/menufw/menusuites/foldersuite/data/items_touch.xml Tue Feb 02 00:04:13 2010 +0200 @@ -175,7 +175,7 @@ - + diff -r 4d54b72983ae -r c743ef5928ba taskswitcher/taskswitcherui/inc/tsappuid.hrh --- a/taskswitcher/taskswitcherui/inc/tsappuid.hrh Tue Jan 26 11:48:23 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#ifndef TSAPPUID_HRH -#define TSAPPUID_HRH - -#define KTsAppUidValue 0x20016BF0 - -#endif diff -r 4d54b72983ae -r c743ef5928ba taskswitcher/taskswitcherui/inc/tsgraphicids.h --- a/taskswitcher/taskswitcherui/inc/tsgraphicids.h Tue Jan 26 11:48:23 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ -#ifndef TSGRAPHICIDS_H -#define TSGRAPHICIDS_H - -#include - -/** - * Logical IDs for all icons used in Taskswitcher. - */ -enum TTsGraphicId - { - ETsGraphicIdLAST - }; - -#endif // TSGRAPHICIDS_H diff -r 4d54b72983ae -r c743ef5928ba taskswitcher/taskswitcherui/inc/tsgraphictab.h --- a/taskswitcher/taskswitcherui/inc/tsgraphictab.h Tue Jan 26 11:48:23 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ -#ifndef TSGRAPHICTAB_H -#define TSGRAPHICTAB_H - -#include - -#include -#include // skinned icons -#include // 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 TTsGraphicId. (except the last-marker) - */ -static const TText* const KTsGraphicFiles[] = - { - _S( "" ) - }; - -/** - * Skin related IDs. Not in use yet. - * Use all zeros if image file should be used instead. - * Order and count must match TTsGraphicId. (except the last-marker) - */ -static const TAknsItemID KTsGraphicSkinIds[] = - { - KAknsIIDNone - }; - -#endif // TSGRAPHICTAB_H diff -r 4d54b72983ae -r c743ef5928ba taskswitcher/taskswitcherui/inc/tsuid.hrh --- a/taskswitcher/taskswitcherui/inc/tsuid.hrh Tue Jan 26 11:48:23 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -/* -* 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: Taskswitcher application's UID3 - * -*/ - - -#ifndef TSAPPUID_HRH -#define TSAPPUID_HRH - -#define KTsAppUidValue 0x20016BF0 - -#endif diff -r 4d54b72983ae -r c743ef5928ba taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswaparea.h --- a/taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswaparea.h Tue Jan 26 11:48:23 2010 +0200 +++ b/taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswaparea.h Tue Feb 02 00:04:13 2010 +0200 @@ -117,11 +117,6 @@ 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(); @@ -284,13 +279,6 @@ * @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. @@ -380,6 +368,12 @@ * Launches increasing pop-up feedback. */ void LaunchPopupFeedback(); + + /** + * Show highlight when disabled and + * consume EEventKeyUp that follows after event that swiched on the highlight. + */ + TKeyResponse ShowHighlightOnKeyEvent(const TKeyEvent& aKeyEvent, TEventCode aType); private: // Data @@ -407,9 +401,6 @@ // 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; diff -r 4d54b72983ae -r c743ef5928ba taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswapgrid.h --- a/taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswapgrid.h Tue Jan 26 11:48:23 2010 +0200 +++ b/taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswapgrid.h Tue Feb 02 00:04:13 2010 +0200 @@ -57,7 +57,8 @@ */ class CTsFastSwapGrid: public CAknGrid, - public MTsDeviceStateObserver + public MTsDeviceStateObserver, + public MTsFastSwapTimerObserver { public: // enums enum TFastSwapGridBehaviour @@ -200,6 +201,9 @@ private: // From CAknGrid virtual void CreateItemDrawerL(); +private: // From MTsFastSwapTimerObserver + void TimerCompletedL( CTsFastSwapTimer* aSource ); + private: // New functions /** @@ -224,6 +228,7 @@ RArray iCloseItems; TInt iCloseIconHitIdx; MTsFastSwapGridObserver* iFastSwapGridObserver; + CTsFastSwapTimer* iCloseIconRedrawTimer; // Highlight handling TFastSwapGridBehaviour iBehaviour; @@ -232,6 +237,7 @@ // Visible view rectangle (horizontal scrolling support) TRect iVisibleViewRect; + // Feedback support TBool iTactileFeedbackSupport; mutable RArray iFullyVisibleItems; diff -r 4d54b72983ae -r c743ef5928ba taskswitcher/taskswitcherui/taskswitcherapp/src/tsappui.cpp --- a/taskswitcher/taskswitcherui/taskswitcherapp/src/tsappui.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/taskswitcher/taskswitcherui/taskswitcherapp/src/tsappui.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -385,7 +385,10 @@ } // forward event iDeviceState->HandleResourceChange( aType ); - iAppView->HandleResourceChange( aType ); + if ( iAppView ) + { + iAppView->HandleResourceChange( aType ); + } } // ----------------------------------------------------------------------------- diff -r 4d54b72983ae -r c743ef5928ba taskswitcher/taskswitcherui/taskswitcherapp/src/tsfastswaparea.cpp --- a/taskswitcher/taskswitcherui/taskswitcherapp/src/tsfastswaparea.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/taskswitcher/taskswitcherui/taskswitcherapp/src/tsfastswaparea.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -124,7 +124,6 @@ delete iGrid; delete iFSClient; delete iPopup; - delete iConfirmCloseQuery; delete iHighlightTimer; delete iRedrawTimer; delete iUpdateGridTimer; @@ -212,10 +211,6 @@ empty, empty ); // Setup text layout - TRgb textColor; - AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), textColor, - KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG9 ); - TAknLayoutText textLayout; textLayout.LayoutText( Rect(), @@ -226,12 +221,25 @@ 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*/, + NULL /*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*/); + // Text colors + TRgb textColor; + AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), textColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); + TRgb highlightTextColor; + AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), highlightTextColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG11 ); + CFormattedCellListBoxData::TColors colors; + colors.iText = textColor; + colors.iBack = iGrid->ItemDrawer()->BackColor(); + colors.iHighlightedText = highlightTextColor; + colors.iHighlightedBack = iGrid->ItemDrawer()->HighlightedBackColor(); + iGrid->ItemDrawer()->FormattedCellData()->SetSubCellColorsL(1, colors); // Setup grid observers if ( obs ) @@ -427,20 +435,6 @@ } // -------------------------------------------------------------------------- -// CTsFastSwapArea::TryCloseAppWithQueryL -// -------------------------------------------------------------------------- -// -void CTsFastSwapArea::TryCloseAppWithQueryL( TInt aIndex ) - { - if ( aIndex >= 0 && aIndex < iArray.Count() - && CanClose( aIndex ) - && ConfirmCloseL( aIndex ) ) - { - TryCloseAppL( aIndex ); - } - } - -// -------------------------------------------------------------------------- // CTsFastSwapArea::TryCloseAllL // -------------------------------------------------------------------------- // @@ -732,9 +726,6 @@ { // 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; } // ----------------------------------------------------------------------------- @@ -812,33 +803,17 @@ TInt idx = SelectedIndex(); if ( idx >= 0 ) { - TryCloseAppWithQueryL( idx ); + TryCloseAppL( 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; - } - } + TKeyResponse response = ShowHighlightOnKeyEvent(aKeyEvent, aType); + if( response == EKeyWasConsumed ) + { + return EKeyWasConsumed; + } // pass the event to grid // do not pass down and up arrow key events @@ -875,6 +850,43 @@ } // ----------------------------------------------------------------------------- +// CTsFastSwapArea::CatchKeyEvent +// ----------------------------------------------------------------------------- +// +TKeyResponse CTsFastSwapArea::ShowHighlightOnKeyEvent( + const TKeyEvent& aKeyEvent, TEventCode aType) + { + TKeyResponse retVal(EKeyWasNotConsumed); + + if (aKeyEvent.iScanCode == EStdKeyLeftArrow || + aKeyEvent.iScanCode == EStdKeyRightArrow) + { + if (!iGrid->IsHighlightVisible()) + { + if (aType == EEventKey) + { + ShowHighlight(); + iConsumeEvent = ETrue; + } + retVal = EKeyWasConsumed; + } + else if (iConsumeEvent) + { + if (aType == EEventKeyUp) + { + retVal = EKeyWasConsumed; + } + else + { + iConsumeEvent = EFalse; + } + } + } + return retVal; + } + + +// ----------------------------------------------------------------------------- // CTsFastSwapArea::HandlePointerEventL // ----------------------------------------------------------------------------- // @@ -889,24 +901,6 @@ } // ----------------------------------------------------------------------------- -// CTsFastSwapArea::ConfirmCloseL -// ----------------------------------------------------------------------------- -// -TBool CTsFastSwapArea::ConfirmCloseL( TInt aIndex ) - { - HBufC* msg = StringLoader::LoadLC( R_TS_FSW_CONFIRM_CLOSE, - iArray[aIndex]->AppName() ); - iConfirmCloseQuery = CAknQueryDialog::NewL( - CAknQueryDialog::EConfirmationTone ); - iConfirmCloseQuery->SetPromptL( *msg ); - CleanupStack::PopAndDestroy( msg ); - TBool ok = iConfirmCloseQuery->ExecuteLD( - R_TS_FSW_CONFIRM_CLOSE_QUERY ); - iConfirmCloseQuery = 0; - return ok; - } - -// ----------------------------------------------------------------------------- // CTsFastSwapArea::SelectedIndex // ----------------------------------------------------------------------------- // @@ -978,7 +972,7 @@ // void CTsFastSwapArea::HandleCloseEventL(TInt aItemIdx) { - TryCloseAppWithQueryL( aItemIdx ); + TryCloseAppL( aItemIdx ); } diff -r 4d54b72983ae -r c743ef5928ba taskswitcher/taskswitcherui/taskswitcherapp/src/tsfastswapgrid.cpp --- a/taskswitcher/taskswitcherui/taskswitcherapp/src/tsfastswapgrid.cpp Tue Jan 26 11:48:23 2010 +0200 +++ b/taskswitcher/taskswitcherui/taskswitcherapp/src/tsfastswapgrid.cpp Tue Feb 02 00:04:13 2010 +0200 @@ -29,6 +29,8 @@ * ================================================================================ */ +const TInt KCloseIconRedrawTime = 300000; // 0.3 second + // ----------------------------------------------------------------------------- // CTsFastSwapGrid::CTsFastSwapGrid // ----------------------------------------------------------------------------- @@ -50,6 +52,7 @@ { iCloseItems.Close(); delete iBgContext; + delete iCloseIconRedrawTimer; iFullyVisibleItems.Close(); iPartialVisibleItems.Close(); } @@ -71,6 +74,8 @@ ETrue ); iBgContext->SetCenter( KAknsIIDQsnFrPopupCenter ); iVisibleViewRect = TRect( 0, 0, 0, 0 ); + iCloseIconRedrawTimer = new (ELeave) CTsFastSwapTimer( *this ); + iCloseIconRedrawTimer->ConstructL(); } // ----------------------------------------------------------------------------- @@ -134,9 +139,9 @@ ETouchFeedbackBasicButton, ETouchFeedbackVibra, aPointerEvent); - iFastSwapGridObserver->HandleCloseEventL( hitDataIdx ); + iCloseIconRedrawTimer->Cancel(); + iCloseIconRedrawTimer->After(KCloseIconRedrawTime); } - ResetCloseHit(); if ( GridBehaviour() == EHybrid ) { ShowHighlight(); @@ -253,6 +258,18 @@ LoadCloseIcon(); } +// ----------------------------------------------------------------------------- +// CTsFastSwapGrid::TimerCompletedL +// ----------------------------------------------------------------------------- +// +void CTsFastSwapGrid::TimerCompletedL( CTsFastSwapTimer* aSource ) + { + if ( aSource == iCloseIconRedrawTimer ) + { + iFastSwapGridObserver->HandleCloseEventL( iCloseIconHitIdx ); + ResetCloseHit(); + } + } // ----------------------------------------------------------------------------- // CTsFastSwapGrid::SetCloseItemsL @@ -410,13 +427,16 @@ CFbsBitmap* icon = NULL; CFbsBitmap* mask = NULL; - TRAP_IGNORE(AknsUtils::CreateIconLC( AknsUtils::SkinInstance(), + TRAP_IGNORE(AknsUtils::CreateColorIconLC( AknsUtils::SkinInstance(), KAknsIIDQgnIndiItutListCollapse, + KAknsIIDQsnTextColors, // we use text color here, eventhough this is an icon + EAknsCIQsnTextColorsCG13, // softkey text color icon, mask, KAvkonBitmapFile, EMbmAvkonQgn_indi_button_preview_close, - EMbmAvkonQgn_indi_button_preview_close_mask + EMbmAvkonQgn_indi_button_preview_close_mask, + KRgbWhite ); CleanupStack::Pop( 2 ); // codescanner::cleanup );