(svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window

structs inside their array, and possibly invalidating pointers higher up.
 Meaning that any function called within an wndproc could cause unknown/invalid pointers
 once control was returned to this function. Solved by the introduction of an extra
 abstraction layer, an array of z-window positions that is only concerned with the
 pointers.
This commit is contained in:
Darkvater
2006-11-18 16:47:02 +00:00
parent b2a5b4f069
commit c01c294afb
7 changed files with 298 additions and 230 deletions

View File

@@ -664,8 +664,7 @@ void ShowBuildTrainWindow(TileIndex tile)
DeleteWindowById(WC_BUILD_VEHICLE, tile);
w = AllocateWindowDesc(&_new_rail_vehicle_desc);
w->window_number = tile;
w = AllocateWindowDescFront(&_new_rail_vehicle_desc, tile);
w->vscroll.cap = 8;
w->widget[BUILD_TRAIN_WIDGET_LIST].data = (w->vscroll.cap << 8) + 1;