Vincent Povirk : comctl32: When entering a month or year, keep the day in range.

Alexandre Julliard julliard at winehq.org
Fri Apr 1 09:41:00 CDT 2011


Module: wine
Branch: master
Commit: 0d8775c9f990766f915d45065796d8fdd2866ff1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0d8775c9f990766f915d45065796d8fdd2866ff1

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Thu Mar 31 14:04:15 2011 -0500

comctl32: When entering a month or year, keep the day in range.

---

 dlls/comctl32/datetime.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c
index bc643eb..fd97fdd 100644
--- a/dlls/comctl32/datetime.c
+++ b/dlls/comctl32/datetime.c
@@ -770,7 +770,7 @@ static void
 DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr)
 {
     int fieldNum = infoPtr->select & DTHT_DATEFIELD;
-    int i, val=0;
+    int i, val=0, clamp_day=0;
     SYSTEMTIME date = infoPtr->date;
 
     if (infoPtr->select == -1 || infoPtr->nCharsEntered == 0)
@@ -785,14 +785,17 @@ DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr)
         case ONEDIGITYEAR:
         case TWODIGITYEAR:
             date.wYear = date.wYear - (date.wYear%100) + val;
+            clamp_day = 1;
             break;
         case INVALIDFULLYEAR:
         case FULLYEAR:
             date.wYear = val;
+            clamp_day = 1;
             break;
         case ONEDIGITMONTH:
         case TWODIGITMONTH:
             date.wMonth = val;
+            clamp_day = 1;
             break;
         case ONEDIGITDAY:
         case TWODIGITDAY:
@@ -815,6 +818,9 @@ DATETIME_ApplySelectedField (DATETIME_INFO *infoPtr)
             break;
     }
 
+    if (clamp_day && date.wDay > MONTHCAL_MonthLength(date.wMonth, date.wYear))
+        date.wDay = MONTHCAL_MonthLength(date.wMonth, date.wYear);
+
     if (DATETIME_SetSystemTime(infoPtr, GDT_VALID, &date))
         DATETIME_SendDateTimeChangeNotify (infoPtr);
 }




More information about the wine-cvs mailing list