summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gui/action.cpp7
-rw-r--r--gui/pages.cpp36
-rw-r--r--gui/pages.hpp1
3 files changed, 29 insertions, 15 deletions
diff --git a/gui/action.cpp b/gui/action.cpp
index c298d02af..8ea1dae82 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -385,8 +385,9 @@ int GUIAction::doActions()
}
else
{
- for (it = mActions.begin(); it != mActions.end(); ++it)
- doAction(*it);
+ const size_t cnt = mActions.size();
+ for (size_t i = 0; i < cnt; ++i)
+ doAction(mActions[i]);
}
return 0;
@@ -484,7 +485,6 @@ int GUIAction::reload(std::string arg)
int check = 0, ret_val = 0;
std::string theme_path;
- operation_start("Reload Theme");
theme_path = DataManager::GetSettingsStoragePath();
if (PartitionManager.Mount_By_Path(theme_path.c_str(), 1) < 0) {
LOGERR("Unable to mount %s during reload function startup.\n", theme_path.c_str());
@@ -502,7 +502,6 @@ int GUIAction::reload(std::string arg)
ret_val = 1;
}
}
- operation_end(ret_val);
return 0;
}
diff --git a/gui/pages.cpp b/gui/pages.cpp
index aae85aec9..94c351be2 100644
--- a/gui/pages.cpp
+++ b/gui/pages.cpp
@@ -557,11 +557,16 @@ PageSet::~PageSet()
{
for (std::vector<Page*>::iterator itr = mPages.begin(); itr != mPages.end(); ++itr)
delete *itr;
- for (std::vector<xml_node<>*>::iterator itr2 = templates.begin(); itr2 != templates.end(); ++itr2)
- delete *itr2;
delete mResources;
free(mXmlFile);
+
+ mDoc.clear();
+
+ for (std::vector<xml_document<>*>::iterator itr = mIncludedDocs.begin(); itr != mIncludedDocs.end(); ++itr) {
+ (*itr)->clear();
+ delete *itr;
+ }
}
int PageSet::Load(ZipArchive* package)
@@ -605,7 +610,7 @@ int PageSet::Load(ZipArchive* package)
return -1;
}
}
-
+
return CheckInclude(package, &mDoc);
}
@@ -620,7 +625,7 @@ int PageSet::CheckInclude(ZipArchive* package, xml_document<> *parentDoc)
long len;
char* xmlFile = NULL;
string filename;
- xml_document<> doc;
+ xml_document<> *doc = NULL;
par = parentDoc->first_node("recovery");
if (!par) {
@@ -682,11 +687,14 @@ int PageSet::CheckInclude(ZipArchive* package, xml_document<> *parentDoc)
return -1;
}
}
- doc.parse<0>(xmlFile);
- parent = doc.first_node("recovery");
+ xmlFile[len] = '\0';
+ doc = new xml_document<>();
+ doc->parse<0>(xmlFile);
+
+ parent = doc->first_node("recovery");
if (!parent)
- parent = doc.first_node("install");
+ parent = doc->first_node("install");
// Now, let's parse the XML
LOGINFO("Loading included resources...\n");
@@ -711,11 +719,17 @@ int PageSet::CheckInclude(ZipArchive* package, xml_document<> *parentDoc)
templates.push_back(xmltemplate);
child = parent->first_node("pages");
- if (child)
- if (LoadPages(child))
- return -1;
+ if (child && LoadPages(child))
+ {
+ templates.pop_back();
+ doc->clear();
+ delete doc;
+ return -1;
+ }
+
+ mIncludedDocs.push_back(doc);
- if (CheckInclude(package, &doc))
+ if (CheckInclude(package, doc))
return -1;
chld = chld->next_sibling("xmlfile");
diff --git a/gui/pages.hpp b/gui/pages.hpp
index 2ce3e13a4..b042c0db8 100644
--- a/gui/pages.hpp
+++ b/gui/pages.hpp
@@ -111,6 +111,7 @@ protected:
std::vector<xml_node<>*> templates;
Page* mCurrentPage;
Page* mOverlayPage; // This is a special case, used for "locking" the screen
+ std::vector<xml_document<>*> mIncludedDocs;
};
class PageManager