]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/datectrl.cpp
Better fix
[wxWidgets.git] / src / msw / datectrl.cpp
index 84fa85f9a151616edafbd6a3292dac29cdc8a25e..3a694a227e187dbdd13d684b61bbb6110d3ed740 100644 (file)
@@ -156,6 +156,8 @@ wxDatePickerCtrl::Create(wxWindow *parent,
 
     if ( dt.IsValid() || (style & wxDP_ALLOWNONE) )
         SetValue(dt);
+    else
+        SetValue(wxDateTime::Today());
 
     return true;
 }
@@ -254,9 +256,15 @@ void wxDatePickerCtrl::SetValue(const wxDateTime& dt)
         wxLogDebug(_T("DateTime_SetSystemtime() failed"));
     }
 
-    wxFromSystemTime(&m_date, st);
+    // we need to keep only the date part, times don't make sense for this
+    // control (in particular, comparisons with other dates would fail)
+    m_date = dt;
+    if ( m_date.IsValid() )
+        m_date.ResetTime();
 }
 
+#include <iostream>
+
 wxDateTime wxDatePickerCtrl::GetValue() const
 {
 #ifdef __WXDEBUG__
@@ -341,16 +349,18 @@ wxDatePickerCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
 
             // filter out duplicate DTN_DATETIMECHANGE events which the native
             // control sends us when using wxDP_DROPDOWN style
-            if ( !m_date.IsValid() || dt != m_date )
+            if ( (m_date.IsValid() != dt.IsValid()) ||
+                    (m_date.IsValid() && dt != m_date) )
             {
                 m_date = dt;
                 wxDateEvent event(this, dt, wxEVT_DATE_CHANGED);
-                if ( GetEventHandler()->ProcessEvent(event) )
+                if ( HandleWindowEvent(event) )
                 {
                     *result = 0;
                     return true;
                 }
             }
+            //else: both the old and new values are invalid, nothing changed
         }
     }