comctl32/monthcal: Get rid of stored current selection date, it's always synced with lower bound.

This commit is contained in:
Nikolay Sivov 2010-08-02 09:36:12 +04:00 committed by Alexandre Julliard
parent 516c322ecc
commit db10fb8301

View File

@ -122,9 +122,8 @@ typedef struct
int status; /* See MC_SEL flags */ int status; /* See MC_SEL flags */
SYSTEMTIME firstSel; /* first selected day */ SYSTEMTIME firstSel; /* first selected day */
INT maxSelCount; INT maxSelCount;
SYSTEMTIME minSel; SYSTEMTIME minSel; /* contains single selection when used without MCS_MULTISELECT */
SYSTEMTIME maxSel; SYSTEMTIME maxSel;
SYSTEMTIME curSel; /* contains currently selected year, month and day */
SYSTEMTIME focusedSel; /* date currently focused with mouse movement */ SYSTEMTIME focusedSel; /* date currently focused with mouse movement */
DWORD rangeValid; DWORD rangeValid;
SYSTEMTIME minDate; SYSTEMTIME minDate;
@ -530,7 +529,7 @@ static int MONTHCAL_CalcDayFromPos(const MONTHCAL_INFO *infoPtr, int x, int y,
{ {
int retval, firstDay; int retval, firstDay;
RECT rcClient; RECT rcClient;
SYSTEMTIME st = infoPtr->curSel; SYSTEMTIME st = infoPtr->minSel;
GetClientRect(infoPtr->hwndSelf, &rcClient); GetClientRect(infoPtr->hwndSelf, &rcClient);
@ -560,18 +559,18 @@ static int MONTHCAL_CalcDayFromPos(const MONTHCAL_INFO *infoPtr, int x, int y,
static void MONTHCAL_CalcDayXY(const MONTHCAL_INFO *infoPtr, static void MONTHCAL_CalcDayXY(const MONTHCAL_INFO *infoPtr,
const SYSTEMTIME *date, int *x, int *y) const SYSTEMTIME *date, int *x, int *y)
{ {
SYSTEMTIME st = infoPtr->curSel; SYSTEMTIME st = infoPtr->minSel;
LONG cmp; LONG cmp;
int first; int first;
st.wDay = 1; st.wDay = 1;
first = (MONTHCAL_CalculateDayOfWeek(&st, FALSE) + 6 - infoPtr->firstDay) % 7; first = (MONTHCAL_CalculateDayOfWeek(&st, FALSE) + 6 - infoPtr->firstDay) % 7;
cmp = MONTHCAL_CompareMonths(date, &infoPtr->curSel); cmp = MONTHCAL_CompareMonths(date, &infoPtr->minSel);
/* previous month */ /* previous month */
if(cmp == -1) { if(cmp == -1) {
*x = (first - MONTHCAL_MonthLength(date->wMonth, infoPtr->curSel.wYear) + date->wDay) % 7; *x = (first - MONTHCAL_MonthLength(date->wMonth, infoPtr->minSel.wYear) + date->wDay) % 7;
*y = 0; *y = 0;
return; return;
} }
@ -579,7 +578,7 @@ static void MONTHCAL_CalcDayXY(const MONTHCAL_INFO *infoPtr,
/* next month calculation is same as for current, /* next month calculation is same as for current,
just add current month length */ just add current month length */
if(cmp == 1) { if(cmp == 1) {
first += MONTHCAL_MonthLength(infoPtr->curSel.wMonth, infoPtr->curSel.wYear); first += MONTHCAL_MonthLength(infoPtr->minSel.wMonth, infoPtr->minSel.wYear);
} }
*x = (date->wDay + first) % 7; *x = (date->wDay + first) % 7;
@ -760,6 +759,7 @@ static void MONTHCAL_PaintTitle(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRU
{ {
static const WCHAR fmt_monthW[] = { '%','s',' ','%','l','d',0 }; static const WCHAR fmt_monthW[] = { '%','s',' ','%','l','d',0 };
RECT *title = &infoPtr->calendars[calIdx].title; RECT *title = &infoPtr->calendars[calIdx].title;
const SYSTEMTIME *st = &infoPtr->calendars[calIdx].month;
WCHAR buf_month[80], buf_fmt[80]; WCHAR buf_month[80], buf_fmt[80];
HBRUSH hbr; HBRUSH hbr;
SIZE sz; SIZE sz;
@ -774,10 +774,10 @@ static void MONTHCAL_PaintTitle(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRU
SetTextColor(hdc, infoPtr->titletxt); SetTextColor(hdc, infoPtr->titletxt);
SelectObject(hdc, infoPtr->hBoldFont); SelectObject(hdc, infoPtr->hBoldFont);
GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SMONTHNAME1+infoPtr->curSel.wMonth-1, GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SMONTHNAME1 + st->wMonth - 1,
buf_month, countof(buf_month)); buf_month, countof(buf_month));
wsprintfW(buf_fmt, fmt_monthW, buf_month, infoPtr->curSel.wYear); wsprintfW(buf_fmt, fmt_monthW, buf_month, st->wYear);
DrawTextW(hdc, buf_fmt, strlenW(buf_fmt), title, DrawTextW(hdc, buf_fmt, strlenW(buf_fmt), title,
DT_CENTER | DT_VCENTER | DT_SINGLELINE); DT_CENTER | DT_VCENTER | DT_SINGLELINE);
@ -793,20 +793,21 @@ static void MONTHCAL_PaintTitle(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRU
static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps, INT calIdx) static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps, INT calIdx)
{ {
const SYSTEMTIME *date = &infoPtr->calendars[calIdx].month;
static const WCHAR fmt_weekW[] = { '%','d',0 }; static const WCHAR fmt_weekW[] = { '%','d',0 };
INT mindays, weeknum, weeknum1, startofprescal; INT mindays, weeknum, weeknum1, startofprescal;
SYSTEMTIME st = infoPtr->curSel;
RECT r;
WCHAR buf[80];
INT i, prev_month; INT i, prev_month;
SYSTEMTIME st;
WCHAR buf[80];
RECT r;
if (!(infoPtr->dwStyle & MCS_WEEKNUMBERS)) return; if (!(infoPtr->dwStyle & MCS_WEEKNUMBERS)) return;
MONTHCAL_GetMinDate(infoPtr, &st); MONTHCAL_GetMinDate(infoPtr, &st);
startofprescal = st.wDay; startofprescal = st.wDay;
st = infoPtr->curSel; st = *date;
prev_month = infoPtr->curSel.wMonth - 1; prev_month = date->wMonth - 1;
if(prev_month == 0) prev_month = 12; if(prev_month == 0) prev_month = 12;
/* /*
@ -833,7 +834,7 @@ static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, con
mindays = 0; mindays = 0;
} }
if (infoPtr->curSel.wMonth == 1) if (date->wMonth == 1)
{ {
/* calculate all those exceptions for january */ /* calculate all those exceptions for january */
st.wDay = st.wMonth = 1; st.wDay = st.wMonth = 1;
@ -844,7 +845,7 @@ static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, con
{ {
weeknum = 0; weeknum = 0;
for(i = 0; i < 11; i++) for(i = 0; i < 11; i++)
weeknum += MONTHCAL_MonthLength(i+1, infoPtr->curSel.wYear - 1); weeknum += MONTHCAL_MonthLength(i+1, date->wYear - 1);
weeknum += startofprescal + 7; weeknum += startofprescal + 7;
weeknum /= 7; weeknum /= 7;
@ -857,7 +858,7 @@ static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, con
{ {
weeknum = 0; weeknum = 0;
for(i = 0; i < prev_month - 1; i++) for(i = 0; i < prev_month - 1; i++)
weeknum += MONTHCAL_MonthLength(i+1, infoPtr->curSel.wYear); weeknum += MONTHCAL_MonthLength(i+1, date->wYear);
weeknum += startofprescal + 7; weeknum += startofprescal + 7;
weeknum /= 7; weeknum /= 7;
@ -929,8 +930,8 @@ static void MONTHCAL_PaintTodayTitle(const MONTHCAL_INFO *infoPtr, HDC hdc, cons
/* today mark + focus */ /* today mark + focus */
static void MONTHCAL_PaintFocusAndCircle(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps) static void MONTHCAL_PaintFocusAndCircle(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps)
{ {
if((infoPtr->curSel.wMonth == infoPtr->todaysDate.wMonth) && if((infoPtr->minSel.wMonth == infoPtr->todaysDate.wMonth) &&
(infoPtr->curSel.wYear == infoPtr->todaysDate.wYear) && (infoPtr->minSel.wYear == infoPtr->todaysDate.wYear) &&
!(infoPtr->dwStyle & MCS_NOTODAYCIRCLE)) !(infoPtr->dwStyle & MCS_NOTODAYCIRCLE))
{ {
MONTHCAL_CircleDay(infoPtr, hdc, &infoPtr->todaysDate); MONTHCAL_CircleDay(infoPtr, hdc, &infoPtr->todaysDate);
@ -947,12 +948,13 @@ static void MONTHCAL_PaintFocusAndCircle(const MONTHCAL_INFO *infoPtr, HDC hdc,
/* paint a calendar area */ /* paint a calendar area */
static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps, INT calIdx) static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps, INT calIdx)
{ {
const SYSTEMTIME *date = &infoPtr->calendars[calIdx].month;
INT prev_month, i, j; INT prev_month, i, j;
RECT r, fill_bk_rect;
SYSTEMTIME st;
WCHAR buf[80]; WCHAR buf[80];
HBRUSH hbr; HBRUSH hbr;
RECT r, fill_bk_rect;
int mask; int mask;
SYSTEMTIME st;
/* fill whole days area - from week days area to today note rectangle */ /* fill whole days area - from week days area to today note rectangle */
fill_bk_rect = infoPtr->calendars[calIdx].wdays; fill_bk_rect = infoPtr->calendars[calIdx].wdays;
@ -969,7 +971,7 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const
LineTo(hdc, infoPtr->calendars[calIdx].days.right - 3, LineTo(hdc, infoPtr->calendars[calIdx].days.right - 3,
infoPtr->calendars[calIdx].title.bottom + infoPtr->textHeight + 1); infoPtr->calendars[calIdx].title.bottom + infoPtr->textHeight + 1);
prev_month = infoPtr->curSel.wMonth - 1; prev_month = date->wMonth - 1;
if (prev_month == 0) prev_month = 12; if (prev_month == 0) prev_month = 12;
infoPtr->calendars[calIdx].wdays.left = infoPtr->calendars[calIdx].days.left = infoPtr->calendars[calIdx].wdays.left = infoPtr->calendars[calIdx].days.left =
@ -1003,7 +1005,7 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const
MONTHCAL_GetMinDate(infoPtr, &st); MONTHCAL_GetMinDate(infoPtr, &st);
mask = 1 << (st.wDay-1); mask = 1 << (st.wDay-1);
while(st.wDay <= MONTHCAL_MonthLength(prev_month, infoPtr->curSel.wYear)) while(st.wDay <= MONTHCAL_MonthLength(prev_month, date->wYear))
{ {
MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[0] & mask, ps); MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[0] & mask, ps);
mask <<= 1; mask <<= 1;
@ -1014,7 +1016,7 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const
/* draw next month */ /* draw next month */
if (calIdx == infoPtr->cal_num - 1) if (calIdx == infoPtr->cal_num - 1)
{ {
st = infoPtr->curSel; st = *date;
st.wDay = 1; st.wDay = 1;
MONTHCAL_GetNextMonth(&st); MONTHCAL_GetNextMonth(&st);
MONTHCAL_GetMaxDate(infoPtr, &st_max); MONTHCAL_GetMaxDate(infoPtr, &st_max);
@ -1031,10 +1033,11 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const
/* 3. current month */ /* 3. current month */
SetTextColor(hdc, infoPtr->txt); SetTextColor(hdc, infoPtr->txt);
st = infoPtr->curSel; st = *date;
st.wDay = 1; st.wDay = 1;
mask = 1; mask = 1;
while(st.wDay <= MONTHCAL_MonthLength(infoPtr->curSel.wMonth, infoPtr->curSel.wYear)) { while(st.wDay <= MONTHCAL_MonthLength(date->wMonth, date->wYear))
{
MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[1] & mask, ps); MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[1] & mask, ps);
mask <<= 1; mask <<= 1;
st.wDay++; st.wDay++;
@ -1409,7 +1412,7 @@ MONTHCAL_GetCurSel(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel)
if(!curSel) return FALSE; if(!curSel) return FALSE;
if(infoPtr->dwStyle & MCS_MULTISELECT) return FALSE; if(infoPtr->dwStyle & MCS_MULTISELECT) return FALSE;
*curSel = infoPtr->curSel; *curSel = infoPtr->minSel;
TRACE("%d/%d/%d\n", curSel->wYear, curSel->wMonth, curSel->wDay); TRACE("%d/%d/%d\n", curSel->wYear, curSel->wMonth, curSel->wDay);
return TRUE; return TRUE;
} }
@ -1417,7 +1420,8 @@ MONTHCAL_GetCurSel(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel)
static LRESULT static LRESULT
MONTHCAL_SetCurSel(MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel) MONTHCAL_SetCurSel(MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel)
{ {
SYSTEMTIME prev = infoPtr->curSel; SYSTEMTIME prev = infoPtr->minSel;
WORD day;
TRACE("%p\n", curSel); TRACE("%p\n", curSel);
if(!curSel) return FALSE; if(!curSel) return FALSE;
@ -1425,21 +1429,23 @@ MONTHCAL_SetCurSel(MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel)
if(!MONTHCAL_ValidateDate(curSel)) return FALSE; if(!MONTHCAL_ValidateDate(curSel)) return FALSE;
/* exit earlier if selection equals current */ /* exit earlier if selection equals current */
if (MONTHCAL_IsDateEqual(&infoPtr->curSel, curSel)) return TRUE; if (MONTHCAL_IsDateEqual(&infoPtr->minSel, curSel)) return TRUE;
if(!MONTHCAL_IsDateInValidRange(infoPtr, curSel, FALSE)) return FALSE; if(!MONTHCAL_IsDateInValidRange(infoPtr, curSel, FALSE)) return FALSE;
infoPtr->calendars[0].month = *curSel;
infoPtr->minSel = *curSel; infoPtr->minSel = *curSel;
infoPtr->maxSel = *curSel; infoPtr->maxSel = *curSel;
/* if selection is still in current month, reduce rectangle */ /* if selection is still in current month, reduce rectangle */
day = prev.wDay;
prev.wDay = curSel->wDay; prev.wDay = curSel->wDay;
if (MONTHCAL_IsDateEqual(&prev, curSel)) if (MONTHCAL_IsDateEqual(&prev, curSel))
{ {
RECT r_prev, r_new; RECT r_prev, r_new;
/* note that infoPtr->curSel isn't updated yet */ prev.wDay = day;
MONTHCAL_CalcPosFromDay(infoPtr, &infoPtr->curSel, &r_prev); MONTHCAL_CalcPosFromDay(infoPtr, &prev, &r_prev);
MONTHCAL_CalcPosFromDay(infoPtr, curSel, &r_new); MONTHCAL_CalcPosFromDay(infoPtr, curSel, &r_new);
InvalidateRect(infoPtr->hwndSelf, &r_prev, FALSE); InvalidateRect(infoPtr->hwndSelf, &r_prev, FALSE);
@ -1448,9 +1454,6 @@ MONTHCAL_SetCurSel(MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel)
else else
InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
infoPtr->curSel = *curSel;
infoPtr->calendars[0].month = *curSel;
return TRUE; return TRUE;
} }
@ -1529,13 +1532,11 @@ MONTHCAL_SetSelRange(MONTHCAL_INFO *infoPtr, SYSTEMTIME *range)
infoPtr->minSel = range[1]; infoPtr->minSel = range[1];
infoPtr->maxSel = range[0]; infoPtr->maxSel = range[0];
} }
infoPtr->curSel = infoPtr->minSel;
infoPtr->calendars[0].month = infoPtr->minSel; infoPtr->calendars[0].month = infoPtr->minSel;
/* update day of week */ /* update day of week */
MONTHCAL_CalculateDayOfWeek(&infoPtr->minSel, TRUE); MONTHCAL_CalculateDayOfWeek(&infoPtr->minSel, TRUE);
MONTHCAL_CalculateDayOfWeek(&infoPtr->maxSel, TRUE); MONTHCAL_CalculateDayOfWeek(&infoPtr->maxSel, TRUE);
MONTHCAL_CalculateDayOfWeek(&infoPtr->curSel, TRUE);
/* redraw if bounds changed */ /* redraw if bounds changed */
/* FIXME: no actual need to redraw everything */ /* FIXME: no actual need to redraw everything */
@ -1763,8 +1764,8 @@ static void MONTHCAL_NotifyDayState(MONTHCAL_INFO *infoPtr)
nmds.prgDayState = Alloc(infoPtr->monthRange * sizeof(MONTHDAYSTATE)); nmds.prgDayState = Alloc(infoPtr->monthRange * sizeof(MONTHDAYSTATE));
nmds.stStart = infoPtr->todaysDate; nmds.stStart = infoPtr->todaysDate;
nmds.stStart.wYear = infoPtr->curSel.wYear; nmds.stStart.wYear = infoPtr->minSel.wYear;
nmds.stStart.wMonth = infoPtr->curSel.wMonth; nmds.stStart.wMonth = infoPtr->minSel.wMonth;
nmds.stStart.wDay = 1; nmds.stStart.wDay = 1;
SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, nmds.nmhdr.idFrom, (LPARAM)&nmds); SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, nmds.nmhdr.idFrom, (LPARAM)&nmds);
@ -1843,7 +1844,6 @@ MONTHCAL_RButtonUp(MONTHCAL_INFO *infoPtr, LPARAM lParam)
if( TrackPopupMenu(hMenu, TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD, if( TrackPopupMenu(hMenu, TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD,
menupoint.x, menupoint.y, 0, infoPtr->hwndSelf, NULL)) menupoint.x, menupoint.y, 0, infoPtr->hwndSelf, NULL))
{ {
infoPtr->curSel = infoPtr->todaysDate;
infoPtr->calendars[0].month = infoPtr->todaysDate; infoPtr->calendars[0].month = infoPtr->todaysDate;
infoPtr->minSel = infoPtr->todaysDate; infoPtr->minSel = infoPtr->todaysDate;
infoPtr->maxSel = infoPtr->todaysDate; infoPtr->maxSel = infoPtr->todaysDate;
@ -1923,7 +1923,7 @@ static void MONTHCAL_EditYear(MONTHCAL_INFO *infoPtr)
SendMessageW(infoPtr->hWndYearUpDown, UDM_SETRANGE, 0, SendMessageW(infoPtr->hWndYearUpDown, UDM_SETRANGE, 0,
MAKELONG(max_allowed_date.wYear, min_allowed_date.wYear)); MAKELONG(max_allowed_date.wYear, min_allowed_date.wYear));
SendMessageW(infoPtr->hWndYearUpDown, UDM_SETBUDDY, (WPARAM)infoPtr->hWndYearEdit, 0); SendMessageW(infoPtr->hWndYearUpDown, UDM_SETBUDDY, (WPARAM)infoPtr->hWndYearEdit, 0);
SendMessageW(infoPtr->hWndYearUpDown, UDM_SETPOS, 0, infoPtr->curSel.wYear); SendMessageW(infoPtr->hWndYearUpDown, UDM_SETPOS, 0, infoPtr->minSel.wYear);
/* subclass edit box */ /* subclass edit box */
infoPtr->EditWndProc = (WNDPROC)SetWindowLongPtrW(infoPtr->hWndYearEdit, infoPtr->EditWndProc = (WNDPROC)SetWindowLongPtrW(infoPtr->hWndYearEdit,
@ -1990,10 +1990,10 @@ MONTHCAL_LButtonDown(MONTHCAL_INFO *infoPtr, LPARAM lParam)
i = TrackPopupMenu(hMenu,TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RIGHTBUTTON | TPM_RETURNCMD, i = TrackPopupMenu(hMenu,TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RIGHTBUTTON | TPM_RETURNCMD,
menupoint.x, menupoint.y, 0, infoPtr->hwndSelf, NULL); menupoint.x, menupoint.y, 0, infoPtr->hwndSelf, NULL);
if ((i > 0) && (i < 13) && infoPtr->curSel.wMonth != i) if ((i > 0) && (i < 13) && infoPtr->minSel.wMonth != i)
{ {
infoPtr->curSel.wMonth = i; infoPtr->minSel.wMonth = i;
MONTHCAL_IsDateInValidRange(infoPtr, &infoPtr->curSel, TRUE); MONTHCAL_IsDateInValidRange(infoPtr, &infoPtr->minSel, TRUE);
InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
} }
return 0; return 0;
@ -2005,7 +2005,6 @@ MONTHCAL_LButtonDown(MONTHCAL_INFO *infoPtr, LPARAM lParam)
} }
case MCHT_TODAYLINK: case MCHT_TODAYLINK:
{ {
infoPtr->curSel = infoPtr->todaysDate;
infoPtr->calendars[0].month = infoPtr->todaysDate; infoPtr->calendars[0].month = infoPtr->todaysDate;
infoPtr->minSel = infoPtr->todaysDate; infoPtr->minSel = infoPtr->todaysDate;
infoPtr->maxSel = infoPtr->todaysDate; infoPtr->maxSel = infoPtr->todaysDate;
@ -2078,7 +2077,7 @@ MONTHCAL_LButtonUp(MONTHCAL_INFO *infoPtr, LPARAM lParam)
if((hit & MCHT_CALENDARDATE) == MCHT_CALENDARDATE) if((hit & MCHT_CALENDARDATE) == MCHT_CALENDARDATE)
{ {
SYSTEMTIME sel = infoPtr->curSel; SYSTEMTIME sel = infoPtr->minSel;
/* will be invalidated here */ /* will be invalidated here */
MONTHCAL_SetCurSel(infoPtr, &ht.st); MONTHCAL_SetCurSel(infoPtr, &ht.st);
@ -2518,7 +2517,6 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs)
infoPtr->minSel = infoPtr->todaysDate; infoPtr->minSel = infoPtr->todaysDate;
infoPtr->maxSel = infoPtr->todaysDate; infoPtr->maxSel = infoPtr->todaysDate;
infoPtr->curSel = infoPtr->todaysDate;
infoPtr->calendars[0].month = infoPtr->todaysDate; infoPtr->calendars[0].month = infoPtr->todaysDate;
infoPtr->isUnicode = TRUE; infoPtr->isUnicode = TRUE;
@ -2568,9 +2566,9 @@ MONTHCAL_Notify(MONTHCAL_INFO *infoPtr, NMHDR *hdr)
if (hdr->hwndFrom == infoPtr->hWndYearUpDown) if (hdr->hwndFrom == infoPtr->hWndYearUpDown)
{ {
/* year value limits are set up explicitly after updown creation */ /* year value limits are set up explicitly after updown creation */
if ((nmud->iDelta + nmud->iPos) != infoPtr->curSel.wYear) if ((nmud->iDelta + nmud->iPos) != infoPtr->minSel.wYear)
{ {
SYSTEMTIME new_date = infoPtr->curSel; SYSTEMTIME new_date = infoPtr->minSel;
new_date.wYear = nmud->iDelta + nmud->iPos; new_date.wYear = nmud->iDelta + nmud->iPos;
MONTHCAL_SetCurSel(infoPtr, &new_date); MONTHCAL_SetCurSel(infoPtr, &new_date);