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