related tdf#33603: update current page on SlideSorter view
Make SlideSorterView update the current page properly when it is the
MainViewShell.
Also fixes Notes Pane not properly updating on SlideSorter
view mode.
Change-Id: If4fed4e84951cb4a1707874b288ac46e6d5c26da
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168022
Tested-by: Jenkins
Reviewed-by: Sarper Akdemir <sarper.akdemir@allotropia.de>
diff --git a/sd/source/ui/slidesorter/controller/SlsCurrentSlideManager.cxx b/sd/source/ui/slidesorter/controller/SlsCurrentSlideManager.cxx
index e8fc847..684cb2d 100644
--- a/sd/source/ui/slidesorter/controller/SlsCurrentSlideManager.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsCurrentSlideManager.cxx
@@ -28,6 +28,8 @@
#include <ViewShellBase.hxx>
#include <ViewShell.hxx>
#include <DrawViewShell.hxx>
#include <DrawController.hxx>
#include <drawdoc.hxx>
#include <sdpage.hxx>
#include <FrameView.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
@@ -166,7 +168,29 @@ void CurrentSlideManager::SetCurrentSlideAtViewShellBase (const SharedPageDescri
OSL_ASSERT(rpDescriptor);
ViewShellBase* pBase = mrSlideSorter.GetViewShellBase();
if (pBase != nullptr)
if(!pBase)
return;
if (mrSlideSorter.GetViewShell() && mrSlideSorter.GetViewShell()->IsMainViewShell())
{
SdDrawDocument* pDoc = pBase->GetDocument();
if (!pDoc)
return;
// deselect all pages
for (sal_uInt16 i = 0; i < pDoc->GetSdPageCount(PageKind::Standard); i++)
pDoc->SetSelected(pDoc->GetSdPage(i, PageKind::Standard), false);
// select the given page
pDoc->SetSelected(rpDescriptor->GetPage(), true);
DrawController* pDrawController = pBase->GetDrawController();
if (!pDrawController)
return;
pDrawController->FireSelectionChangeListener();
pDrawController->FireSwitchCurrentPage(rpDescriptor->GetPage());
}
else
{
DrawViewShell* pDrawViewShell = dynamic_cast<DrawViewShell*>(
pBase->GetMainViewShell().get());
@@ -245,9 +269,7 @@ IMPL_LINK_NOARG(CurrentSlideManager, SwitchPageCallback, Timer *, void)
// it does not work always correctly (after some kinds of model
// changes). Therefore, we call DrawViewShell::SwitchPage(),
// too.
ViewShell* pViewShell = mrSlideSorter.GetViewShell();
if (pViewShell==nullptr || ! pViewShell->IsMainViewShell())
SetCurrentSlideAtViewShellBase(mpCurrentSlide);
SetCurrentSlideAtViewShellBase(mpCurrentSlide);
SetCurrentSlideAtXController(mpCurrentSlide);
}
}