From bb3671180eb7327be9ac178e0d8341322f63d72a Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Tue, 17 May 2016 20:38:37 +0100 Subject: 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 --- .../ui/slidesorter/controller/SlsSelectionObserver.cxx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx') 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::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::iterator iPage( - ::std::find(maInsertedPages.begin(), maInsertedPages.end(), pPage)); - if (iPage != maInsertedPages.end()) - maInsertedPages.erase(iPage); - } } void SelectionObserver::StartObservation() -- cgit