summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-05-17 20:38:37 +0100
committerCaolán McNamara <caolanm@redhat.com>2016-05-18 12:54:38 +0100
commitbb3671180eb7327be9ac178e0d8341322f63d72a (patch)
tree1a6db9e146999d98121deb75ed388e13fce9841d /sd
parenta0de7474400ae0a84daf688de12c9344d028df93 (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.cxx15
-rw-r--r--sd/source/ui/slidesorter/model/SlideSorterModel.cxx6
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;