summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-05-11 11:16:54 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-05-11 22:03:48 +0200
commit96998e0f4c35fb9c7d39e6bb3a31b194874b091c (patch)
tree0d7a633e66d906ee5b04e58efd5d1cd0fae3e29e
parent3fc6ba164b187a2ea563cdc6ec6603b1e9357596 (diff)
Resolves: tdf#117475 page properties change triggers page reorder event
and page reorder remove and re-inserts the slide in the slide sorter, so the selected page property is removed when the page doesn't really get removed. So then there's no selection to apply the later master page property to. Change-Id: I4a32958542da1bf2f5041dde0294a772645e30ad Reviewed-on: https://gerrit.libreoffice.org/54126 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx5
-rw-r--r--sd/source/ui/slidesorter/model/SlideSorterModel.cxx29
2 files changed, 24 insertions, 10 deletions
diff --git a/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx b/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx
index 0837c565e5a5..e5d859f743be 100644
--- a/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx
+++ b/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx
@@ -216,8 +216,9 @@ private:
void AdaptSize();
SdPage* GetPage (const sal_Int32 nCoreIndex) const;
- void InsertSlide (SdPage* pPage);
- void DeleteSlide (const SdPage* pPage);
+ void InsertSlide (SdPage* pPage, bool bMarkSelected);
+ // return if this page was marked as selected before being removed
+ bool DeleteSlide (const SdPage* pPage);
void UpdateIndices (const sal_Int32 nFirstIndex);
};
diff --git a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx
index 87cd3fb240c2..062360bb52db 100644
--- a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx
+++ b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx
@@ -534,15 +534,17 @@ bool SlideSorterModel::NotifyPageEvent (const SdrPage* pSdrPage)
//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);
+ bool bSelected = DeleteSlide(pPage);
if (pPage->IsInserted())
- InsertSlide(pPage);
+ {
+ InsertSlide(pPage, bSelected);
+ }
CheckModel(*this);
return true;
}
-void SlideSorterModel::InsertSlide (SdPage* pPage)
+void SlideSorterModel::InsertSlide(SdPage* pPage, bool bMarkSelected)
{
// Find the index at which to insert the given page.
sal_uInt16 nCoreIndex (pPage->GetPageNum());
@@ -559,19 +561,24 @@ void SlideSorterModel::InsertSlide (SdPage* pPage)
if (GetPage(nIndex+1) != GetPageDescriptor(nIndex)->GetPage())
return;
+ auto iter = maPageDescriptors.begin() + nIndex;
+
// Insert the given page at index nIndex
- maPageDescriptors.insert(
- maPageDescriptors.begin()+nIndex,
+ iter = maPageDescriptors.insert(
+ iter,
std::make_shared<PageDescriptor>(
Reference<drawing::XDrawPage>(mxSlides->getByIndex(nIndex),UNO_QUERY),
pPage,
nIndex));
+ if (bMarkSelected)
+ (*iter)->SetState(PageDescriptor::ST_Selected, true);
+
// Update page indices.
UpdateIndices(nIndex+1);
}
-void SlideSorterModel::DeleteSlide (const SdPage* pPage)
+bool SlideSorterModel::DeleteSlide (const SdPage* pPage)
{
sal_Int32 nIndex(0);
@@ -594,15 +601,21 @@ void SlideSorterModel::DeleteSlide (const SdPage* pPage)
}
}
+ bool bMarkedSelected(false);
+
if(nIndex >= 0 && nIndex < static_cast<sal_Int32>(maPageDescriptors.size()))
{
if (maPageDescriptors[nIndex])
if (maPageDescriptors[nIndex]->GetPage() != pPage)
- return;
+ return false;
- maPageDescriptors.erase(maPageDescriptors.begin()+nIndex);
+ auto iter = maPageDescriptors.begin() + nIndex;
+ bMarkedSelected = (*iter)->HasState(PageDescriptor::ST_Selected);
+ maPageDescriptors.erase(iter);
UpdateIndices(nIndex);
}
+
+ return bMarkedSelected;
}
void SlideSorterModel::UpdateIndices (const sal_Int32 nFirstIndex)