Owen Rudge : comctl32/datetime: Allow entering 'AM' or 'PM' via keyboard.
Alexandre Julliard
julliard at winehq.org
Mon Mar 12 11:59:57 CDT 2012
Module: wine
Branch: master
Commit: 74d1c11684b91cb88c663b016f423876ab8c028f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=74d1c11684b91cb88c663b016f423876ab8c028f
Author: Owen Rudge <orudge at 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;
}
More information about the wine-cvs
mailing list