Kaydet (Commit) 96998e0f authored tarafından Caolán McNamara's avatar Caolán McNamara

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/54126Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 3fc6ba16
......@@ -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);
};
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment