|
1 | 1 | /* |
2 | | - * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. |
| 2 | + * Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved. |
3 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 | 4 | * |
5 | 5 | * This code is free software; you can redistribute it and/or modify it |
@@ -69,6 +69,24 @@ static BOOL doPerformKeyEquivalent(NSEvent* theEvent, NSWindow* panel) |
69 | 69 | return false; |
70 | 70 | } |
71 | 71 |
|
| 72 | +/* |
| 73 | + * Function to determine whether or not to use raw NSPanel classes |
| 74 | + * (either NSSavePanel or NSOpenPanel). |
| 75 | + * |
| 76 | + * Return: YES if we need to use the raw NSPanel classes; NO if we |
| 77 | + * can use the Glass subclasses |
| 78 | + */ |
| 79 | +static BOOL useNSPanel() |
| 80 | +{ |
| 81 | + // As of macOS 10.15 all file dialogs are out of process, so we |
| 82 | + // effectively can't subclass them. |
| 83 | + if (@available(macOS 10.15, *)) { |
| 84 | + return YES; |
| 85 | + } else { |
| 86 | + return [GlassApplication isSandboxed]; |
| 87 | + } |
| 88 | +} |
| 89 | + |
72 | 90 | @interface GlassSavePanel : NSSavePanel |
73 | 91 | @end |
74 | 92 |
|
@@ -485,7 +503,7 @@ static jobject convertNSURLtoFile(JNIEnv *env, NSURL *url) |
485 | 503 | GLASS_ASSERT_MAIN_JAVA_THREAD(env); |
486 | 504 | GLASS_POOL_ENTER; |
487 | 505 | { |
488 | | - NSOpenPanel *panel = [GlassApplication isSandboxed] ? [NSOpenPanel openPanel] : [GlassOpenPanel openPanel]; |
| 506 | + NSOpenPanel *panel = useNSPanel() ? [NSOpenPanel openPanel] : [GlassOpenPanel openPanel]; |
489 | 507 | [panel setAllowsMultipleSelection:(jMultipleMode==JNI_TRUE)]; |
490 | 508 | [panel setTitle:[GlassHelper nsStringWithJavaString:jTitle withEnv:env]]; |
491 | 509 | NSString *folder = [GlassHelper nsStringWithJavaString:jFolder withEnv:env]; |
@@ -561,7 +579,7 @@ static jobject convertNSURLtoFile(JNIEnv *env, NSURL *url) |
561 | 579 | GLASS_ASSERT_MAIN_JAVA_THREAD(env); |
562 | 580 | GLASS_POOL_ENTER; |
563 | 581 | { |
564 | | - NSSavePanel *panel = [GlassApplication isSandboxed] ? [NSSavePanel savePanel] : [GlassSavePanel savePanel]; |
| 582 | + NSSavePanel *panel = useNSPanel() ? [NSSavePanel savePanel] : [GlassSavePanel savePanel]; |
565 | 583 | [panel setTitle:[GlassHelper nsStringWithJavaString:jTitle withEnv:env]]; |
566 | 584 | NSString *folder = [GlassHelper nsStringWithJavaString:jFolder withEnv:env]; |
567 | 585 | if ([folder length] > 0) |
@@ -633,7 +651,7 @@ static jobject convertNSURLtoFile(JNIEnv *env, NSURL *url) |
633 | 651 | GLASS_ASSERT_MAIN_JAVA_THREAD(env); |
634 | 652 | GLASS_POOL_ENTER; |
635 | 653 | { |
636 | | - NSOpenPanel *panel = [GlassApplication isSandboxed] ? [NSOpenPanel openPanel] : [GlassOpenPanel openPanel]; |
| 654 | + NSOpenPanel *panel = useNSPanel() ? [NSOpenPanel openPanel] : [GlassOpenPanel openPanel]; |
637 | 655 | [panel setTitle:[GlassHelper nsStringWithJavaString:jTitle withEnv:env]]; |
638 | 656 | NSString *folder = [GlassHelper nsStringWithJavaString:jFolder withEnv:env]; |
639 | 657 | if ([folder length] > 0) |
|
0 commit comments