Skip to content

Commit 587f195

Browse files
8234474: [macos 10.15] Crash in file dialog in sandbox mode
Reviewed-by: arapte, prr
1 parent f1108b0 commit 587f195

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

modules/javafx.graphics/src/main/native-glass/mac/GlassDialogs.m

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
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.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -69,6 +69,24 @@ static BOOL doPerformKeyEquivalent(NSEvent* theEvent, NSWindow* panel)
6969
return false;
7070
}
7171

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+
7290
@interface GlassSavePanel : NSSavePanel
7391
@end
7492

@@ -485,7 +503,7 @@ static jobject convertNSURLtoFile(JNIEnv *env, NSURL *url)
485503
GLASS_ASSERT_MAIN_JAVA_THREAD(env);
486504
GLASS_POOL_ENTER;
487505
{
488-
NSOpenPanel *panel = [GlassApplication isSandboxed] ? [NSOpenPanel openPanel] : [GlassOpenPanel openPanel];
506+
NSOpenPanel *panel = useNSPanel() ? [NSOpenPanel openPanel] : [GlassOpenPanel openPanel];
489507
[panel setAllowsMultipleSelection:(jMultipleMode==JNI_TRUE)];
490508
[panel setTitle:[GlassHelper nsStringWithJavaString:jTitle withEnv:env]];
491509
NSString *folder = [GlassHelper nsStringWithJavaString:jFolder withEnv:env];
@@ -561,7 +579,7 @@ static jobject convertNSURLtoFile(JNIEnv *env, NSURL *url)
561579
GLASS_ASSERT_MAIN_JAVA_THREAD(env);
562580
GLASS_POOL_ENTER;
563581
{
564-
NSSavePanel *panel = [GlassApplication isSandboxed] ? [NSSavePanel savePanel] : [GlassSavePanel savePanel];
582+
NSSavePanel *panel = useNSPanel() ? [NSSavePanel savePanel] : [GlassSavePanel savePanel];
565583
[panel setTitle:[GlassHelper nsStringWithJavaString:jTitle withEnv:env]];
566584
NSString *folder = [GlassHelper nsStringWithJavaString:jFolder withEnv:env];
567585
if ([folder length] > 0)
@@ -633,7 +651,7 @@ static jobject convertNSURLtoFile(JNIEnv *env, NSURL *url)
633651
GLASS_ASSERT_MAIN_JAVA_THREAD(env);
634652
GLASS_POOL_ENTER;
635653
{
636-
NSOpenPanel *panel = [GlassApplication isSandboxed] ? [NSOpenPanel openPanel] : [GlassOpenPanel openPanel];
654+
NSOpenPanel *panel = useNSPanel() ? [NSOpenPanel openPanel] : [GlassOpenPanel openPanel];
637655
[panel setTitle:[GlassHelper nsStringWithJavaString:jTitle withEnv:env]];
638656
NSString *folder = [GlassHelper nsStringWithJavaString:jFolder withEnv:env];
639657
if ([folder length] > 0)

0 commit comments

Comments
 (0)