diff -r 9f56a4e1b8ab -r 08e69e956a8c uifw/EikStd/coctlsrc/aknstyluspopupmenu.cpp --- a/uifw/EikStd/coctlsrc/aknstyluspopupmenu.cpp Mon Mar 15 12:41:34 2010 +0200 +++ b/uifw/EikStd/coctlsrc/aknstyluspopupmenu.cpp Wed Mar 31 21:59:52 2010 +0300 @@ -173,19 +173,23 @@ // EXPORT_C void CAknStylusPopUpMenu::ShowMenu() { - TRAPD( err, - iController = CAknPreviewPopUpController::NewL( *iContent, - CAknPreviewPopUpController::ELayoutSubMenu | - CAknPreviewPopUpController::EAutoMirror | - CAknPreviewPopUpController::EDontClose ) ); - if ( err ) + // if contoller exists, re-use it . + if ( !iController ) { - return; - } + TRAPD( err, + iController = CAknPreviewPopUpController::NewL( *iContent, + CAknPreviewPopUpController::ELayoutSubMenu | + CAknPreviewPopUpController::EAutoMirror | + CAknPreviewPopUpController::EDontClose ) ); + if ( err ) + { + return; + } - iController->SetPopUpShowDelay( KDefaultPopUpShowDelay ); - iController->SetPopUpHideDelay( KDefaultPopUpHideDelay ); - iContent->Parent()->DrawableWindow()->SetNonFading(ETrue); + iController->SetPopUpShowDelay( KDefaultPopUpShowDelay ); + iController->SetPopUpHideDelay( KDefaultPopUpHideDelay ); + iContent->Parent()->DrawableWindow()->SetNonFading(ETrue); + } TSize size(iController->Size()); iController->ShowPopUp(); @@ -379,6 +383,8 @@ if ( iMenuObserver ) { + TBool isAlreadySet = iFlags.IsSet( EIdleDisabled ); + iFlags.Set( EIdleDisabled ); TBool isDeleted = EFalse; iIsDeleted = &isDeleted; @@ -391,7 +397,10 @@ } iIsDeleted = NULL; - iFlags.Clear( EIdleDisabled ); + if( !isAlreadySet ) + { + iFlags.Clear( EIdleDisabled ); + } } StartControllerIdleL(); @@ -413,9 +422,16 @@ { if ( iMenuObserver ) { + TBool isAlreadySet = iFlags.IsSet( EIdleDisabled ); + iFlags.Set( EIdleDisabled ); iMenuObserver->ProcessCommandL( KErrCancel ); - iFlags.Clear( EIdleDisabled ); + + if( !isAlreadySet ) + { + iFlags.Clear( EIdleDisabled ); + } + } StartControllerIdleL();