diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2016-04-15 13:07:54 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2016-04-15 12:47:56 +0000 |
commit | 67abc250e5f30844797996e09e66e61c2ef214db (patch) | |
tree | 70e421ac7d5d05fca5674794b5203fdb4299ea2c | |
parent | 00d6a4b24b497e35595dfe8181af9522440c9aab (diff) |
fix InsertTab and DeleteTab in ScMarkData, tdf#72240
Change-Id: Id3168e4cac6c52b36833b454518cce55b51e36b4
Reviewed-on: https://gerrit.libreoffice.org/24103
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
-rw-r--r-- | sc/source/core/data/markdata.cxx | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/sc/source/core/data/markdata.cxx b/sc/source/core/data/markdata.cxx index 154a6938a204..53a5023677ae 100644 --- a/sc/source/core/data/markdata.cxx +++ b/sc/source/core/data/markdata.cxx @@ -512,20 +512,29 @@ bool ScMarkData::HasAnyMultiMarks() const void ScMarkData::InsertTab( SCTAB nTab ) { - std::set<SCTAB> tabMarked(maTabMarked.begin(), maTabMarked.upper_bound(nTab)); - std::set<SCTAB>::iterator it = maTabMarked.upper_bound(nTab); - for (; it != maTabMarked.end(); ++it) - tabMarked.insert(*it + 1); + std::set<SCTAB> tabMarked; + for (auto itr = maTabMarked.begin(), itrEnd = maTabMarked.end(); + itr != itrEnd; ++itr) + { + if (*itr < nTab) + tabMarked.insert(*itr); + else if (*itr >= nTab) + tabMarked.insert(*itr + 1); + } maTabMarked.swap(tabMarked); } void ScMarkData::DeleteTab( SCTAB nTab ) { - std::set<SCTAB> tabMarked(maTabMarked.begin(), maTabMarked.find(nTab)); - tabMarked.erase( nTab ); - std::set<SCTAB>::iterator it = maTabMarked.find(nTab); - for (; it != maTabMarked.end(); ++it) - tabMarked.insert(*it + 1); + std::set<SCTAB> tabMarked; + for (auto itr = maTabMarked.begin(), itrEnd = maTabMarked.end(); + itr != itrEnd; ++itr) + { + if (*itr < nTab) + tabMarked.insert(*itr); + else if (*itr > nTab) + tabMarked.insert(*itr - 1); + } maTabMarked.swap(tabMarked); } |