changeset 20665:ca1a82e80f09 draft

(svn r25621) -Fix (r25342): Also delete page elments when their page is removed (so that they don't reappear on a new page later on)
author zuu <zuu@openttd.org>
date Sun, 21 Jul 2013 15:21:55 +0000
parents 66ffc94f0bd4
children cf090024feed
files src/story_base.h
diffstat 1 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/story_base.h
+++ b/src/story_base.h
@@ -63,6 +63,9 @@
 	inline ~StoryPageElement() { free(this->text); }
 };
 
+#define FOR_ALL_STORY_PAGE_ELEMENTS_FROM(var, start) FOR_ALL_ITEMS_FROM(StoryPageElement, story_page_element_index, var, start)
+#define FOR_ALL_STORY_PAGE_ELEMENTS(var) FOR_ALL_STORY_PAGE_ELEMENTS_FROM(var, 0)
+
 /** Struct about stories, current and completed */
 struct StoryPage : StoryPagePool::PoolItem<&_story_page_pool> {
 	uint32 sort_value;   ///< A number that increases for every created story page. Used for sorting. The id of a story page is the pool index.
@@ -79,11 +82,18 @@
 	/**
 	 * (Empty) destructor has to be defined else operator delete might be called with NULL parameter
 	 */
-	inline ~StoryPage() { free(this->title); }
+	inline ~StoryPage()
+	{
+		if (!this->CleaningPool()) {
+			StoryPageElement *spe;
+			FOR_ALL_STORY_PAGE_ELEMENTS(spe) {
+				if (spe->page == this->index) delete spe;
+			}
+		}
+		free(this->title);
+	}
 };
 
-#define FOR_ALL_STORY_PAGE_ELEMENTS_FROM(var, start) FOR_ALL_ITEMS_FROM(StoryPageElement, story_page_element_index, var, start)
-#define FOR_ALL_STORY_PAGE_ELEMENTS(var) FOR_ALL_STORY_PAGE_ELEMENTS_FROM(var, 0)
 #define FOR_ALL_STORY_PAGES_FROM(var, start) FOR_ALL_ITEMS_FROM(StoryPage, story_page_index, var, start)
 #define FOR_ALL_STORY_PAGES(var) FOR_ALL_STORY_PAGES_FROM(var, 0)