diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c index e953178c78e..de31fa02539 100644 --- a/dlls/comctl32/datetime.c +++ b/dlls/comctl32/datetime.c @@ -954,30 +954,32 @@ DATETIME_Char (DATETIME_INFO *infoPtr, WPARAM vkCode, LPARAM keyData) int fieldNum = infoPtr->select & DTHT_DATEFIELD; if (vkCode >= '0' && vkCode <= '9') { + int num = vkCode-'0'; + /* this is a somewhat simplified version of what Windows does */ SYSTEMTIME *date = &infoPtr->date; switch (infoPtr->fieldspec[fieldNum]) { case ONEDIGITYEAR: case TWODIGITYEAR: date->wYear = date->wYear - (date->wYear%100) + - (date->wYear%10)*10 + (vkCode-'0'); + (date->wYear%10)*10 + num; date->wDayOfWeek = DATETIME_CalculateDayOfWeek( date->wDay,date->wMonth,date->wYear); DATETIME_SendDateTimeChangeNotify (infoPtr); break; case INVALIDFULLYEAR: case FULLYEAR: - date->wYear = (date->wYear%1000)*10 + (vkCode-'0'); + date->wYear = (date->wYear%1000)*10 + num; date->wDayOfWeek = DATETIME_CalculateDayOfWeek( date->wDay,date->wMonth,date->wYear); DATETIME_SendDateTimeChangeNotify (infoPtr); break; case ONEDIGITMONTH: case TWODIGITMONTH: - if ((date->wMonth%10) > 1 || (vkCode-'0') > 2) - date->wMonth = vkCode-'0'; + if ((date->wMonth%10) > 1 || num > 2) + date->wMonth = num; else - date->wMonth = (date->wMonth%10)*10+vkCode-'0'; + date->wMonth = (date->wMonth%10)*10+num; date->wDayOfWeek = DATETIME_CalculateDayOfWeek( date->wDay,date->wMonth,date->wYear); DATETIME_SendDateTimeChangeNotify (infoPtr); @@ -985,46 +987,46 @@ DATETIME_Char (DATETIME_INFO *infoPtr, WPARAM vkCode, LPARAM keyData) case ONEDIGITDAY: case TWODIGITDAY: /* probably better checking here would help */ - if ((date->wDay%10) >= 3 && (vkCode-'0') > 1) - date->wDay = vkCode-'0'; + if ((date->wDay%10) >= 3 && num > 1) + date->wDay = num; else - date->wDay = (date->wDay%10)*10+vkCode-'0'; + date->wDay = (date->wDay%10)*10+num; date->wDayOfWeek = DATETIME_CalculateDayOfWeek( date->wDay,date->wMonth,date->wYear); DATETIME_SendDateTimeChangeNotify (infoPtr); break; case ONEDIGIT12HOUR: case TWODIGIT12HOUR: - if ((date->wHour%10) > 1 || (vkCode-'0') > 2) - date->wHour = vkCode-'0'; + if ((date->wHour%10) > 1 || num > 2) + date->wHour = num; else - date->wHour = (date->wHour%10)*10+vkCode-'0'; + date->wHour = (date->wHour%10)*10+num; DATETIME_SendDateTimeChangeNotify (infoPtr); break; case ONEDIGIT24HOUR: case TWODIGIT24HOUR: if ((date->wHour%10) > 2) - date->wHour = vkCode-'0'; - else if ((date->wHour%10) == 2 && (vkCode-'0') > 3) - date->wHour = vkCode-'0'; + date->wHour = num; + else if ((date->wHour%10) == 2 && num > 3) + date->wHour = num; else - date->wHour = (date->wHour%10)*10+vkCode-'0'; + date->wHour = (date->wHour%10)*10+num; DATETIME_SendDateTimeChangeNotify (infoPtr); break; case ONEDIGITMINUTE: case TWODIGITMINUTE: if ((date->wMinute%10) > 5) - date->wMinute = vkCode-'0'; + date->wMinute = num; else - date->wMinute = (date->wMinute%10)*10+vkCode-'0'; + date->wMinute = (date->wMinute%10)*10+num; DATETIME_SendDateTimeChangeNotify (infoPtr); break; case ONEDIGITSECOND: case TWODIGITSECOND: if ((date->wSecond%10) > 5) - date->wSecond = vkCode-'0'; + date->wSecond = num; else - date->wSecond = (date->wSecond%10)*10+vkCode-'0'; + date->wSecond = (date->wSecond%10)*10+num; DATETIME_SendDateTimeChangeNotify (infoPtr); break; }