(svn r22618) -Fix [FS#4653]: When changing difficulty settings over the network, do not just reopen the difficulty window if any game options window is opened; instead invalidate them properly.

This commit is contained in:
frosch
2011-07-02 12:58:37 +00:00
parent 1688470eb9
commit c544dca519
3 changed files with 16 additions and 8 deletions

View File

@@ -659,9 +659,6 @@ public:
{
this->InitNested(desc);
/* Copy current settings (ingame or in intro) to temporary holding place
* change that when setting stuff, copy back on clicking 'OK' */
this->opt_mod_temp = GetGameSettings();
/* Setup disabled buttons when creating window
* disable all other difficulty buttons during gameplay except for 'custom' */
this->SetWidgetsDisabledState(_game_mode != GM_MENU,
@@ -672,8 +669,9 @@ public:
WIDGET_LIST_END);
this->SetWidgetDisabledState(GDW_HIGHSCORE, _game_mode == GM_EDITOR || _networking); // highscore chart in multiplayer
this->SetWidgetDisabledState(GDW_ACCEPT, _networking && !_network_server); // Save-button in multiplayer (and if client)
this->LowerWidget(GDW_LVL_EASY + this->opt_mod_temp.difficulty.diff_level);
this->OnInvalidateData();
/* Read data */
this->OnInvalidateData(GOID_DIFFICULTY_CHANGED);
}
virtual void SetStringParameters(int widget) const
@@ -803,6 +801,17 @@ public:
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
{
if (!gui_scope) return;
if (data == GOID_DIFFICULTY_CHANGED) {
/* Window was created or settings were changed on server. Reread everything. */
/* Copy current settings (ingame or in intro) to temporary holding place
* change that when setting stuff, copy back on clicking 'OK' */
this->opt_mod_temp = GetGameSettings();
this->LowerWidget(GDW_LVL_EASY + this->opt_mod_temp.difficulty.diff_level);
}
uint i;
const SettingDesc *sd = GetSettingFromName("difficulty.max_no_competitors", &i);
for (i = 0; i < GAME_DIFFICULTY_NUM; i++, sd++) {