mirror of https://github.com/OpenTTD/OpenTTD
(svn r1497) -Fix: [1101179] Crash if generating land while industry window is open. This also happened for towns and the land information window
-Added DeleteWindowByClass() function that deletes all windows of a given classrelease/0.4.5
parent
06cc62f40d
commit
61cae70fe5
|
@ -201,6 +201,7 @@ void InvalidateWindow(byte cls, WindowNumber number);
|
||||||
void InvalidateWindowWidget(byte cls, WindowNumber number, byte widget_index);
|
void InvalidateWindowWidget(byte cls, WindowNumber number, byte widget_index);
|
||||||
void InvalidateWindowClasses(byte cls);
|
void InvalidateWindowClasses(byte cls);
|
||||||
void DeleteWindowById(WindowClass cls, WindowNumber number);
|
void DeleteWindowById(WindowClass cls, WindowNumber number);
|
||||||
|
void DeleteWindowByClass(WindowClass cls);
|
||||||
|
|
||||||
void SetObjectToPlaceWnd(int icon, byte mode, Window *w);
|
void SetObjectToPlaceWnd(int icon, byte mode, Window *w);
|
||||||
void SetObjectToPlace(int icon, byte mode, WindowClass window_class, WindowNumber window_num);
|
void SetObjectToPlace(int icon, byte mode, WindowClass window_class, WindowNumber window_num);
|
||||||
|
|
|
@ -1097,10 +1097,13 @@ static void AskResetLandscapeWndProc(Window *w, WindowEvent *e)
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
DeleteWindow(w);
|
DeleteWindow(w);
|
||||||
if(mode) { // reset landscape
|
DeleteWindowByClass(WC_INDUSTRY_VIEW);
|
||||||
|
DeleteWindowByClass(WC_TOWN_VIEW);
|
||||||
|
DeleteWindowByClass(WC_LAND_INFO);
|
||||||
|
|
||||||
|
if (mode) { // reset landscape
|
||||||
ResetLandscape();
|
ResetLandscape();
|
||||||
}
|
} else { // make random landscape
|
||||||
else { // make random landscape
|
|
||||||
SndPlayFx(SND_15_BEEP);
|
SndPlayFx(SND_15_BEEP);
|
||||||
_switch_mode = SM_GENRANDLAND;
|
_switch_mode = SM_GENRANDLAND;
|
||||||
}
|
}
|
||||||
|
|
12
window.c
12
window.c
|
@ -262,6 +262,18 @@ void DeleteWindowById(WindowClass cls, WindowNumber number)
|
||||||
DeleteWindow(FindWindowById(cls, number));
|
DeleteWindow(FindWindowById(cls, number));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeleteWindowByClass(WindowClass cls)
|
||||||
|
{
|
||||||
|
Window *w;
|
||||||
|
for (w = _windows; w != _last_window;) {
|
||||||
|
if (w->window_class == cls) {
|
||||||
|
DeleteWindow(w);
|
||||||
|
w = _windows;
|
||||||
|
} else
|
||||||
|
w++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Window *BringWindowToFrontById(WindowClass cls, WindowNumber number)
|
Window *BringWindowToFrontById(WindowClass cls, WindowNumber number)
|
||||||
{
|
{
|
||||||
Window *w = FindWindowById(cls, number);
|
Window *w = FindWindowById(cls, number);
|
||||||
|
|
Loading…
Reference in New Issue