diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 72961f84..2bee9ce4 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -525,7 +525,7 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) { } plugins = newPluginsList; - for (list::iterator it=editedPlugins.begin(),endit=editedPlugins.end(); it != endit; ++it) { + for (list::const_iterator it=editedPlugins.begin(),endit=editedPlugins.end(); it != endit; ++it) { list::iterator jt = find(ulist_plugins.begin(), ulist_plugins.end(), *it); if (jt != ulist_plugins.end()) { @@ -535,6 +535,30 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) { } } + for (list::iterator it=ulist_plugins.begin(),endit=ulist_plugins.end(); it != endit; ++it) { + //Double-check that the plugin is still loading after any other plugins already in its "load after" metadata. + list::iterator mainPos = find(plugins.begin(), plugins.end(), *it); + + if (mainPos == plugins.end()) + continue; + + size_t mainDist = distance(plugins.begin(), mainPos); + + set loadAfter = it->LoadAfter(); + set::iterator jt = loadAfter.begin(); + while (jt != loadAfter.end()) { + list::iterator filePos = find(plugins.begin(), plugins.end(), *jt); + + size_t fileDist = distance(plugins.begin(), filePos); + + if (fileDist > mainDist) + loadAfter.erase(jt++); + else + ++jt; + } + it->LoadAfter(loadAfter); + } + //Save edits to userlist. YAML::Emitter yout; yout.SetIndent(2);