summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2014-04-25 19:27:57 +0100
committerCaolán McNamara <caolanm@redhat.com>2014-04-25 20:43:33 +0100
commitb7197cfe5d207b171412760c6d72353f31947e93 (patch)
treec70bd16b68ccf8bc187acdc591526bff759bc3b8
parente56ff47c65c6924e2c58d365c83c4db50eb87bb2 (diff)
Related: rhbz#1032774 slide restarter should disable auto-exit
The scenario is a pps that exits the app when the presentation is complete. But using "switch screens" in the presenter console will stop and restart the presentation. So protect that "stop" against existing by disabling the autoexit and restoring it afterwards Change-Id: Id986ad7e3cfafb8068540fb90d05443f329b554c
-rw-r--r--sd/source/ui/inc/slideshow.hxx5
-rw-r--r--sd/source/ui/slideshow/SlideShowRestarter.cxx3
-rw-r--r--sd/source/ui/slideshow/slideshow.cxx20
3 files changed, 22 insertions, 6 deletions
diff --git a/sd/source/ui/inc/slideshow.hxx b/sd/source/ui/inc/slideshow.hxx
index 74ebfa68927b..0b87ebadc0e2 100644
--- a/sd/source/ui/inc/slideshow.hxx
+++ b/sd/source/ui/inc/slideshow.hxx
@@ -181,6 +181,9 @@ public:
static sal_Int32 GetDisplay();
+ bool IsExitAfterPresenting() const;
+ void SetExitAfterPresenting(bool bExit);
+
private:
SlideShow( SdDrawDocument* pDoc );
@@ -190,7 +193,7 @@ private:
void StartInPlacePresentation();
void StartFullscreenPresentation();
- void ThrowIfDisposed() throw (::com::sun::star::uno::RuntimeException);
+ void ThrowIfDisposed() const throw (css::uno::RuntimeException);
void CreateController( ViewShell* pViewSh, ::sd::View* pView, ::Window* pParentWindow );
WorkWindow *GetWorkWindow();
diff --git a/sd/source/ui/slideshow/SlideShowRestarter.cxx b/sd/source/ui/slideshow/SlideShowRestarter.cxx
index 822e8bee6db3..63fae1125082 100644
--- a/sd/source/ui/slideshow/SlideShowRestarter.cxx
+++ b/sd/source/ui/slideshow/SlideShowRestarter.cxx
@@ -83,7 +83,10 @@ IMPL_LINK_NOARG(SlideShowRestarter, EndPresentation)
{
if (mnDisplayCount != (sal_Int32)Application::GetScreenCount())
{
+ bool bIsExitAfterPresenting = mpSlideShow->IsExitAfterPresenting();
+ mpSlideShow->SetExitAfterPresenting(false);
mpSlideShow->end();
+ mpSlideShow->SetExitAfterPresenting(bIsExitAfterPresenting);
// The following piece of code should not be here because the
// slide show should be aware of the existence of the presenter
diff --git a/sd/source/ui/slideshow/slideshow.cxx b/sd/source/ui/slideshow/slideshow.cxx
index 594aaa2a7be9..279bd8b45445 100644
--- a/sd/source/ui/slideshow/slideshow.cxx
+++ b/sd/source/ui/slideshow/slideshow.cxx
@@ -147,16 +147,12 @@ SlideShow::SlideShow( SdDrawDocument* pDoc )
{
}
-
-
-void SlideShow::ThrowIfDisposed() throw (RuntimeException)
+void SlideShow::ThrowIfDisposed() const throw (RuntimeException)
{
if( mpDoc == 0 )
throw DisposedException();
}
-
-
/// used by the model to create a slideshow for it
rtl::Reference< SlideShow > SlideShow::Create( SdDrawDocument* pDoc )
{
@@ -679,6 +675,20 @@ WorkWindow *SlideShow::GetWorkWindow()
return dynamic_cast<WorkWindow*>(pShell->GetViewFrame()->GetTopFrame().GetWindow().GetParent());
}
+bool SlideShow::IsExitAfterPresenting() const
+{
+ SolarMutexGuard aGuard;
+ ThrowIfDisposed();
+ return mpDoc->IsExitAfterPresenting();
+}
+
+void SlideShow::SetExitAfterPresenting(bool bExit)
+{
+ SolarMutexGuard aGuard;
+ ThrowIfDisposed();
+ mpDoc->SetExitAfterPresenting(bExit);
+}
+
void SAL_CALL SlideShow::end()
throw (RuntimeException, std::exception)
{