From: Vadim Zeitlin Date: Tue, 5 Aug 2008 01:22:19 +0000 (+0000) Subject: fix bug in Mark() which highlighted the day not only in the currently shown month... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/52980340f486ea7af1b606ea2f3e4921b5dc9764?hp=1c3e52af4b9f940848edd92caf2ddffc3d6aff64 fix bug in Mark() which highlighted the day not only in the currently shown month but also in adjancet ones (see #9155) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54970 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/calctrl.cpp b/src/msw/calctrl.cpp index 90faa55f47..cf1179b8aa 100644 --- a/src/msw/calctrl.cpp +++ b/src/msw/calctrl.cpp @@ -329,12 +329,20 @@ void wxCalendarCtrl::Mark(size_t day, bool mark) void wxCalendarCtrl::UpdateMarks() { - MONTHDAYSTATE states[3]; + // we show only one full month but there can be some days from the month + // before it and from the one after it so days from 3 different months can + // be partially shown + MONTHDAYSTATE states[3] = { 0 }; const int nMonths = MonthCal_GetMonthRange(GetHwnd(), GMR_DAYSTATE, NULL); - wxCHECK_RET( nMonths <= (int)WXSIZEOF(states), "unexpected months range" ); - for ( int i = 0; i < nMonths; i++ ) - states[i] = m_marks; + // although in principle the calendar might not show any days from the + // preceding months, it seems like it always does, consider e.g. Feb 2010 + // which starts on Monday and ends on Sunday and so could fit on 4 lines + // without showing any subsequent months -- the standard control still + // shows it on 6 lines and the number of visible months is still 3 + wxCHECK_RET( nMonths == (int)WXSIZEOF(states), "unexpected months range" ); + + states[1] = m_marks; // the fully visible month is the one in the middle if ( !MonthCal_SetDayState(GetHwnd(), nMonths, states) ) {