Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVsevolod Kukol <sevoku@microsoft.com>2019-04-24 12:10:49 +0300
committerVsevolod Kukol <sevoku@microsoft.com>2019-04-24 13:25:02 +0300
commit88f9406685b4d792a8e31d89645cf4e635e2a138 (patch)
treeedce4ce5e353a4538320a0d58f351f328498d01e
parent4f7f44f99735e9d03644f7ec8b8061858b0b742e (diff)
[Mac] Fix Alert Dialog crash on startup
If a crash occurs during startup, the alert dialog might fail and crash if no other window is shown yet. The crash can be avoided by falling back to the main IDE window only if it's realized and visible and running app-modal otherwise. Additionally avoid crashing in GetParentForModalWindow and log more details about disposed and resurrected root windows. Fixes VSTS #849568
-rw-r--r--main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs6
-rw-r--r--main/src/addins/MacPlatform/MacPlatform.cs23
2 files changed, 26 insertions, 3 deletions
diff --git a/main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs b/main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs
index fee1dc7dce..8112ef22f4 100644
--- a/main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs
+++ b/main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs
@@ -1,4 +1,4 @@
-//
+//
// MacAlertFileDialogHandler.cs
//
// Author:
@@ -182,7 +182,9 @@ namespace MonoDevelop.MacIntegration
int response = -1000;
- var parent = data.TransientFor ?? IdeApp.Workbench.RootWindow;
+ var parent = data.TransientFor;
+ if (parent == null && IdeApp.Workbench?.RootWindow?.Visible == true)
+ parent = IdeApp.Workbench?.RootWindow;
NSWindow nativeParent;
try {
nativeParent = parent;
diff --git a/main/src/addins/MacPlatform/MacPlatform.cs b/main/src/addins/MacPlatform/MacPlatform.cs
index 97a8063b12..10672960c5 100644
--- a/main/src/addins/MacPlatform/MacPlatform.cs
+++ b/main/src/addins/MacPlatform/MacPlatform.cs
@@ -993,7 +993,28 @@ namespace MonoDevelop.MacIntegration
public override Window GetParentForModalWindow ()
{
- return NSApplication.SharedApplication.ModalWindow ?? NSApplication.SharedApplication.KeyWindow ?? NSApplication.SharedApplication.MainWindow;
+ try {
+ var window = NSApplication.SharedApplication.ModalWindow;
+ if (window != null)
+ return window;
+ } catch (Exception e) {
+ LoggingService.LogInternalError ("Getting SharedApplication.ModalWindow failed", e);
+ }
+ try {
+ var window = NSApplication.SharedApplication.KeyWindow;
+ if (window != null)
+ return window;
+ } catch (Exception e) {
+ LoggingService.LogInternalError ("Getting SharedApplication.KeyWindow failed", e);
+ }
+ try {
+ var window = NSApplication.SharedApplication.MainWindow;
+ if (window != null)
+ return window;
+ } catch (Exception e) {
+ LoggingService.LogInternalError ("Getting SharedApplication.MainWindow failed", e);
+ }
+ return null;
}
bool HasAnyDockWindowFocused ()