summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbelugas <belugas@openttd.org>2008-05-17 03:29:16 +0000
committerbelugas <belugas@openttd.org>2008-05-17 03:29:16 +0000
commit835a5fcf4311f4c44c660782f60d16b71b5cc8fc (patch)
tree5903538b115052daa222f770031425851a70a95c /src
parenta4c5f9465834077e9619cea3d31799cf68f0c1cf (diff)
downloadopenttd-835a5fcf4311f4c44c660782f60d16b71b5cc8fc.tar.xz
(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
Diffstat (limited to 'src')
-rw-r--r--src/window.cpp10
-rw-r--r--src/window_gui.h13
2 files changed, 22 insertions, 1 deletions
diff --git a/src/window.cpp b/src/window.cpp
index 1b7430aee..c9bead7fd 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -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();
+}
diff --git a/src/window_gui.h b/src/window_gui.h
index 94482b254..8d527f95f 100644
--- a/src/window_gui.h
+++ b/src/window_gui.h
@@ -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