diff options
author | Michael Stahl <mstahl@redhat.com> | 2016-10-06 15:50:13 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2016-10-06 18:07:50 +0200 |
commit | e0d373bf5328bfe84079f094dd605bb8f4337330 (patch) | |
tree | f8cb0a10bebf5d4268c9b1837df61c1753392eb2 | |
parent | c13a19d462ef595201447272e357a65f5c005521 (diff) |
tdf#101813 sw,sfx2: enable inserting master document as section
Traditionally only ordinary com.sun.star.text.TextDocument could be
inserted as a section but then commit
3da8f3680556e0163f660a0a159930337c8c32ff unintentionally enabled
inserting everything, including master documents
(com.sun.star.text.GlobalDocument).
I'm really not sure if this should be allowed or not but apparently
somebody finds it useful so here we add some crude hacks to enable it
(to be reverted in case it causes trouble).
(regression? from 805fd1ca343d6295b8114a24cc29bdac332f266d)
Change-Id: I439b2516fcbe54977ff04e487a920acd38c27152
-rw-r--r-- | include/sfx2/docinsert.hxx | 2 | ||||
-rw-r--r-- | sfx2/source/doc/docinsert.cxx | 16 | ||||
-rw-r--r-- | sw/source/ui/dialog/uiregionsw.cxx | 4 | ||||
-rw-r--r-- | sw/source/uibase/app/docsh2.cxx | 4 |
4 files changed, 16 insertions, 10 deletions
diff --git a/include/sfx2/docinsert.hxx b/include/sfx2/docinsert.hxx index 5d6ea0a40eef..abd448d1bd7e 100644 --- a/include/sfx2/docinsert.hxx +++ b/include/sfx2/docinsert.hxx @@ -57,7 +57,7 @@ public: ~DocumentInserter(); void StartExecuteModal( const Link<sfx2::FileDialogHelper*,void>& _rDialogClosedLink ); - SfxMedium* CreateMedium(); + SfxMedium* CreateMedium(char const* pFallbackHack = 0); SfxMediumList* CreateMediumList(); }; diff --git a/sfx2/source/doc/docinsert.cxx b/sfx2/source/doc/docinsert.cxx index 4ef731a89dca..d1f03827f5c6 100644 --- a/sfx2/source/doc/docinsert.cxx +++ b/sfx2/source/doc/docinsert.cxx @@ -79,7 +79,7 @@ void DocumentInserter::StartExecuteModal( const Link<sfx2::FileDialogHelper*,voi m_pFileDlg->StartExecuteModal( LINK( this, DocumentInserter, DialogClosedHdl ) ); } -SfxMedium* DocumentInserter::CreateMedium() +SfxMedium* DocumentInserter::CreateMedium(char const*const pFallbackHack) { std::unique_ptr<SfxMedium> pMedium; if (!m_nError && m_pItemSet && !m_pURLList.empty()) @@ -90,14 +90,20 @@ SfxMedium* DocumentInserter::CreateMedium() sURL, SFX_STREAM_READONLY, SfxGetpApp()->GetFilterMatcher().GetFilter4FilterName( m_sFilter ), m_pItemSet )); pMedium->UseInteractionHandler( true ); - SfxFilterMatcher* pMatcher = nullptr; + std::unique_ptr<SfxFilterMatcher> pMatcher; if ( !m_sDocFactory.isEmpty() ) - pMatcher = new SfxFilterMatcher( m_sDocFactory ); + pMatcher.reset(new SfxFilterMatcher(m_sDocFactory)); else - pMatcher = new SfxFilterMatcher(); + pMatcher.reset(new SfxFilterMatcher()); std::shared_ptr<const SfxFilter> pFilter; sal_uInt32 nError = pMatcher->DetectFilter( *pMedium, pFilter ); + // tdf#101813 hack: check again if it's a global document + if (ERRCODE_NONE != nError && pFallbackHack) + { + pMatcher.reset(new SfxFilterMatcher(OUString::createFromAscii(pFallbackHack))); + nError = pMatcher->DetectFilter( *pMedium, pFilter ); + } if ( nError == ERRCODE_NONE && pFilter ) pMedium->SetFilter( pFilter ); else @@ -105,8 +111,6 @@ SfxMedium* DocumentInserter::CreateMedium() if ( pMedium && CheckPasswd_Impl( nullptr, SfxGetpApp()->GetPool(), pMedium.get() ) == ERRCODE_ABORT ) pMedium.reset(); - - DELETEZ( pMatcher ); } return pMedium.release(); diff --git a/sw/source/ui/dialog/uiregionsw.cxx b/sw/source/ui/dialog/uiregionsw.cxx index 51f1c74608b4..496654aaeb76 100644 --- a/sw/source/ui/dialog/uiregionsw.cxx +++ b/sw/source/ui/dialog/uiregionsw.cxx @@ -1316,7 +1316,7 @@ IMPL_LINK( SwEditRegionDlg, DlgClosedHdl, sfx2::FileDialogHelper *, _pFileDlg, v OUString sFileName, sFilterName, sPassword; if ( _pFileDlg->GetError() == ERRCODE_NONE ) { - std::unique_ptr<SfxMedium> pMedium(m_pDocInserter->CreateMedium()); + std::unique_ptr<SfxMedium> pMedium(m_pDocInserter->CreateMedium("sglobal")); if ( pMedium ) { sFileName = pMedium->GetURLObject().GetMainURL( INetURLObject::NO_DECODE ); @@ -1783,7 +1783,7 @@ IMPL_LINK( SwInsertSectionTabPage, DlgClosedHdl, sfx2::FileDialogHelper *, _pFil { if ( _pFileDlg->GetError() == ERRCODE_NONE ) { - std::unique_ptr<SfxMedium> pMedium(m_pDocInserter->CreateMedium()); + std::unique_ptr<SfxMedium> pMedium(m_pDocInserter->CreateMedium("sglobal")); if ( pMedium ) { m_sFileName = pMedium->GetURLObject().GetMainURL( INetURLObject::NO_DECODE ); diff --git a/sw/source/uibase/app/docsh2.cxx b/sw/source/uibase/app/docsh2.cxx index 92c6b1b83715..8b5a6d95f704 100644 --- a/sw/source/uibase/app/docsh2.cxx +++ b/sw/source/uibase/app/docsh2.cxx @@ -1574,7 +1574,9 @@ int SwFindDocShell( SfxObjectShellRef& xDocSh, std::shared_ptr<const SfxFilter> pSfxFlt; if (!xMed->GetError()) { - SfxFilterMatcher aMatcher( OUString::createFromAscii(SwDocShell::Factory().GetShortName()) ); + SfxFilterMatcher aMatcher( rFilter == "writerglobal8" + ? OUString::createFromAscii(SwGlobalDocShell::Factory().GetShortName()) + : OUString::createFromAscii(SwDocShell::Factory().GetShortName()) ); // No Filter, so search for it. Else test if the one passed is a valid one if( !rFilter.isEmpty() ) |