javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swttablelistbox.cpp
branchRCL_3
changeset 19 71c436fe3ce0
parent 17 0fd27995241b
--- a/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swttablelistbox.cpp	Tue May 25 12:34:19 2010 +0300
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swttablelistbox.cpp	Wed Jun 09 09:34:07 2010 +0300
@@ -668,8 +668,34 @@
     // Deliver event to scrollbar
     if (iVScrollBarGrabsPointerEvents && vsb)
     {
-        vsb->HandlePointerEventL(aPointerEvent);
+        if (!iFlickScrollingOngoing
+                && aPointerEvent.iType == TPointerEvent::EButton1Down)
+        {
+            // Scrollbar was tapped after scrolling stopped
+            // by itself, so no need to redirect events
+            iScrollbarPointerEventToListbox = EFalse;
+        }
+
+        if (iScrollbarPointerEventToListbox)
+        {
+            // Stops kinetic scrolling when scrollbar is tapped
+            CEikTextListBox::HandlePointerEventL(aPointerEvent);
+            // Continue delivering events until button up appears to prevent
+            // some unexpected behavior in both scrollbar and listbox
+            switch (aPointerEvent.iType)
+            {
+            case TPointerEvent::EButton1Up:
+                iScrollbarPointerEventToListbox = EFalse;
+                break;
+            }
+        }
+        else
+        {
+            // Handles scrollbar behavior
+            vsb->HandlePointerEventL(aPointerEvent);
+        }
     }
+
     if (iHScrollBarGrabsPointerEvents && hsb)
     {
         hsb->HandlePointerEventL(aPointerEvent);
@@ -869,6 +895,8 @@
         return;
     }
 
+    UpdateFlickScrollingState(aEventType);
+
     switch (aEventType)
     {
         // On 5.0, drawing trough Java gives simply a better fps.
@@ -1130,7 +1158,9 @@
 
 CSwtTableListBox::CSwtTableListBox(MSwtDisplay& aDisplay, CSwtTable &aTable)
         : iDisplay(aDisplay),
-        iTable(aTable)
+        iTable(aTable),
+        iFlickScrollingOngoing(EFalse)
+
 {
 }
 
@@ -1190,3 +1220,22 @@
 {
     return iTable.ClientRect().Width();
 }
+
+// ---------------------------------------------------------------------------
+// CSwtTableListBox::UpdateFlickScrollingState
+// Updates flick scrolling status based on received listbox event.
+// ---------------------------------------------------------------------------
+//
+void CSwtTableListBox::UpdateFlickScrollingState(TListBoxEvent aEventType)
+{
+    switch (aEventType)
+    {
+    case EEventFlickStarted:
+        iFlickScrollingOngoing = ETrue;
+        iScrollbarPointerEventToListbox = ETrue;
+        break;
+    case EEventFlickStopped:
+        iFlickScrollingOngoing = EFalse;
+        break;
+    }
+}