sd/source/ui/view/drviews1.cxx | 45 ++++++++++++++--------------------------- 1 file changed, 16 insertions(+), 29 deletions(-)
New commits: commit ae4c4d5db85e2a61cbef1dc045c6c2614ad36dfc Author: Justin Luth <justin.l...@collabora.com> AuthorDate: Fri Apr 4 09:48:24 2025 -0400 Commit: Justin Luth <jl...@mail.com> CommitDate: Tue Apr 8 13:48:59 2025 +0200 LOK fix nullptr dereference in DrawViewShell::SelectPage Introduced with commit ebdb73c17d884c463c3c1279678a36c2668fd8c2 Date: Tue May 26 10:17:40 2020 +0530 LOK: slide sorter: update the model on selecting multiple slides around the time of LO 7.0 There were no steps to reproduce given. This is a blind fix based on a code read and a stack trace. sd::slidesorter::SlideSorterViewShell::GetSlideSorter (this=0x0) at sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx:291 [I also took the opportunity to flatten the simply code (otherwise it would have ended up awkward with clang-format compliant formatting).] Change-Id: I78a703f51287d52cbcbae7d87ae4b455379becbd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183717 Tested-by: Jenkins Reviewed-by: Pranam Lashkari <lpra...@collabora.com> Reviewed-by: Justin Luth <jl...@mail.com> diff --git a/sd/source/ui/view/drviews1.cxx b/sd/source/ui/view/drviews1.cxx index 66410a7db385..e77211fc3496 100644 --- a/sd/source/ui/view/drviews1.cxx +++ b/sd/source/ui/view/drviews1.cxx @@ -766,40 +766,27 @@ bool DrawViewShell::ActivateObject(SdrOle2Obj* pObj, sal_Int32 nVerb) bool DrawViewShell::SelectPage(sal_uInt16 nPage, sal_uInt16 nSelect) { SdPage* pPage = GetDoc()->GetSdPage(nPage, PageKind::Standard); + if (!pPage) + return false; - //page selector marks pages to selected in view - auto &pageSelector = sd::slidesorter::SlideSorterViewShell::GetSlideSorter(GetViewShellBase())->GetSlideSorter().GetController().GetPageSelector(); + //page selector marks pages as selected in view + sd::slidesorter::SlideSorterViewShell* pSlideSorterVS + = sd::slidesorter::SlideSorterViewShell::GetSlideSorter(GetViewShellBase()); - if (pPage) + if (nSelect == 1 || (/*Toggle*/ nSelect > 1 && !pPage->IsSelected())) { - if (nSelect == 0) - { - GetDoc()->SetSelected(pPage, false); // Deselect. - pageSelector.DeselectPage(nPage); - } - else if (nSelect == 1) - { - GetDoc()->SetSelected(pPage, true); // Select. - pageSelector.SelectPage(nPage); - } - else - { - // Toggle. - if (pPage->IsSelected()) - { - GetDoc()->SetSelected(pPage, false); - pageSelector.DeselectPage(nPage); - } - else - { - GetDoc()->SetSelected(pPage, true); - pageSelector.SelectPage(nPage); - } - } - return true; + GetDoc()->SetSelected(pPage, true); // Select. + if (pSlideSorterVS) + pSlideSorterVS->GetSlideSorter().GetController().GetPageSelector().SelectPage(nPage); + } + else + { + GetDoc()->SetSelected(pPage, false); // Deselect. + if (pSlideSorterVS) + pSlideSorterVS->GetSlideSorter().GetController().GetPageSelector().DeselectPage(nPage); } - return false; + return true; } bool DrawViewShell::IsSelected(sal_uInt16 nPage)