sw/source/uibase/wrtsh/wrtsh2.cxx | 21 +++++++++++++++++++-- writerfilter/source/dmapper/DomainMapper_Impl.cxx | 22 ++++++++++++++++++++++ writerfilter/source/dmapper/DomainMapper_Impl.hxx | 1 + 3 files changed, 42 insertions(+), 2 deletions(-)
New commits: commit 8fc756f2ac76727419a987feac68eb752832676d Author: Stephan Bergmann <[email protected]> Date: Wed Aug 17 11:36:10 2016 +0200 tdf#86087: Convert relative URLs to absolute upon import of docx etc. ...to fix the import part of tdf#86087. Apparently, "fragment-only" relative same-document URLs (like <#anchor>) are supposed to remain relative; otherwise, various tests like testFdo69548::Import in CppunitTest_sw_ooxmlimport fail. (cherry picked from commit 0dd82f4ffe7ae462bae30b93d245d2234c55ef84) Change-Id: I2dbba2f2f1e225f85e21600e68a3c4cffdb023b2 Reviewed-on: https://gerrit.libreoffice.org/45048 Reviewed-by: Thorsten Behrens <[email protected]> Tested-by: Thorsten Behrens <[email protected]> diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index c5ca29a02510..142739559a6f 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -69,6 +69,7 @@ #include <com/sun/star/text/XTextColumns.hpp> #include <oox/mathml/import.hxx> +#include <rtl/uri.hxx> #include <GraphicHelpers.hxx> #include <dmapper/GraphicZOrderHelper.hxx> @@ -245,6 +246,13 @@ DomainMapper_Impl::DomainMapper_Impl( m_vTextFramesForChaining(), m_bParaHadField(false) { + m_aBaseUrl = rMediaDesc.getUnpackedValueOrDefault( + utl::MediaDescriptor::PROP_DOCUMENTBASEURL(), OUString()); + if (m_aBaseUrl.isEmpty()) { + m_aBaseUrl = rMediaDesc.getUnpackedValueOrDefault( + utl::MediaDescriptor::PROP_URL(), OUString()); + } + appendTableManager( ); GetBodyText(); uno::Reference< text::XTextAppend > xBodyTextAppend( m_xBodyText, uno::UNO_QUERY ); @@ -3890,6 +3898,20 @@ void DomainMapper_Impl::CloseFieldCommand() if (!sURL.isEmpty()) { + // Try to make absolute any relative URLs, except + // for relative same-document URLs that only contain + // a fragment part: + if (!sURL.startsWith("#")) { + try { + sURL = rtl::Uri::convertRelToAbs( + m_aBaseUrl, sURL); + } catch (rtl::MalformedUriException & e) { + SAL_WARN( + "writerfilter.dmapper", + "MalformedUriException " + << e.getMessage()); + } + } pContext->SetHyperlinkURL(sURL); } } diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 49b61d261b61..4886ad1e3800 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -394,6 +394,7 @@ public: private: SourceDocumentType m_eDocumentType; DomainMapper& m_rDMapper; + OUString m_aBaseUrl; css::uno::Reference<css::text::XTextDocument> m_xTextDocument; css::uno::Reference<css::beans::XPropertySet> m_xDocumentSettings; css::uno::Reference<css::lang::XMultiServiceFactory> m_xTextFactory; commit 4680b23cd82cece4ecdae3e90e0ce524ab5ad732 Author: Szymon KÅos <[email protected]> Date: Tue Nov 14 19:29:33 2017 +0100 tdf#86087 Open relative links in Writer (cherry picked from commit 4b9e237850efe36f7e35d65e14d6953f1e1f3a45) Change-Id: I3f6caad559d92ec559b8ae1c66e7fea13f52cb76 Reviewed-on: https://gerrit.libreoffice.org/45047 Reviewed-by: Thorsten Behrens <[email protected]> Tested-by: Thorsten Behrens <[email protected]> diff --git a/sw/source/uibase/wrtsh/wrtsh2.cxx b/sw/source/uibase/wrtsh/wrtsh2.cxx index 0bb22aa093d9..ba873876e833 100644 --- a/sw/source/uibase/wrtsh/wrtsh2.cxx +++ b/sw/source/uibase/wrtsh/wrtsh2.cxx @@ -516,10 +516,27 @@ void LoadURL( SwViewShell& rVSh, const OUString& rURL, sal_uInt16 nFilter, if ( dynamic_cast<const SwCursorShell*>( &rVSh) == nullptr ) return; + OUString sFileURL = rURL; + INetURLObject aURL( sFileURL ); + if( aURL.GetProtocol() == INetProtocol::NotValid && !sFileURL.startsWith("#") ) + { + // May be the relative link -> try to convert to absolute path + OUString sParentPath = + rVSh.GetDoc()->GetDocShell()->GetMedium()->GetURLObject().GetPath(); + + bool bCorrectURL = true; + aURL = INetURLObject(); + bCorrectURL &= aURL.setFSysPath( sParentPath, INetURLObject::FSYS_DETECT ); + bCorrectURL &= aURL.insertName( sFileURL ); + + if( bCorrectURL ) + sFileURL = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ); + } + // We are doing tiledRendering, let the client handles the URL loading. if (comphelper::LibreOfficeKit::isActive()) { - rVSh.libreOfficeKitCallback(LOK_CALLBACK_HYPERLINK_CLICKED, rURL.toUtf8().getStr()); + rVSh.libreOfficeKitCallback(LOK_CALLBACK_HYPERLINK_CLICKED, sFileURL.toUtf8().getStr()); return; } @@ -544,7 +561,7 @@ void LoadURL( SwViewShell& rVSh, const OUString& rURL, sal_uInt16 nFilter, sReferer = pDShell->GetMedium()->GetName(); SfxViewFrame* pViewFrame = rSh.GetView().GetViewFrame(); SfxFrameItem aView( SID_DOCFRAME, pViewFrame ); - SfxStringItem aName( SID_FILE_NAME, rURL ); + SfxStringItem aName( SID_FILE_NAME, sFileURL ); SfxStringItem aTargetFrameName( SID_TARGETNAME, sTargetFrame ); SfxStringItem aReferer( SID_REFERER, sReferer );
_______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
