--- a/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtlistview.cpp Tue May 25 12:34:19 2010 +0300
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtlistview.cpp Wed Jun 09 09:34:07 2010 +0300
@@ -143,7 +143,9 @@
iWidthOfSpaceBetweenItems(0),
iHeightOfSpaceBetweenItems(0),
iDensity(EMediumListViewDensity), // must match Java-side default
- iIsGridCellLayoutNeeded(EFalse)
+ iIsGridCellLayoutNeeded(EFalse),
+ iFlickScrollingOngoing(EFalse)
+
{
// Default to horizontal layout orientation (vertical scrollbar)
//if( iStyle & KSwtStyleVertical )
@@ -1620,8 +1622,11 @@
//
void CSwtListView::FocusChanged(TDrawNow aDrawNow)
{
- TBool focused = IsFocused();
- iGrid->SetFocus(focused);
+ TBool isFocused = IsFocused();
+#ifdef RD_JAVA_S60_RELEASE_9_2
+ EnableFocusHighlight(isFocused);
+#endif //RD_JAVA_S60_RELEASE_9_2
+ iGrid->SetFocus(isFocused);
HandleFocusChanged(aDrawNow);
}
@@ -2653,6 +2658,14 @@
//
void CSwtListView::ProcessKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
{
+#ifdef RD_JAVA_S60_RELEASE_9_2
+ if (aType == EEventKeyDown)
+ {
+ // After panning focus highlight was disabled, so enabling again
+ EnableFocusHighlight(ETrue);
+ }
+#endif //RD_JAVA_S60_RELEASE_9_2
+
if (GetItemCount() == 0)
{
iGrid->OfferKeyEventL(aKeyEvent, aType);
@@ -3040,6 +3053,8 @@
return;
}
+ UpdateFlickScrollingState(aEventType);
+
switch (aEventType)
{
// On 5.0, drawing trough Java gives simply a better fps.
@@ -3492,7 +3507,32 @@
// 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
+ iGrid->ForwardPointerEventL(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);
+ }
}
// Deliver event to list
@@ -3574,6 +3614,8 @@
{
iVScrollBarGrabsPointerEvents = EFalse;
}
+
+ PostMouseEventL(aPointerEvent);
}
// ---------------------------------------------------------------------------
@@ -3587,6 +3629,36 @@
}
#endif // RD_SCALABLE_UI_V2
+
+#ifdef RD_JAVA_S60_RELEASE_9_2
+// ---------------------------------------------------------------------------
+// CSwtListView::EnableFocusHighlight
+// From MSwtControl
+// ---------------------------------------------------------------------------
+//
+void CSwtListView::EnableFocusHighlight(TBool aEnable)
+{
+ ASSERT(iGrid);
+ ASSERT(iGrid->View());
+
+ CListItemDrawer* itemDrawer = iGrid->View()->ItemDrawer();
+ if (itemDrawer)
+ {
+ TInt disabledHighlight =
+ itemDrawer->Flags() & CListItemDrawer::EDisableHighlight;
+
+ if (aEnable && disabledHighlight)
+ {
+ itemDrawer->ClearFlags(CListItemDrawer::EDisableHighlight);
+ }
+ else if (!aEnable && !disabledHighlight)
+ {
+ itemDrawer->SetFlags(CListItemDrawer::EDisableHighlight);
+ }
+ }
+}
+#endif //RD_JAVA_S60_RELEASE_9_2
+
#ifdef RD_JAVA_ADVANCED_TACTILE_FEEDBACK
void CSwtListView::DoControlSpecificFeedback(
const TBool& aFirstTap,
@@ -3609,3 +3681,21 @@
}
#endif //RD_JAVA_ADVANCED_TACTILE_FEEDBACK
+// ---------------------------------------------------------------------------
+// CSwtTableListBox::UpdateFlickScrollingState
+// Updates flick scrolling status based on received listbox event.
+// ---------------------------------------------------------------------------
+//
+void CSwtListView::UpdateFlickScrollingState(TListBoxEvent aEventType)
+{
+ switch (aEventType)
+ {
+ case EEventFlickStarted:
+ iFlickScrollingOngoing = ETrue;
+ iScrollbarPointerEventToListbox = ETrue;
+ break;
+ case EEventFlickStopped:
+ iFlickScrollingOngoing = EFalse;
+ break;
+ }
+}