Skip to content
This repository was archived by the owner on Oct 4, 2021. It is now read-only.

Commit b3fbc89

Browse files
authored
Merge pull request #8877 from mono/fix989519-nassavepanel-crash-catalina
[Mac] Use static NSSavePanel.SavePanel to avoid crashes on Catalina
2 parents 26ede7c + 183c02b commit b3fbc89

File tree

4 files changed

+18
-49
lines changed

4 files changed

+18
-49
lines changed

main/src/addins/MacPlatform/Dialogs/MacAddFileDialogHandler.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ class MacAddFileDialogHandler : MacCommonFileDialogHandler<AddFileDialogData, NS
4141
{
4242
protected override NSSavePanel OnCreatePanel (AddFileDialogData data)
4343
{
44-
return new NSOpenPanel {
45-
CanChooseDirectories = false,
46-
CanChooseFiles = true,
47-
};
44+
var panel = NSOpenPanel.OpenPanel;
45+
panel.CanChooseDirectories = false;
46+
panel.CanChooseFiles = true;
47+
return panel;
4848
}
4949

5050
public bool Run (AddFileDialogData data)

main/src/addins/MacPlatform/Dialogs/MacOpenFileDialogHandler.cs

Lines changed: 6 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -41,34 +41,6 @@
4141

4242
namespace MonoDevelop.MacIntegration
4343
{
44-
interface ICentrablePanel
45-
{
46-
bool CenterToParent { get; set; }
47-
}
48-
49-
sealed class OpenPanel : NSOpenPanel, ICentrablePanel
50-
{
51-
public bool CenterToParent { get; set; }
52-
53-
public OpenPanel ()
54-
{
55-
}
56-
57-
internal OpenPanel (IntPtr handle) : base (handle)
58-
{
59-
}
60-
61-
public override void Center ()
62-
{
63-
if (ParentWindow != null && CenterToParent) {
64-
MessageService.CenterWindow (this, ParentWindow);
65-
} else {
66-
//default behaviour
67-
base.Center ();
68-
}
69-
}
70-
}
71-
7244
class MacOpenFileDialogHandler : MacCommonFileDialogHandler<OpenFileDialogData, MacOpenFileDialogHandler.SaveState>, IOpenFileDialogHandler
7345
{
7446
internal class SaveState
@@ -90,13 +62,13 @@ public SaveState (SelectEncodingPopUpButton encodingSelector, NSPopUpButton view
9062
protected override NSSavePanel OnCreatePanel (OpenFileDialogData data)
9163
{
9264
if (data.Action == FileChooserAction.Save) {
93-
return new NSSavePanel ();
65+
return NSSavePanel.SavePanel;
9466
}
9567

96-
return new OpenPanel {
97-
CanChooseDirectories = (data.Action & FileChooserAction.FolderFlags) != 0,
98-
CanChooseFiles = (data.Action & FileChooserAction.FileFlags) != 0,
99-
};
68+
var openPanel = NSOpenPanel.OpenPanel;
69+
openPanel.CanChooseDirectories = (data.Action & FileChooserAction.FolderFlags) != 0;
70+
openPanel.CanChooseFiles = (data.Action & FileChooserAction.FileFlags) != 0;
71+
return openPanel;
10072
}
10173

10274
public bool Run (OpenFileDialogData data)
@@ -136,11 +108,8 @@ public bool Run (OpenFileDialogData data)
136108
};
137109

138110
var parent = data.TransientFor ?? MessageService.RootWindow;
139-
140-
if (panel is ICentrablePanel centrablePanel) {
141-
centrablePanel.CenterToParent = data.CenterToParent;
142-
}
143111

112+
// TODO: support for data.CenterToParent, we could use sheeting.
144113
if (panel.RunModal () == 0 && !pathAlreadySet) {
145114
IdeServices.DesktopService.FocusWindow (parent);
146115
return false;

main/src/addins/MacPlatform/Dialogs/MacSelectFileDialogHandler.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ class MacSelectFileDialogHandler : MacCommonFileDialogHandler<SelectFileDialogDa
4747
protected override NSSavePanel OnCreatePanel (SelectFileDialogData data)
4848
{
4949
if (data.Action == FileChooserAction.Save)
50-
return new NSSavePanel ();
50+
return NSSavePanel.SavePanel;
5151

52-
return new NSOpenPanel {
53-
CanChooseDirectories = (data.Action & FileChooserAction.FolderFlags) != 0,
54-
CanChooseFiles = (data.Action & FileChooserAction.FileFlags) != 0,
55-
CanCreateDirectories = (data.Action & FileChooserAction.CreateFolder) != 0,
56-
ResolvesAliases = false,
57-
};
52+
var openPanel = NSOpenPanel.OpenPanel;
53+
openPanel.CanChooseDirectories = (data.Action & FileChooserAction.FolderFlags) != 0;
54+
openPanel.CanChooseFiles = (data.Action & FileChooserAction.FileFlags) != 0;
55+
openPanel.CanCreateDirectories = (data.Action & FileChooserAction.CreateFolder) != 0;
56+
openPanel.ResolvesAliases = false;
57+
return openPanel;
5858
}
5959

6060
public bool Run (SelectFileDialogData data)

0 commit comments

Comments
 (0)