Owen Rudge : comctl32/datetime: Fix AM/PM handling with 12-hour fields.
Alexandre Julliard
julliard at winehq.org
Mon Mar 12 11:59:57 CDT 2012
Module: wine
Branch: master
Commit: ffbdd27268f1b5c4bb1d57f1014f1512e4fc6cd5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ffbdd27268f1b5c4bb1d57f1014f1512e4fc6cd5
Author: Owen Rudge <orudge at codeweavers.com>
Date: Thu Mar 8 11:34:38 2012 +0000
comctl32/datetime: Fix AM/PM handling with 12-hour fields.
---
dlls/comctl32/datetime.c | 24 +++++++++++++++++++++++-
1 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c
index f65691e..bfd5d5e 100644
--- a/dlls/comctl32/datetime.c
+++ b/dlls/comctl32/datetime.c
@@ -4,6 +4,7 @@
* Copyright 1998, 1999 Eric Kohl
* Copyright 1999, 2000 Alex Priem <alexp at sci.kun.nl>
* Copyright 2000 Chris Morgan <cmorgan at wpi.edu>
+ * Copyright 2012 Owen Rudge for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -896,9 +897,20 @@ DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr)
break;
case ONEDIGIT12HOUR:
case TWODIGIT12HOUR:
+ if (val >= 24)
+ val -= 20;
+
+ if (val >= 13)
+ date.wHour = val;
+ else if (val != 0) {
+ if (date.wHour >= 12) /* preserve current AM/PM state */
+ date.wHour = (val == 12 ? 12 : val + 12);
+ else
+ date.wHour = (val == 12 ? 0 : val);
+ }
+ break;
case ONEDIGIT24HOUR:
case TWODIGIT24HOUR:
- /* FIXME: Preserve AM/PM for 12HOUR? */
date.wHour = val;
break;
case ONEDIGITMINUTE:
@@ -1232,6 +1244,16 @@ DATETIME_Char (DATETIME_INFO *infoPtr, WPARAM vkCode)
else
maxChars = 2;
+ if ((fieldSpec == ONEDIGIT12HOUR ||
+ fieldSpec == TWODIGIT12HOUR ||
+ fieldSpec == ONEDIGIT24HOUR ||
+ fieldSpec == TWODIGIT24HOUR) &&
+ (infoPtr->nCharsEntered == 1))
+ {
+ if (vkCode >= '3')
+ maxChars = 1;
+ }
+
if (maxChars == infoPtr->nCharsEntered)
DATETIME_ApplySelectedField(infoPtr);
}
More information about the wine-cvs
mailing list