diff --git a/src/company_base.h b/src/company_base.h --- a/src/company_base.h +++ b/src/company_base.h @@ -103,6 +103,8 @@ struct Company : CompanyPool::PoolItem<& { return !Company::Get(index)->is_ai; } + + static void PostDestructor(size_t index); }; #define FOR_ALL_COMPANIES_FROM(var, start) FOR_ALL_ITEMS_FROM(Company, company_index, var, start) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -69,8 +69,16 @@ Company::~Company() if (CleaningPool()) return; DeleteCompanyWindows(this->index); - InvalidateWindowData(WC_GRAPH_LEGEND, 0, this->index); - InvalidateWindowData(WC_PERFORMANCE_DETAIL, 0, this->index); +} + +/** + * Invalidating some stuff after removing item from the pool. + * @param index index of deleted item + */ +void Company::PostDestructor(size_t index) +{ + InvalidateWindowData(WC_GRAPH_LEGEND, 0, index); + InvalidateWindowData(WC_PERFORMANCE_DETAIL, 0, index); } /** diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1198,11 +1198,11 @@ struct PerformanceRatingDetailWindow : W { /* Disable the companies who are not active */ for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { - this->SetWidgetDisabledState(i + PRW_COMPANY_FIRST, !Company::IsValidID(i) || i == data); + this->SetWidgetDisabledState(i + PRW_COMPANY_FIRST, !Company::IsValidID(i)); } /* Check if the currently selected company is still active. */ - if (this->company == data || (this->company != INVALID_COMPANY && !Company::IsValidID(this->company))) { + if (this->company != INVALID_COMPANY && !Company::IsValidID(this->company)) { /* Raise the widget for the previous selection. */ this->RaiseWidget(this->company + PRW_COMPANY_FIRST); this->company = INVALID_COMPANY; @@ -1211,7 +1211,6 @@ struct PerformanceRatingDetailWindow : W if (this->company == INVALID_COMPANY) { const Company *c; FOR_ALL_COMPANIES(c) { - if (c->index == data) continue; // Ignore to-be-removed company this->company = c->index; break; }