From bfb6334ca85f370cae7bccc699026a39eae0128d Mon Sep 17 00:00:00 2001 From: Vojtech Bocek Date: Sat, 8 Feb 2014 00:32:31 +0100 Subject: Properly delete all GUIObjects and pages on theme reload Signed-off-by: Vojtech Bocek Change-Id: I8df41877f8f4439a434becfd47a9914b50649b34 --- gui/input.cpp | 1 - gui/keyboard.cpp | 3 --- gui/pages.cpp | 27 +++++++++++++++++++++++++++ gui/pages.hpp | 7 ++++--- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/gui/input.cpp b/gui/input.cpp index e4020745c..b0065609e 100644 --- a/gui/input.cpp +++ b/gui/input.cpp @@ -216,7 +216,6 @@ GUIInput::~GUIInput() if (mInputText) delete mInputText; if (mBackground) delete mBackground; if (mCursor) delete mCursor; - if (mFont) delete mFont; if (mAction) delete mAction; } diff --git a/gui/keyboard.cpp b/gui/keyboard.cpp index f08d71488..78e27a164 100644 --- a/gui/keyboard.cpp +++ b/gui/keyboard.cpp @@ -304,10 +304,7 @@ GUIKeyboard::GUIKeyboard(xml_node<>* node) GUIKeyboard::~GUIKeyboard() { - int layoutindex; - for (layoutindex=0; layoutindex* page, xml_node<>* templates /* = NULL */) return; } +Page::~Page() +{ + for (std::vector::iterator itr = mObjects.begin(); itr != mObjects.end(); ++itr) + delete *itr; +} + bool Page::ProcessNode(xml_node<>* page, xml_node<>* templates /* = NULL */, int depth /* = 0 */) { if (depth == 10) @@ -225,86 +231,101 @@ bool Page::ProcessNode(xml_node<>* page, xml_node<>* templates /* = NULL */, int if (type == "text") { GUIText* element = new GUIText(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } else if (type == "image") { GUIImage* element = new GUIImage(child); + mObjects.push_back(element); mRenders.push_back(element); } else if (type == "fill") { GUIFill* element = new GUIFill(child); + mObjects.push_back(element); mRenders.push_back(element); } else if (type == "action") { GUIAction* element = new GUIAction(child); + mObjects.push_back(element); mActions.push_back(element); } else if (type == "console") { GUIConsole* element = new GUIConsole(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } else if (type == "button") { GUIButton* element = new GUIButton(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } else if (type == "checkbox") { GUICheckbox* element = new GUICheckbox(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } else if (type == "fileselector") { GUIFileSelector* element = new GUIFileSelector(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } else if (type == "animation") { GUIAnimation* element = new GUIAnimation(child); + mObjects.push_back(element); mRenders.push_back(element); } else if (type == "progressbar") { GUIProgressBar* element = new GUIProgressBar(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } else if (type == "slider") { GUISlider* element = new GUISlider(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } else if (type == "slidervalue") { GUISliderValue *element = new GUISliderValue(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } else if (type == "listbox") { GUIListBox* element = new GUIListBox(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } else if (type == "keyboard") { GUIKeyboard* element = new GUIKeyboard(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } else if (type == "input") { GUIInput* element = new GUIInput(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); mInputs.push_back(element); @@ -312,6 +333,7 @@ bool Page::ProcessNode(xml_node<>* page, xml_node<>* templates /* = NULL */, int else if (type == "partitionlist") { GUIPartitionList* element = new GUIPartitionList(child); + mObjects.push_back(element); mRenders.push_back(element); mActions.push_back(element); } @@ -526,6 +548,9 @@ PageSet::PageSet(char* xmlFile) PageSet::~PageSet() { + for (std::vector::iterator itr = mPages.begin(); itr != mPages.end(); ++itr) + delete *itr; + delete mResources; free(mXmlFile); } @@ -869,6 +894,8 @@ int PageManager::ReloadPackage(std::string name, std::string package) } if (mCurrentSet == set) SelectPackage(name); + if (mBaseSet == set) + mBaseSet = mCurrentSet; delete set; return 0; } diff --git a/gui/pages.hpp b/gui/pages.hpp index 2a2ef2c32..23ceee9c8 100644 --- a/gui/pages.hpp +++ b/gui/pages.hpp @@ -29,14 +29,14 @@ class RenderObject; class ActionObject; class InputObject; class MouseCursor; +class GUIObject; class Page { -public: - virtual ~Page() {} - public: Page(xml_node<>* page, xml_node<>* templates = NULL); + virtual ~Page(); + std::string GetName(void) { return mName; } public: @@ -51,6 +51,7 @@ public: protected: std::string mName; + std::vector mObjects; std::vector mRenders; std::vector mActions; std::vector mInputs; -- cgit v1.2.3