summaryrefslogtreecommitdiff
path: root/src/pluginlist.cpp
diff options
context:
space:
mode:
authorTannin <devnull@localhost>2013-06-07 18:16:52 +0200
committerTannin <devnull@localhost>2013-06-07 18:16:52 +0200
commit50d05236226d04d3854008073420282b8d21f614 (patch)
tree67f4916017f52f1d1b8d746c81b19de808a3568a /src/pluginlist.cpp
parent97111de1409a59eea9e7ab5050ab70f4d01ddb8e (diff)
- locking/unlocking esps can now be done for the whole selection
- bugfix: MO crashed if the locked index file is borked. This shouldn't happen anymore so I'm not sure how that file breaks to begin with
Diffstat (limited to 'src/pluginlist.cpp')
-rw-r--r--src/pluginlist.cpp31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index b5bb483b..20bdbee0 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -717,20 +717,29 @@ void PluginList::setPluginPriority(int row, int &newPriority)
}
}
- int oldPriority = m_ESPs[row].m_Priority;
- if (newPriorityTemp > oldPriority) {
- // priority is higher than the old, so the gap we left is in lower priorities
- for (int i = oldPriority + 1; i <= newPriorityTemp; ++i) {
- --m_ESPs[m_ESPsByPriority[i]].m_Priority;
- }
- } else {
- for (int i = newPriorityTemp; i < oldPriority; ++i) {
- ++m_ESPs[m_ESPsByPriority[i]].m_Priority;
+ // enforce valid range
+ if (newPriorityTemp < 0) newPriorityTemp = 0;
+ else if (newPriorityTemp >= static_cast<int>(m_ESPsByPriority.size())) newPriorityTemp = m_ESPsByPriority.size() - 1;
+
+ try {
+ int oldPriority = m_ESPs.at(row).m_Priority;
+ if (newPriorityTemp > oldPriority) {
+ // priority is higher than the old, so the gap we left is in lower priorities
+ for (int i = oldPriority + 1; i <= newPriorityTemp; ++i) {
+ --m_ESPs.at(m_ESPsByPriority.at(i)).m_Priority;
+ }
+ } else {
+ for (int i = newPriorityTemp; i < oldPriority; ++i) {
+ ++m_ESPs.at(m_ESPsByPriority.at(i)).m_Priority;
+ }
+ ++newPriority;
}
- ++newPriority;
+
+ m_ESPs.at(row).m_Priority = newPriorityTemp;
+ } catch (const std::out_of_range&) {
+ reportError(tr("failed to restore load order for %1").arg(m_ESPs[row].m_Name));
}
- m_ESPs[row].m_Priority = newPriorityTemp;
updateIndices();
}