From e4164aa980f7639254f44abfbf7ce31db2a21c4f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 21 Oct 2006 16:29:33 +0000 Subject: [PATCH] filter out duplicate date changed events sent by the native control (part of bug 1482773) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42207 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/datectrl.h | 3 +++ src/msw/datectrl.cpp | 24 +++++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/include/wx/msw/datectrl.h b/include/wx/msw/datectrl.h index d4b8bc74fb..c4078c6f68 100644 --- a/include/wx/msw/datectrl.h +++ b/include/wx/msw/datectrl.h @@ -60,6 +60,9 @@ public: protected: virtual wxSize DoGetBestSize() const; + // the date currently shown by the control, may be invalid + wxDateTime m_date; + DECLARE_DYNAMIC_CLASS_NO_COPY(wxDatePickerCtrl) }; diff --git a/src/msw/datectrl.cpp b/src/msw/datectrl.cpp index ebe60e9318..c9129f8756 100644 --- a/src/msw/datectrl.cpp +++ b/src/msw/datectrl.cpp @@ -253,10 +253,13 @@ void wxDatePickerCtrl::SetValue(const wxDateTime& dt) { wxLogDebug(_T("DateTime_SetSystemtime() failed")); } + + m_date = dt; } wxDateTime wxDatePickerCtrl::GetValue() const { +#ifdef __WXDEBUG__ wxDateTime dt; SYSTEMTIME st; if ( DateTime_GetSystemtime(GetHwnd(), &st) == GDT_VALID ) @@ -264,7 +267,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,11 +339,17 @@ 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 != m_date ) { - *result = 0; - return true; + m_date = dt; + wxDateEvent event(this, dt, wxEVT_DATE_CHANGED); + if ( GetEventHandler()->ProcessEvent(event) ) + { + *result = 0; + return true; + } } } } -- 2.45.2