diff -r 941195f2d488 -r a8834a2e9a96 uifw/EikStd/coctlsrc/EIKLBX.CPP --- a/uifw/EikStd/coctlsrc/EIKLBX.CPP Tue May 25 12:58:19 2010 +0300 +++ b/uifw/EikStd/coctlsrc/EIKLBX.CPP Wed Jun 09 09:58:37 2010 +0300 @@ -526,6 +526,11 @@ void DisableSingleClick(); /** + * Enables single click + */ + void EnableSingleClickL(); + + /** * Disables item specific menu. */ void DisableItemSpecificMenu(); @@ -757,6 +762,12 @@ * Ordinal position of listbox window, before stylus menu is opened. */ TInt iOldWinPos; + + /** + * If double click modifier is set on PointerEvent, the event may be ignored + * in some situation(To prevent extra dialog launched by AO). + */ + TBool iDoubleClickEventIgnored; private: CMatchBuffer* iBuffer; @@ -790,7 +801,7 @@ /** * Height of the list in pixels. */ - TInt iListBottomLimit; + TInt iListBottomLimit; }; // CEikListBoxExt @@ -1270,6 +1281,28 @@ _AKNTRACE_FUNC_EXIT; } +// ----------------------------------------------------------------------------- +// CListBoxExt::EnableSingleClickL +// ----------------------------------------------------------------------------- +// +void CListBoxExt::EnableSingleClickL() + { + _AKNTRACE_FUNC_ENTER; + if ( !iLongTapDetector ) + { + iLongTapDetector = CAknLongTapDetector::NewL( this ); + } + if ( !iItemActionMenu ) + { + iItemActionMenu = CAknItemActionMenu::RegisterCollectionL( + *this, &iListBox ); + iListBox.iListBoxFlags &= ( ~CEikListBox::EDisableItemSpecificMenu ); + } + iSingleClickEnabled = ETrue; + EnableHighlight( EFalse ); + // iListBox.UpdateHighlightL( iListBox.iView->CurrentItemIndex() ); + _AKNTRACE_FUNC_EXIT; + } // ----------------------------------------------------------------------------- // CListBoxExt::DisableItemSpecificMenu @@ -1299,8 +1332,9 @@ // Send event on down only if item specific items were found. // Long tap is also disabled if current item is not marked while // there are some marked items or marking mode is active. - if ( !( ( iListBox.MarkingMode() || MarkedItems() ) + if ( ( !( ( iListBox.MarkingMode() || MarkedItems() ) && !iListBox.View()->ItemIsSelected( iListBox.CurrentItemIndex() ) ) + || ( iListBox.iListBoxFlags & CEikListBox::EItemSpecificMenuAlwaysShown ) ) && ( aPointerEvent.iType != TPointerEvent::EButton1Down || iItemActionMenu->InitMenuL() ) ) { @@ -4192,6 +4226,11 @@ case MEikListBoxObserver::EEventFlickStarted: case MEikListBoxObserver::EEventPanningStarted: { + if ( iListBoxExt && ( iListBoxExt->iWorldSize.iHeight + <= iListBoxExt->iViewSize.iHeight ) ) + { + return; + } iItemDrawer->SetFlags( CListItemDrawer::EDisableMarquee ); if ( iListBoxExt ) { @@ -4210,6 +4249,11 @@ case MEikListBoxObserver::EEventFlickStopped: case MEikListBoxObserver::EEventPanningStopped: { + if ( iListBoxExt && ( iListBoxExt->iWorldSize.iHeight + <= iListBoxExt->iViewSize.iHeight ) ) + { + return; + } iItemDrawer->ClearFlags( CListItemDrawer::EDisableMarquee ); if ( iListBoxExt ) { @@ -4999,6 +5043,7 @@ } iListBoxExt->iFeedbackType = ETouchFeedbackList; + iListBoxExt->iDoubleClickEventIgnored = EFalse; if ( !iListBoxExt->iSingleClickEnabled && itemIndex != iView->CurrentItemIndex() ) @@ -5068,6 +5113,7 @@ if(Buffer()->iPressedIndex == itemIndex) { Buffer()->iPressedIndex = KEikListBoxInvalidIndex; + iListBoxExt->iDoubleClickEventIgnored = ETrue; _AKNTRACE_FUNC_EXIT; return; } @@ -5350,7 +5396,7 @@ ( !( ( iListBoxFlags & EViewerFlag ) && ( iListBoxFlags & EDisableItemSpecificMenu ) ) )&& ( iListBoxExt->iLastDownTappedItem == itemIndex ) && - (Buffer()->iPressedIndex != KEikListBoxInvalidIndex) && + ( !iListBoxExt->iDoubleClickEventIgnored ) && itemIndex == iView->CurrentItemIndex() ) { TTouchLogicalFeedback fbType = ETouchFeedbackList; @@ -5411,7 +5457,8 @@ } if ( !s60StyleMultiselection ) { - if ( !iListBoxExt->iSingleClickEnabled ) + if ( !iListBoxExt->iSingleClickEnabled && + itemIndex == iListBoxExt->iLastDownTappedItem ) { ReportListBoxEventL(MEikListBoxObserver::EEventItemClicked); } @@ -6596,6 +6643,14 @@ iListBoxExt->DisableSingleClick(); iItemDrawer->ClearFlags( CListItemDrawer::ESingleClickEnabled); } + else if ( !aDisabled && + iListBoxExt && + !iListBoxExt->iSingleClickEnabled && + iItemDrawer ) + { + TRAP_IGNORE( iListBoxExt->EnableSingleClickL() ); + iItemDrawer->SetFlags( CListItemDrawer::ESingleClickEnabled ); + } _AKNTRACE_FUNC_EXIT; }