]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix setting initial wxSpinCtrl value outside 0..100 range in wxMSW.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 20 Jan 2013 02:09:14 +0000 (02:09 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 20 Jan 2013 02:09:14 +0000 (02:09 +0000)
Set the range before setting the initial value when creating wxSpinCtrl, as
otherwise the value was wrongly limited to the default 0..100 range instead of
the one really specified.

Closes #14894.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73394 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
src/msw/spinctrl.cpp
tests/controls/spinctrltest.cpp

index 47d27b629b3358300a987517b90a7f26faf8bf62..8406f7ecf44203e77d2075986576f67c366a1aa2 100644 (file)
@@ -623,6 +623,7 @@ wxMSW:
 - Fix calling Iconize(false) on hidden top level windows (Christian Walther).
 - Don't send any events from wxSpinCtrl::SetRange() even if the value changed.
 - Display system drag images during drag and drop if available (PeterO).
+- Fix setting initial wxSpinCtrl value outside 0..100 range (joim).
 
 wxOSX/Cocoa:
 
index 4625a25b4914556010ee83db975037e498621764..a034cda2ee9a83553cf23343920b3bcff7434787 100644 (file)
@@ -399,12 +399,11 @@ bool wxSpinCtrl::Create(wxWindow *parent,
     if ( value.ToLong(&initialFromText) )
         initial = initialFromText;
 
-    SetValue(initial);
-
-    m_oldValue = initial;
-
-    // Set the range in the native control
+    // Set the range in the native control: notice that we must do it before
+    // calling SetValue() to use the correct validity checks for the initial
+    // value.
     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.
index a1e29cf3bdfe528483d5da9756058b6e6d129123..2338bb4248f8b948494977ccf72a2db6c2305cf2 100644 (file)
@@ -83,6 +83,14 @@ void SpinCtrlTestCase::Initial()
                             0, 100, 17);
     CPPUNIT_ASSERT_EQUAL( 17, m_spin->GetValue() );
 
+    // Recreate the control with another "initial" outside of standard spin
+    // ctrl range.
+    delete m_spin;
+    m_spin = new wxSpinCtrl(parent, wxID_ANY, "",
+                            wxDefaultPosition, wxDefaultSize, 0,
+                            0, 200, 150);
+    CPPUNIT_ASSERT_EQUAL( 150, m_spin->GetValue() );
+
     // But if the text string is specified, it takes precedence.
     delete m_spin;
     m_spin = new wxSpinCtrl(parent, wxID_ANY, "99",