From c573ab4976890b2ea43763fe63a1877009acaef2 Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Thu, 6 Nov 2008 14:59:14 +0000 Subject: [PATCH] Fix final default-module-related bug reported by Philippe. The comments in the code should explain what the problem was. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@27313 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/BufferParams.cpp | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 7c4e4b42e0..852c4fe6aa 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -1522,9 +1522,15 @@ void BufferParams::addDefaultModules() list::const_iterator mit = mods.begin(); list::const_iterator men = mods.end(); - // we want to add these to the front, but in the right order, - // so we collect them here first. - list modulesToAdd; + // We want to insert the default modules at the beginning of + // the list, but also to insert them in the correct order. + // The obvious thing to do would be to collect them and then + // insert them, but that doesn't work because a later default + // module may require an earlier one, and then the test below + // moduleCanBeAdded(modname) + // will fail. So we have to do it a more complicated way. + list::iterator insertpos = layoutModules_.begin(); + int numinserts = 0; for (; mit != men; mit++) { string const & modName = *mit; @@ -1536,17 +1542,20 @@ void BufferParams::addDefaultModules() continue; } - if (moduleCanBeAdded(modName)) { - LYXERR(Debug::TCLASS, "Default module `" << modName << "' added."); - modulesToAdd.push_back(modName); - } else - LYXERR(Debug::TCLASS, - "Default module `" << modName << "' could not be added."); + if (!moduleCanBeAdded(modName)) { + // FIXME This could be because it's already present, so we should + // probably return something indicating that. + LYXERR(Debug::TCLASS, "Default module `" << modName << + "' could not be added."); + continue; + } + LYXERR(Debug::TCLASS, "Default module `" << modName << "' added."); + layoutModules_.insert(insertpos, modName); + // now we reset insertpos + ++numinserts; + insertpos = layoutModules_.begin(); + advance(insertpos, numinserts); } - - // OK, now we can add the default modules. - layoutModules_.insert( - layoutModules_.begin(), modulesToAdd.begin(), modulesToAdd.end()); }