Fix crash when destroying list UI in update function.

This commit is contained in:
Steveice10 2016-12-20 11:16:00 -08:00
parent 4ce326879a
commit 23111ee08d

View File

@ -90,24 +90,31 @@ static void list_update(ui_view* view, void* data, float bx1, float by1, float b
u32 size = linked_list_size(&listData->items); u32 size = linked_list_size(&listData->items);
list_validate(listData, by1, by2);
bool selectedTouched = false; bool selectedTouched = false;
if(size > 0) { if(size > 0) {
list_validate(listData, by1, by2); bool scrolls = false;
if(listData->selectedItem != NULL) {
float itemWidth;
screen_get_string_size(&itemWidth, NULL, listData->selectedItem->name, 0.5f, 0.5f);
if(itemWidth > bx2 - bx1) {
scrolls = true;
float itemWidth; if(listData->selectionScroll == 0 || listData->selectionScroll >= itemWidth - (bx2 - bx1)) {
screen_get_string_size(&itemWidth, NULL, listData->selectedItem->name, 0.5f, 0.5f); if(listData->nextSelectionScrollResetTime == 0) {
if(itemWidth > bx2 - bx1) { listData->nextSelectionScrollResetTime = osGetTime() + 2000;
if(listData->selectionScroll == 0 || listData->selectionScroll >= itemWidth - (bx2 - bx1)) { } else if(osGetTime() >= listData->nextSelectionScrollResetTime) {
if(listData->nextSelectionScrollResetTime == 0) { listData->selectionScroll = listData->selectionScroll == 0 ? 1 : 0;
listData->nextSelectionScrollResetTime = osGetTime() + 2000; listData->nextSelectionScrollResetTime = 0;
} else if(osGetTime() >= listData->nextSelectionScrollResetTime) { }
listData->selectionScroll = listData->selectionScroll == 0 ? 1 : 0; } else {
listData->nextSelectionScrollResetTime = 0; listData->selectionScroll++;
} }
} else {
listData->selectionScroll++;
} }
} else { }
if(!scrolls) {
listData->selectionScroll = 0; listData->selectionScroll = 0;
listData->nextSelectionScrollResetTime = 0; listData->nextSelectionScrollResetTime = 0;
} }
@ -188,8 +195,6 @@ static void list_update(ui_view* view, void* data, float bx1, float by1, float b
if(listData->update != NULL) { if(listData->update != NULL) {
listData->update(view, listData->data, &listData->items, listData->selectedItem, selectedTouched); listData->update(view, listData->data, &listData->items, listData->selectedItem, selectedTouched);
list_validate(listData, by1, by2);
} }
} }