--- 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();