diff -r 8ca85d2f0db7 -r aabf2c525e0f uifw/EikStd/coctlsrc/akntoolbarextensionview.cpp --- a/uifw/EikStd/coctlsrc/akntoolbarextensionview.cpp Fri Feb 19 23:04:46 2010 +0200 +++ b/uifw/EikStd/coctlsrc/akntoolbarextensionview.cpp Fri Mar 12 15:43:43 2010 +0200 @@ -32,6 +32,10 @@ #include "aknresourceprovider.h" +#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS +#include +#include +#endif const TInt KNoItemSelected = -1; const TUint32 KToolbarExtensionBgColor = 0x00000000; const TInt KToolBarExtensionBgAlpha = 0x7F; @@ -70,6 +74,16 @@ // CAknToolbarExtensionView::~CAknToolbarExtensionView() { +#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS + if ( IsVisible() ) + { + CAknControl::MakeVisible( EFalse ); + } + if ( GfxTransEffect::IsRegistered( this ) ) + { + GfxTransEffect::Deregister( this ); + } +#endif SetFocus( EFalse ); CEikonEnv::Static()->EikAppUi()->RemoveFromStack( this ); if ( iSelectedItem >= 0 && iSelectedItem < iItems.Count() ) @@ -184,9 +198,23 @@ // Calling this here, so that iVisibleItems array has been updated and // all items visible in extension get call makevisible +#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS + if ( !GfxTransEffect::IsRegistered( this ) ) + { + CAknControl::MakeVisible( aVisible ); + } +#else CAknControl::MakeVisible( aVisible ); +#endif SetRect( rect ); DrawableWindow()->SetOrdinalPosition( 0, ECoeWinPriorityNormal ); +#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS + if ( GfxTransEffect::IsRegistered( this ) ) + { + CAknTransitionUtils::MakeVisibleSubComponents( this, + CAknTransitionUtils::EAppearInvisible ); + } +#endif TBool floating = !IsNonFocusing(); for ( TInt i = 0; i < iItems.Count(); i++ ) { @@ -227,16 +255,61 @@ } iPreviousItem = KNoItemSelected; } +#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS + if ( GfxTransEffect::IsRegistered( this ) ) + { + CAknTransitionUtils::SetAllParents( this ); + GfxTransEffect::NotifyExternalState( EInternalHandleSequence, + ( const TDesC8* )this ); + GfxTransEffect::Begin( this, KGfxControlAppearAction ); + GfxTransEffect::NotifyExternalState( ECaptureComponentsBegin, + ( const TDesC8* )this ); + GfxTransEffect::SetDemarcation( this, rect ); + CAknControl::MakeVisible( ETrue ); + CAknTransitionUtils::MakeVisibleSubComponents( this, + CAknTransitionUtils::EAppearVisible ); + GfxTransEffect::NotifyExternalState( ECaptureComponentsEnd, + ( const TDesC8* )this ); + GfxTransEffect::End( this ); + } + else + { DrawNow(); + } +#else + DrawNow(); +#endif } else if ( !aVisible && isVisible ) { CEikonEnv::Static()->EikAppUi()->UpdateStackedControlFlags( this, ~0, ECoeStackFlagRefusesFocus | ECoeStackFlagRefusesAllKeys ); CEikonEnv::Static()->EikAppUi()->HandleStackChanged(); - CAknControl::MakeVisible( aVisible ); TRAP_IGNORE( SelectItemL( iSelectedItem, EFalse ) ); - DrawableWindow()->SetOrdinalPosition( 0, ECoeWinPriorityNeverAtFront ); + DrawableWindow()->SetOrdinalPosition( 0, + ECoeWinPriorityNeverAtFront ); +#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS + if ( GfxTransEffect::IsRegistered( this ) ) + { + CAknTransitionUtils::SetAllParents( this ); + GfxTransEffect::Begin( this, KGfxControlDisappearAction ); + GfxTransEffect::NotifyExternalState( ECaptureComponentsBegin, + ( const TDesC8* )this ); + GfxTransEffect::SetDemarcation( this, Rect() ); + CAknControl::MakeVisible( EFalse ); + CAknTransitionUtils::MakeVisibleSubComponents( this, + CAknTransitionUtils::EForceInvisible ); + GfxTransEffect::NotifyExternalState( ECaptureComponentsEnd, + ( const TDesC8* )this ); + GfxTransEffect::End( this ); + } + else + { + CAknControl::MakeVisible( EFalse ); + } +#else + CAknControl::MakeVisible( EFalse ); +#endif } else { @@ -814,6 +887,9 @@ iSelectedItem( KNoItemSelected ), iNumberOfColumns( 1 ), iIsDownOutside( EFalse ) { +#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS + GfxTransEffect::Register( this, KGfxTransEffectToolbarExtensionControlUid); +#endif } @@ -956,11 +1032,8 @@ if( landscape && !floating ) { - - TRect extButtonRect( iExtension->Rect() ); - // Calculate new y coordinate according to button middle point - TInt newY = extButtonRect.iTl.iY + mainPaneRect.iTl.iY; + TInt newY = ( mainPaneRect.Height() - viewSize.iHeight ) / 2 + mainPaneRect.iTl.iY; // Check that rect with new y fits to extension view area if( newY < extensionRect.iTl.iY ) // Top {