diff --git a/Common/UI/TabHolder.cpp b/Common/UI/TabHolder.cpp index 0d2ebb346c..2456a19f14 100644 --- a/Common/UI/TabHolder.cpp +++ b/Common/UI/TabHolder.cpp @@ -137,6 +137,10 @@ bool TabHolder::EnsureTab(int index) { } void TabHolder::SetInitialTab(int tab) { + if (tab < 0 || tab >= (int)tabs_.size()) { + return; + } + EnsureTab(tab); currentTab_ = tab; tabStrip_->SetSelection(tab, false); } @@ -181,7 +185,7 @@ bool TabHolder::SetCurrentTab(int tab, bool skipTween) { // Ensure both tabs are created before setting up tweens. bool createdCurrent = EnsureTab(currentTab_); - _dbg_assert_msg_(!createdCurrent, false, "Current should already be created here!"); + _dbg_assert_msg_(!createdCurrent, "Current should already have been created before EnsureTab!"); bool created = EnsureTab(tab); @@ -310,13 +314,16 @@ void ChoiceStrip::OnChoiceClick(EventParams &e) { } void ChoiceStrip::SetSelection(int sel, bool triggerClick) { + if (sel < 0 || sel >= (int)choices_.size()) { + return; + } int prevSelected = selected_; - if (selected_ < choices_.size()) { + if (selected_ >= 0 && selected_ < (int)choices_.size()) { StickyChoice *prevChoice = choices_[selected_]; prevChoice->Release(); } selected_ = sel; - if (selected_ < choices_.size()) { + if (selected_ >= 0 && selected_ < (int)choices_.size()) { StickyChoice *newChoice = choices_[selected_]; newChoice->Press(); if (topTabs_ && prevSelected != selected_) { diff --git a/UI/GPUDriverTestScreen.cpp b/UI/GPUDriverTestScreen.cpp index 9670dc2e5a..e1c854d0f8 100644 --- a/UI/GPUDriverTestScreen.cpp +++ b/UI/GPUDriverTestScreen.cpp @@ -307,7 +307,6 @@ void GPUDriverTestScreen::CreateViews() { tabHolder_->AddTabDeferred("Shader", ImageID::invalid(), []() { return new LinearLayout(ORIENT_VERTICAL); }); tabHolder_->SetInitialTab(0); - tabHolder_->EnsureTab(0); Choice *back = new Choice(di->T("Back"), ImageID("I_NAVIGATE_BACK"), new AnchorLayoutParams(190, WRAP_CONTENT, 10, NONE, NONE, 10)); back->OnClick.Handle(this, &UIScreen::OnBack); diff --git a/UI/TabbedDialogScreen.cpp b/UI/TabbedDialogScreen.cpp index c56f81caa7..ca9a3f842a 100644 --- a/UI/TabbedDialogScreen.cpp +++ b/UI/TabbedDialogScreen.cpp @@ -106,8 +106,9 @@ void UITabbedBaseDialogScreen::CreateViews() { CreateTabs(); if (currentTabSetting_) { tabHolder_->SetInitialTab(*currentTabSetting_); + } else { + tabHolder_->EnsureTab(tabHolder_->GetCurrentTab()); } - tabHolder_->EnsureTab(tabHolder_->GetCurrentTab()); tabHolder_->OnChangeTab.Add([this](UI::EventParams &e) { if (currentTabSetting_) {