Don't generate events from wxMSW wxSpinCtrl::SetValue(wxString)

The function was documented to not generate the events, but actually
did generate wxEVT_TEXT ones, even if it didn't generate wxEVT_SPINCTRL.

This was inconsistent with wxGTK and generic wxSpinCtrlDouble used under
MSW, so change this to avoid the unwanted events.
This commit is contained in:
Vadim Zeitlin
2021-04-23 22:30:59 +01:00
parent 35fa1f93bc
commit 8fc2d44004
4 changed files with 21 additions and 5 deletions

View File

@@ -115,7 +115,10 @@ Changes in behaviour not resulting in compilation errors
- wxChoice::GetString() now consistently asserts when passed an invalid index.
- wxSpinCtrlDouble now always resets its value to GetMin() if an invalid text
string is passed to its SetValue() after its creation.
string is passed to its SetValue(wxString) overload after its creation.
- wxSpinCtrl::SetValue(wxString) overload doesn't generate any events with
wxMSW, which was already the documented behaviour.
Changes in behaviour which may result in build errors

View File

@@ -359,12 +359,9 @@ bool wxSpinCtrl::Create(wxWindow *parent,
SetRange(min, max);
SetValue(initial);
// Also set the text part of the control if it was specified independently
// but don't generate an event for this, it would be unexpected.
m_blockEvent = true;
// Also set the text part of the control if it was specified independently.
if ( !value.empty() )
SetValue(value);
m_blockEvent = false;
// Finally deal with the size: notice that this can only be done now both
// windows are created and the text one is set up as buddy because
@@ -449,10 +446,14 @@ wxString wxSpinCtrl::GetTextValue() const
void wxSpinCtrl::SetValue(const wxString& text)
{
m_blockEvent = true;
if ( !::SetWindowText(GetBuddyHwnd(), text.c_str()) )
{
wxLogLastError(wxT("SetWindowText(buddy)"));
}
m_blockEvent = false;
}
void wxSpinCtrl::SetValue(int val)

View File

@@ -177,9 +177,15 @@ TEST_CASE_METHOD(SpinCtrlDoubleTestCase,
CHECK( m_spin->GetTextValue() == "57.30" );
CHECK( m_spin->GetValue() == 57.3 );
CHECK( updatedSpin.GetCount() == 0 );
CHECK( updatedText.GetCount() == 0 );
m_spin->SetValue("");
CHECK( m_spin->GetTextValue() == "" );
CHECK( m_spin->GetValue() == 0 );
CHECK( updatedSpin.GetCount() == 0 );
CHECK( updatedText.GetCount() == 0 );
}
#if wxUSE_UIACTIONSIMULATOR

View File

@@ -276,9 +276,15 @@ TEST_CASE_METHOD(SpinCtrlTestCase2, "SpinCtrl::Value", "[spinctrl]")
CHECK( m_spin->GetTextValue() == "57" );
CHECK( m_spin->GetValue() == 57 );
CHECK(updatedSpin.GetCount() == 0);
CHECK(updatedText.GetCount() == 0);
m_spin->SetValue("");
CHECK( m_spin->GetTextValue() == "" );
CHECK( m_spin->GetValue() == 0 );
CHECK(updatedSpin.GetCount() == 0);
CHECK(updatedText.GetCount() == 0);
}
TEST_CASE_METHOD(SpinCtrlTestCase2, "SpinCtrl::Base", "[spinctrl]")