Revert "update canAutoOpenFile/autoOpenFile implementation to new MacOSX API, avoid deprecated calls"

This reverts commit d568846e03.

Unfortunately the used alternative API LSCopyDefaultApplicationURLForContentType
is available with 10.10 and later only and cannot be used therefore. So there
is no alternative to deprecated calls ATM. LyX 2.3 should run on 10.7 at least.
This commit is contained in:
Stephan Witt 2017-04-15 18:38:57 +02:00
parent 4f75026176
commit b5c2859a92

View File

@ -238,46 +238,32 @@ char path_separator(path_type)
void windows_style_tex_paths(bool)
{}
#ifdef __APPLE__
bool canAutoOpenFile(CFStringRef cfs_uti, LSRolesMask role)
{
// Reference:
// https://developer.apple.com/reference/coreservices/1447734-lscopydefaultapplicationurlforco
CFURLRef outAppRef = LSCopyDefaultApplicationURLForContentType(cfs_uti, role, NULL);
if (outAppRef == NULL) return false;
CFRelease(outAppRef);
return true;
}
#endif
bool canAutoOpenFile(string const & ext, auto_open_mode const mode)
{
#ifdef __APPLE__
// References:
// https://developer.apple.com/reference/coreservices/1447734-lscopydefaultapplicationurlforco
// Reference: http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference/
CFStringRef cfs_ext = CFStringCreateWithBytes(kCFAllocatorDefault,
(UInt8 *) ext.c_str(), ext.length(),
kCFStringEncodingISOLatin1, false);
CFStringRef cfs_uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, cfs_ext, NULL);
// this is what we would like to do but it seems that the
// viewer for PDF is often quicktime...
//LSRolesMask role = (mode == VIEW) ? kLSRolesViewer : kLSRolesEditor;
(void)mode;
LSRolesMask role = kLSRolesAll;
FSRef outAppRef;
OSStatus status =
LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator,
cfs_ext, role, &outAppRef, NULL);
CFRelease(cfs_ext);
if (cfs_uti == NULL) return false;
LSRolesMask role = (mode == VIEW) ? kLSRolesViewer : kLSRolesEditor;
bool result = canAutoOpenFile(cfs_uti, role);
if (!result && mode == VIEW)
result = canAutoOpenFile(cfs_uti, kLSRolesEditor);
CFRelease(cfs_uti);
return result;
return status != kLSApplicationNotFoundErr;
#else
// silence compiler warnings
(void)ext;
(void)mode;
// currently, no default viewer is tried for non-apple system
// support for KDE/Gnome may be added later
// currently, no default viewer is tried for non-windows system
// support for KDE/Gnome/Macintosh may be added later
return false;
#endif
}
@ -292,11 +278,14 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
// viewer for PDF is often quicktime...
//LSRolesMask role = (mode == VIEW) ? kLSRolesViewer : kLSRolesEditor;
(void)mode;
LSRolesMask role = (mode == VIEW) ? kLSRolesAll : kLSRolesEditor;
LSRolesMask role = kLSRolesAll;
CFURLRef docURL = CFURLCreateFromFileSystemRepresentation(
NULL, (UInt8 *) filename.c_str(), filename.size(), false);
CFURLRef appURL = LSCopyDefaultApplicationURLForURL(docURL, role, NULL);
CFURLRef appURL;
OSStatus status = LSGetApplicationForURL(docURL, role, NULL, &appURL);
if (status == kLSApplicationNotFoundErr)
return false;
CFURLRef docURLs[] = { docURL };
CFArrayRef launchItems = CFArrayCreate(
@ -324,7 +313,7 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
setEnv("BSTINPUTS", newbstinputs);
setEnv("TEXFONTS", newtexfonts);
}
OSStatus const status = LSOpenFromURLSpec (&launchUrlSpec, NULL);
status = LSOpenFromURLSpec (&launchUrlSpec, NULL);
CFRelease(launchItems);
if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
setEnv("TEXINPUTS", oldtexinputs);
@ -339,8 +328,8 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
(void)mode;
(void)path;
// currently, no default viewer is tried for non-apple system
// support for KDE/Gnome may be added later
// currently, no default viewer is tried for non-windows system
// support for KDE/Gnome/Macintosh may be added later
return false;
#endif
}