diff options
author | Tibor Nagy <tibor.nagy.extern@allotropia.de> | 2024-09-10 12:04:13 +0200 |
---|---|---|
committer | Thorsten Behrens <thorsten.behrens@allotropia.de> | 2024-09-11 00:03:13 +0200 |
commit | 34411f4e5fd04f16cdd1a443b3bce35c0ed71fda (patch) | |
tree | 19481133e3b9c113f7fd084de2a3ea5e0d168526 | |
parent | 5d2297f35201a14543b6fe551cb8a238d6742f23 (diff) |
tdf#76981 sd: opening linked presentation in slideshow mode (part2)cib_contract49c-24.2.6.2.M1
If an MSO presentation(pptx,ppt) is opened via a document link while in
slideshow mode, the linked presentation should open in slideshow mode
and close when finished. If it is opened while in editing mode, the
linked presentation should open in editing mode.
Change-Id: Ia9df1e4daa55dc697285a3778102a850e2f6098c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173130
Tested-by: Jenkins
Reviewed-by: Nagy Tibor <tibor.nagy.extern@allotropia.de>
(cherry picked from commit a781e5ad356ad0fb86eb8210a2c570fdd276ceac)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173103
Tested-by: allotropia jenkins <jenkins@allotropia.de>
Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
-rw-r--r-- | sd/source/ui/docshell/docshel4.cxx | 38 | ||||
-rw-r--r-- | sfx2/source/appl/appopen.cxx | 16 |
2 files changed, 46 insertions, 8 deletions
diff --git a/sd/source/ui/docshell/docshel4.cxx b/sd/source/ui/docshell/docshel4.cxx index 6e995937215d..63722ba11c68 100644 --- a/sd/source/ui/docshell/docshel4.cxx +++ b/sd/source/ui/docshell/docshel4.cxx @@ -433,10 +433,22 @@ bool DrawDocShell::ImportFrom(SfxMedium &rMedium, const bool bRet = SfxObjectShell::ImportFrom(rMedium, xInsertPosition); SfxItemSet& rSet = rMedium.GetItemSet(); - if( SfxItemState::SET == rSet.GetItemState(SID_DOC_STARTPRESENTATION)&& - rSet.Get( SID_DOC_STARTPRESENTATION ).GetValue() ) + if( SfxItemState::SET == rSet.GetItemState(SID_DOC_STARTPRESENTATION) ) { - mpDoc->SetStartWithPresentation( true ); + sal_uInt16 nStartingSlide = rSet.Get(SID_DOC_STARTPRESENTATION).GetValue(); + if (nStartingSlide == 0) + { + OUString sStartPage = mpDoc->getPresentationSettings().maPresPage; + if (!sStartPage.isEmpty()) + { + bool bIsMasterPage = false; + sal_uInt16 nPageNumb = mpDoc->GetPageByName(sStartPage, bIsMasterPage); + nStartingSlide = (nPageNumb + 1) / 2; + } + else + nStartingSlide = 1; + } + mpDoc->SetStartWithPresentation(nStartingSlide); // tell SFX to change viewshell when in preview mode if( IsPreview() ) @@ -465,11 +477,23 @@ bool DrawDocShell::ConvertFrom( SfxMedium& rMedium ) mpDoc->SetStarDrawPreviewMode( true ); } - if( SfxItemState::SET == rSet.GetItemState(SID_DOC_STARTPRESENTATION)&& - rSet.Get( SID_DOC_STARTPRESENTATION ).GetValue() ) + if( SfxItemState::SET == rSet.GetItemState(SID_DOC_STARTPRESENTATION) ) { - bStartPresentation = true; - mpDoc->SetStartWithPresentation( true ); + sal_uInt16 nStartingSlide = rSet.Get(SID_DOC_STARTPRESENTATION).GetValue(); + if (nStartingSlide == 0) + { + OUString sStartPage = mpDoc->getPresentationSettings().maPresPage; + if (!sStartPage.isEmpty()) + { + bool bIsMasterPage = false; + sal_uInt16 nPageNumb = mpDoc->GetPageByName(sStartPage, bIsMasterPage); + nStartingSlide = (nPageNumb + 1) / 2; + } + else + nStartingSlide = 1; + } + bStartPresentation = nStartingSlide; + mpDoc->SetStartWithPresentation(nStartingSlide); } if( aFilterName == pFilterPowerPoint97 diff --git a/sfx2/source/appl/appopen.cxx b/sfx2/source/appl/appopen.cxx index 37c67e1ef293..03b57763986f 100644 --- a/sfx2/source/appl/appopen.cxx +++ b/sfx2/source/appl/appopen.cxx @@ -862,7 +862,21 @@ void SfxApplication::OpenDocExec_Impl( SfxRequest& rReq ) pFilter = rMatcher.GetFilter4EA( aTypeName ); } - if (!pFilter || !lcl_isFilterNativelySupported(*pFilter)) + bool bStartPresentation = false; + if (pFilter) + { + const SfxUInt16Item* pSlide = rReq.GetArg<SfxUInt16Item>(SID_DOC_STARTPRESENTATION); + if (pSlide + && (pFilter->GetWildcard().Matches(u".pptx") + || pFilter->GetWildcard().Matches(u".ppt") + || pFilter->GetWildcard().Matches(u".ppsx") + || pFilter->GetWildcard().Matches(u".pps"))) + { + bStartPresentation = true; + } + } + + if (!pFilter || (!lcl_isFilterNativelySupported(*pFilter) && !bStartPresentation)) { // hyperlink does not link to own type => special handling (http, ftp) browser and (other external protocols) OS if ( aINetProtocol == INetProtocol::Mailto ) |