mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 21:21:32 +00:00
update canAutoOpenFile/autoOpenFile implementation to new MacOSX API, avoid deprecated calls
This commit is contained in:
parent
4a009c85bb
commit
d568846e03
@ -238,32 +238,46 @@ char path_separator(path_type)
|
|||||||
void windows_style_tex_paths(bool)
|
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)
|
bool canAutoOpenFile(string const & ext, auto_open_mode const mode)
|
||||||
{
|
{
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
// Reference: http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference/
|
// References:
|
||||||
|
// https://developer.apple.com/reference/coreservices/1447734-lscopydefaultapplicationurlforco
|
||||||
CFStringRef cfs_ext = CFStringCreateWithBytes(kCFAllocatorDefault,
|
CFStringRef cfs_ext = CFStringCreateWithBytes(kCFAllocatorDefault,
|
||||||
(UInt8 *) ext.c_str(), ext.length(),
|
(UInt8 *) ext.c_str(), ext.length(),
|
||||||
kCFStringEncodingISOLatin1, false);
|
kCFStringEncodingISOLatin1, false);
|
||||||
// this is what we would like to do but it seems that the
|
CFStringRef cfs_uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, cfs_ext, NULL);
|
||||||
// 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);
|
CFRelease(cfs_ext);
|
||||||
|
if (cfs_uti == NULL) return false;
|
||||||
|
|
||||||
return status != kLSApplicationNotFoundErr;
|
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;
|
||||||
#else
|
#else
|
||||||
// silence compiler warnings
|
// silence compiler warnings
|
||||||
(void)ext;
|
(void)ext;
|
||||||
(void)mode;
|
(void)mode;
|
||||||
|
|
||||||
// currently, no default viewer is tried for non-windows system
|
// currently, no default viewer is tried for non-apple system
|
||||||
// support for KDE/Gnome/Macintosh may be added later
|
// support for KDE/Gnome may be added later
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -278,14 +292,11 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
|
|||||||
// viewer for PDF is often quicktime...
|
// viewer for PDF is often quicktime...
|
||||||
//LSRolesMask role = (mode == VIEW) ? kLSRolesViewer : kLSRolesEditor;
|
//LSRolesMask role = (mode == VIEW) ? kLSRolesViewer : kLSRolesEditor;
|
||||||
(void)mode;
|
(void)mode;
|
||||||
LSRolesMask role = kLSRolesAll;
|
LSRolesMask role = (mode == VIEW) ? kLSRolesAll : kLSRolesEditor;
|
||||||
|
|
||||||
CFURLRef docURL = CFURLCreateFromFileSystemRepresentation(
|
CFURLRef docURL = CFURLCreateFromFileSystemRepresentation(
|
||||||
NULL, (UInt8 *) filename.c_str(), filename.size(), false);
|
NULL, (UInt8 *) filename.c_str(), filename.size(), false);
|
||||||
CFURLRef appURL;
|
CFURLRef appURL = LSCopyDefaultApplicationURLForURL(docURL, role, NULL);
|
||||||
OSStatus status = LSGetApplicationForURL(docURL, role, NULL, &appURL);
|
|
||||||
if (status == kLSApplicationNotFoundErr)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
CFURLRef docURLs[] = { docURL };
|
CFURLRef docURLs[] = { docURL };
|
||||||
CFArrayRef launchItems = CFArrayCreate(
|
CFArrayRef launchItems = CFArrayCreate(
|
||||||
@ -313,7 +324,7 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
|
|||||||
setEnv("BSTINPUTS", newbstinputs);
|
setEnv("BSTINPUTS", newbstinputs);
|
||||||
setEnv("TEXFONTS", newtexfonts);
|
setEnv("TEXFONTS", newtexfonts);
|
||||||
}
|
}
|
||||||
status = LSOpenFromURLSpec (&launchUrlSpec, NULL);
|
OSStatus const status = LSOpenFromURLSpec (&launchUrlSpec, NULL);
|
||||||
CFRelease(launchItems);
|
CFRelease(launchItems);
|
||||||
if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
|
if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
|
||||||
setEnv("TEXINPUTS", oldtexinputs);
|
setEnv("TEXINPUTS", oldtexinputs);
|
||||||
@ -328,8 +339,8 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
|
|||||||
(void)mode;
|
(void)mode;
|
||||||
(void)path;
|
(void)path;
|
||||||
|
|
||||||
// currently, no default viewer is tried for non-windows system
|
// currently, no default viewer is tried for non-apple system
|
||||||
// support for KDE/Gnome/Macintosh may be added later
|
// support for KDE/Gnome may be added later
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user