diff --git a/include/wx/osx/choice.h b/include/wx/osx/choice.h index 3e8898373c..720b9c509d 100644 --- a/include/wx/osx/choice.h +++ b/include/wx/osx/choice.h @@ -93,6 +93,10 @@ protected: wxArrayString m_strings; wxChoiceDataArray m_datas ; wxMenu* m_popUpMenu ; + +private: + // This should be called when the number of items in the control changes. + void DoAfterItemCountChange(); }; #endif diff --git a/src/osx/choice_osx.cpp b/src/osx/choice_osx.cpp index e610b8c86f..d26812a571 100644 --- a/src/osx/choice_osx.cpp +++ b/src/osx/choice_osx.cpp @@ -100,6 +100,13 @@ bool wxChoice::Create(wxWindow *parent, // adding/deleting items to/from the list // ---------------------------------------------------------------------------- +void wxChoice::DoAfterItemCountChange() +{ + InvalidateBestSize(); + + GetPeer()->SetMaximum( GetCount() ); +} + int wxChoice::DoInsertItems(const wxArrayStringsAdapter & items, unsigned int pos, void **clientData, wxClientDataType type) @@ -132,7 +139,7 @@ int wxChoice::DoInsertItems(const wxArrayStringsAdapter & items, AssignNewItemClientData(idx, clientData, i, type); } - GetPeer()->SetMaximum( GetCount() ); + DoAfterItemCountChange(); return pos - 1; } @@ -148,8 +155,8 @@ void wxChoice::DoDeleteOneItem(unsigned int n) m_strings.RemoveAt( n ) ; m_datas.RemoveAt( n ) ; - GetPeer()->SetMaximum( GetCount() ) ; + DoAfterItemCountChange(); } void wxChoice::DoClear() @@ -162,7 +169,7 @@ void wxChoice::DoClear() m_strings.Empty() ; m_datas.Empty() ; - GetPeer()->SetMaximum( 0 ) ; + DoAfterItemCountChange(); } // ----------------------------------------------------------------------------