Changeset - r5415:860abee1fbee
[Not reviewed]
master
0 2 0
Darkvater - 17 years ago 2006-12-29 17:07:41
darkvater@openttd.org
(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.
2 files changed with 22 insertions and 0 deletions:
0 comments (0 inline, 0 general)
window.c
Show inline comments
 
@@ -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 Windo
 

	
 
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 */
window.h
Show inline comments
 
@@ -335,6 +335,7 @@ struct Window {
 
	uint32 desc_flags;
 

	
 
	WindowMessage message;
 
	Window *parent;
 
	byte custom[WINDOW_CUSTOM_SIZE];
 
};
 

	
0 comments (0 inline, 0 general)