# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1284542957 -10800 # Node ID 85902f042028f281e6d7a272bbcc83dab04e6704 # Parent 978afdc0236fd5a2bec8dc505b29df1cf58cdea5 Revision: 201035 Kit: 201036 diff -r 978afdc0236f -r 85902f042028 classicui_plat/extended_options_menu_api/inc/aknitemactionmenu.h --- a/classicui_plat/extended_options_menu_api/inc/aknitemactionmenu.h Tue Sep 14 21:48:24 2010 +0300 +++ b/classicui_plat/extended_options_menu_api/inc/aknitemactionmenu.h Wed Sep 15 12:29:17 2010 +0300 @@ -150,6 +150,13 @@ IMPORT_C void CollectionChanged( MAknCollection& aCollection ); /** + * Provides marking mode handler. + * + * @return Marking mode handler. + */ + IMPORT_C CAknMarkingMode& MarkingMode(); + + /** * Sets menu bar to item action menu. * * @internal @@ -224,14 +231,6 @@ MObjectProvider* Owner() const; /** - * Provides marking mode handler. - * - * @internal - * @return Marking mode handler. - */ - CAknMarkingMode& MarkingMode(); - - /** * Returns ETrue if collection has marked items. * * @internal diff -r 978afdc0236f -r 85902f042028 classicui_plat/ganes_api/inc/ganes/HgScroller.h --- a/classicui_plat/ganes_api/inc/ganes/HgScroller.h Tue Sep 14 21:48:24 2010 +0300 +++ b/classicui_plat/ganes_api/inc/ganes/HgScroller.h Wed Sep 15 12:29:17 2010 +0300 @@ -506,6 +506,7 @@ TBool iResetViewPosition; // ETrue on the first time run, and when iViewPosition must be reset. TBool iPointerDown; + TBool iEnterKeyHandled; CPeriodic* iHighlightTimer; // Higlight timer, own. TBool iSelectionToFocusedItem; // Is focused item clicked diff -r 978afdc0236f -r 85902f042028 classicui_pub/application_framework_api/inc/AknViewAppUi.h --- a/classicui_pub/application_framework_api/inc/AknViewAppUi.h Tue Sep 14 21:48:24 2010 +0300 +++ b/classicui_pub/application_framework_api/inc/AknViewAppUi.h Wed Sep 15 12:29:17 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -228,7 +228,10 @@ * Enables/disables local screen clearer. * Local screen clearer is used in the view based applications * to clear the application window if/when the view itself fails - * to do this. By default, the clearer is used. + * to do this. By default, the clearer is used except when launching + * the application as embedded. If the clearer needs to be used + * in an application that is launched as embedded, then this + * function must be explicitly called. * This function must be called before the BaseConstructL() to * prevent the screen clearer on application start up. * diff -r 978afdc0236f -r 85902f042028 classicui_pub/editors_api/inc/EIKEDWIN.H --- a/classicui_pub/editors_api/inc/EIKEDWIN.H Tue Sep 14 21:48:24 2010 +0300 +++ b/classicui_pub/editors_api/inc/EIKEDWIN.H Wed Sep 15 12:29:17 2010 +0300 @@ -385,6 +385,9 @@ CRepository* iCenRep; // Owned CCenRepNotifyHandler* iCenRepNotifyHandler; // Owned TInt iClearDirection; // Value of ClearDirection + // For listening the status of qwerty key board + CRepository* iCenRepForQwerty; // Owned + CCenRepNotifyHandler* iCenRepNotifyHandlerForQwerty; // Owned public: TInt iSkinIdForText; @@ -517,6 +520,12 @@ * Record internal status of of "tap to write". */ TInt iT2WState; + + /** + * Used to record if qwerty key board is opened. + * + */ + TInt iQwertyStatus; }; public: diff -r 978afdc0236f -r 85902f042028 classicui_pub/hierarchical_lists_api/inc/akntreelist.h --- a/classicui_pub/hierarchical_lists_api/inc/akntreelist.h Tue Sep 14 21:48:24 2010 +0300 +++ b/classicui_pub/hierarchical_lists_api/inc/akntreelist.h Wed Sep 15 12:29:17 2010 +0300 @@ -931,6 +931,16 @@ */ IMPORT_C void SetMarkingModeObserver( MAknMarkingModeObserver* aObserver ); + /** + * Turns the marking mode on / off. + * + * @since S60 5.2 + * + * @param aEnable @c ETrue to turn marking mode on + * @c EFalse to turn marking mode off + */ + IMPORT_C void SetMarkingMode( TBool aEnable ); + // From base class CCoeControl /** diff -r 978afdc0236f -r 85902f042028 classicui_pub/stylus_popup_menu_api/inc/aknstyluspopupmenu.h --- a/classicui_pub/stylus_popup_menu_api/inc/aknstyluspopupmenu.h Tue Sep 14 21:48:24 2010 +0300 +++ b/classicui_pub/stylus_popup_menu_api/inc/aknstyluspopupmenu.h Wed Sep 15 12:29:17 2010 +0300 @@ -252,6 +252,12 @@ */ static void CleanLocalRef( TAny* aParam ); + + /** + * Hide Preview Popups + */ + void HidePreviewPopup(); + private: // data /** diff -r 978afdc0236f -r 85902f042028 classicui_pub/tabs_api/inc/akntabgrp.h --- a/classicui_pub/tabs_api/inc/akntabgrp.h Tue Sep 14 21:48:24 2010 +0300 +++ b/classicui_pub/tabs_api/inc/akntabgrp.h Wed Sep 15 12:29:17 2010 +0300 @@ -876,6 +876,11 @@ * Resets the highlight status for tabs */ void ResetHighlightStatus(); + + /** + * Enable/Disable highlight effect + */ + void EnableHighlight( TBool aEnable, TInt aNewTab = -1 , TInt aPointX = -1 ); private: diff -r 978afdc0236f -r 85902f042028 classicui_pub/ui_framework_definitions_api/inc/EIKON.HRH --- a/classicui_pub/ui_framework_definitions_api/inc/EIKON.HRH Tue Sep 14 21:48:24 2010 +0300 +++ b/classicui_pub/ui_framework_definitions_api/inc/EIKON.HRH Wed Sep 15 12:29:17 2010 +0300 @@ -60,9 +60,11 @@ #define EEikCbaFlagSemiTransparent 0x100 /** - * Button group app msk icon flag. This flag can be set with CBA resource - * or by using CEikCba::SetButtonGroupFlags(TInt) method. CBA using - * control_pane_g4(0) to draw the window rect + * Button group app msk icon flag,also support msk label. + * This flag can be set with CBA resource + * or by using CEikCba::SetButtonGroupFlags(TInt) method. + * CBA using control_pane_g4(0) to draw the window rect. + * Use the CEikCba::UpdateIconL() to set the msk icon or show the msk label. */ #define EEikCbaFlagAppMskIcon 0x200 // EIKBUTB.HRH diff -r 978afdc0236f -r 85902f042028 classicui_pub/ui_framework_definitions_api/inc/avkon.hrh --- a/classicui_pub/ui_framework_definitions_api/inc/avkon.hrh Tue Sep 14 21:48:24 2010 +0300 +++ b/classicui_pub/ui_framework_definitions_api/inc/avkon.hrh Wed Sep 15 12:29:17 2010 +0300 @@ -400,6 +400,12 @@ EPeninputCmdLandscapeEditor, /** + * Command id for find pane to hide adaptive search grid + * + */ + EAknCmdHideASGrid, + + /** * @deprecated * Do not use. */ diff -r 978afdc0236f -r 85902f042028 commonuis/CommonUi/src/FindItemMenu.cpp --- a/commonuis/CommonUi/src/FindItemMenu.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/commonuis/CommonUi/src/FindItemMenu.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -882,18 +882,54 @@ // Replace cmd call with AIW menu if more than one option available in AIW // menu // Note: count of VoIP profiles is not static. If phone contains VoIP - // profiles there must be Internet call command in call submenu. + // profiles there must be Internet call command in call submenu. + // No context sensitive menu now. And new requirement is to show + // call menu for normal item and voip menu for sip address if voip is enabled. TInt dummy = 0; - if ( ( !iHideCallMenu || - ( iFindItemVoIPExtension->IsVoIPSupported() && - iFindItemVoIPExtension->VoIPProfilesExistL() ) ) && + if ( itemType == CItemFinder::EEmailAddress && + iFindItemVoIPExtension->IsVoIPSupported() && + iFindItemVoIPExtension->VoIPProfilesExistL() && iMenuPane->MenuItemExists( EFindItemCmdCall, dummy ) && - !iHideCallSubMenu ) - { + !( iMenuItemFlags & CFindItemMenu::ECallItem ) + ) + { + // CMyMenuPane is used only to get the aiw menu item + // for sip address, as it is an argument of the InitializeMenuPaneL + CMyMenuPane* aiwVoipMenu = + new ( ELeave ) CMyMenuPane( ( MEikMenuObserver* )this ); // not used really + CleanupStack::PushL( aiwVoipMenu ); + TResourceReader callUiReader; + iCoeEnv->CreateResourceReaderLC( + callUiReader, R_FINDMENU_CALLUI_AIW_SUBMENU ); + aiwVoipMenu->ConstructFromResourceL( callUiReader ); + CleanupStack::PopAndDestroy(); // callUiReader + + CAiwGenericParamList* inList = CAiwGenericParamList::NewLC(); + + // For SIP Address, use sip parameters + TAiwGenericParam param( EGenericParamSIPAddress ); + + // get the aiw menu item for sip address + inList->AppendL( param ); + iServiceHandler->InitializeMenuPaneL( + *( CEikMenuPane* )aiwVoipMenu, + R_FINDMENU_CALLUI_AIW_SUBMENU, + EFindMenuPlaceHolderCallUI, + *inList ); + + // Add all the menus for aiw to context main menu now. + for ( TInt i = 0; i < aiwVoipMenu->NumberOfItemsInPane(); i++ ) + { + iMenuPane->AddMenuItemL( aiwVoipMenu->ItemDataByIndexL( i ), EFindItemCmdCall ); + } + + // Now options of VOIP call and voice call are exclusive. + // For email( sip ) address, voip is used. So set the call + // menu to dimmed. iMenuPane->SetItemDimmed( EFindItemCmdCall, ETrue ); - iMenuPane->AddMenuItemsL( - R_FINDMENU_CALLUI_AIW_ITEM, - EFindItemCmdCall ); + + CleanupStack::PopAndDestroy( inList ); + CleanupStack::PopAndDestroy( aiwVoipMenu ); } } @@ -932,7 +968,7 @@ #ifndef RD_UNIFIED_EDITOR if ( !iEmailOverSmsFeatureSupported ) { - mtmFilter->AppendL(KSenduiMtmSmsUid); + mtmFilter->AppendL(KSenduiMtmSmsUid); } // Hide MMS if not supported if (!iMMSFeatureSupported) @@ -944,7 +980,7 @@ // Hide E-Mail if nosupported or phonenumber if ( !iEmailUiFeatureSupported || itemType == CItemFinder::EPhoneNumber ) { - mtmFilter->AppendL(KSenduiMtmSmtpUid); + mtmFilter->AppendL(KSenduiMtmSmtpUid); mtmFilter->AppendL(KSenduiMtmImap4Uid); mtmFilter->AppendL(KSenduiMtmPop3Uid); mtmFilter->AppendL(KSenduiMtmSyncMLEmailUid); @@ -952,7 +988,7 @@ // Hide Audio if not supported or E-mail address if( !iAudioMessagingFeatureSupported || itemType == CItemFinder::EEmailAddress) { - mtmFilter->AppendL(KSenduiMtmAudioMessageUid); + mtmFilter->AppendL(KSenduiMtmAudioMessageUid); } TUid uid = iSendUi->ShowTypedQueryL( CSendUi::EWriteMenu, NULL, sendingCapabilities, mtmFilter ); @@ -1302,7 +1338,7 @@ else if ( itemType == CItemFinder::EEmailAddress && ( fieldInfo->FieldId() == EPbkFieldIdEmailAddress || #ifdef __VOIP - iFindItemVoIPExtension->IsVoIPSupported() && + iFindItemVoIPExtension->IsVoIPSupported() && #else iVoIPFeatureSupported && #endif @@ -1561,6 +1597,18 @@ // sets call type for VoIP iDialData->SetCallType( CAiwDialData::EAIWVoiP ); } + else + { + // sets call type for call, as now only voice call + // exists in menu now. + iDialData->SetCallType( CAiwDialData::EAIWVoice ); + } + } + else + { + // sets call type for call, as now only voice call + // exists in menu now. + iDialData->SetCallType( CAiwDialData::EAIWVoice ); } #endif // RD_VOIP_REL_2_2 iDialData->SetPhoneNumberL( numberPtr ); diff -r 978afdc0236f -r 85902f042028 commonuisupport/uikon/srvinc/EIKNFYSV.H --- a/commonuisupport/uikon/srvinc/EIKNFYSV.H Tue Sep 14 21:48:24 2010 +0300 +++ b/commonuisupport/uikon/srvinc/EIKNFYSV.H Wed Sep 15 12:29:17 2010 +0300 @@ -68,12 +68,13 @@ public: TUid iNotifierUid; TSecureId iSecureId; + TInt iCount; }; /** @internalComponent */ typedef RArray RNotifierMessageInfoQueue; /** @internalComponent */ -typedef RArray RNotifierSecureInfoQueue; +typedef RArray RNotifierSecureInfoQueue; /** @internalComponent diff -r 978afdc0236f -r 85902f042028 commonuisupport/uikon/srvsrc/EIKNFYSV.CPP --- a/commonuisupport/uikon/srvsrc/EIKNFYSV.CPP Tue Sep 14 21:48:24 2010 +0300 +++ b/commonuisupport/uikon/srvsrc/EIKNFYSV.CPP Wed Sep 15 12:29:17 2010 +0300 @@ -219,16 +219,13 @@ //aAction is not set because default value to it is already set(CPolicyServer::EFailClient) //aMissing is not set because it is not needed as we aren't overriding CheckFailedL { - const TUid notifierUid = TUid::Uid(aMsg.Int0()); const TSecureId clientSid = aMsg.SecureId(); - const TInt count = iAsyncSecureInfoQueue.Count(); for(int i = 0; i < count; i++) { if(iAsyncSecureInfoQueue[i].iSecureId == clientSid) return CPolicyServer::EPass; } - return CPolicyServer::EFail; } @@ -448,32 +445,59 @@ const TUid notifierUid = TUid::Uid(aMessage.Int0()); const TSecureId secureId = aMessage.SecureId(); RNotifierSecureInfoQueue& secureInfoQueue = Server().AsyncSecureInfoQueue(); - secureInfoQueue.AppendL(TNotifierSecureInfo(notifierUid, secureId)); + TInt queueTotal = secureInfoQueue.Count(); + TBool needsNewEntry = ETrue; + TInt indexOfInfo=0; + for(indexOfInfo = 0; indexOfInfo < queueTotal; indexOfInfo++) + { + if (secureInfoQueue[indexOfInfo].iNotifierUid == notifierUid && secureInfoQueue[indexOfInfo].iSecureId == secureId) + { + secureInfoQueue[indexOfInfo].iCount++; + needsNewEntry = EFalse; + break; + } + } + if (needsNewEntry) + { + secureInfoQueue.AppendL(TNotifierSecureInfo(notifierUid, secureId)); + } if (!aMessage.Int2()) // if the third parameter is null { - TRAPD(err, Server().Manager()->NotifierStartL(TUid::Uid(aMessage.Int0()),*inputBuffer,NULL,iClientId)); - if(err) - { - secureInfoQueue.Remove(secureInfoQueue.Count()-1); - User::Leave(err); - } + TRAPD(err, Server().Manager()->NotifierStartL(TUid::Uid(aMessage.Int0()),*inputBuffer,NULL,iClientId)); + if(err) + { + if (needsNewEntry) + { + secureInfoQueue.Remove(queueTotal); + } + else + { + secureInfoQueue[indexOfInfo].iCount--; + } + User::Leave(err); + } } else { HBufC8* const responseBuffer = HBufC8::NewLC(User::LeaveIfError(aMessage.GetDesMaxLength(2))); TPtr8 response(responseBuffer->Des()); - TRAPD(err, Server().Manager()->NotifierStartL(TUid::Uid(aMessage.Int0()), *inputBuffer, &response, iClientId)); - if(err) - { - secureInfoQueue.Remove(secureInfoQueue.Count()-1); - User::Leave(err); - } - - aMessage.WriteL(2,response); - CleanupStack::PopAndDestroy(responseBuffer); - } - + TRAPD(err, Server().Manager()->NotifierStartL(TUid::Uid(aMessage.Int0()), *inputBuffer, &response, iClientId)); + if(err) + { + if (needsNewEntry) + { + secureInfoQueue.Remove(queueTotal); + } + else + { + secureInfoQueue[indexOfInfo].iCount--; + } + User::Leave(err); + } + aMessage.WriteL(2,response); + CleanupStack::PopAndDestroy(responseBuffer); + } CleanupStack::PopAndDestroy(inputBuffer); } @@ -520,12 +544,34 @@ const TUid notifierUid = TUid::Uid(aMessage.Int0()); const TSecureId secureId = aMessage.SecureId(); RNotifierSecureInfoQueue& secureInfoQueue = Server().AsyncSecureInfoQueue(); - secureInfoQueue.AppendL(TNotifierSecureInfo(notifierUid,secureId)); + TInt queueTotal = secureInfoQueue.Count(); + TBool needsNewEntry = ETrue; + TInt indexOfInfo=0; + for(indexOfInfo = 0; indexOfInfo < queueTotal; indexOfInfo++) + { + if (secureInfoQueue[indexOfInfo].iNotifierUid == notifierUid && secureInfoQueue[indexOfInfo].iSecureId == secureId) + { + secureInfoQueue[indexOfInfo].iCount++; + needsNewEntry = EFalse; + break; + } + } + if (needsNewEntry) + { + secureInfoQueue.AppendL(TNotifierSecureInfo(notifierUid,secureId)); + } TRAPD(err, Server().Manager()->NotifierStartAndGetResponseL(TUid::Uid(aMessage.Int0()), *inputBuffer, 2, aMessage, iClientId, aCleanupComplete)); if(err) { - secureInfoQueue.Remove(secureInfoQueue.Count()-1); + if (needsNewEntry) + { + secureInfoQueue.Remove(queueTotal); + } + else + { + secureInfoQueue[indexOfInfo].iCount--; + } User::Leave(err); } @@ -566,7 +612,14 @@ { if(secureInfoQueue[i].iNotifierUid == notifierUid && secureInfoQueue[i].iSecureId == secureId) { - secureInfoQueue.Remove(i); + if(secureInfoQueue[i].iCount) + { + secureInfoQueue[i].iCount--; + } + else + { + secureInfoQueue.Remove(i); + } return KErrNone; } } @@ -2057,7 +2110,7 @@ // TNotifierSecureInfo::TNotifierSecureInfo(const TUid aNotifierUid, const TSecureId aSecureId) - : iNotifierUid(aNotifierUid), iSecureId(aSecureId) + : iNotifierUid(aNotifierUid), iSecureId(aSecureId), iCount(0) { } diff -r 978afdc0236f -r 85902f042028 psln/Inc/PslnScreenSaverView.h --- a/psln/Inc/PslnScreenSaverView.h Tue Sep 14 21:48:24 2010 +0300 +++ b/psln/Inc/PslnScreenSaverView.h Wed Sep 15 12:29:17 2010 +0300 @@ -294,6 +294,11 @@ */ CCenRepNotifyHandler* iScreenSaverNotifier; CPsmClient *iPsmClient; + + /** + * Ture if screensaver is being previewed. + */ + TBool iScreenSaverPreviewing; }; diff -r 978afdc0236f -r 85902f042028 psln/Src/PslnScreenSaverView.cpp --- a/psln/Src/PslnScreenSaverView.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/psln/Src/PslnScreenSaverView.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -279,6 +279,7 @@ self->iModel->ActivateScreenSaver( KErrNotFound, EPslnScreenSaverPreviewDeactivation ); + self->iScreenSaverPreviewing = EFalse; if ( self->iContainer ) { @@ -563,6 +564,12 @@ // void CPslnScreenSaverView::HandleScreenSaverActivationL( TInt aCurrentItem ) { + // Protect screensaver type during preview. + if ( iScreenSaverPreviewing ) + { + return; + } + TInt PsmMode = 0; iPsmClient->PsmSettings().GetCurrentMode( PsmMode ); if ( PsmMode == EPsmsrvModePowerSave ) // PSM on, setting is protected @@ -610,6 +617,12 @@ // void CPslnScreenSaverView::HandleScreenSaverPreviewL( TInt aCurrentItem ) { + // Stop responding to preview again if screensaver is being previewed. + if ( iScreenSaverPreviewing ) + { + return; + } + TRAPD( err, DoInvokeScreenSaverFunctionL( aCurrentItem, EScpCapsPreviewNotification ) ); @@ -619,7 +632,8 @@ // Start listening for screensaver preview mode key changes. CreatePreviewModeSubscriberL(); CreatePreviewStateSubscriberL(); - + + iScreenSaverPreviewing = ETrue; User::LeaveIfError( iModel->ActivateScreenSaver( aCurrentItem, diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/aknhlist/BWINS/aknhlistU.def --- a/uifw/AvKon/aknhlist/BWINS/aknhlistU.def Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/aknhlist/BWINS/aknhlistU.def Wed Sep 15 12:29:17 2010 +0300 @@ -74,4 +74,5 @@ ?SetEmptyTextL@CAknTreeList@@QAEXABVTDesC16@@@Z @ 73 NONAME ; void CAknTreeList::SetEmptyTextL(class TDesC16 const &) ?VisibleItemIndex@CAknTreeList@@QBEHH@Z @ 74 NONAME ; int CAknTreeList::VisibleItemIndex(int) const ?SetMarkingModeObserver@CAknTreeList@@QAEXPAVMAknMarkingModeObserver@@@Z @ 75 NONAME ; void CAknTreeList::SetMarkingModeObserver(class MAknMarkingModeObserver *) + ?SetMarkingMode@CAknTreeList@@QAEXH@Z @ 76 NONAME ; void CAknTreeList::SetMarkingMode(int) diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/aknhlist/EABI/aknhlistU.def --- a/uifw/AvKon/aknhlist/EABI/aknhlistU.def Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/aknhlist/EABI/aknhlistU.def Wed Sep 15 12:29:17 2010 +0300 @@ -74,4 +74,5 @@ _ZN12CAknTreeList13SetEmptyTextLERK7TDesC16 @ 73 NONAME _ZNK12CAknTreeList16VisibleItemIndexEi @ 74 NONAME _ZN12CAknTreeList22SetMarkingModeObserverEP23MAknMarkingModeObserver @ 75 NONAME + _ZN12CAknTreeList14SetMarkingModeEi @ 76 NONAME diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/aknhlist/group/aknhlist.mmp --- a/uifw/AvKon/aknhlist/group/aknhlist.mmp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/aknhlist/group/aknhlist.mmp Wed Sep 15 12:29:17 2010 +0300 @@ -41,6 +41,8 @@ MW_LAYER_SYSTEMINCLUDE OS_LAYER_LIBC_SYSTEMINCLUDE +SYSTEMINCLUDE ../../../EikStd/coctlinc + SOURCEPATH ../src SOURCE aknhlistlib.cpp SOURCE akntreelist.cpp diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/aknhlist/inc/akntreelistview.h --- a/uifw/AvKon/aknhlist/inc/akntreelistview.h Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/aknhlist/inc/akntreelistview.h Wed Sep 15 12:29:17 2010 +0300 @@ -930,6 +930,14 @@ */ TBool HasMarkedItemsL() const; + /** + * Turns the marking mode on / off. + * + * @param aEnable @c ETrue to turn marking mode on + * @c EFalse to turn marking mode off + */ + void SetMarkingMode( TBool aEnable ); + // From MAknCollection /** * Returns the collection state. The state is combination of diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/aknhlist/src/akntreelist.cpp --- a/uifw/AvKon/aknhlist/src/akntreelist.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/aknhlist/src/akntreelist.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -675,6 +675,16 @@ // --------------------------------------------------------------------------- +// CAknTreeList::SetMarkingMode +// --------------------------------------------------------------------------- +// +EXPORT_C void CAknTreeList::SetMarkingMode( TBool aEnable ) + { + View().SetMarkingMode( aEnable ); + } + + +// --------------------------------------------------------------------------- // Handles key events by mediating them to the view. // --------------------------------------------------------------------------- // diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/aknhlist/src/akntreelistview.cpp --- a/uifw/AvKon/aknhlist/src/akntreelistview.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/aknhlist/src/akntreelistview.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -30,6 +30,7 @@ #include #include #include +#include #include "akntreelistview.h" #include "akntree.h" #include "akntreelist.h" @@ -2971,6 +2972,8 @@ const TInt itemCount = iItems.Count(); for ( TInt ii = 0; ii < itemCount; ++ii ) { + TBool itemIsMarkable = ( iItems[ii].Item() && + iItems[ii].Item()->IsMarkable() ); TRect drawRect( iItems[ii].Rect() ); if ( iFlags.IsSet( EFlagMarkingMode ) ) @@ -3087,7 +3090,7 @@ if ( iFlags.IsSet( EFlagMarkingMode ) && iMarkingIconArray && iMarkingIconArray->Count() == - KMarkingModeIconArraySize ) + KMarkingModeIconArraySize && itemIsMarkable ) { // Rect for the marking icon TRect iconRect = RectFromLayout( drawRect, @@ -3604,6 +3607,18 @@ return ( count > 0 ); } +// --------------------------------------------------------------------------- +// CAknTreeListView::SetMarkingMode +// --------------------------------------------------------------------------- +// +void CAknTreeListView::SetMarkingMode( TBool aEnable ) + { + if ( ( iFlags.IsSet( EFlagMarkingMode ) != aEnable ) && iItemActionMenu ) + { + iItemActionMenu->MarkingMode().SetCollectionMultipleMarkingState( + aEnable ); + } + } #ifdef RD_UI_TRANSITION_EFFECTS_LIST // --------------------------------------------------------------------------- diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/AknCharMap.cpp --- a/uifw/AvKon/src/AknCharMap.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/AknCharMap.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -6269,7 +6269,9 @@ TBool CAknCharMap::IsKoreanSctUi() const { - return FeatureManager::FeatureSupported( KFeatureIdKorean ); + // Korean feature dropped half-screen SCT in 9.2, it has the same + // behavior with others, so return false here + return EFalse; } // ----------------------------------------------------------------------------- // CAknCharMap::TitleWithSelectingSpecialChar() diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/AknPreviewPopUp.cpp --- a/uifw/AvKon/src/AknPreviewPopUp.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/AknPreviewPopUp.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -360,7 +360,7 @@ TRAP_IGNORE( CreateClosingIconL() ); } break; - + case KEikDynamicLayoutVariantSwitch: if ( iFlags & CAknPreviewPopUpController::EFixedMode ) { diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/AknPreviewPopUpController.cpp --- a/uifw/AvKon/src/AknPreviewPopUpController.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/AknPreviewPopUpController.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -131,6 +131,15 @@ // CAknPreviewPopUpController::~CAknPreviewPopUpController() { + // If transition effect is on, when the deleting is caused by pressing red key + // (the font for CONE is already destroyed), the preview popup's hide operation + // will call its draw operation which will use the deleted font, thus panic happens; + // we hide the popup here in advance to prevent transation effect from drawing. + if( iPopUp->IsVisible() ) + { + iPopUp->MakeVisible( EFalse ); + } + Cancel(); delete iPopUp; iObservers.Reset(); diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/AknQueryControl.cpp --- a/uifw/AvKon/src/AknQueryControl.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/AknQueryControl.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -3396,7 +3396,7 @@ to open in input dialog (usability). The valid area is enlarged to editor frame rect, instead of text's rect, because text rect is too small for user to tap*/ CCoeControl* ctrl = ControlByLayoutOrNull( iQueryType ); - if( ctrl ) + if( ctrl && !EmbeddedVirtualInput() ) { TPointerEvent pointerEvent( aPointerEvent ); if( !ctrl->Rect().Contains( aPointerEvent.iPosition ) && ( NbrOfEditorLines() == 1 ) ) diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/AknQueryDialog.cpp --- a/uifw/AvKon/src/AknQueryDialog.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/AknQueryDialog.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -2121,6 +2121,10 @@ CEikCaptionedControl *ctrl2 = GetLineByLineAndPageIndex(line2, 0); TryChangeFocusToL(ctrl2->iId); HandleOrientationSwitch(); + // In landscape mode, the first and second lines are at the same position, + // so set the height of first line¡¯s control to 0 to prevent it from being + // selected by touch event. + ctrl1->SetSize( TSize( ctrl1->Size().iWidth, 0 ) ); UpdateLeftSoftKeyL(); _AKNTRACE( "[%s][%s] return EFalse", "CAknMultiLineDataQueryDialog", __FUNCTION__); diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/AknSctDialog.cpp --- a/uifw/AvKon/src/AknSctDialog.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/AknSctDialog.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -106,6 +106,7 @@ TAknCharMapPictoMode iPictoMode; TAknCharMapEmotionMode iEmotionMode; TBool iFirstOrientation; + TBool iSimKeyDown; }; // ----------------------------------------------------------------------------- @@ -116,7 +117,8 @@ // CAknCharMapDialogExtension::CAknCharMapDialogExtension(CAknCharMapDialog* aCaller) : iFlags(0), iQwertyMode(EFalse), iCaller(aCaller), -iShowAnotherTableCharCase(-1), iPictoMode(EAknCharMapPictoNoUse), iEmotionMode(EAknCharMapEmotionNoUse) +iShowAnotherTableCharCase(-1), iPictoMode(EAknCharMapPictoNoUse), iEmotionMode(EAknCharMapEmotionNoUse), +iSimKeyDown( EFalse ) { } @@ -297,22 +299,7 @@ // to select multiple characters before. if (aButtonId == EAknSoftkeyOk || aButtonId == EAknSoftkeySelect || aButtonId == EAknSoftkeyExit) { - // In Korean UI, SCT isn't closed by pressing "Select" softkey, - // but SCT is closed by pressing "Back"(button id is EAknSoftkeyClose). - // Japanese feature for SCT will not be supported since TB9.2 PS2, - // so remove the code for Japanese SCT. MAknSctFocusHandler* handler = charmapControl->FocusHandler(); - if ( charmapControl->IsKoreanSctUi() && - aButtonId != EAknSoftkeyExit && - handler->FocusedControl() == charmapControl) - { - TKeyEvent key; - key.iCode=EKeySpace; - key.iModifiers=0; - handler->FocusedControl()->OfferKeyEventL(key, EEventKey); - return(EFalse); - } - // else TKeyEvent key; key.iCode=EKeyOK; key.iModifiers=0; @@ -494,20 +481,35 @@ break; } } - else if (aModifiers == EEventKeyUp) + else if ( aModifiers == EEventKeyDown ) { - switch (aKeyEvent.iScanCode) + switch ( aKeyEvent.iScanCode ) { case EStdKeyLeftFunc: case EStdKeyRightFunc: { - if (!aKeyEvent.iRepeats) // switch another table when repeat count is 0 only. + iExtension->iSimKeyDown = ETrue; + } + break; + default: + break; + } + } + else if ( aModifiers == EEventKeyUp ) + { + switch ( aKeyEvent.iScanCode ) + { + case EStdKeyLeftFunc: + case EStdKeyRightFunc: + { + if ( !aKeyEvent.iRepeats && iExtension->iSimKeyDown ) // switch another table when repeat count is 0 only. { if (!isLockNumericKeys) // Check whether current input mode is Qwerty. { SwitchTablesOrPagesL(); } } + iExtension->iSimKeyDown = EFalse; } break; default: diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/AknViewAppUi.cpp --- a/uifw/AvKon/src/AknViewAppUi.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/AknViewAppUi.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -99,6 +99,13 @@ TInt iFlags; #endif // RD_SPLIT_VIEW TBool iUseDefaultScreenClearer; + + /** + * Used to control whether or not the default screen clearer + * is used when launching the application as embedded. By default the + * clearer isn't used for embedded applications. + */ + TBool iUseDefaultScreenClearerInEmbeddedLaunch; }; // ============================ MEMBER FUNCTIONS =============================== @@ -239,8 +246,12 @@ if ( iEikonEnv->RootWin().OrdinalPosition() == 0 && iExtension->iUseDefaultScreenClearer ) { - if ( !iEikonEnv->StartedAsServerApp() ) + if ( !iEikonEnv->StartedAsServerApp() || + iExtension->iUseDefaultScreenClearerInEmbeddedLaunch ) { + // Use transparent screen clearer for embedded applications, + // except for when application wants to use the normal + // screen clearer. iClearer = CAknLocalScreenClearer::NewL( ETrue ); } else @@ -1014,18 +1025,16 @@ TRAP_IGNORE( iExtension = CAknViewAppUiExtension::NewL() ); } - // Update flag + // Update the flags if ( iExtension ) { iExtension->iUseDefaultScreenClearer = aEnable; + iExtension->iUseDefaultScreenClearerInEmbeddedLaunch = aEnable; } - // Create/delete iClearer if required - if ( aEnable && !iClearer ) - { - TRAP_IGNORE( iClearer = CAknLocalScreenClearer::NewL( EFalse ) ); - } - else if ( !aEnable && iClearer ) + // Delete the clearer if it already exists but isn't required anymore. + // The clearer is created when needed on BaseConstructL. + if ( !aEnable && iClearer ) { delete iClearer; iClearer = NULL; diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/akncolourselectiongrid.cpp --- a/uifw/AvKon/src/akncolourselectiongrid.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/akncolourselectiongrid.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -89,7 +89,7 @@ } TRect mainPane; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EPopupParent, mainPane ); + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, mainPane ); TAknLayoutRect colourPopupWindow; colourPopupWindow.LayoutRect(mainPane, AknLayoutScalable_Avkon::popup_large_graphic_colour_window(colourPopupVariety)); diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/aknnavi.cpp --- a/uifw/AvKon/src/aknnavi.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/aknnavi.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -32,6 +32,8 @@ #include #include +#include + // USER INCLUDE FILES #include "aknenv.h" #include "AknDef.h" @@ -2008,26 +2010,47 @@ // void CAknNavigationControlContainer::HandleLosingForeground() { - // If volume popup is shown when the navi pane loses foreground, - // then the popup needs to be closed if shown, and the volume control - // told that it's not the topmost control. + // Get the top control on navi pane. CAknNavigationDecorator* topControl = Top(); if ( topControl ) { - if ( topControl && - topControl->ControlType() == CAknNavigationDecorator::ENaviVolume ) + switch( topControl->ControlType() ) { - CAknVolumePopup* volumePopup = - static_cast ( - topControl->iDecoratedControl ); + case CAknNavigationDecorator::ENaviVolume: + { + // If volume popup is shown when the navi pane loses foreground, + // then the popup needs to be closed if shown, and the volume control + // told that it's not the topmost control. + CAknVolumePopup* volumePopup = + static_cast ( + topControl->iDecoratedControl ); - if ( volumePopup ) + if ( volumePopup ) + { + volumePopup->CloseVolumePopup(); + static_cast( + topControl->DecoratedControl() )->HandleNaviStackChange( EFalse ); + } + break; + } + case CAknNavigationDecorator::ETabGroup: { - volumePopup->CloseVolumePopup(); - static_cast( - topControl->DecoratedControl() )->HandleNaviStackChange( EFalse ); + // If tabgroup is shown when navi pane loses foreground, forward + // KAknMessageFocusLost event to tabgroup. Tab panes will stop highlighting + // the pressed tab. + CAknTabGroup* tabGroup = + static_cast ( + topControl->iDecoratedControl ); + + if ( tabGroup ) + { + tabGroup->HandleResourceChange(KAknMessageFocusLost); + } + break; } + default: + break; } } } diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/aknsfld.cpp --- a/uifw/AvKon/src/aknsfld.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/aknsfld.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -799,6 +799,10 @@ } iListBox->DrawNow(); } + } + else if( aCommandId == EAknCmdHideASGrid && iAdaptiveSearch ) + { + iAdaptiveSearch->HideAdaptiveSearchGridL(); } } diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/aknsgcc.cpp --- a/uifw/AvKon/src/aknsgcc.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/aknsgcc.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -80,8 +80,12 @@ inline CAknSgcClient* CAknSgcClient::Static() - { return static_cast(CCoeEnv::Static(KAknSgcClientStaticId)); } - + { + if (CCoeEnv::Static()) + return static_cast(CCoeEnv::Static(KAknSgcClientStaticId)); + else + return NULL; + } NONSHARABLE_CLASS(TSgcClientStatusPaneRedrawCoordinator) : public MAknSgcStatusPaneRedrawCoordinator diff -r 978afdc0236f -r 85902f042028 uifw/AvKon/src/akntabgrp.cpp --- a/uifw/AvKon/src/akntabgrp.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/AvKon/src/akntabgrp.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -38,6 +38,7 @@ #include #include +#include // USER INCLUDE FILES #include "aknappui.h" @@ -2916,21 +2917,9 @@ // pointer position. newTab = iActiveTab; } - iExtension->iPointerDownTab = newTab; - iExtension->iPointerDownXPosition = aPointerEvent.iPosition.iX; //Activates highlight drawing for pressed tab. - if (!iExtension->iHighlight) - { - iExtension->iHighlight = ETrue; - - // Set the pressed tab to highlight - if ( iExtension->iPointerDownTab >= 0 ) - { - iTabArray->At( iExtension->iPointerDownTab )->SetHighlight( ETrue ); - } - DrawDeferred(); - } + EnableHighlight( ETrue, newTab, aPointerEvent.iPosition.iX ); return; } @@ -2961,14 +2950,7 @@ // if the button up event occurs ouside tabgroup, ignore it. if ( !Rect().Contains( aPointerEvent.iPosition ) || iExtension->iPointerDownTab != newTab ) { - iExtension->iPointerDownTab = -1; - iExtension->iPointerDownXPosition = -1; - if (iExtension->iHighlight) - { - iExtension->iHighlight = EFalse; - ResetHighlightStatus(); - DrawDeferred(); - } + EnableHighlight( EFalse ); return; } @@ -3075,14 +3057,7 @@ } } - iExtension->iPointerDownTab = -1; - iExtension->iPointerDownXPosition = -1; - if( iExtension->iHighlight ) - { - iExtension->iHighlight = EFalse; - ResetHighlightStatus(); - DrawDeferred(); - } + EnableHighlight( EFalse ); } } } @@ -3436,6 +3411,12 @@ TRAP_IGNORE( InitTabGroupGraphicsL() ); TRAP_IGNORE( LoadTabBitmapsL( iNumberOfTabsShown, iLongTabs ) ); } + + // Stop highlighting the pressed tab when receives KAknMessageFocusLost event. + if( aType == KAknMessageFocusLost ) + { + EnableHighlight(EFalse); + } if ( aType == KEikDynamicLayoutVariantSwitch ) { @@ -3466,11 +3447,7 @@ if ( iExtension ) { iExtension->iNarrowTabLayout = EFalse; - if( iExtension->iHighlight ) - { - iExtension->iHighlight = EFalse; - ResetHighlightStatus(); - } + EnableHighlight(EFalse); } if ( !COMPARE_BOOLS( iMirrored, AknLayoutUtils::LayoutMirrored() ) ) @@ -4520,4 +4497,34 @@ iTabArray->At(i)->SetHighlight( EFalse ); } } + +void CAknTabGroup::EnableHighlight( TBool aEnable, TInt aNewTab , TInt aPointX ) + { + iExtension->iPointerDownTab = aNewTab; + iExtension->iPointerDownXPosition = aPointX; + if( aEnable ) + { + //Activates highlight drawing for pressed tab. + if (!iExtension->iHighlight) + { + iExtension->iHighlight = ETrue; + + // Set the pressed tab to highlight + if ( iExtension->iPointerDownTab >= 0 ) + { + iTabArray->At( iExtension->iPointerDownTab )->SetHighlight( ETrue ); + } + DrawDeferred(); + } + } + else + { + if (iExtension->iHighlight) + { + iExtension->iHighlight = EFalse; + ResetHighlightStatus(); + DrawDeferred(); + } + } + } // End of File diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/EABI/EIKCOCTLU.DEF --- a/uifw/EikStd/EABI/EIKCOCTLU.DEF Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/EABI/EIKCOCTLU.DEF Wed Sep 15 12:29:17 2010 +0300 @@ -2018,4 +2018,6 @@ _ZN22CAknLocalScreenClearer4NewLEii @ 2017 NONAME _ZN22CAknLocalScreenClearer5NewLCEii @ 2018 NONAME _ZN9CEikEdwin10EnableT2WLEi @ 2019 NONAME + _ZN15CAknMarkingMode33SetCollectionMultipleMarkingStateEi @ 2020 NONAME + _ZN18CAknItemActionMenu11MarkingModeEv @ 2021 NONAME diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/bwins/EIKCOCTLU.DEF --- a/uifw/EikStd/bwins/EIKCOCTLU.DEF Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/bwins/EIKCOCTLU.DEF Wed Sep 15 12:29:17 2010 +0300 @@ -1629,3 +1629,6 @@ ?NewLC@CAknLocalScreenClearer@@SAPAV1@HH@Z @ 1628 NONAME ; class CAknLocalScreenClearer * CAknLocalScreenClearer::NewLC(int, int) ?NewL@CAknLocalScreenClearer@@SAPAV1@HH@Z @ 1629 NONAME ; class CAknLocalScreenClearer * CAknLocalScreenClearer::NewL(int, int) ?EnableT2WL@CEikEdwin@@QAEXH@Z @ 1630 NONAME ; void CEikEdwin::EnableT2WL(int) + ?MarkingMode@CAknItemActionMenu@@QAEAAVCAknMarkingMode@@XZ @ 1631 NONAME ; class CAknMarkingMode & CAknItemActionMenu::MarkingMode(void) + ?SetCollectionMultipleMarkingState@CAknMarkingMode@@QAEXH@Z @ 1632 NONAME ; void CAknMarkingMode::SetCollectionMultipleMarkingState(int) + diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlinc/aknmarkingmode.h --- a/uifw/EikStd/coctlinc/aknmarkingmode.h Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlinc/aknmarkingmode.h Wed Sep 15 12:29:17 2010 +0300 @@ -56,7 +56,7 @@ * @internal * @param aActive ETrue if multiple marking should be active. */ - void SetCollectionMultipleMarkingState( TBool aActive ); + IMPORT_C void SetCollectionMultipleMarkingState( TBool aActive ); /** * Ends marking mode if collection allows it diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/AknButton.cpp --- a/uifw/EikStd/coctlsrc/AknButton.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/AknButton.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -2307,11 +2307,11 @@ { return; } - TBool hitArea( EFalse ); - TRAP_IGNORE( hitArea = HitAreaContainsL( aPointerEvent.iPosition, EFalse )) - if ( ( iFlags & KAknButtonHitTest ) && !hitArea ) + //Using HitAreaContainsL() to verify whether pointer event locates in valid area + //when KAknButtonHitTest is defined. + if ( iFlags & KAknButtonHitTest ) { - buttonEvent = EFalse; + TRAP_IGNORE( buttonEvent = HitAreaContainsL( aPointerEvent.iPosition, EFalse )) } TBool redrawNeeded(EFalse); diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/EIKCOLIB.CPP --- a/uifw/EikStd/coctlsrc/EIKCOLIB.CPP Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/EIKCOLIB.CPP Wed Sep 15 12:29:17 2010 +0300 @@ -558,6 +558,16 @@ } TRect wndRc( splitwnd.Rect() ); + + if ( !Layout_Meta_Data::IsLandscapeOrientation() ) + { + // include indicator pane height + TAknWindowLineLayout indiPane = AknLayoutScalable_Avkon::icf_edit_indi_pane( 2 ).LayoutLine(); + TAknLayoutRect indiRect; + indiRect.LayoutRect(splitwnd.Rect(), indiPane); + wndRc.iTl.iY -= indiRect.Rect().Height(); + } + inputTop = wndRc.iTl.iY; rect.iBr.iY = rect.iBr.iY > inputTop ? inputTop : rect.iBr.iY; rect.iTl.iY = 0; diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/EIKCTGRP.CPP --- a/uifw/EikStd/coctlsrc/EIKCTGRP.CPP Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/EIKCTGRP.CPP Wed Sep 15 12:29:17 2010 +0300 @@ -348,23 +348,11 @@ { TInt count = iControlArray->Count(); - // This prevents MSK from drawing in landscape layouts. - // Also MSK doesn't even need to be activated in landscape modes. - if ( count == 4 ) - { - // Exception is made for idle flat status pane layouts, - // in which the MSK is used also in landscape. - TBool mskSupportedLscLayoutActive( - AVKONENV->StatusPaneResIdForCurrentLayout( - AknStatuspaneUtils::CurrentStatusPaneLayoutResId() ) == - R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE_FLAT_NO_SOFTKEYS ); - - if ( iLayout & EDisableMSKDrawing || - ( Layout_Meta_Data::IsLandscapeOrientation() && - !mskSupportedLscLayoutActive ) ) - { - count--; - } + // count == 4 means MSK is on, but when it is disabled by EDisableMSKDrawing, + // we should decrease the count to avoid drawing it. + if ( count == 4 && ( iLayout & EDisableMSKDrawing ) ) + { + count--; } return count; diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/EIKEDWIN.CPP --- a/uifw/EikStd/coctlsrc/EIKEDWIN.CPP Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/EIKEDWIN.CPP Wed Sep 15 12:29:17 2010 +0300 @@ -102,14 +102,16 @@ #include "smileycustomwrap.h" #include -// declare function -void ReadSpecialCharFromSCTL( TPtr& ptr, TInt sctResourceId ); -void ReadSCTHeadPane( TResourceReader& aReader ); // for supporting TapToWrite #include #include #include #include +#include // KAknQwertyInputModeActive + +// declare function +void ReadSpecialCharFromSCTL( TPtr& ptr, TInt sctResourceId ); +void ReadSCTHeadPane( TResourceReader& aReader ); GLDEF_C void Panic(TEikEdwinPanic aPanic) { @@ -1075,6 +1077,14 @@ } delete iCenRepNotifyHandler; delete iCenRep; + + // Stop listening CenRep for qwerty key board. + if ( iCenRepNotifyHandlerForQwerty ) + { + iCenRepNotifyHandlerForQwerty->StopListening(); + } + delete iCenRepNotifyHandlerForQwerty; + delete iCenRepForQwerty; delete iFormAccessor; delete iFormCursorModifier; @@ -1226,6 +1236,19 @@ iCenRepNotifyHandler->StartListeningL(); iCenRep->Get(KAknFepClearDirection, iClearDirection); } + // Start listening a CenRep key indicating whether qwerty input mode is active. + TRAPD( error, iCenRepForQwerty = CRepository::NewL( KCRUidAvkon ) ); + if ( error == KErrNone ) + { + iCenRepNotifyHandlerForQwerty = CCenRepNotifyHandler::NewL( *this, + *iCenRepForQwerty, + CCenRepNotifyHandler::EIntKey, + KAknQwertyInputModeActive ); + + iCenRepNotifyHandlerForQwerty->StartListeningL(); + iCenRepForQwerty->Get( KAknQwertyInputModeActive, iQwertyStatus ); + } + iSmileyWrap = new ( ELeave ) CSmileyCustomWrap; iSkinInstance = AknsUtils::SkinInstance(); } @@ -1315,6 +1338,12 @@ { iClearDirection = (TBool)aNewValue; } + //If qwerty key board is opened clean the "tap to write", if qwerty key board is closed display the "tap to write" + else if ( aId == KAknQwertyInputModeActive ) + { + iQwertyStatus = ( TBool )aNewValue; + iEdwin->TryToDrawT2W( iQwertyStatus ); + } } // --------------------------------------------------------------------------- @@ -2412,6 +2441,11 @@ break; // prevent eg Ctrl-I inserting a tab goto InChar; default: + // If ctrl + key is not hotkey return not consume. + if ( magnify ) + { + return EKeyWasNotConsumed; + } if (code>=ENonCharacterKeyBase || !TChar(code).IsPrint() || (!IsValidChar(code))) { ret=EKeyWasNotConsumed; @@ -4490,8 +4524,7 @@ !( iEdwinUserFlags & EDisplayOnly ) && iEdwinExtension->iT2WBuf && ( iEdwinExtension->iT2WState & CEikEdwinExtension::EFocusOn ) && !( iEdwinExtension->iT2WState & CEikEdwinExtension::ESplitInputEnabled ) && - !( iEdwinExtension->iExtendedInputCapabilities->Capabilities() & - CAknExtendedInputCapabilities::EInputEditorQwertyInputActive ); + !( iEdwinExtension->iQwertyStatus ); } void CEikEdwin::SetCursorVisibilityL(TBool aEmphasis) @@ -8744,10 +8777,11 @@ TBool partialScreenDisabled( !( aNewFlags & EAknEditorFlagEnablePartialScreen ) && ( aOldFlags & EAknEditorFlagEnablePartialScreen ) ); - - if ( ( textViewHideEnabled && - !( aNewFlags & EAknEditorFlagEnablePartialScreen ) ) || - ( partialScreenDisabled && ( aNewFlags & EAknEditorFlagHideTextView ) ) ) + + if ( IsActivated() && + ( ( textViewHideEnabled && !( aNewFlags & EAknEditorFlagEnablePartialScreen ) ) || + ( partialScreenDisabled && ( aNewFlags & EAknEditorFlagHideTextView ) ) ) + ) { iTextView->MakeVisible( EFalse ); iEdwinExtension->iTextViewHidden = ETrue; @@ -9137,13 +9171,7 @@ for (TInt i = 0; i < text.Length(); i++) { TChar character(text[i]); - if (text[i] == ' ') - return ETrue; - - TChar::TCategory category = character.GetCategory(); - - if ( !( ( ( category & TChar::ESeparatorGroup ) == TChar::ESeparatorGroup ) || - ( text[i] >= 0x200B && text[i] <= 0xFFFC ) ) ) + if ( character.IsPrint() ) { ret = ETrue; break; diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/aknitemactionmenu.cpp --- a/uifw/EikStd/coctlsrc/aknitemactionmenu.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/aknitemactionmenu.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -219,6 +219,18 @@ // --------------------------------------------------------------------------- +// CAknItemActionMenu::MarkingMode +// --------------------------------------------------------------------------- +// +EXPORT_C CAknMarkingMode& CAknItemActionMenu::MarkingMode() + { + _AKNTRACE_FUNC_ENTER; + _AKNTRACE_FUNC_EXIT; + return *iMarking; + } + + +// --------------------------------------------------------------------------- // CAknItemActionMenu::AddCollectionStateL // --------------------------------------------------------------------------- // @@ -381,18 +393,6 @@ // --------------------------------------------------------------------------- -// CAknItemActionMenu::MarkingMode -// --------------------------------------------------------------------------- -// -CAknMarkingMode& CAknItemActionMenu::MarkingMode() - { - _AKNTRACE_FUNC_ENTER; - _AKNTRACE_FUNC_EXIT; - return *iMarking; - } - - -// --------------------------------------------------------------------------- // CAknItemActionMenu::CollectionHasMarkedItems // --------------------------------------------------------------------------- // diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/aknmarkingmode.cpp --- a/uifw/EikStd/coctlsrc/aknmarkingmode.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/aknmarkingmode.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -59,7 +59,8 @@ // CAknMarkingMode::SetCollectionMultipleMarkingState // --------------------------------------------------------------------------- // -void CAknMarkingMode::SetCollectionMultipleMarkingState( TBool aActive ) +EXPORT_C void CAknMarkingMode::SetCollectionMultipleMarkingState( + TBool aActive ) { _AKNTRACE_FUNC_ENTER; for ( TInt i = 0; i < iCollections.Count(); i++ ) @@ -121,17 +122,12 @@ for ( TInt i = 0; i < iCollections.Count(); i++ ) { MAknCollection* collection( iCollections[i] ); - if ( collection->CollectionState() & - MAknCollection::EStateCollectionVisible ) + MAknMarkingCollection* markingCollection + = MarkingCollection( *collection ); + if ( markingCollection ) { - MAknMarkingCollection* markingCollection - = MarkingCollection( *collection ); - if ( markingCollection ) - { - markingActive = markingCollection->MarkingState() - & MAknMarkingCollection::EStateMarkingMode; - } - break; + markingActive = markingCollection->MarkingState() + & MAknMarkingCollection::EStateMarkingMode; } } _AKNTRACE_FUNC_EXIT; diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/aknstyluspopupmenu.cpp --- a/uifw/EikStd/coctlsrc/aknstyluspopupmenu.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/aknstyluspopupmenu.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -426,14 +426,7 @@ { if ( aControl && aEventType == EEventStateChanged ) { - if ( iPreviewPopup ) - { - iPreviewPopup->HidePopUp(); - } - if ( iController ) - { - iController->HidePopUp(); - } + HidePreviewPopup(); if ( iMenuObserver ) { @@ -463,20 +456,14 @@ } else if ( aControl && aEventType == EEventRequestExit ) { - if ( iPreviewPopup ) - { - iPreviewPopup->HidePopUp(); - } - - if ( iController ) - { - iController->HidePopUp(); - } + HidePreviewPopup(); StartControllerIdleL(); } else if ( aControl && aEventType == EEventRequestCancel ) { + HidePreviewPopup(); + if ( iMenuObserver ) { TBool isAlreadySet = iFlags.IsSet( EIdleDisabled ); @@ -587,3 +574,20 @@ { static_cast( aParam )->iIsDeleted = NULL; } + +// ----------------------------------------------------------------------------- +// Hide Preview Popups +// ----------------------------------------------------------------------------- +// +void CAknStylusPopUpMenu::HidePreviewPopup() + { + if ( iPreviewPopup ) + { + iPreviewPopup->HidePopUp(); + } + + if ( iController ) + { + iController->HidePopUp(); + } + } diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/aknstyluspopupmenucontent.cpp --- a/uifw/EikStd/coctlsrc/aknstyluspopupmenucontent.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/aknstyluspopupmenucontent.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -1026,7 +1026,7 @@ layoutText.DrawText( aGc, *(iItems[aItem]->iText), ETrue, textColor ); - if ( aItem < iItems.Count()-1 ) + if ( aItem < iLastVisibleItem ) { AknListUtils::DrawSeparator( aGc, rect, textColor, skin ); } @@ -1214,11 +1214,11 @@ { iSBFrame->DrawBackground( EFalse, EFalse ); if ( AknLayoutUtils::LayoutMirrored() ) - { + { listRect.iTl.iX += AknLayoutScalable_Avkon::scroll_pane().LayoutLine().iW; - } + } else - { + { listRect.iBr.iX -= AknLayoutScalable_Avkon::scroll_pane().LayoutLine().iW; } } @@ -1227,14 +1227,14 @@ else { if ( AknLayoutUtils::LayoutMirrored() ) - { + { listRect.iTl.iX += AknLayoutScalable_Avkon::scroll_pane().LayoutLine().iW; - } + } else - { + { listRect.iBr.iX -= AknLayoutScalable_Avkon::scroll_pane().LayoutLine().iW; - } - } + } + } } @@ -1295,12 +1295,18 @@ iItems[i]->iRect = itemRect; } - if ( lastItem == iItems.Count() || ( Rect().Height() % singleItemHeight ) == 0 ) + // info: + // 1, according to the function MinimumSize the following + // condition is always true: Rect().Height() % singleItemHeight == 0 + // 2, the Offset is in the range of [0 , singleItemHeight) + // we get partial items only when Offset is not zero during scrolling + // note: + // should subtract the lastItem when Offset is zero without partical items + if ( lastItem == iItems.Count() || ( 0 == Offset() ) ) { - // substract the partially visible item --lastItem; } - + return lastItem; } diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/eikcba.cpp --- a/uifw/EikStd/coctlsrc/eikcba.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/eikcba.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -132,7 +132,7 @@ result = ETrue; } } - + _AKNTRACE( "IsMskEnabledLayoutActive is %d", result ); _AKNTRACE_FUNC_EXIT; return result; } @@ -784,9 +784,10 @@ */ TBool Active() const { - _AKNTRACE_FUNC_ENTER; - _AKNTRACE_FUNC_EXIT; - return iOwner.IsVisible() && !iOwner.IsEmpty(); + TBool ret; + ret = iOwner.IsVisible() && !iOwner.IsEmpty(); + _AKNTRACE( "Active is %d", ret ); + return ret; } /* @@ -2956,8 +2957,8 @@ // If the status pane is invisible in landscape, softkey need to draw frame to cover // the area of combine pane. CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current(); - if (statusPane && !statusPane->IsVisible() && isLandscapeOrient && - statusPane->PaneCapabilities(TUid::Uid(EEikStatusPaneUidCombined)).IsInCurrentLayout()) + if ( ( iCbaFlags & EEikCbaFlagAppMskIcon ) || ( statusPane && !statusPane->IsVisible() && isLandscapeOrient && + statusPane->PaneCapabilities(TUid::Uid(EEikStatusPaneUidCombined)).IsInCurrentLayout())) { iFlags.Set( ECbaCombinePaneUncovered ); } @@ -2983,90 +2984,95 @@ // If status indicators and clock are shown in control pane area, // then remove those areas from cba window region. // - // NOTE: MSK is not supported in landscape. + // + // NOTE: MSK is not supported in landscape except the flag EEikCbaFlagAppMskIcon is defined . // - if ( statusPane && + + if ( !(iCbaFlags & EEikCbaFlagAppMskIcon ) ) + { + if( statusPane && statusPane->IsVisible() && AknStatuspaneUtils::ExtendedFlatLayoutActive() ) - { - if ( iBgIID == KAknsIIDQsnBgAreaControlMp ) - { - if ( !iIsClockIndicBgIIDSet ) + { + if ( iBgIID == KAknsIIDQsnBgAreaControlMp ) { - statusPane->SetCbaAreaBackgroundID( - iBgIID, - CEikStatusPaneBase::EDrawDeferred ); - iIsClockIndicBgIIDSet = ETrue; - } - } - else - { - if ( statusPane->CbaAreaBackgroundID() != iBgIID ) - { - statusPane->SetCbaAreaBackgroundID( - iBgIID, - CEikStatusPaneBase::EDrawDeferred ); + if ( !iIsClockIndicBgIIDSet ) + { + statusPane->SetCbaAreaBackgroundID( + iBgIID, + CEikStatusPaneBase::EDrawDeferred ); + iIsClockIndicBgIIDSet = ETrue; + } } - } - - if ( statusPane->PaneCapabilities( - TUid::Uid( EEikStatusPaneUidCombined ) ).IsInCurrentLayout() ) - { - TRect combinedPaneRect( 0, 0, 0, 0 ); - TRAPD( err, - combinedPaneRect = - statusPane->PaneRectL( TUid::Uid( - EEikStatusPaneUidCombined ) ) ); - - if ( !err ) + else { - TPoint cbaPositionRelativeToScreen( PositionRelativeToScreen() ); - TRect cbaRectRelativeToScreen( cbaPositionRelativeToScreen, Size() ); - - if ( cbaRectRelativeToScreen.Intersects( combinedPaneRect ) ) + if ( statusPane->CbaAreaBackgroundID() != iBgIID ) { - combinedPaneRect.Move( - -cbaPositionRelativeToScreen.iX, - -cbaPositionRelativeToScreen.iY ); - - region.SubRect( combinedPaneRect ); + statusPane->SetCbaAreaBackgroundID( + iBgIID, + CEikStatusPaneBase::EDrawDeferred ); } } - } - else - { - TRect digitalClockRect( 0, 0, 0, 0 ); - TRect indicatorRect( 0, 0, 0, 0 ); - - TRAPD( err1, - indicatorRect = statusPane->PaneRectL( TUid::Uid( - EEikStatusPaneUidIndic ) ) ); - - TRAPD( err2, - digitalClockRect = statusPane->PaneRectL( TUid::Uid( - EEikStatusPaneUidDigitalClock ) ) ); + + if ( statusPane->PaneCapabilities( + TUid::Uid( EEikStatusPaneUidCombined ) ).IsInCurrentLayout() ) + { + TRect combinedPaneRect( 0, 0, 0, 0 ); + TRAPD( err, + combinedPaneRect = + statusPane->PaneRectL( TUid::Uid( + EEikStatusPaneUidCombined ) ) ); - if ( !err1 && !err2 ) + if ( !err ) + { + TPoint cbaPositionRelativeToScreen( PositionRelativeToScreen() ); + TRect cbaRectRelativeToScreen( cbaPositionRelativeToScreen, Size() ); + + if ( cbaRectRelativeToScreen.Intersects( combinedPaneRect ) ) + { + combinedPaneRect.Move( + -cbaPositionRelativeToScreen.iX, + -cbaPositionRelativeToScreen.iY ); + + region.SubRect( combinedPaneRect ); + } + } + } + else { - TPoint cbaPositionRelativeToScreen( PositionRelativeToScreen() ); - TRect cbaRectRelativeToScreen( cbaPositionRelativeToScreen, Size() ); - - if ( cbaRectRelativeToScreen.Intersects( indicatorRect ) ) + TRect digitalClockRect( 0, 0, 0, 0 ); + TRect indicatorRect( 0, 0, 0, 0 ); + + TRAPD( err1, + indicatorRect = statusPane->PaneRectL( TUid::Uid( + EEikStatusPaneUidIndic ) ) ); + + TRAPD( err2, + digitalClockRect = statusPane->PaneRectL( TUid::Uid( + EEikStatusPaneUidDigitalClock ) ) ); + + if ( !err1 && !err2 ) { - indicatorRect.Move( - -cbaPositionRelativeToScreen.iX, - -cbaPositionRelativeToScreen.iY ); + TPoint cbaPositionRelativeToScreen( PositionRelativeToScreen() ); + TRect cbaRectRelativeToScreen( cbaPositionRelativeToScreen, Size() ); + + if ( cbaRectRelativeToScreen.Intersects( indicatorRect ) ) + { + indicatorRect.Move( + -cbaPositionRelativeToScreen.iX, + -cbaPositionRelativeToScreen.iY ); - region.SubRect( indicatorRect ); - } + region.SubRect( indicatorRect ); + } - if ( cbaRectRelativeToScreen.Intersects( digitalClockRect ) ) - { - digitalClockRect.Move( - -cbaPositionRelativeToScreen.iX, - -cbaPositionRelativeToScreen.iY ); + if ( cbaRectRelativeToScreen.Intersects( digitalClockRect ) ) + { + digitalClockRect.Move( + -cbaPositionRelativeToScreen.iX, + -cbaPositionRelativeToScreen.iY ); - region.SubRect( digitalClockRect ); + region.SubRect( digitalClockRect ); + } } } } @@ -3564,6 +3570,7 @@ { if( button1->IsDimmed() ) { + _AKNTRACE_FUNC_EXIT; return EKeyWasConsumed; } // Return immediately if the button is invisible @@ -3601,6 +3608,7 @@ { if( button2->IsDimmed() ) { + _AKNTRACE_FUNC_EXIT; return EKeyWasConsumed; } // Return immediately if the button is invisible. @@ -3655,7 +3663,8 @@ && !Window().IsFaded() ) { if( buttonMSK->IsDimmed() ) - { + { + _AKNTRACE_FUNC_EXIT; return EKeyWasConsumed; } if (KControlArrayCBAButtonMSKPosn < iControlArray->Count()) @@ -3883,6 +3892,7 @@ if( button1->IsDimmed() ) { CCoeControl::HandlePointerEventL( aPointerEvent ); + _AKNTRACE_FUNC_EXIT; return; } if ( button1->IsVisible() ) @@ -3947,6 +3957,7 @@ if( button2->IsDimmed() ) { CCoeControl::HandlePointerEventL( aPointerEvent ); + _AKNTRACE_FUNC_EXIT; return; } if ( button2->IsVisible() ) @@ -4013,6 +4024,7 @@ if( buttonMSK->IsDimmed() ) { CCoeControl::HandlePointerEventL( aPointerEvent ); + _AKNTRACE_FUNC_EXIT; return; } if ( buttonMSK->IsVisible() ) @@ -4551,6 +4563,7 @@ // Embedded CBA doesn't draw anything if ( iFlags.IsSet( ECbaInsideDialog ) ) { + _AKNTRACE_FUNC_EXIT; return; } @@ -4559,6 +4572,7 @@ CWindowGc &gc = SystemGc(); iExtension->DrawSemiTransparency( gc ); + _AKNTRACE_FUNC_EXIT; return; } @@ -5270,7 +5284,7 @@ TRect posInScreen( cbarect.Rect() ); TBool mskEnabledInPlatform( iMSKEnabledInPlatform && - IsMskEnabledLayoutActive() ); + ( IsMskEnabledLayoutActive() || ( iCbaFlags & EEikCbaFlagAppMskIcon ) ) ); TBool mskEnabledInApplication( AknLayoutUtils::MSKEnabled() && iMSKset ); @@ -7736,11 +7750,14 @@ // TBool CEikCba::MskAllowed() const { - _AKNTRACE_FUNC_ENTER; - _AKNTRACE_FUNC_EXIT; - return ( iMSKEnabledInPlatform && - AknLayoutUtils::MSKEnabled() && - IsMskEnabledLayoutActive() ); + _AKNTRACE_FUNC_ENTER; + TBool ret = EFalse; + ret = iMSKEnabledInPlatform && + ( ( AknLayoutUtils::MSKEnabled() && + IsMskEnabledLayoutActive() ) || ( iCbaFlags & EEikCbaFlagAppMskIcon ) ); + _AKNTRACE( "MskAllowed is %d", ret ); + _AKNTRACE_FUNC_EXIT; + return ret; } @@ -7879,6 +7896,10 @@ void CEikCba::UpdateMultipleMarkingSoftkey() { _AKNTRACE_FUNC_ENTER; + if ( iFlags.IsSet( ECbaEmbedded ) ) + { + return; + } if ( iFlags.IsSet( ECbaSingleClickEnabled ) && iExtension && iExtension->iItemActionMenu ) { diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/eikspane.cpp --- a/uifw/EikStd/coctlsrc/eikspane.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/eikspane.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -3726,6 +3726,18 @@ // Read statuspane shape TRAP_IGNORE( GetShapeL( statusPaneRegion, ETrue, ETrue ) ); + + // We need to subduce the rect of digital clock pane here, + // because it stay on the bottom cba area always in landscape mode. + if (Layout_Meta_Data::IsLandscapeOrientation()) + { + CEikStatusPaneLayoutTree* pane = iModel->CurrentLayout()->Find(TUid::Uid(EEikStatusPaneUidDigitalClock)); + if (pane != NULL) + { + statusPaneRegion.SubRect(pane->Rect()); + } + } + statusPaneRegion.Tidy(); // Get largest possible rect that does not overlap with sp shape diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/coctlsrc/smileymodel.cpp --- a/uifw/EikStd/coctlsrc/smileymodel.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/coctlsrc/smileymodel.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -446,8 +446,14 @@ while(pos > 0) { const TUint16 word = aText[--pos]; - if(word == ' ' || word == 0x2029) + // Since in most cases, URL is comprised of ASCII characters, + // so if there is a character out of the ASCII printable characters, + // we can stop the search. + const TInt KMinPrintableAscIIChar( 0x21 ); // excluding space + const TInt KMaxPrintableAscIIChar( 0x7e ); + if( word < KMinPrintableAscIIChar || word > KMaxPrintableAscIIChar ) { + pos++; // make the string begin with printable character. break; } } @@ -461,7 +467,22 @@ if(KErrNotFound != pos) { return ETrue; - } + } + else + { + // Although the string doesn't contain '://', it is also considered + // as an URL if it contains 'www.'. + HBufC* fieldTextBuf( field.Alloc() ); + if ( fieldTextBuf ) + { + TPtr fieldText( fieldTextBuf->Des() ); + // Use lower case for search to avoid case sensitive mismatch. + fieldText.LowerCase(); + TBool result( fieldText.Find( _L("www.") ) != KErrNotFound ); + delete fieldTextBuf; + return result; + } + } } return EFalse; diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/srvuiinc/eikkeysoundserver.h --- a/uifw/EikStd/srvuiinc/eikkeysoundserver.h Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/srvuiinc/eikkeysoundserver.h Wed Sep 15 12:29:17 2010 +0300 @@ -103,9 +103,13 @@ TInt Preference(); TVolumeSetting Volume(); virtual void DoPlay() = 0; + TBool IsWaittingPlay(); + void SetDestroyAfterPlay(TBool aDestroyAfterPlay); protected: TInt iPriority; TInt iPreference; + TBool iWaittingPlay; + TBool iDestroyAfterPlay; TVolumeSetting iVolume; }; diff -r 978afdc0236f -r 85902f042028 uifw/EikStd/srvuisrc/eikkeysoundserver.cpp --- a/uifw/EikStd/srvuisrc/eikkeysoundserver.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/EikStd/srvuisrc/eikkeysoundserver.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -88,6 +88,7 @@ TInt CEikKeySoundServer::LaunchServer(TThreadId& aThreadId) { + LOGTEXT(_L("CEikKeySoundServer::LaunchServer")); // First, check that ther server isn't already running. TFindServer findServer(__KEYSOUND_SERVER_NAME); TFullName name; @@ -192,6 +193,7 @@ void CEikKeySoundServer::ConstructL() { + LOGTEXT(_L("CEikKeySoundServer::ConstructL")); iInit = EFalse; iSidList = new(ELeave)CArrayFixFlat(KAknSoundInfoMapGranularity); iSoundList = new(ELeave)CArrayPtrFlat(KAknSoundInfoMapGranularity); @@ -242,6 +244,7 @@ CEikKeySoundServer::~CEikKeySoundServer() { + LOGTEXT(_L("CEikKeySoundServer::~CEikKeySoundServer")); if (iProfilesNotifyHandler) { iProfilesNotifyHandler->StopListening(); @@ -264,6 +267,7 @@ CSession2* CEikKeySoundServer::NewSessionL(const TVersion& aVersion, const RMessage2& /*aMessage*/) const { + LOGTEXT(_L("CEikKeySoundServer::NewSessionL")); TVersion ver(KKeySoundServMajorVN, KKeySoundServMinorVN, KKeySoundServBuildVN); if (!User::QueryVersionSupported(ver, aVersion)) { @@ -290,6 +294,7 @@ void CEikKeySoundServer::PlaySid(TInt aSid, TBool aPlaySelf) { + LOGTEXT1(_L("CEikKeySoundServer::PlaySid aSid: %d"), aSid); if (aSid == EAvkonSIDWarningTone && iWarningToneEnabled == 0) { // Don't play warning tone, when the warning tone is disabled in setting. @@ -384,6 +389,8 @@ void CEikKeySoundServer::SetDisabledScanCode( TInt aScanCode ) { + LOGTEXT1(_L("CEikKeySoundServer::SetDisabledScanCode aScanCode: %d"), + aScanCode); iDisabledScanCode = aScanCode; } @@ -427,6 +434,8 @@ CEikKeySoundSession::~CEikKeySoundSession() { + LOGTEXT1(_L("CEikKeySoundSession::~CEikKeySoundSession iClientUid %d"), + iClientUid); RemoveSids(iClientUid); if (iHasLockedContext) { @@ -437,6 +446,7 @@ } if (iOwnsDefaultSounds) { + LOGTEXT(_L("CEikKeySoundSession::~CEikKeySoundSession OwnsDefaultSounds")); RemoveSids(0); iServer->iInit = EFalse; } @@ -470,6 +480,8 @@ void CEikKeySoundSession::ServiceL(const RMessage2& aMessage) { + LOGTEXT1(_L("CEikKeySoundSession::ServiceL aMessage: %d"), + aMessage.Function()); if (aMessage.Function() == EKeySoundServerPlayKey) { TInt scancode = aMessage.Int0() & 0xff; @@ -583,7 +595,7 @@ { TInt uid = aMessage.Int0(); TInt size = aMessage.Int1(); - + LOGTEXT1(_L("CEikKeySoundSession::AddSoundIdBufferL uid: %d"), uid); // CBufFlat requires that size must be positive and not larger than KMaxTInt / 2. // Without this check the KeySoundServer could panic. if (size <= 0 || size >= ((KMaxTInt / 2) - KKeySoundServerBufExpandSize)) @@ -700,6 +712,7 @@ void CEikKeySoundSession::RemoveSids(TInt aUid) { + LOGTEXT1(_L("CEikKeySoundSession::RemoveSids aUid %d"), aUid); TUint uid = aUid << 16; if (!iServer->iSidList) { @@ -730,7 +743,18 @@ if (!duplicateFound) { // Remove sound at this position - delete id.iSoundInfo; + if(id.iSoundInfo->IsWaittingPlay()) + { + LOGTEXT1(_L("CEikKeySoundSession::RemoveSids DestroyAfterplay : %d"), + (TInt)id.iSoundInfo ); + id.iSoundInfo->SetDestroyAfterPlay(ETrue); + } + else + { + LOGTEXT1(_L("CEikKeySoundSession::RemoveSids Destroy : %d"), + (TInt)id.iSoundInfo ); + delete id.iSoundInfo; + } if (iServer->iSoundList) { iServer->iSoundList->Delete(ii); @@ -800,6 +824,7 @@ void CEikKeySoundSession::AddToneSidL(const TAknSoundID& aSoundID, CAknToneSoundInfo* aSoundInfo) { + LOGTEXT(_L("CEikKeySoundSession::AddToneSidL")); aSoundInfo->InitL(); TKeyArrayFix sidKey(_FOFF(TAknSoundID, iSid), ECmpTUint); @@ -818,6 +843,7 @@ void CEikKeySoundSession::AddSequenceSidL(const TAknSoundID& aSoundID, CAknSequenceSoundInfo* aSoundInfo) { + LOGTEXT(_L("CEikKeySoundSession::AddSequenceSidL")); aSoundInfo->InitL(); TKeyArrayFix sidKey(_FOFF(TAknSoundID, iSid), ECmpTUint); @@ -837,6 +863,7 @@ void CEikKeySoundSession::AddFileSidL(const TAknSoundID& aSoundID, CAknFileSoundInfo* aSoundInfo, const TDesC& aFileName) { + LOGTEXT(_L("CEikKeySoundSession::AddFileSidL")); aSoundInfo->InitL(aFileName, NULL); TKeyArrayFix sidKey(_FOFF(TAknSoundID, iSid), ECmpTUint); @@ -860,6 +887,8 @@ { iPriority = aPriority; iPreference = aPreference; + iWaittingPlay = EFalse; + iDestroyAfterPlay = EFalse; iVolume = ESoundVolume9; // default to loudest } @@ -879,6 +908,17 @@ return iVolume; } +TBool CEikSoundInfo::IsWaittingPlay() + { + LOGTEXT1(_L("CEikSoundInfo::IsWaittingPlay : %d"), iWaittingPlay); + return iWaittingPlay; + } + +void CEikSoundInfo::SetDestroyAfterPlay(TBool aDestroyAfterPlay) + { + iDestroyAfterPlay = aDestroyAfterPlay; + } + // ================================== // CAknSynthSoundInfo implementation. // ================================== @@ -1130,7 +1170,7 @@ delete iAudioPlayer; } -void CAknFileSoundInfo::InitL(const TDesC& aFileName, CMdaServer* aMdaServer) +void CAknFileSoundInfo::InitL(const TDesC& aFileName, CMdaServer* /*aMdaServer*/) { LOGTEXT(_L("CAknFileSoundInfo::InitL() - Filename:")); LOGTEXT(aFileName); @@ -1148,6 +1188,7 @@ // Create audio player. DoPlay() will be called in all circumstances. iAudioPlayer = CMdaAudioPlayerUtility::NewFilePlayerL(iFileName, *this, iPriority,(TMdaPriorityPreference)iPreference ); + iWaittingPlay =ETrue; LOGTEXT(_L(" CAknFileSoundInfo::PlayL() - Exit")); } @@ -1177,6 +1218,7 @@ delete iAudioPlayer; iAudioPlayer = NULL; + iWaittingPlay = EFalse; } } @@ -1203,6 +1245,7 @@ delete iAudioPlayer; iAudioPlayer = NULL; iPrepared = EFalse; + iWaittingPlay = EFalse; } } @@ -1269,12 +1312,19 @@ void CAknFileSoundInfo::MapcPlayComplete(TInt /*aError*/) { LOGTEXT(_L("CAknFileSoundInfo::MapcPlayComplete()")); - + LOGTEXT1(_L(" aError:%d"), aError); iPlaying = EFalse; + iWaittingPlay = EFalse; delete iAudioPlayer; iAudioPlayer = NULL; iPrepared = EFalse; + if(iDestroyAfterPlay) + { + LOGTEXT1(_L("CAknFileSoundInfo::MapcPlayComplete DestroyAfterPlay : %d"), + TInt(this)); + delete this; + } } // End of file diff -r 978afdc0236f -r 85902f042028 uifw/ganes/inc/HgScrollbar.h --- a/uifw/ganes/inc/HgScrollbar.h Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/ganes/inc/HgScrollbar.h Wed Sep 15 12:29:17 2010 +0300 @@ -116,17 +116,20 @@ TRect iScrollbarRect; TRect iNaviRect; - TPoint iHandlePosition; + TPoint iHandlePosition; //exists only for CHgScrollbar::HandlePosition() + TReal iHandlePos; + TReal iPageSize; + TInt iScrollLength; + TSize iHandleSize; + TPoint iPrevDrag; TSize iTotalSize; TSize iViewSize; - TSize iHandleSize; TBool iLandscapeScrolling; TBool iDragging; TBool iHandler; TBool iStatic; - TInt iScrollLength; TInt iTotalLength; }; diff -r 978afdc0236f -r 85902f042028 uifw/ganes/src/HgScrollbar.cpp --- a/uifw/ganes/src/HgScrollbar.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/ganes/src/HgScrollbar.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -126,6 +126,7 @@ iViewSize = aViewSize; iLandscapeScrolling = aLandscapeScrolling; iHandlePosition.SetXY(0,0); + iHandlePos = 0.0; if(iLandscapeScrolling) { @@ -153,16 +154,16 @@ { if (AknLayoutUtils::LayoutMirrored()) { - iHandlePosition.iX = (iScrollLength) * (1.0 - aPosition.iX / TReal(iTotalLength)); + iHandlePos = 1.0 - (TReal(aPosition.iX) / TReal(iTotalLength)); } else { - iHandlePosition.iX = (iScrollLength) * (aPosition.iX / TReal(iTotalLength)); + iHandlePos = TReal(aPosition.iX) / TReal(iTotalLength); } } else { - iHandlePosition.iY = (iScrollLength) * (aPosition.iY / TReal(iTotalLength)); + iHandlePos = TReal(aPosition.iY) / TReal(iTotalLength); } CheckHandlePosition( EFalse ); } @@ -186,15 +187,32 @@ TBool ret = EFalse; // Quick and dirty hack, remove when logic for fetching the correct drag rect is available TRect dragArea( iScrollbarRect ); - dragArea.iBr.iX += KScrollAreaOffset; - dragArea.iTl.iX -= KScrollAreaOffset; - + if (iLandscapeScrolling) + { + dragArea.iBr.iY += KScrollAreaOffset; + dragArea.iTl.iY -= KScrollAreaOffset; + } + else + { + dragArea.iBr.iX += KScrollAreaOffset; + dragArea.iTl.iX -= KScrollAreaOffset; + } + // Start drag if( aEvent.iType == TPointerEvent::EButton1Down && dragArea.Contains(aEvent.iPosition)) { - TSize size(iHandleSize); - size.iWidth += KScrollAreaOffset*2; - TRect handleRect( dragArea.iTl + iHandlePosition, size ); + TSize size = iHandleSize; + TRect handleRect; + if (iLandscapeScrolling) + { + size.iHeight += KScrollAreaOffset*2; + handleRect = TRect( dragArea.iTl + TPoint(iHandlePos*iScrollLength, 0), size ); + } + else + { + size.iWidth += KScrollAreaOffset*2; + handleRect = TRect( dragArea.iTl + TPoint(0, iHandlePos*iScrollLength), size ); + } iDragging = handleRect.Contains( aEvent.iPosition ); iPrevDrag = aEvent.iPosition; iHandler = ret = ETrue; @@ -208,11 +226,11 @@ { if(iLandscapeScrolling) { - iHandlePosition.iX -= iPrevDrag.iX - aEvent.iPosition.iX; + iHandlePos -= (iPrevDrag.iX - aEvent.iPosition.iX)/TReal(iScrollLength); } else { - iHandlePosition.iY -= iPrevDrag.iY - aEvent.iPosition.iY; + iHandlePos -= (iPrevDrag.iY - aEvent.iPosition.iY)/TReal(iScrollLength); } CheckHandlePosition( !iStatic ); @@ -227,9 +245,16 @@ if(!iDragging) { TBool below = iLandscapeScrolling ? - aEvent.iPosition.iX > iHandlePosition.iX - : aEvent.iPosition.iY > iHandlePosition.iY; - iHandlePosition += below ? iHandleSize.AsPoint() : -iHandleSize.AsPoint(); + aEvent.iPosition.iX > iHandlePos*iScrollLength + : aEvent.iPosition.iY > iHandlePos*iScrollLength; + if(below) + { + iHandlePos += iPageSize; + } + else + { + iHandlePos -= iPageSize; + } } CheckHandlePosition( !iStatic ); iHandler = iDragging = EFalse; @@ -298,19 +323,21 @@ if(iLandscapeScrolling) { - iHandlePosition.iY = 0; - if(iHandlePosition.iX < 0 ) - iHandlePosition.iX = 0; - if(iHandlePosition.iX > iScrollLength) - iHandlePosition.iX = iScrollLength; + if(iHandlePos < 0.0 ) + iHandlePos = 0.0; + if(iHandlePos > 1.0) + iHandlePos = 1; + + iHandlePosition.SetXY(iHandlePos*iScrollLength, 0); } else { - iHandlePosition.iX = 0; - if(iHandlePosition.iY < 0 ) - iHandlePosition.iY = 0; - if(iHandlePosition.iY > iScrollLength) - iHandlePosition.iY = iScrollLength; + if(iHandlePos < 0.0 ) + iHandlePos = 0.0; + if(iHandlePos > 1) + iHandlePos = 1.0; + + iHandlePosition.SetXY(0, iHandlePos*iScrollLength); } if( aReportChange ) { @@ -319,16 +346,16 @@ { if (AknLayoutUtils::LayoutMirrored()) { - pos.iX += (1.0 - iHandlePosition.iX / TReal(iScrollLength)) * (iTotalLength); + pos.iX += (1.0 - iHandlePos) * iTotalLength; } else { - pos.iX += (iHandlePosition.iX / TReal(iScrollLength)) * (iTotalLength); + pos.iX += iHandlePos * iTotalLength; } } else { - pos.iY += (iHandlePosition.iY / TReal(iScrollLength)) * (iTotalLength); + pos.iY += iHandlePos * iTotalLength; } iObserver.ScrollBarPositionChanged( pos ); @@ -354,28 +381,33 @@ TReal xFactor = iScrollbarRect.Width()/TReal(iTotalSize.iWidth); TReal yFactor = iScrollbarRect.Height()/TReal(iTotalSize.iHeight); - - iHandleSize = TSize ( iViewSize.iWidth * xFactor, iViewSize.iHeight * yFactor ); + + TReal handleSizeWidth = iViewSize.iWidth * xFactor; + TReal handleSizeHeight = iViewSize.iHeight * yFactor; if(iLandscapeScrolling) { - TInt min = 2*iHandleSize.iHeight; - if( iHandleSize.iWidth < min ) + iPageSize = TReal(iViewSize.iWidth) / TReal(iTotalSize.iWidth - (iTotalSize.iWidth % iViewSize.iWidth) ); + TReal min = 2 * handleSizeHeight; + if( handleSizeWidth < min ) { - iHandleSize.iWidth = min; + handleSizeWidth = min; } - iScrollLength = iScrollbarRect.Width() - iHandleSize.iWidth; + iScrollLength = TReal(iScrollbarRect.Width()) - handleSizeWidth; } else { - TInt min = 2*iHandleSize.iWidth; - if( iHandleSize.iHeight < min ) + iPageSize = TReal(iViewSize.iHeight) / TReal(iTotalSize.iHeight - (iTotalSize.iHeight % iViewSize.iHeight) ); + TReal min = 2 * handleSizeWidth; + if( handleSizeHeight < min ) { - iHandleSize.iHeight = min; + handleSizeHeight = min; } - iScrollLength = iScrollbarRect.Height() - iHandleSize.iHeight; + iScrollLength = TReal(iScrollbarRect.Height()) - handleSizeHeight; } + iHandleSize = TSize(handleSizeWidth,handleSizeHeight); + delete iScrollbarHandle; iScrollbarHandle = NULL; delete iScrollbarHandleSelected; iScrollbarHandleSelected = NULL; diff -r 978afdc0236f -r 85902f042028 uifw/ganes/src/HgScroller.cpp --- a/uifw/ganes/src/HgScroller.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/ganes/src/HgScroller.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -891,6 +891,7 @@ iPointerDown = EFalse; iPanning = EFalse; + iEnterKeyHandled = EFalse; } // ----------------------------------------------------------------------------- @@ -1061,33 +1062,37 @@ iViewPosition = aNewPosition; iPhysics->StopPhysics(); - if( iScrollBarType == EHgScrollerTimeStrip ) + // show a letter popup only if we are currently dragging with scrollbar + if(iScrollbar && iScrollbar->IsDragging()) { - // Show first item's time. - TInt selectedItem = CurrentIndex(); - if( selectedItem >= 0 && selectedItem < iItems.Count() - && iItems[selectedItem]->Time().Int64() ) + if( iScrollBarType == EHgScrollerTimeStrip ) { - TRAP_IGNORE( - iItems[selectedItem]->Time().FormatL( iPopupText1, KGanesMonthString ); - iItems[selectedItem]->Time().FormatL( iPopupText2, KGanesYearString ); - ) - // To display month and year correctly in arabic. - AknTextUtils::LanguageSpecificNumberConversion( iPopupText1 ); - AknTextUtils::LanguageSpecificNumberConversion( iPopupText2 ); + // Show first item's time. + TInt selectedItem = CurrentIndex(); + if( selectedItem >= 0 && selectedItem < iItems.Count() + && iItems[selectedItem]->Time().Int64() ) + { + TRAP_IGNORE( + iItems[selectedItem]->Time().FormatL( iPopupText1, KGanesMonthString ); + iItems[selectedItem]->Time().FormatL( iPopupText2, KGanesYearString ); + ) + // To display month and year correctly in arabic. + AknTextUtils::LanguageSpecificNumberConversion( iPopupText1 ); + AknTextUtils::LanguageSpecificNumberConversion( iPopupText2 ); + } } - } - else if( iScrollBarType == EHgScrollerLetterStrip - || iScrollBarType == EHgScrollerLetterStripLite ) - { - TInt selectedItem = CurrentIndex(); - if( selectedItem >= 0 && selectedItem < iItems.Count() ) + else if( iScrollBarType == EHgScrollerLetterStrip + || iScrollBarType == EHgScrollerLetterStripLite ) { - if(iItems[selectedItem]->Title().Length()) + TInt selectedItem = CurrentIndex(); + if( selectedItem >= 0 && selectedItem < iItems.Count() ) { - iPopupText1.Zero(); - iPopupText1.Append( iItems[selectedItem]->Title()[0] ); - iPopupText1.UpperCase(); + if(iItems[selectedItem]->Title().Length()) + { + iPopupText1.Zero(); + iPopupText1.Append( iItems[selectedItem]->Title()[0] ); + iPopupText1.UpperCase(); + } } } } @@ -1191,24 +1196,46 @@ case EKeyEnter: case EKeyOK: { - if( iSelectedIndex != KErrNotFound && HasHighlight() ) + // If enter key is pushed down for a long time, many key events + // are generated. Enter should be handled only ones. + if (!iEnterKeyHandled) { - iShowHighlight = EFalse; - iDrawUtils->EnableMarquee(HasHighlight()); - if( iSelectionObserver ) - TRAP_IGNORE( iSelectionObserver->HandleOpenL( iSelectedIndex ); ) - return EKeyWasConsumed; - } - else if( iItemCount ) - { - iSelectedIndex = CurrentIndex(); - FitSelectionToView(); - iShowHighlight = ETrue; - iDrawUtils->EnableMarquee(HasHighlight()); - DrawDeferred(); - if( iSelectionObserver ) - TRAP_IGNORE( iSelectionObserver->HandleSelectL( iSelectedIndex ); ) - return EKeyWasConsumed; + iEnterKeyHandled = ETrue; + if( iSelectedIndex != KErrNotFound && HasHighlight()) + { + iEnterKeyHandled = ETrue; + const TBool validIndex = iSelectedIndex >= 0 && iSelectedIndex < iItems.Count(); + const TBool selectionMode = iFlags & EHgScrollerSelectionMode; + if (validIndex && selectionMode) + { + // In selection mode enterkey should mark/unmark item. + iItems[iSelectedIndex]->Flags() & CHgItem::EHgItemFlagMarked ? + UnMark(iSelectedIndex) : Mark(iSelectedIndex); + DrawDeferred(); + } + else + { + // Item will be opened so highlight is removed. + iShowHighlight = EFalse; + if( iSelectionObserver ) + { + TRAP_IGNORE( iSelectionObserver->HandleOpenL( iSelectedIndex ); ) + } + } + iDrawUtils->EnableMarquee(HasHighlight()); + return EKeyWasConsumed; + } + else if( iItemCount ) + { + iSelectedIndex = CurrentIndex(); + FitSelectionToView(); + iShowHighlight = ETrue; + iDrawUtils->EnableMarquee(HasHighlight()); + DrawDeferred(); + if( iSelectionObserver ) + TRAP_IGNORE( iSelectionObserver->HandleSelectL( iSelectedIndex ); ) + return EKeyWasConsumed; + } } return EKeyWasNotConsumed; } @@ -1280,7 +1307,9 @@ iHighlightTimer->Cancel(); iPointerDown = EFalse; if(iDetector) - iDetector->CancelAnimationL(); + { + TRAP_IGNORE(iDetector->CancelAnimationL()); + } iPanning = EFalse; iPhysics->StopPhysics(); diff -r 978afdc0236f -r 85902f042028 uifw/ganes/src/HgVgHelper.cpp --- a/uifw/ganes/src/HgVgHelper.cpp Tue Sep 14 21:48:24 2010 +0300 +++ b/uifw/ganes/src/HgVgHelper.cpp Wed Sep 15 12:29:17 2010 +0300 @@ -20,7 +20,7 @@ #include "HgVgHelper.h" #include "HgVgDrawBuffer.h" #include "HgVgImageCreator.h" -#include "HgVgEgl.h" +#include "HgVgEGL.h" #include #include