uifw/EikStd/coctlsrc/aknstyluspopupmenu.cpp
branchRCL_3
changeset 7 08e69e956a8c
parent 3 8ca85d2f0db7
child 9 0aa5fbdfbc30
--- 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();