Module: wine Branch: master Commit: 74d1c11684b91cb88c663b016f423876ab8c028f URL: http://source.winehq.org/git/wine.git/?a=commit;h=74d1c11684b91cb88c663b016f...
Author: Owen Rudge orudge@codeweavers.com Date: Thu Mar 8 11:34:33 2012 +0000
comctl32/datetime: Allow entering 'AM' or 'PM' via keyboard.
---
dlls/comctl32/datetime.c | 35 ++++++++++++++++++++++++++++------- 1 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c index f29b2d2..f65691e 100644 --- a/dlls/comctl32/datetime.c +++ b/dlls/comctl32/datetime.c @@ -852,8 +852,13 @@ DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr) if (infoPtr->select == -1 || infoPtr->nCharsEntered == 0) return;
- for (i=0; i<infoPtr->nCharsEntered; i++) - val = val * 10 + infoPtr->charsEntered[i] - '0'; + if ((infoPtr->fieldspec[fieldNum] == ONELETTERAMPM) || + (infoPtr->fieldspec[fieldNum] == TWOLETTERAMPM)) + val = infoPtr->charsEntered[0]; + else { + for (i=0; i<infoPtr->nCharsEntered; i++) + val = val * 10 + infoPtr->charsEntered[i] - '0'; + }
infoPtr->nCharsEntered = 0;
@@ -904,6 +909,16 @@ DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr) case TWODIGITSECOND: date.wSecond = val; break; + case ONELETTERAMPM: + case TWOLETTERAMPM: + if (val == 'a' || val == 'A') { + if (date.wHour >= 12) + date.wHour -= 12; + } else if (val == 'p' || val == 'P') { + if (date.wHour < 12) + date.wHour += 12; + } + break; }
if (clamp_day && date.wDay > MONTHCAL_MonthLength(date.wMonth, date.wYear)) @@ -1197,16 +1212,21 @@ DATETIME_KeyDown (DATETIME_INFO *infoPtr, DWORD vkCode) static LRESULT DATETIME_Char (DATETIME_INFO *infoPtr, WPARAM vkCode) { - int fieldNum = infoPtr->select & DTHT_DATEFIELD; + int fieldNum, fieldSpec;
- if (vkCode >= '0' && vkCode <= '9') { + fieldNum = infoPtr->select & DTHT_DATEFIELD; + fieldSpec = infoPtr->fieldspec[fieldNum]; + + if (fieldSpec == ONELETTERAMPM || fieldSpec == TWOLETTERAMPM) { + infoPtr->charsEntered[0] = vkCode; + infoPtr->nCharsEntered = 1; + + DATETIME_ApplySelectedField(infoPtr); + } else if (vkCode >= '0' && vkCode <= '9') { int maxChars; - int fieldSpec;
infoPtr->charsEntered[infoPtr->nCharsEntered++] = vkCode;
- fieldSpec = infoPtr->fieldspec[fieldNum]; - if (fieldSpec == INVALIDFULLYEAR || fieldSpec == FULLYEAR) maxChars = 4; else @@ -1215,6 +1235,7 @@ DATETIME_Char (DATETIME_INFO *infoPtr, WPARAM vkCode) if (maxChars == infoPtr->nCharsEntered) DATETIME_ApplySelectedField(infoPtr); } + return 0; }