19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 27 #import <CoreFoundation/CoreFoundation.h> 28 #import <ApplicationServices/ApplicationServices.h> 29 #import <JavaNativeFoundation/JavaNativeFoundation.h> 30 31 /* 32 * Class: sun_lwawt_macosx_CDesktopPeer 33 * Method: _lsOpenURI 34 * Signature: (Ljava/lang/String;)I; 35 */ 36 JNIEXPORT jint JNICALL Java_sun_lwawt_macosx_CDesktopPeer__1lsOpenURI 37 (JNIEnv *env, jclass clz, jstring uri) 38 { 39 // AWT_ASSERT_ANY_THREAD 40 41 OSStatus status = noErr; 42 JNF_COCOA_ENTER(env); 43 44 // I would love to use NSWorkspace here, but it's not thread safe. Why? I don't know. 45 // So we use LaunchServices directly. 46 47 NSURL *url = [NSURL URLWithString:JNFJavaToNSString(env, uri)]; 48 49 LSLaunchFlags flags = kLSLaunchDefaults; 50 51 LSApplicationParameters params = {0, flags, NULL, NULL, NULL, NULL, NULL}; 52 status = LSOpenURLsWithRole((CFArrayRef)[NSArray arrayWithObject:url], kLSRolesAll, NULL, ¶ms, NULL, 0); 53 54 JNF_COCOA_EXIT(env); 55 return status; 56 } 57 58 /* 59 * Class: sun_lwawt_macosx_CDesktopPeer 60 * Method: _lsOpenFile 61 * Signature: (Ljava/lang/String;Z)I; 62 */ 63 JNIEXPORT jint JNICALL Java_sun_lwawt_macosx_CDesktopPeer__1lsOpenFile 64 (JNIEnv *env, jclass clz, jstring jpath, jboolean print) 65 { 66 // AWT_ASSERT_ANY_THREAD 67 68 OSStatus status = noErr; 69 JNF_COCOA_ENTER(env); 70 71 // I would love to use NSWorkspace here, but it's not thread safe. Why? I don't know. 72 // So we use LaunchServices directly. 73 74 NSString *path = JNFNormalizedNSStringForPath(env, jpath); 75 76 NSURL *url = [NSURL fileURLWithPath:(NSString *)path]; 77 78 // This byzantine workaround is necesary, or else directories won't open in Finder 79 url = (NSURL *)CFURLCreateWithFileSystemPath(NULL, (CFStringRef)[url path], kCFURLPOSIXPathStyle, false); 80 81 LSLaunchFlags flags = kLSLaunchDefaults; 82 if (print) flags |= kLSLaunchAndPrint; 83 84 LSApplicationParameters params = {0, flags, NULL, NULL, NULL, NULL, NULL}; 85 status = LSOpenURLsWithRole((CFArrayRef)[NSArray arrayWithObject:url], kLSRolesAll, NULL, ¶ms, NULL, 0); 86 CFRelease(url); 87 | 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 27 #import <CoreFoundation/CoreFoundation.h> 28 #import <ApplicationServices/ApplicationServices.h> 29 #import <JavaNativeFoundation/JavaNativeFoundation.h> 30 31 /* 32 * Class: sun_lwawt_macosx_CDesktopPeer 33 * Method: _lsOpenURI 34 * Signature: (Ljava/lang/String;)I; 35 */ 36 JNIEXPORT jint JNICALL Java_sun_lwawt_macosx_CDesktopPeer__1lsOpenURI 37 (JNIEnv *env, jclass clz, jstring uri) 38 { 39 OSStatus status = noErr; 40 JNF_COCOA_ENTER(env); 41 42 // I would love to use NSWorkspace here, but it's not thread safe. Why? I don't know. 43 // So we use LaunchServices directly. 44 45 NSURL *url = [NSURL URLWithString:JNFJavaToNSString(env, uri)]; 46 47 LSLaunchFlags flags = kLSLaunchDefaults; 48 49 LSApplicationParameters params = {0, flags, NULL, NULL, NULL, NULL, NULL}; 50 status = LSOpenURLsWithRole((CFArrayRef)[NSArray arrayWithObject:url], kLSRolesAll, NULL, ¶ms, NULL, 0); 51 52 JNF_COCOA_EXIT(env); 53 return status; 54 } 55 56 /* 57 * Class: sun_lwawt_macosx_CDesktopPeer 58 * Method: _lsOpenFile 59 * Signature: (Ljava/lang/String;Z)I; 60 */ 61 JNIEXPORT jint JNICALL Java_sun_lwawt_macosx_CDesktopPeer__1lsOpenFile 62 (JNIEnv *env, jclass clz, jstring jpath, jboolean print) 63 { 64 OSStatus status = noErr; 65 JNF_COCOA_ENTER(env); 66 67 // I would love to use NSWorkspace here, but it's not thread safe. Why? I don't know. 68 // So we use LaunchServices directly. 69 70 NSString *path = JNFNormalizedNSStringForPath(env, jpath); 71 72 NSURL *url = [NSURL fileURLWithPath:(NSString *)path]; 73 74 // This byzantine workaround is necesary, or else directories won't open in Finder 75 url = (NSURL *)CFURLCreateWithFileSystemPath(NULL, (CFStringRef)[url path], kCFURLPOSIXPathStyle, false); 76 77 LSLaunchFlags flags = kLSLaunchDefaults; 78 if (print) flags |= kLSLaunchAndPrint; 79 80 LSApplicationParameters params = {0, flags, NULL, NULL, NULL, NULL, NULL}; 81 status = LSOpenURLsWithRole((CFArrayRef)[NSArray arrayWithObject:url], kLSRolesAll, NULL, ¶ms, NULL, 0); 82 CFRelease(url); 83 |