]> git.lyx.org Git - features.git/commitdiff
Fix final default-module-related bug reported by Philippe. The comments
authorRichard Heck <rgheck@comcast.net>
Thu, 6 Nov 2008 14:59:14 +0000 (14:59 +0000)
committerRichard Heck <rgheck@comcast.net>
Thu, 6 Nov 2008 14:59:14 +0000 (14:59 +0000)
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

index 7c4e4b42e05632ea1fc51761b25c247f088b8dd8..852c4fe6aa242bf2947559a45a2b56c8e1d6bdd3 100644 (file)
@@ -1522,9 +1522,15 @@ void BufferParams::addDefaultModules()
        list<string>::const_iterator mit = mods.begin();
        list<string>::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<string> 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<string>::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());
 }