diff options
author | Darkvater <darkvater@openttd.org> | 2006-12-29 17:07:41 +0000 |
---|---|---|
committer | Darkvater <darkvater@openttd.org> | 2006-12-29 17:07:41 +0000 |
commit | 49eb2a91ab7f23cd27c90c507c11c99d9941e803 (patch) | |
tree | 0c805e369dd82e534d576e98a38f47226c8124c8 | |
parent | 664f1d1fa084ed7616049c49a73a5e302c65c441 (diff) | |
download | openttd-49eb2a91ab7f23cd27c90c507c11c99d9941e803.tar.xz |
(svn r7618) -Feature: Add support for a parent<>child relationship in Window terms. A child
is a window whose parent pointer is non-null. Deleting the parent cascades deleting
the children as well; children first.
-rw-r--r-- | window.c | 21 | ||||
-rw-r--r-- | window.h | 1 |
2 files changed, 22 insertions, 0 deletions
@@ -287,6 +287,21 @@ void SetWindowDirty(const Window *w) SetDirtyBlocks(w->left, w->top, w->left + w->width, w->top + w->height); } +/** Find the Window whose parent pointer points to this window + * @parent w Window to find child of + * @return return a Window pointer that is the child of w, or NULL otherwise */ +static Window *FindChildWindow(const Window *w) +{ + Window* const *wz; + + FOR_ALL_WINDOWS(wz) { + Window *v = *wz; + if (v->parent == w) return v; + } + + return NULL; +} + /** Find the z-value of a window. A window must already be open * or the behaviour is undefined but function should never fail */ Window **FindWindowZPosition(const Window *w) @@ -301,9 +316,14 @@ Window **FindWindowZPosition(const Window *w) void DeleteWindow(Window *w) { + Window *v; Window **wz; if (w == NULL) return; + /* Delete any children a window might have in a head-recursive manner */ + v = FindChildWindow(w); + if (v != NULL) DeleteWindow(v); + if (_thd.place_mode != VHM_NONE && _thd.window_class == w->window_class && _thd.window_number == w->window_number) { @@ -317,6 +337,7 @@ void DeleteWindow(Window *w) free(w->widget); w->widget = NULL; w->widget_count = 0; + w->parent = NULL; /* Find the window in the z-array, and effectively remove it * by moving all windows after it one to the left */ @@ -335,6 +335,7 @@ struct Window { uint32 desc_flags; WindowMessage message; + Window *parent; byte custom[WINDOW_CUSTOM_SIZE]; }; |