diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-05-17 20:38:37 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-05-18 12:54:38 +0100 |
commit | bb3671180eb7327be9ac178e0d8341322f63d72a (patch) | |
tree | 1a6db9e146999d98121deb75ed388e13fce9841d /sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx | |
parent | a0de7474400ae0a84daf688de12c9344d028df93 (diff) |
Related: tdf#99523 NotifyPageEvent ultimately comes from HINT_PAGEORDERCHG...
which is called for removepage, insertpage *and* change page number. e.g.
ctrl+shift+end and similar *move* the page, in those cases not removing before
adding results in duplicate pages/slides in the list, causing inconsistencies
on what gets selected on undo
Change-Id: I7e0a0231e90a77adea03619a0dd92ddbbcbba442
Diffstat (limited to 'sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx')
-rw-r--r-- | sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx index 18b77b620994..cf1ed111faaf 100644 --- a/sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx +++ b/sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx @@ -75,15 +75,16 @@ void SelectionObserver::NotifyPageEvent (const SdrPage* pSdrPage) if (pPage == nullptr) return; + //NotifyPageEvent is called for add, remove, *and* change position so for + //the change position case we must ensure we don't end up with the slide + //duplicated in our list + std::vector<const SdPage*>::iterator iPage( + std::find(maInsertedPages.begin(), maInsertedPages.end(), pPage)); + if (iPage != maInsertedPages.end()) + maInsertedPages.erase(iPage); + if (pPage->IsInserted()) maInsertedPages.push_back(pPage); - else - { - ::std::vector<const SdPage*>::iterator iPage( - ::std::find(maInsertedPages.begin(), maInsertedPages.end(), pPage)); - if (iPage != maInsertedPages.end()) - maInsertedPages.erase(iPage); - } } void SelectionObserver::StartObservation() |