]> git.lyx.org Git - lyx.git/commitdiff
Fix how viewer_alternatives and editor_alternatives are written
authorRichard Heck <rgheck@comcast.net>
Sat, 17 Oct 2009 18:02:40 +0000 (18:02 +0000)
committerRichard Heck <rgheck@comcast.net>
Sat, 17 Oct 2009 18:02:40 +0000 (18:02 +0000)
to the preferences file. The old way produced tons of duplicates.
The fix is the same as for a prior bug with bibtex_alternatives.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@31652 a592a061-630c-0410-9148-cb99ea01b6c8

src/LyXRC.cpp

index 92850061d03a4e5e68a0f56a615b21b63f18832a..f60abd49f0c126d9ed7bb6c1a9b06905cc8d4838 100644 (file)
@@ -2491,26 +2491,36 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                                   << "\" \"\" \"\" \"\" \"\" \"\" \"\"\n";
                if (tag != RC_LAST)
                        break;
-       case RC_VIEWER_ALTERNATIVES:
-               if (ignore_system_lyxrc ||
-                   viewer_alternatives != system_lyxrc.viewer_alternatives) {
-                       for (vector<pair<string, string> >::const_iterator it = viewer_alternatives.begin();
-                            it != viewer_alternatives.end(); ++it)
-                       os << "\\viewer_alternatives "
-                          << it->first << " " << it->second << "\n";
+       case RC_VIEWER_ALTERNATIVES: {
+               vector<pair<string, string> >::const_iterator it = viewer_alternatives.begin();
+               vector<pair<string, string> >::const_iterator const en = viewer_alternatives.end();
+               vector<pair<string, string> >::const_iterator const sysbeg = 
+                               system_lyxrc.viewer_alternatives.begin();
+               vector<pair<string, string> >::const_iterator const sysend = 
+                               system_lyxrc.viewer_alternatives.end();
+               for ( ; it != en; ++it) {
+                       if (ignore_system_lyxrc || find(sysbeg, sysend, *it) == sysend)
+                               os << "\\viewer_alternatives "
+                                               << it->first << " " << it->second << "\n";
                }
                if (tag != RC_LAST)
                        break;
-       case RC_EDITOR_ALTERNATIVES:
-               if (ignore_system_lyxrc ||
-                   editor_alternatives != system_lyxrc.editor_alternatives) {
-                       for (vector<pair<string, string> >::const_iterator it = editor_alternatives.begin();
-                            it != editor_alternatives.end(); ++it)
-                       os << "\\editor_alternatives "
-                          << it->first << " " << it->second << "\n";
+       }
+       case RC_EDITOR_ALTERNATIVES: {
+               vector<pair<string, string> >::const_iterator it = editor_alternatives.begin();
+               vector<pair<string, string> >::const_iterator const en = editor_alternatives.end();
+               vector<pair<string, string> >::const_iterator const sysbeg = 
+                               system_lyxrc.editor_alternatives.begin();
+               vector<pair<string, string> >::const_iterator const sysend = 
+                               system_lyxrc.editor_alternatives.end();
+               for ( ; it != en; ++it) {
+                       if (ignore_system_lyxrc || find(sysbeg, sysend, *it) == sysend)
+                               os << "\\editor_alternatives "
+                                               << it->first << " " << it->second << "\n";
                }
                if (tag != RC_LAST)
                        break;
+       }
        case RC_DEFAULT_VIEW_FORMAT:
                if (ignore_system_lyxrc ||
                    default_view_format != system_lyxrc.default_view_format) {