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 | |
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')
-rw-r--r-- | sd/source/ui/slidesorter/controller/SlsSelectionObserver.cxx | 15 | ||||
-rw-r--r-- | sd/source/ui/slidesorter/model/SlideSorterModel.cxx | 6 |
2 files changed, 12 insertions, 9 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() diff --git a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx index 68fc9a0450ed..dae17c57fb8d 100644 --- a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx +++ b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx @@ -533,10 +533,12 @@ bool SlideSorterModel::NotifyPageEvent (const SdrPage* pSdrPage) if (pPage->IsMasterPage() != (meEditMode==EM_MASTERPAGE)) return false; + //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 + DeleteSlide(pPage); if (pPage->IsInserted()) InsertSlide(pPage); - else - DeleteSlide(pPage); CheckModel(*this); return true; |