diff -r f0b3e3ad7f46 src/ai/ai_gui.cpp --- a/src/ai/ai_gui.cpp Tue Aug 21 18:01:14 2012 +0200 +++ b/src/ai/ai_gui.cpp Tue Aug 21 18:28:34 2012 +0200 @@ -957,6 +957,23 @@ } /** + * Set the widget colour of a button based on the + * state of the script. (dead or alive) + * @param button the button to update + * @param dead true if the script is dead, otherwise false + * @return true if the colour was changed and the window need to be marked as dirty + */ +bool SetScriptButtonColour(NWidgetCore &button, bool dead) +{ + Colours colour = dead ? COLOUR_RED : COLOUR_GREY; + if (button.colour != colour) { + button.colour = colour; + return true; + } + return false; +} + +/** * Window with everything an AI prints via ScriptLog. */ struct AIDebugWindow : public QueryStringBaseWindow { @@ -1082,13 +1099,11 @@ dirty = true; } + /* Mark dead AIs by red background */ bool dead = valid && Company::Get(i)->ai_instance->IsDead(); - Colours colour = dead ? COLOUR_RED : COLOUR_GREY; - if (button->colour != colour) { - /* Mark dead AIs by red background */ - button->colour = colour; - dirty = true; - } + /* Re-paint if the button was updated. + * (note that it is intentional that SetScriptButtonColour is always called) */ + dirty = SetScriptButtonColour(*button, dead) || dirty; /* Do we need a repaint? */ if (dirty) this->SetDirty(); @@ -1099,6 +1114,15 @@ DrawCompanyIcon(i, button->pos_x + button->current_x / 2 - 7 + offset, this->GetWidget(WID_AID_COMPANY_BUTTON_START + i)->pos_y + 2 + offset); } + /* Set button colour for Game Script. */ + GameInstance *game = Game::GetInstance(); + bool dead = game != NULL && game->IsDead(); + NWidgetCore *button = this->GetWidget(WID_AID_SCRIPT_GAME); + if (SetScriptButtonColour(*button, dead)) { + /* Re-paint if the button was updated. */ + this->SetWidgetDirty(WID_AID_SCRIPT_GAME); + } + /* If there are no active companies, don't display anything else. */ if (ai_debug_company == INVALID_COMPANY) return;