(svn r13133) -Codechange: Add a base class (descending from Window) for all new windows that are going to require a ResetObjectToPlace to be performed on closing.

This will allow to free the said window only once, and not twice otherwise
pull/155/head
belugas 16 years ago
parent a4c5f94658
commit 835a5fcf43

@ -2350,3 +2350,13 @@ void RelocateAllWindows(int neww, int newh)
w->top = top;
}
}
/** Destructor of the base class PickerWindowBase
* Main utility is to stop the base Window destructor from triggering
* a free while the child will already be free, in this case by the ResetObjectToPlace().
*/
PickerWindowBase::~PickerWindowBase()
{
this->window_class = WC_INVALID; // stop the ancestor from freeing the already (to be) child
ResetObjectToPlace();
}

@ -256,7 +256,7 @@ struct ViewportData : ViewPort {
int32 dest_scrollpos_y;
};
/**
/**
* Data structure for an opened window
*/
struct Window : ZeroedMemoryAllocator {
@ -493,6 +493,17 @@ public:
/*** End of the event handling ***/
};
/**
* Data structure for a window opened from a toolbar
*/
class PickerWindowBase : public Window {
public:
PickerWindowBase(const WindowDesc *desc) : Window(desc) {}; // nothing special yet, just propagation
virtual ~PickerWindowBase();
};
enum SortListFlags {
VL_NONE = 0, ///< no sort
VL_DESC = 1 << 0, ///< sort descending or ascending

Loading…
Cancel
Save