From 50d05236226d04d3854008073420282b8d21f614 Mon Sep 17 00:00:00 2001 From: Tannin Date: Fri, 7 Jun 2013 18:16:52 +0200 Subject: - 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 --- src/pluginlist.cpp | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'src/pluginlist.cpp') 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(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(); } -- cgit v1.3.1