diff options
-rw-r--r-- | sfx2/Library_sfx.mk | 3 | ||||
-rw-r--r-- | sfx2/source/appl/sfxhelp.cxx | 47 |
2 files changed, 47 insertions, 3 deletions
diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk index fe6f24c6dd98..3f911e6b088d 100644 --- a/sfx2/Library_sfx.mk +++ b/sfx2/Library_sfx.mk @@ -324,6 +324,9 @@ $(eval $(call gb_Library_add_defs,sfx,\ endif ifeq ($(OS),MACOSX) +$(eval $(call gb_Library_add_cxxflags,sfx,\ + $(gb_OBJCXXFLAGS) \ +)) $(eval $(call gb_Library_add_objcxxobjects,sfx,\ sfx2/source/appl/shutdowniconaqua \ )) diff --git a/sfx2/source/appl/sfxhelp.cxx b/sfx2/source/appl/sfxhelp.cxx index daeaeddb2b40..275b55172630 100644 --- a/sfx2/source/appl/sfxhelp.cxx +++ b/sfx2/source/appl/sfxhelp.cxx @@ -24,6 +24,13 @@ #include <string_view> #include <algorithm> #include <cassert> +#ifdef MACOSX +#include <premac.h> +#include <Foundation/NSString.h> +#include <CoreFoundation/CFURL.h> +#include <CoreServices/CoreServices.h> +#include <postmac.h> +#endif #include <sal/log.hxx> #include <com/sun/star/uno/Reference.h> @@ -713,7 +720,16 @@ static bool impl_showOnlineHelp( const OUString& rURL ) try { +#ifdef MACOSX + LSOpenCFURLRef(CFURLCreateWithString(kCFAllocatorDefault, + CFStringCreateWithCString(kCFAllocatorDefault, + aHelpLink.toUtf8().getStr(), + kCFStringEncodingUTF8), + NULL), + NULL); +#else sfx2::openUriExternally(aHelpLink, false); +#endif return true; } catch (const Exception&) @@ -892,10 +908,11 @@ bool rewriteFlatpakHelpRootUrl(OUString * helpRootUrl) { } #define SHTML1 "<!DOCTYPE HTML><html lang=\"en-US\"><head><meta charset=\"UTF-8\">" -#define SHTML2 "<meta http-equiv=\"refresh\" content=\"1\" url=\"" -#define SHTML3 "\"><script type=\"text/javascript\"> window.location.href = \"" +#define SHTML2 "<meta http-equiv=\"refresh\" content=\"1; url='" +#define SHTML3 "'\"><script type=\"text/javascript\"> window.location.href = \"" #define SHTML4 "\";</script><title>Help Page Redirection</title></head><body></body></html>" +// use a tempfile since e.g. xdg-open doesn't support URL-parameters with file:// URLs static bool impl_showOfflineHelp( const OUString& rURL ) { OUString aBaseInstallPath = getHelpRootURL(); @@ -929,10 +946,18 @@ static bool impl_showOfflineHelp( const OUString& rURL ) pStream->WriteUnicodeOrByteText(aTempStr); aTempFile.CloseStream(); - try { +#ifdef MACOSX + LSOpenCFURLRef(CFURLCreateWithString(kCFAllocatorDefault, + CFStringCreateWithCString(kCFAllocatorDefault, + aTempFile.GetURL().toUtf8().getStr(), + kCFStringEncodingUTF8), + NULL), + NULL); +#else sfx2::openUriExternally(aTempFile.GetURL(), false); +#endif return true; } catch (const Exception&) @@ -1044,6 +1069,22 @@ bool SfxHelp::Start_Impl(const OUString& rURL, const vcl::Window* pWindow, const impl_showOnlineHelp( aHelpURL ); return true; } +#ifdef MACOSX + if (@available(macOS 10.14, *)) { + // Workaround: Safari sandboxing prevents it from accessing files in the LibreOffice.app folder + // force online-help instead if Safari is default browser. + CFURLRef pBrowser = LSCopyDefaultApplicationURLForURL( + CFURLCreateWithString( + kCFAllocatorDefault, + (CFStringRef)@"https://www.libreoffice.org", + NULL), + kLSRolesAll, NULL); + if([(NSString*)CFURLGetString(pBrowser) isEqualToString:@"file:///Applications/Safari.app/"]) { + impl_showOnlineHelp( aHelpURL ); + return true; + } + } +#endif // If the HTML or no help is installed, but aHelpURL nevertheless references valid help content, // that implies that this help content belongs to an extension (and thus would not be available |