]> git.lyx.org Git - lyx.git/blobdiff - src/support/os_unix.C
hopefully fix tex2lyx linking.
[lyx.git] / src / support / os_unix.C
index 0ffce418c998fa6ad7d4e5a28d79d48a3c1293d7..fb266089fc9bb87a0688127842e14ca14a2d41eb 100644 (file)
 
 #include "support/os.h"
 
+#ifdef __APPLE__
+#include <Carbon/Carbon.h>
+#endif
+
 using std::string;
 
 
@@ -112,9 +116,74 @@ char path_separator()
 }
 
 
-void cygwin_path_fix(bool)
+void windows_style_tex_paths(bool)
 {}
 
+bool canAutoOpenFile(string const & ext, auto_open_mode const mode)
+{
+#ifdef __APPLE__
+// Reference: http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference/
+       CFStringRef cfs_ext = CFStringCreateWithBytes(kCFAllocatorDefault,
+                                       (UInt8 *) ext.c_str(), ext.length(),
+                                       kCFStringEncodingISOLatin1, false);
+       LSRolesMask role = (mode == VIEW) ? kLSRolesViewer :  kLSRolesEditor;
+       FSRef outAppRef;
+       OSStatus status = 
+               LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator,
+                                       cfs_ext, role, &outAppRef, NULL);
+       CFRelease(cfs_ext);
+
+       return status != kLSApplicationNotFoundErr;
+#else
+       // silence compiler warnings
+       (void)ext;
+       (void)mode;
+
+       // currently, no default viewer is tried for non-windows system
+       // support for KDE/Gnome/Macintosh may be added later
+       return false;
+#endif
+}
+
+
+bool autoOpenFile(string const & filename, auto_open_mode const mode)
+{
+#ifdef __APPLE__
+// Reference: http://developer.apple.com/documentation/Carbon/Reference/LaunchServicesReference/
+    FSRef fileref;
+    OSStatus status = 
+        FSPathMakeRef((UInt8 *) filename.c_str(), &fileref, NULL);
+    if (status != 0)
+        return false;
+        
+       LSRolesMask role = (mode == VIEW) ? kLSRolesViewer :  kLSRolesEditor;
+       FSRef outAppRef;
+
+       status = LSGetApplicationForItem(&fileref, role, &outAppRef, NULL);
+       if (status == kLSApplicationNotFoundErr)
+               return false;
+
+       LSLaunchFSRefSpec inLaunchSpec;
+       inLaunchSpec.appRef = &outAppRef;
+       inLaunchSpec.numDocs = 1;
+       inLaunchSpec.itemRefs = &fileref;
+       inLaunchSpec.passThruParams = NULL;
+       inLaunchSpec.launchFlags = kLSLaunchDefaults;
+       inLaunchSpec.asyncRefCon = NULL;
+       status = LSOpenFromRefSpec(&inLaunchSpec, NULL);
+
+       return status != kLSApplicationNotFoundErr;     
+#else
+       // silence compiler warnings
+       (void)filename;
+       (void)mode;
+
+       // currently, no default viewer is tried for non-windows system
+       // support for KDE/Gnome/Macintosh may be added later
+       return false;
+#endif
+}
+
 } // namespace os
 } // namespace support
 } // namespace lyx