diff -r c743ef5928ba -r f966699dea19 menufw/menufwui/mmwidgets/src/mmlistbox.cpp --- a/menufw/menufwui/mmwidgets/src/mmlistbox.cpp Tue Feb 02 00:04:13 2010 +0200 +++ b/menufw/menufwui/mmwidgets/src/mmlistbox.cpp Fri Feb 19 22:42:37 2010 +0200 @@ -135,13 +135,13 @@ void CMmListBox::HandlePointerEventInEditModeL( const TPointerEvent& aPointerEvent ) { + CMmWidgetContainer* parent = static_cast( Parent() ); if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) { iButton1DownPos = aPointerEvent.iPosition; } else if ( aPointerEvent.iType == TPointerEvent::EButton1Up ) { - CMmWidgetContainer* parent = static_cast( Parent() ); TPoint dragDelta = iButton1DownPos - aPointerEvent.iPosition; if ( Abs( dragDelta.iY ) > KDragTreshold || parent->LongTapInProgress() ) { @@ -153,7 +153,17 @@ if ( aPointerEvent.iType == TPointerEvent::EButton1Up || aPointerEvent.iType == TPointerEvent::EButton1Down ) { + TBool highlightWasVisible = parent->IsHighlightVisible(); CEikFormattedCellListBoxTypedef::HandlePointerEventL( aPointerEvent ); + // Tricky: Do not allow the base class implementation of HandlePointerEventL + // to remove the highlight on EButton1Up event when context menu + // is displayed for an item + if ( aPointerEvent.iType == TPointerEvent::EButton1Up && + highlightWasVisible && parent->LongTapInProgress() + && !parent->IsHighlightVisible() ) + { + ItemDrawer()->ClearFlags( CListItemDrawer::ESingleClickDisabledHighlight ); + } } else if ( View()->XYPosToItemIndex( aPointerEvent.iPosition, itemUnderPointerIndex ) ) @@ -200,7 +210,7 @@ const TPointerEvent& aPointerEvent ) const { TInt topScrollingTreshold = Rect().iTl.iY - + ( MmEffects::KFocusScrollingThreshold + + ( MmListBox::KFocusScrollingThreshold * TReal( View()->ItemSize().iHeight ) ); return ( aPointerEvent.iPosition.iY < topScrollingTreshold ); @@ -214,7 +224,7 @@ const TPointerEvent& aPointerEvent ) const { TInt bottomScrollingTreshold = Rect().iBr.iY - - ( MmEffects::KFocusScrollingThreshold + - ( MmListBox::KFocusScrollingThreshold * TReal( View()->ItemSize().iHeight ) ); return ( aPointerEvent.iPosition.iY > bottomScrollingTreshold ); @@ -384,7 +394,7 @@ // // ----------------------------------------------------------------------------- // -void CMmListBox::HandleRedrawTimerEvent() +void CMmListBox::HandleRedrawTimerEventL() { if ( iSkippedScrollbarEventsCount ) { @@ -401,7 +411,9 @@ TInt CMmListBox::RedrawTimerCallback( TAny* aPtr ) { CMmListBox* self = static_cast( aPtr ); - self->HandleRedrawTimerEvent(); + TRAP_IGNORE( self->HandleRedrawTimerEventL() ); + // Do not bother returning a meaningful error code, CPeriodic will ignore it + // anyway. return 0; }