(svn r17922) -Fix [FS#3291]: crash when closing NewGRF parameter window with no NewGRF selected

This commit is contained in:
rubidium
2009-10-31 14:53:19 +00:00
parent 617e7966f9
commit 86fd0c0bce
3 changed files with 13 additions and 7 deletions

View File

@@ -645,12 +645,14 @@ void Window::ReInit()
/** Find the Window whose parent pointer points to this window
* @param w parent Window to find child of
* @return a Window pointer that is the child of w, or NULL otherwise */
static Window *FindChildWindow(const Window *w)
* @param wc Window class of the window to remove; WC_INVALID if class does not matter
* @return a Window pointer that is the child of w, or NULL otherwise
*/
static Window *FindChildWindow(const Window *w, WindowClass wc)
{
Window *v;
FOR_ALL_WINDOWS_FROM_BACK(v) {
if (v->parent == w) return v;
if ((wc == WC_INVALID || wc == v->window_class) && v->parent == w) return v;
}
return NULL;
@@ -658,13 +660,14 @@ static Window *FindChildWindow(const Window *w)
/**
* Delete all children a window might have in a head-recursive manner
* @param wc Window class of the window to remove; WC_INVALID if class does not matter
*/
void Window::DeleteChildWindows() const
void Window::DeleteChildWindows(WindowClass wc) const
{
Window *child = FindChildWindow(this);
Window *child = FindChildWindow(this, wc);
while (child != NULL) {
delete child;
child = FindChildWindow(this);
child = FindChildWindow(this, wc);
}
}