diff -r 5456b4e8b3a8 -r 3321d3e205b6 taskswitcher/taskswitcherui/taskswitcherapp/src/tsappui.cpp --- a/taskswitcher/taskswitcherui/taskswitcherapp/src/tsappui.cpp Wed Sep 01 12:32:46 2010 +0100 +++ b/taskswitcher/taskswitcherui/taskswitcherapp/src/tsappui.cpp Tue Sep 14 20:58:58 2010 +0300 @@ -155,6 +155,7 @@ iApplicationTask.SetWgId( iWg.Identifier() ); // And finally, go to background. + iForeground = ETrue; MoveAppToBackground( ENoneTransition ); iEikonEnv->RootWin().SetOrdinalPosition(-1, ECoeWinPriorityNeverAtFront); @@ -167,11 +168,6 @@ iUiStarted = EFalse; iDisableAppKeyHandling = EFalse; - // Set process priority to high to avoid being - // locked by heavy ui apps processing - iEikonEnv->WsSession().ComputeMode(RWsSession::EPriorityControlDisabled); - RProcess().SetPriority(EPriorityHigh); - iForegroundDelayed = EFalse; iDelayedForegroundInProgress = EFalse; @@ -183,7 +179,7 @@ // Perform the first phase of two phase construction // ----------------------------------------------------------------------------- // -CTsAppUi::CTsAppUi(): iForeground( ETrue ), +CTsAppUi::CTsAppUi(): iForeground( EFalse ), iApplicationTask( iCoeEnv->WsSession() ) { // no implementation required @@ -196,7 +192,7 @@ // CTsAppUi::~CTsAppUi() { - if( GfxTransEffect::IsRegistered( iAppView ) ) + if( iAppView && GfxTransEffect::IsRegistered( iAppView ) ) { GfxTransEffect::Deregister(iAppView); @@ -270,6 +266,7 @@ TUint aSubCom ) { const TDesC8* ptr = reinterpret_cast(iAppView); + GfxTransEffect::AbortFullScreen(); GfxTransEffect::Abort(iAppView); GfxTransEffect::Begin( iAppView, aTranstionId ); GfxTransEffect::SetDemarcation( iAppView, iAppView->Rect() ); @@ -301,6 +298,7 @@ { // App start animation const TDesC8* ptr = reinterpret_cast(iAppView); + GfxTransEffect::AbortFullScreen(); GfxTransEffect::Abort(iAppView); TInt groupId = GfxTransEffect::BeginGroup(); GfxTransEffect::BeginFullScreen( @@ -538,6 +536,8 @@ // TInt CTsAppUi::GoToBackgroundTimerCallback( TAny* aParam ) { + TSLOG_STATIC_CONTEXT( GoToBackgroundTimerCallback, TSLOG_LOCAL, RThread().Id() ); + TSLOG_IN(); CTsAppUi* self = static_cast( aParam ); if ( self->iGoToBackgroundTimer ) { @@ -550,7 +550,7 @@ // Notify self->HandleSwitchToBackgroundEvent(); - + TSLOG_OUT(); return 0; } @@ -584,6 +584,10 @@ TSLOG_CONTEXT( MoveAppToForeground, TSLOG_LOCAL ); TSLOG_IN(); + if ( !iUiStarted ) + { + TRAP_IGNORE( iUnderAppWgId = WgIdOfUnderlyingAppL(EFalse) ); + } iUiStarted = ETrue; // Request window server to bring our application @@ -626,7 +630,8 @@ { iForeground = EFalse; SetTaskswitcherStateProperty( KTaskswitcherBackgroundValue ); - + + iAppView->MakeVisible( EFalse ); // notify view iAppView->HandleSwitchToBackgroundEvent(); @@ -743,7 +748,6 @@ { SetOrientationL(EAppUiOrientationPortrait); } - RProcess().SetPriority(EPriorityForeground); SetFullScreenApp(EFalse); iEikonEnv->RootWin().SetOrdinalPosition(0, ECoeWinPriorityAlwaysAtFront); } @@ -765,7 +769,6 @@ iEikonEnv->RootWin().SetOrdinalPosition(-1, ECoeWinPriorityNeverAtFront); SetOrientationL(EAppUiOrientationAutomatic); SetFullScreenApp(EFalse); - RProcess().SetPriority(EPriorityHigh); } TSLOG_OUT(); } @@ -802,12 +805,16 @@ void CTsAppUi::HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination) { + TSLOG_CONTEXT( CTsAppUi::HandleWsEventL, TSLOG_LOCAL ); CAknAppUi::HandleWsEventL(aEvent, aDestination); TInt eventType = aEvent.Type(); if ( eventType == EEventWindowGroupListChanged ) { TInt wgId = WgIdOfUnderlyingAppL(EFalse); + TSLOG2( TSLOG_INFO, "WgIdOfUnderlyingAppL: %d appId: %d", + wgId, GetAppIdL( wgId ).iUid ); if ( iForeground && + wgId && wgId != iUnderAppWgId && !iAppView->AppCloseInProgress(iUnderAppWgId) && !iAppView->WgOnTaskList(wgId) ) @@ -820,6 +827,7 @@ } iUnderAppWgId = wgId; } + TSLOG_OUT(); } @@ -829,12 +837,19 @@ // TInt CTsAppUi::WgIdOfUnderlyingAppL( TBool aIgnoreParentChild ) { + TSLOG_CONTEXT( CTsAppUi::WgIdOfUnderlyingAppL, TSLOG_LOCAL ); TInt retVal(0); TInt underlyingWg = CheckForUnderlyingHiddenAppsL(); if ( !underlyingWg ) { - TApaTaskList taskList( iEikonEnv->WsSession() ); + TApaTaskList taskList(iEikonEnv->WsSession()); underlyingWg = taskList.FindByPos(0).WgId(); + if ( !(GetAppIdL(underlyingWg).iUid) ) + { + TSLOG1 (TSLOG_INFO, "Incorrect underlying window group: %d.", underlyingWg ); + TSLOG0 (TSLOG_INFO, "No association to appId, nor special handling for underlying hidden apps.Change return value into 0."); + underlyingWg = 0; + } } if ( aIgnoreParentChild ) @@ -846,6 +861,7 @@ TInt parentWg = GetTopParentWg( underlyingWg ); retVal = parentWg ? parentWg : underlyingWg; } + TSLOG_OUT(); return retVal; } @@ -916,10 +932,7 @@ TInt underlyingWg(allWgIds[0].iId); CleanupStack::PopAndDestroy(&allWgIds); - CApaWindowGroupName* windowName = - CApaWindowGroupName::NewLC( iEikonEnv->WsSession(), underlyingWg ); - TUid appUid = windowName->AppUid(); - CleanupStack::PopAndDestroy( windowName ); + TUid appUid = GetAppIdL( underlyingWg ); if( appUid == KTsCameraUid || appUid == KTsTelephoneUid ) { @@ -939,10 +952,7 @@ TApaTaskList taskList( iEikonEnv->WsSession() ); TInt underlyingWg = taskList.FindByPos(0).WgId(); - CApaWindowGroupName* windowName = - CApaWindowGroupName::NewLC( iEikonEnv->WsSession(), underlyingWg ); - TUid appUid = windowName->AppUid(); - CleanupStack::PopAndDestroy( windowName ); + TUid appUid = GetAppIdL( underlyingWg ); if ( appUid == KTsCameraUid ) { retVal = ETrue; @@ -961,4 +971,18 @@ return iDelayedForegroundInProgress; } +// ----------------------------------------------------------------------------- +// CTsAppUi::GetAppIdL +// ----------------------------------------------------------------------------- +// +TUid CTsAppUi::GetAppIdL( TInt aWgId ) + { + TUid retVal; + CApaWindowGroupName* windowName = + CApaWindowGroupName::NewLC( iEikonEnv->WsSession(), aWgId ); + retVal = windowName->AppUid(); + CleanupStack::PopAndDestroy( windowName ); + return retVal; + } + // End of file