changeset 5113:8d644c8114e9 draft

(svn r7190) -Fix: If the non-player-based _patches setting was changed on the server during MP game, the callback function was: 1. Called only on the server but not on its clients. 2. Was called before the setting change occurred (usually with no effect) 3. Received old 'p1' argument value intead of new one It could cause some MP desyncs in the future.
author KUDr <KUDr@openttd.org>
date Fri, 17 Nov 2006 10:42:20 +0000
parents 0f7cf77b473b
children e545bf65aa81
files settings.c settings_gui.c
diffstat 2 files changed, 2 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/settings.c
+++ b/settings.c
@@ -1582,6 +1582,7 @@
 		Patches *patches_ptr = (_game_mode == GM_MENU) ? &_patches_newgame : &_patches;
 		void *var = ini_get_variable(&sd->save, patches_ptr);
 		Write_ValidateSetting(var, sd, (int32)p2);
+		if (sd->desc.proc != NULL) sd->desc.proc((int32)ReadValue(var, sd->save.conv));
 
 		InvalidateWindow(WC_GAME_OPTIONS, 0);
 	}
@@ -1611,6 +1612,7 @@
 			void *var2 = ini_get_variable(&sd->save, &_patches_newgame);
 			Write_ValidateSetting(var2, sd, value);
 		}
+		if (sd->desc.proc != NULL) sd->desc.proc((int32)ReadValue(var, sd->save.conv));
 		InvalidateWindow(WC_GAME_OPTIONS, 0);
 		return true;
 	}
@@ -1653,7 +1655,6 @@
 	ptr = ini_get_variable(&sd->save, patches_ptr);
 
 	success = SetPatchValue(index, patches_ptr, value);
-	if (success && sd->desc.proc != NULL) sd->desc.proc(value);
 	return success;
 }
 
--- a/settings_gui.c
+++ b/settings_gui.c
@@ -833,7 +833,6 @@
 				if (value != oldvalue) {
 					SetPatchValue(page->entries[btn].index, patches_ptr, value);
 					SetWindowDirty(w);
-					if (sdb->proc != NULL) sdb->proc((int32)ReadValue(var, sd->save.conv));
 				}
 			} else {
 				/* only open editbox for types that its sensible for */
@@ -868,7 +867,6 @@
 		if (e->we.edittext.str != NULL) {
 			const PatchEntry *pe = &_patches_page[WP(w,def_d).data_1].entries[WP(w,def_d).data_3];
 			const SettingDesc *sd = pe->setting;
-			void *var = ini_get_variable(&sd->save, patches_ptr);
 			int32 value = atoi(e->we.edittext.str);
 
 			/* Save the correct currency-translated value */
@@ -876,8 +874,6 @@
 
 			SetPatchValue(pe->index, patches_ptr, value);
 			SetWindowDirty(w);
-
-			if (sd->desc.proc != NULL) sd->desc.proc((int32)ReadValue(var, sd->save.conv));
 		}
 		break;
 	}