X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fdb47e62b9f47f234bb0d34aa45dd1a44fdd1cbe..a5c2ccf2e7a22fc7fd629d5db723faef301bfaff:/src/generic/odcombo.cpp?ds=sidebyside diff --git a/src/generic/odcombo.cpp b/src/generic/odcombo.cpp index d79d692b18..fa036b21e2 100644 --- a/src/generic/odcombo.cpp +++ b/src/generic/odcombo.cpp @@ -246,8 +246,14 @@ void wxVListBoxComboPopup::SendComboBoxEvent( int selection ) // returns true if key was consumed bool wxVListBoxComboPopup::HandleKey( int keycode, bool saturate, wxChar unicode ) { + const int itemCount = GetCount(); + + // keys do nothing in the empty control and returning immediately avoids + // using invalid indices below + if ( !itemCount ) + return false; + int value = m_value; - int itemCount = GetCount(); int comboStyle = m_combo->GetWindowStyle(); // this is the character equivalent of the code @@ -1021,13 +1027,29 @@ int wxOwnerDrawnComboBox::DoInsertItems(const wxArrayStringsAdapter& items, EnsurePopupControl(); const unsigned int count = items.GetCount(); - for( unsigned int i = 0; i < count; ++i, ++pos ) + + if ( HasFlag(wxCB_SORT) ) { - GetVListBoxComboPopup()->Insert(items[i], pos); - AssignNewItemClientData(pos, clientData, i, type); + int n = pos; + + for ( unsigned int i = 0; i < count; ++i ) + { + int n = GetVListBoxComboPopup()->Append(items[i]); + AssignNewItemClientData(n, clientData, i, type); + } + + return n; } + else + { + for ( unsigned int i = 0; i < count; ++i, ++pos ) + { + GetVListBoxComboPopup()->Insert(items[i], pos); + AssignNewItemClientData(pos, clientData, i, type); + } - return pos - 1; + return pos - 1; + } } void wxOwnerDrawnComboBox::DoSetItemClientData(unsigned int n, void* clientData)