@ -1952,9 +1952,12 @@ bool ImGui::Combo(const char* label, int* current_item, const char* (*getter)(vo
return false ;
// Display items
// FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed)
bool value_changed = false ;
for ( int i = 0 ; i < items_count ; i + + )
ImGuiListClipper clipper ;
clipper . Begin ( items_count ) ;
clipper . IncludeItemByIndex ( * current_item ) ;
while ( clipper . Step ( ) )
for ( int i = clipper . DisplayStart ; i < clipper . DisplayEnd ; i + + )
{
const char * item_text = getter ( user_data , i ) ;
if ( item_text = = NULL )
@ -1973,7 +1976,6 @@ bool ImGui::Combo(const char* label, int* current_item, const char* (*getter)(vo
}
EndCombo ( ) ;
if ( value_changed )
MarkItemEdited ( g . LastItemData . ID ) ;
@ -7011,6 +7013,7 @@ bool ImGui::ListBox(const char* label, int* current_item, const char* (*getter)(
bool value_changed = false ;
ImGuiListClipper clipper ;
clipper . Begin ( items_count , GetTextLineHeightWithSpacing ( ) ) ; // We know exactly our line height here so we pass it as a minor optimization, but generally you don't need to.
clipper . IncludeItemByIndex ( * current_item ) ;
while ( clipper . Step ( ) )
for ( int i = clipper . DisplayStart ; i < clipper . DisplayEnd ; i + + )
{