X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/57bd4c6031d438f11af0ec540136f49a928b923c..0bbe61b8c18a1795189f0cf73cc61c14a0fb846d:/src/msw/datectrl.cpp diff --git a/src/msw/datectrl.cpp b/src/msw/datectrl.cpp index ebe60e9318..3a694a227e 100644 --- a/src/msw/datectrl.cpp +++ b/src/msw/datectrl.cpp @@ -156,6 +156,8 @@ wxDatePickerCtrl::Create(wxWindow *parent, if ( dt.IsValid() || (style & wxDP_ALLOWNONE) ) SetValue(dt); + else + SetValue(wxDateTime::Today()); return true; } @@ -253,10 +255,19 @@ void wxDatePickerCtrl::SetValue(const wxDateTime& dt) { wxLogDebug(_T("DateTime_SetSystemtime() failed")); } + + // 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 + wxDateTime wxDatePickerCtrl::GetValue() const { +#ifdef __WXDEBUG__ wxDateTime dt; SYSTEMTIME st; if ( DateTime_GetSystemtime(GetHwnd(), &st) == GDT_VALID ) @@ -264,7 +275,12 @@ wxDateTime wxDatePickerCtrl::GetValue() const wxFromSystemTime(&dt, st); } - return dt; + wxASSERT_MSG( m_date.IsValid() == dt.IsValid() && + (!dt.IsValid() || dt == m_date), + _T("bug in wxDatePickerCtrl: m_date not in sync") ); +#endif // __WXDEBUG__ + + return m_date; } void wxDatePickerCtrl::SetRange(const wxDateTime& dt1, const wxDateTime& dt2) @@ -331,12 +347,20 @@ wxDatePickerCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) if ( dtch->dwFlags == GDT_VALID ) wxFromSystemTime(&dt, dtch->st); - wxDateEvent event(this, dt, wxEVT_DATE_CHANGED); - if ( GetEventHandler()->ProcessEvent(event) ) + // filter out duplicate DTN_DATETIMECHANGE events which the native + // control sends us when using wxDP_DROPDOWN style + if ( (m_date.IsValid() != dt.IsValid()) || + (m_date.IsValid() && dt != m_date) ) { - *result = 0; - return true; + m_date = dt; + wxDateEvent event(this, dt, wxEVT_DATE_CHANGED); + if ( HandleWindowEvent(event) ) + { + *result = 0; + return true; + } } + //else: both the old and new values are invalid, nothing changed } }