diff --git a/docs/changes.txt b/docs/changes.txt index 0807ff4f0b..19bea8eccc 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -158,6 +158,7 @@ wxMSW: - Don't send events for already selected radio popup menu items (Kinaou Hervé). - wxListCtrl::GetItemCount() in wxEVT_LIST_INSERT_ITEM is no longer off by 1. - Don't send bogus root selection events when clicking wxTreeCtrl (sbrowne). +- Avoid bogus assert after calling wxDatePickerCtrl::SetRange(). wxOSX/Cocoa: diff --git a/include/wx/msw/datectrl.h b/include/wx/msw/datectrl.h index e7f8da5c45..aeb3d30830 100644 --- a/include/wx/msw/datectrl.h +++ b/include/wx/msw/datectrl.h @@ -60,6 +60,9 @@ protected: virtual bool MSWAllowsNone() const { return HasFlag(wxDP_ALLOWNONE); } virtual bool MSWOnDateTimeChange(const tagNMDATETIMECHANGE& dtch); +private: + wxDateTime MSWGetControlValue() const; + wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDatePickerCtrl); }; diff --git a/src/msw/datectrl.cpp b/src/msw/datectrl.cpp index 916fbb37a8..92d7dc0d3f 100644 --- a/src/msw/datectrl.cpp +++ b/src/msw/datectrl.cpp @@ -138,9 +138,8 @@ void wxDatePickerCtrl::SetValue(const wxDateTime& dt) m_date.ResetTime(); } -wxDateTime wxDatePickerCtrl::GetValue() const +wxDateTime wxDatePickerCtrl::MSWGetControlValue() const { -#if wxDEBUG_LEVEL wxDateTime dt; SYSTEMTIME st; if ( DateTime_GetSystemtime(GetHwnd(), &st) == GDT_VALID ) @@ -148,6 +147,14 @@ wxDateTime wxDatePickerCtrl::GetValue() const dt.SetFromMSWSysDate(st); } + return dt; +} + +wxDateTime wxDatePickerCtrl::GetValue() const +{ +#if wxDEBUG_LEVEL + const wxDateTime dt = MSWGetControlValue(); + wxASSERT_MSG( m_date.IsValid() == dt.IsValid() && (!dt.IsValid() || dt == m_date), wxT("bug in wxDateTimePickerCtrl: m_date not in sync") ); @@ -176,7 +183,12 @@ void wxDatePickerCtrl::SetRange(const wxDateTime& dt1, const wxDateTime& dt2) if ( !DateTime_SetRange(GetHwnd(), flags, st) ) { wxLogDebug(wxT("DateTime_SetRange() failed")); + return; } + + // Setting the range could have changed the current control value if the + // old one wasn't inside the new range, so update it. + m_date = MSWGetControlValue(); } bool wxDatePickerCtrl::GetRange(wxDateTime *dt1, wxDateTime *dt2) const