diff --git a/IDE/src/Settings.bf b/IDE/src/Settings.bf index 88519861..8c04e8a7 100644 --- a/IDE/src/Settings.bf +++ b/IDE/src/Settings.bf @@ -39,20 +39,36 @@ namespace IDE { sd.GetString("Bin32Path", mBin32Path); sd.GetString("Bin64Path", mBin64Path); - ClearAndDeleteItems(mLib32Paths); - for (sd.Enumerate("Lib32Paths")) + + void ReadPaths(String pathName, List paths) { - var str = new String(); - sd.GetCurString(str); - mLib32Paths.Add(str); - } - ClearAndDeleteItems(mLib64Paths); - for (sd.Enumerate("Lib64Paths")) - { - var str = new String(); - sd.GetCurString(str); - mLib64Paths.Add(str); + HashSet newPaths = scope .(); + List prevPaths = scope .(); + for (var str in paths) + prevPaths.Add(str); + paths.Clear(); + + for (sd.Enumerate(pathName)) + { + var str = new String(); + sd.GetCurString(str); + if (newPaths.Add(str)) + paths.Add(str); + else + delete str; + } + + for (var path in prevPaths) + { + if (!newPaths.Contains(path)) + paths.Add(path); + else + delete path; + } } + + ReadPaths("Lib32Paths", mLib32Paths); + ReadPaths("Lib64Paths", mLib64Paths); } [CLink, StdCall] @@ -68,6 +84,9 @@ namespace IDE #if BF_PLATFORM_WINDOWS StringView vsInfo = .(VSSupport_Find()); + ClearAndDeleteItems(mLib32Paths); + ClearAndDeleteItems(mLib64Paths); + for (var infoStr in vsInfo.Split('\n')) { if (infoStr.IsEmpty)