diff -r b13141f05c3d -r b5fbb9b25d57 emailuis/emailui/src/ncscomposeviewcontainer.cpp --- a/emailuis/emailui/src/ncscomposeviewcontainer.cpp Tue Apr 27 16:20:14 2010 +0300 +++ b/emailuis/emailui/src/ncscomposeviewcontainer.cpp Tue May 11 15:57:15 2010 +0300 @@ -54,6 +54,8 @@ #include "FreestyleEmailUiCLSItem.h" +const TInt KHeaderVisibilityThreshold = -100; + // ========================= MEMBER FUNCTIONS ================================== // --------------------------------------------------------------------------- @@ -362,8 +364,8 @@ { // If user started dragging, cancel hotspot actions iIsDragging = ETrue; - iMessageField->SetCursorVisible( EFalse ); - iReadOnlyQuoteField->SetCursorVisible( EFalse ); + iMessageField->SetPhysicsEmulationOngoing( ETrue ); + iReadOnlyQuoteField->SetPhysicsEmulationOngoing( ETrue ); iHeader->SetPhysicsEmulationOngoing( ETrue ); } } @@ -789,11 +791,11 @@ } // update some layout variables - TRect headerRect = iHeader->Rect(); + iHeaderHeight = iHeader->Rect().Height(); TRect bodyRect = iMessageField->Rect(); TRect quoteRect = iReadOnlyQuoteField->Rect(); - iTotalComposerHeight = headerRect.Height() + iSeparatorHeight * 2 + + iTotalComposerHeight = iHeaderHeight + iSeparatorHeight * 2 + bodyRect.Height() + quoteRect.Height(); iVisibleAreaHeight = Rect().Height(); @@ -998,7 +1000,8 @@ TEdwinEvent aEventType ) { FUNC_LOG; - if ( aEdwin == iMessageField || aEdwin == iReadOnlyQuoteField ) + if (( aEdwin == iMessageField || aEdwin == iReadOnlyQuoteField ) && + ( !iPhysics || iPhysics->OngoingPhysicsAction() == CAknPhysics::EAknPhysicsActionNone )) { if ( aEventType == MEikEdwinObserver::EEventTextUpdate || aEventType == MEikEdwinObserver::EEventNavigation ) @@ -1916,7 +1919,19 @@ { headerPos.iY += moveY; iHeader->SetPosition( headerPos ); - + + // set header invisible if it is not in visible area + // this is done to prevent drawing of header when it is not necessary + if ( headerPos.iY + iHeaderHeight <= KHeaderVisibilityThreshold && iHeader->IsVisible() ) + { + iHeader->MakeVisible( EFalse ); + } + // set header visible if it is in visible area + else if ( headerPos.iY + iHeaderHeight > KHeaderVisibilityThreshold && !iHeader->IsVisible() ) + { + iHeader->MakeVisible( ETrue ); + } + TPoint msgPos( iMessageField->Position() ); msgPos.iY += moveY; iMessageField->SetPosition( msgPos ); @@ -1931,7 +1946,7 @@ iSeparatorLineYPos += moveY; UpdateScrollBar(); - DrawNow(); + DrawDeferred(); } } else @@ -1950,8 +1965,15 @@ { FUNC_LOG; TInt scrollOffset = aNewPosition.iY - iVisibleAreaHeight / 2; + + // when the composer view is overlapped by other view for instance task switcher or screensaver + // physics sends a faulty event to move the composer view down. + // This action is ignored here. + if (aNewPosition.iY != 0) + { Scroll( scrollOffset, aDrawNow ); } + } // ----------------------------------------------------------------------------- // CNcsComposeViewContainer::PhysicEmulationEnded @@ -1962,8 +1984,8 @@ { FUNC_LOG; iIsFlicking = EFalse; - iMessageField->SetCursorVisible( ETrue ); - iReadOnlyQuoteField->SetCursorVisible( ETrue ); + iMessageField->SetPhysicsEmulationOngoing( EFalse ); + iReadOnlyQuoteField->SetPhysicsEmulationOngoing( EFalse ); iHeader->SetPhysicsEmulationOngoing( EFalse ); }