diff -r fb3763350a08 -r 4d54b72983ae idlehomescreen/widgetmanager/src/wmlistbox.cpp --- a/idlehomescreen/widgetmanager/src/wmlistbox.cpp Fri Jan 22 09:35:14 2010 +0200 +++ b/idlehomescreen/widgetmanager/src/wmlistbox.cpp Tue Jan 26 11:48:23 2010 +0200 @@ -18,8 +18,6 @@ // INCLUDE FILES #include -#include -#include #include #include #include @@ -28,6 +26,8 @@ #include #include #include +#include +#include #include #include #include "wmcommon.h" @@ -123,6 +123,20 @@ EMbmWidgetmanagerAdd_widget_button, EMbmWidgetmanagerAdd_widget_button_mask, KRgbWhite ); + + // This is temporary fix for ou1cimx1#228810 + // Can be removed when avkon provides real fix for this error. + // Currently forever loop in CFormattedCellListBoxData::DrawFormattedSimple + // never exits if there is no iconarray and name contains tab+digit which + // confuses listbox e.g. considering name as icon index + CArrayPtr* dummyArray = new( ELeave ) CAknIconArray(2); + CleanupStack::PushL(dummyArray); + CGulIcon* dummyIcon = CGulIcon::NewLC(); + CGulIcon* dummyIcon2 = CGulIcon::NewLC(); + dummyArray->AppendL(dummyIcon); + dummyArray->AppendL(dummyIcon2); + ColumnData()->SetIconArray(dummyArray); + CleanupStack::Pop(3); } // --------------------------------------------------------- @@ -256,9 +270,9 @@ TAknTextLineLayout titleTextLayout = AknLayoutScalable_Apps::listrow_wgtman_pane_t1().LayoutLine(); - TAknLayoutText textLayout; - textLayout.LayoutText( itemRect, titleTextLayout ); - textLayout.DrawText( gc, wData.Name(), ETrue, textColor ); + TAknLayoutText textLayoutTitle; + textLayoutTitle.LayoutText( itemRect, titleTextLayout ); + textLayoutTitle.DrawText( gc, wData.Name(), ETrue, textColor ); if ( !wData.IsUninstalling() && wData.HsContentInfo().CanBeAdded() ) @@ -285,8 +299,9 @@ AknLayoutScalable_Apps::listrow_wgtman_pane_t2().LayoutLine(); gc.SetPenSize(TSize(1,1)); // DRAW DESCRIPTION TEXT - textLayout.LayoutText( itemRect, descTextLayout ); - textLayout.DrawText( gc, wData.Description(), ETrue, textColor ); + TAknLayoutText textLayoutDes; + textLayoutDes.LayoutText( itemRect, descTextLayout ); + textLayoutDes.DrawText( gc, wData.Description(), ETrue, textColor ); } else { @@ -523,7 +538,11 @@ // void CWmListBox::RedrawItem( TInt aItemIndex ) { - View()->DrawItem( aItemIndex ); + if ( aItemIndex >= 0 && + aItemIndex < Model()->NumberOfItems() ) + { + View()->DrawItem( aItemIndex ); + } } // --------------------------------------------------------- @@ -552,9 +571,6 @@ cellData, this ); CleanupStack::Pop(); // cellData - - // enable extended drawing - EnableExtendedDrawingL(); } // --------------------------------------------------------- @@ -690,22 +706,31 @@ // void CWmListBox::HandlePointerEventL( const TPointerEvent& aPointerEvent ) { - // Check if pointer is down ( needed for drawing correct hightlight frame ) + CAknDouble2LargeStyleListBox::HandlePointerEventL( aPointerEvent ); + + // Check if pointer is down ( needed for drawing correct hightlight frame ) if ( Rect().Contains( aPointerEvent.iPosition ) ) { - if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) - { - iPressedDown = ETrue; - RedrawItem( CurrentListBoxItemIndex() ); - } - else if( aPointerEvent.iType == TPointerEvent::EButton1Up ) - { - iPressedDown = EFalse; - RedrawItem( CurrentListBoxItemIndex() ); - } + TInt itemIndex = CurrentListBoxItemIndex(); + TBool itemPointed = View()->XYPosToItemIndex( + aPointerEvent.iPosition, + itemIndex ); + if ( itemIndex >= 0 && itemPointed ) + { + if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) + { + iPressedDown = ETrue; + // redraw item + RedrawItem( itemIndex ); + } + else if( aPointerEvent.iType == TPointerEvent::EButton1Up ) + { + iPressedDown = EFalse; + // redraw item + RedrawItem( itemIndex ); + } + } } - - CAknDouble2LargeStyleListBox::HandlePointerEventL( aPointerEvent ); } // ---------------------------------------------------------