diff -r 0ed94ceaa377 -r cb62a4f66ebe widgets/widgetapp/src/WidgetUiWindowManager.cpp --- a/widgets/widgetapp/src/WidgetUiWindowManager.cpp Thu Dec 17 09:20:16 2009 +0200 +++ b/widgets/widgetapp/src/WidgetUiWindowManager.cpp Thu Jan 07 13:31:38 2010 +0200 @@ -202,6 +202,9 @@ // CWidgetUiWindowManager::~CWidgetUiWindowManager() { + if( iDialogsProvider) + iDialogsProvider->CancelAll(); + iActiveFsWindow = NULL; iWindowList.ResetAndDestroy(); delete iNetworkListener; @@ -351,7 +354,10 @@ wdgt_window->NetworkModeWait()->AsyncStop(); } #endif - wdgt_window->DetermineNetworkState(); + if(wdgt_window->IsWidgetLoaded()) + wdgt_window->DetermineNetworkState(); + else + wdgt_window->NeedToNotifyNetworkState(ETrue); } } break; @@ -370,21 +376,23 @@ // if no full view widgets open, then close the network connection if ( ( !FullViewWidgetsOpen() ) && ( iConnection->Connected() ) ) { + TRAP_IGNORE( wdgt_window->Engine()->HandleCommandL( + (TInt)TBrCtlDefs::ECommandIdBase + + (TInt)TBrCtlDefs::ECommandCancelFetch ) ); + wdgt_window->Engine()->HandleCommandL( (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandDisconnect ); + iConnection->CancelConnection(); iConnection->StopConnectionL(); } - wdgt_window->DetermineNetworkState(); + if(wdgt_window->IsWidgetLoaded()) + wdgt_window->DetermineNetworkState(); + else + wdgt_window->NeedToNotifyNetworkState(ETrue); } } - break; - case WidgetRestart: - { - OpenOrCreateWindowL( aUid, LaunchMiniview ); - ResumeWidgetL( aUid ); - } - break; + break; } if(needToNotify) // Widget is up and running, notify that next one can be launched @@ -639,16 +647,21 @@ (TInt)TBrCtlDefs::ECommandCancelFetch ) ); if ( lastOne ) { - TRAP_IGNORE( aWidgetWindow->Engine()->HandleCommandL( - (TInt)TBrCtlDefs::ECommandIdBase + - (TInt)TBrCtlDefs::ECommandDisconnect ) ); - - delete aWidgetWindow; - return ETrue; + if(aWidgetWindow->CanBeDeleted()) + { + TRAP_IGNORE( aWidgetWindow->Engine()->HandleCommandL( + (TInt)TBrCtlDefs::ECommandIdBase + + (TInt)TBrCtlDefs::ECommandDisconnect ) ); + iConnection->CancelConnection(); + iConnection->StopConnectionL(); + delete aWidgetWindow; + return ETrue; + } } else { - delete aWidgetWindow; + if(aWidgetWindow->CanBeDeleted()) + delete aWidgetWindow; } return EFalse; } @@ -748,6 +761,7 @@ if ( window == iActiveFsWindow ) { //make the active window NULL and also CurrentWindow as False + iActiveFsWindow->SetCurrentWindow(EFalse); iActiveFsWindow->SetIsCurrentWindow(EFalse); iActiveFsWindow = NULL; } @@ -862,6 +876,8 @@ } else { + if(iDialogsProvider) + iDialogsProvider->CancelAll(); HideWindow( iActiveFsWindow ); } } @@ -1308,7 +1324,16 @@ TInt nWidgetsCount = iWindowList.Count(); for ( TInt i = (nWidgetsCount-1); i >= 0; i-- ) { - CWidgetUiWindow* window = iWindowList[i]; + CWidgetUiWindow* window = iWindowList[i]; + TRAP_IGNORE( window->Engine()->HandleCommandL( + (TInt)TBrCtlDefs::ECommandIdBase + + (TInt)TBrCtlDefs::ECommandCancelFetch ) ); + if(i == 0) + TRAP_IGNORE( window->Engine()->HandleCommandL( + (TInt)TBrCtlDefs::ECommandIdBase + + (TInt)TBrCtlDefs::ECommandDisconnect ) ); + iConnection->CancelConnection(); + iConnection->StopConnectionL(); delete window; } iWindowList.Reset(); @@ -1341,6 +1366,12 @@ return EFalse; } + +void CWidgetUiWindowManager::ExitNow() + { + iAppUi.Exit(); + } + CRequestRAM::CRequestRAM(CWidgetUiWindowManager* aWidgetUiWindowManager, const TUid& aUid, TUint32 aOperation): CActive( EPriorityStandard ), iOperation(aOperation), @@ -1380,6 +1411,7 @@ if(iStatus >= 0) { iWidgetUiWindowManager->OpenOrCreateWindowL( iUid, LaunchMiniview ); + iWidgetUiWindowManager->GetWindow(iUid)->NeedToNotifyNetworkState(ETrue); iWidgetUiWindowManager->ResumeWidgetL( iUid ); iWidgetUiWindowManager->GetWindow(iUid)->SetTime(); #ifdef OOM_WIDGET_CLOSEALL