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