uifw/EikStd/coctlsrc/EIKLBX.CPP
branchRCL_3
changeset 13 a8834a2e9a96
parent 12 941195f2d488
child 15 c52421ed5f07
--- 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;
     }