diff options
-rw-r--r-- | src/company_base.h | 2 | ||||
-rw-r--r-- | src/company_cmd.cpp | 12 | ||||
-rw-r--r-- | src/graph_gui.cpp | 5 |
3 files changed, 14 insertions, 5 deletions
diff --git a/src/company_base.h b/src/company_base.h index 61aaae3c1..919ad772a 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -103,6 +103,8 @@ struct Company : CompanyPool::PoolItem<&_company_pool> { { 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 index e85caca4c..e80599b62 100644 --- 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 index 8ba32105d..a77a44460 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1198,11 +1198,11 @@ struct PerformanceRatingDetailWindow : Window { { /* 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 : Window { 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; } |