From c284e3b5539f1e21c0e1f245cefd20d28959206c Mon Sep 17 00:00:00 2001 From: Bidouille Date: Tue, 23 Jan 2024 10:27:43 +0100 Subject: [PATCH 1/2] Fix for issue 60859 If 1st slide is hidden and selected, show presentation does start after this. Thanks to iammisc for this patch --- main/sd/source/ui/slideshow/slideshowimpl.cxx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/main/sd/source/ui/slideshow/slideshowimpl.cxx b/main/sd/source/ui/slideshow/slideshowimpl.cxx index c6280438be..ef000f8d7b 100644 --- a/main/sd/source/ui/slideshow/slideshowimpl.cxx +++ b/main/sd/source/ui/slideshow/slideshowimpl.cxx @@ -145,7 +145,7 @@ class AnimationSlideController public: AnimationSlideController( Reference< XIndexAccess > xSlides, Mode eMode ); - void setStartSlideNumber( sal_Int32 nSlideNumber ) { mnStartSlideNumber = nSlideNumber; } + void setStartSlideNumber( sal_Int32 nSlideNumber ); sal_Int32 getStartSlideIndex() const; sal_Int32 getCurrentSlideNumber() const; @@ -236,6 +236,17 @@ AnimationSlideController::AnimationSlideController( Reference< XIndexAccess > xS mnSlideCount = xSlides->getCount(); } +void AnimationSlideController::setStartSlideNumber( sal_Int32 nSlideNumber ) +{ + while( ( !maSlideVisible[nSlideNumber] ) + || ( nSlideNumber > maSlideVisible.size() ) ) nSlideNumber++; + + if(nSlideNumber > maSlideVisible.size()) + mnStartSlideNumber = 0; + else + mnStartSlideNumber = nSlideNumber; +} + sal_Int32 AnimationSlideController::getStartSlideIndex() const { if( mnStartSlideNumber >= 0 ) From 4ac3bde70fd91802a5ddff308c1ad71e97d33629 Mon Sep 17 00:00:00 2001 From: Arrigo Marchiori Date: Fri, 29 Mar 2024 21:25:07 +0100 Subject: [PATCH 2/2] Search forward or backward for a visible slide Fixes bug #60859 --- main/sd/source/ui/slideshow/slideshowimpl.cxx | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/main/sd/source/ui/slideshow/slideshowimpl.cxx b/main/sd/source/ui/slideshow/slideshowimpl.cxx index ef000f8d7b..0c18b3b676 100644 --- a/main/sd/source/ui/slideshow/slideshowimpl.cxx +++ b/main/sd/source/ui/slideshow/slideshowimpl.cxx @@ -238,13 +238,23 @@ AnimationSlideController::AnimationSlideController( Reference< XIndexAccess > xS void AnimationSlideController::setStartSlideNumber( sal_Int32 nSlideNumber ) { - while( ( !maSlideVisible[nSlideNumber] ) - || ( nSlideNumber > maSlideVisible.size() ) ) nSlideNumber++; - - if(nSlideNumber > maSlideVisible.size()) - mnStartSlideNumber = 0; - else - mnStartSlideNumber = nSlideNumber; + mnStartSlideNumber = nSlideNumber; + if ( maSlideVisible[mnStartSlideNumber] ) + return; + // Search forward for the first visible slide + for ( ; ( (size_t)mnStartSlideNumber < maSlideVisible.size() ) ; + mnStartSlideNumber++ ) { + if ( maSlideVisible[mnStartSlideNumber] ) + return; + } + // Search backward for the first visible slide + for (mnStartSlideNumber = nSlideNumber ; + ( mnStartSlideNumber >= 0 ) ; mnStartSlideNumber-- ) { + if ( maSlideVisible[mnStartSlideNumber] ) + return; + } + // No visible slides! Surrender to the request + mnStartSlideNumber = nSlideNumber; } sal_Int32 AnimationSlideController::getStartSlideIndex() const