diff -r 21239b3bcd78 -r 9711e452b5e9 calendarui/views/src/calenmonthcontainer.cpp --- a/calendarui/views/src/calenmonthcontainer.cpp Wed Apr 14 15:55:57 2010 +0300 +++ b/calendarui/views/src/calenmonthcontainer.cpp Tue Apr 27 16:36:22 2010 +0300 @@ -1051,6 +1051,7 @@ TRACE_ENTRY_POINT; iChangeMonth = EFalse; + iChangeDay = EFalse; iDayFormat = KMonthCellFormat; iMonthDataArray = new(ELeave) CMonthDataArray(KCalenDaysInWeek * KNumberOfRows); @@ -1673,6 +1674,10 @@ } TInt pointerIndex(-1); TBool isItem (iGrid->View()->XYPosToItemIndex(aPointerEvent.iPosition, pointerIndex)); + if( isItem ) + { + pointerIndex = static_cast(iGrid->View())->ActualDataIndex( pointerIndex ); + } CAknGridM* gridModel = static_cast(iGrid->Model()); if(gridModel->NumberOfData() <= 0) @@ -1705,7 +1710,7 @@ TPointerEvent pointerEvent( aPointerEvent ); pointerEvent.iModifiers = ( aPointerEvent.iModifiers & ( ~EAllModifiers ) ); - TInt index( iGrid->CurrentItemIndex() ); + TInt index( iGrid->CurrentDataIndex() ); TTime isValidDay; if( TPointerEvent::EButton1Up == aPointerEvent.iType ) { @@ -1735,15 +1740,15 @@ iDate + TTimeIntervalDays( pointerIndex - index ) ); TDateTime newActiveDayTime = newActiveDay.DateTime(); - // set the context - TCalTime time; - time.SetTimeLocalL( newActiveDay ); - iServices.Context().SetFocusDateL( time, - TVwsViewId( KUidCalendar, KUidCalenMonthView ) ); TMonth activeMonth( iDate.DateTime().Month() ); TMonth newMonth( newActiveDay.DateTime().Month() ); if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) { + // set the context + TCalTime time; + time.SetTimeLocalL( newActiveDay ); + iServices.Context().SetFocusDateL( time, + TVwsViewId( KUidCalendar, KUidCalenMonthView ) ); iGrid->HandlePointerEventL( pointerEvent ); if (iPreview) { @@ -1757,6 +1762,7 @@ iChangeMonth = ETrue; iGrid->View()->SetDisableRedraw(ETrue); iView->BeginRepopulationL(); + iDate = newActiveDay; } HandleDayChangeL( newActiveDay ); } @@ -1764,19 +1770,22 @@ else if ( activeMonth == newMonth && newActiveDay != iDate && !iChangeMonth ) { - iGrid->HandlePointerEventL( pointerEvent ); + iChangeDay = ETrue; // use grid index to make sure that correct grid // element is focused when dragged TInt gridIndex = GridIndex(); newActiveDay = ( iFirstDayOfGrid + TTimeIntervalDays( gridIndex ) ); - HandleDayChangeL( newActiveDay ); - iChangeMonth = EFalse; } } else if ( aPointerEvent.iType == TPointerEvent::EButton1Up ) { - iGrid->HandlePointerEventL( pointerEvent ); + if( !iChangeDay && !iChangeMonth ) + { + iGrid->HandlePointerEventL( pointerEvent ); + } + iChangeDay = EFalse; + iChangeMonth = EFalse; } } }