uifw/EikStd/dlgsrc/EIKDIALG.CPP
branchRCL_3
changeset 18 0aa5fbdfbc30
parent 16 71dd06cfe933
child 23 3d340a0166ff
--- a/uifw/EikStd/dlgsrc/EIKDIALG.CPP	Wed Apr 14 16:14:00 2010 +0300
+++ b/uifw/EikStd/dlgsrc/EIKDIALG.CPP	Tue Apr 27 16:55:05 2010 +0300
@@ -1917,104 +1917,133 @@
  */
 EXPORT_C void CEikDialog::TryExitL(TInt aButtonId)
     {
-	_AKNTRACE_FUNC_ENTER;
-	_AKNTRACE("iDialogFlags = %d, buttonId = %d", iDialogFlags, aButtonId);
-    if ( iDialogFlags & EEikDialogFlagNoUserExit )
+    _AKNTRACE("CEikDialog::TryExitL iDialogFlags = %d, buttonId = %d", iDialogFlags, aButtonId);
+    if (iDialogFlags & EEikDialogFlagNoUserExit)
         {
-		return;
+        return;
         }
         
     // use delayed exit if pointer event handling is in progress
-    if ( Extension()->iPublicFlags.IsSet( CEikDialogExtension::EDelayedExit ) )
+    if (Extension()->iPublicFlags.IsSet(CEikDialogExtension::EDelayedExit))
         {
         Extension()->iButtonId = aButtonId;
         Extension()->StartDelayedExit();
+        
         _AKNTRACE("CEikDialog::TryExitL return with delayedExit");
         return;
         }
 
-    TBool effectTriggered = EFalse;
-    
-        TBool effectButton = aButtonId == EEikBidCancel
-                          || aButtonId == EAknSoftkeyExit
-                          || aButtonId == EAknSoftkeyBack
-                          || aButtonId == EAknSoftkeyNo;
+    TBool effectButton = aButtonId == EEikBidCancel
+                      || aButtonId == EAknSoftkeyExit
+                      || aButtonId == EAknSoftkeyBack
+                      || aButtonId == EAknSoftkeyNo;
 #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS
-        effectButton =    effectButton
-                          || aButtonId == EAknSoftkeyClose
-                          || aButtonId == EAknSoftkeyDone
-                          || aButtonId == EAknSoftkeyOk;
+    effectButton =    effectButton
+                      || aButtonId == EAknSoftkeyClose
+                      || aButtonId == EAknSoftkeyDone
+                      || aButtonId == EAknSoftkeyOk;
 #endif
-    CAknAppUi* aknAppUi = static_cast<CAknAppUi*>( iEikonEnv->EikAppUi() );
-        if (GfxTransEffect::IsRegistered(this) && IsVisible() && effectButton
+
+    TBool effectTriggered = EFalse;
+    CAknAppUi* aknAppUi = static_cast<CAknAppUi*>(iEikonEnv->EikAppUi());
+    
+    if (!(iDialogFlags & EEikDialogFlagDelayEffects)
+        && GfxTransEffect::IsRegistered(this) && IsVisible() && effectButton
 #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS        
-        && !(iDialogFlags&EEikDialogFlagSleeping)
+        && !(iDialogFlags & EEikDialogFlagSleeping)
 #endif
-            && (!aknAppUi->IsFullScreenApp() || aknAppUi->IsForeground())
+        && (!aknAppUi->IsFullScreenApp() || aknAppUi->IsForeground())
         && !IsBlankScreenDisplayed()
-         )
-            {
+        )
+        {
         CAknTransitionUtils::SetAllParents(this);
         GfxTransEffect::Begin(this, KGfxControlDisappearAction);
         GfxTransEffect::NotifyExternalState(ECaptureComponentsBegin, (const TDesC8*)this);
         TRect demarcation;
-        CAknTransitionUtils::GetDemarcation(CAknTransitionUtils::EPopup,
-                                            demarcation);
+        CAknTransitionUtils::GetDemarcation(CAknTransitionUtils::EPopup, demarcation);
         GfxTransEffect::SetDemarcation(this, demarcation);
         effectTriggered = ETrue;
         }
 
-    if (aButtonId!=EEikBidCancel)
+    if (aButtonId != EEikBidCancel)
+        {
         PrepareForFocusTransitionL();
-    else if (!(iDialogFlags&EEikDialogFlagNotifyEsc))
+        }
+    else if (!(iDialogFlags & EEikDialogFlagNotifyEsc))
+        {
         goto finished;
+        }
+    
     if (!OkToExitL(aButtonId))
+        {
+        if (effectTriggered)
             {
-        if ( effectTriggered )
-            {
-            GfxTransEffect::NotifyExternalState( ECaptureComponentsAbort,
-                                                 ( const TDesC8* ) this );
-            GfxTransEffect::Abort( this );
-            }
-            _AKNTRACE_FUNC_EXIT;
-            return;
+            GfxTransEffect::NotifyExternalState(ECaptureComponentsAbort, (const TDesC8*)this);
+            GfxTransEffect::Abort(this);
             }
         
-        if (aButtonId != EEikBidCancel)
+        _AKNTRACE("CEikDialog::TryExitL return with OkToExitL false");
+        return;
+        }
+        
+    if (aButtonId != EEikBidCancel)
+        {
         GetAutoValues();
+        }
+
 finished:
+
     if (iExitConfirmed)
-        *iExitConfirmed=((MappedCommandId( aButtonId ) ==EEikBidCancel)? 0: aButtonId);
+        {
+        *iExitConfirmed = MappedCommandId(aButtonId) == EEikBidCancel ? 0 : aButtonId;
+        }
 
     // Remove content observer in order to prevent unnecessary layout 
     // calculations in dialog shutdown.
-    EnableContentObserver( EFalse );
-
-    if (iDialogFlags&EEikDialogFlagSleeping)
+    EnableContentObserver(EFalse);
+
+    if (iDialogFlags & EEikDialogFlagSleeping)
+        {
         ExitSleepingDialog();
+        }
     else
         {
         // Remove content observer in order to prevent unnecessary layout 
         // calculations in dialog shutdown.
-        EnableContentObserver( EFalse );
-
-        if ( effectTriggered )
-                        {
-                MakeVisible(EFalse);
-                CAknTransitionUtils::MakeVisibleSubComponents( this,
-                                        CAknTransitionUtils::EForceInvisible );
-
-                GfxTransEffect::NotifyExternalState(ECaptureComponentsEnd, (const TDesC8*)this);
-                GfxTransEffect::End(this);
+        EnableContentObserver(EFalse);
+        
+        // The dialog is asked to postpone the effect after OkToExitL.
+        if ((iDialogFlags & EEikDialogFlagDelayEffects) && !effectTriggered)
+            {
+            if (GfxTransEffect::IsRegistered(this) && IsVisible() && effectButton
+                && (!aknAppUi->IsFullScreenApp() || aknAppUi->IsForeground())
+                && !IsBlankScreenDisplayed()
+                )
+                {
+                TRect demarcation;
+                CAknTransitionUtils::SetAllParents(this);
+                GfxTransEffect::Begin(this, KGfxControlDisappearAction);
+                GfxTransEffect::NotifyExternalState(ECaptureComponentsBegin, (const TDesC8*)this);
+                CAknTransitionUtils::GetDemarcation(CAknTransitionUtils::EPopup, demarcation);
+                GfxTransEffect::SetDemarcation(this, demarcation);
+                effectTriggered = ETrue;
                 }
-            else
-                {
-                MakeVisible(EFalse);
-                CAknTransitionUtils::MakeVisibleSubComponents( this,
-                                        CAknTransitionUtils::EForceInvisible );
-                GfxTransEffect::NotifyExternalState( ECaptureComponentsAbort,
-                                                 ( const TDesC8* ) this );
-                GfxTransEffect::Abort(this);
+            }
+
+        if (effectTriggered)
+            {
+            MakeVisible(EFalse);
+            CAknTransitionUtils::MakeVisibleSubComponents(this, CAknTransitionUtils::EForceInvisible);
+            GfxTransEffect::NotifyExternalState(ECaptureComponentsEnd, (const TDesC8*)this);
+            GfxTransEffect::End(this);
+            }
+        else
+            {
+            // Why we need abort the effect here ??
+            MakeVisible(EFalse);
+            CAknTransitionUtils::MakeVisibleSubComponents(this, CAknTransitionUtils::EForceInvisible);
+            GfxTransEffect::NotifyExternalState(ECaptureComponentsAbort, (const TDesC8*)this);
+            GfxTransEffect::Abort(this);
             }
         delete(this);
         }