From f9e0447535f646cc8ed004d7c0453431b6d24aec Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Thu, 31 Mar 2011 14:04:15 -0500 Subject: [PATCH 2/3] comctl32: When entering a month or year, keep the day in range. --- dlls/comctl32/datetime.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c index bc643eb..fd97fdd 100644 --- a/dlls/comctl32/datetime.c +++ b/dlls/comctl32/datetime.c @@ -770,7 +770,7 @@ static void DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr) { int fieldNum = infoPtr->select & DTHT_DATEFIELD; - int i, val=0; + int i, val=0, clamp_day=0; SYSTEMTIME date = infoPtr->date; if (infoPtr->select == -1 || infoPtr->nCharsEntered == 0) @@ -785,14 +785,17 @@ DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr) case ONEDIGITYEAR: case TWODIGITYEAR: date.wYear = date.wYear - (date.wYear%100) + val; + clamp_day = 1; break; case INVALIDFULLYEAR: case FULLYEAR: date.wYear = val; + clamp_day = 1; break; case ONEDIGITMONTH: case TWODIGITMONTH: date.wMonth = val; + clamp_day = 1; break; case ONEDIGITDAY: case TWODIGITDAY: @@ -815,6 +818,9 @@ DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr) break; } + if (clamp_day && date.wDay > MONTHCAL_MonthLength(date.wMonth, date.wYear)) + date.wDay = MONTHCAL_MonthLength(date.wMonth, date.wYear); + if (DATETIME_SetSystemTime(infoPtr, GDT_VALID, &date)) DATETIME_SendDateTimeChangeNotify (infoPtr); } -- 1.7.1