diff options
author | Michael Hutchinson <m.j.hutchinson@gmail.com> | 2012-01-28 00:41:25 +0400 |
---|---|---|
committer | Michael Hutchinson <m.j.hutchinson@gmail.com> | 2012-01-28 00:50:25 +0400 |
commit | ca00645c0f884e6cab8e8794fc7d65b2f6f3e5c3 (patch) | |
tree | 8bf6b20d77d74a7d175fe6d057c163a6351bc54c | |
parent | 79d95b2d5597b5382e932255413d768167c5d4af (diff) |
[Ide,Mac] Fix race in cancellation of dialogsmonodevelop-2.8.6.4
-rw-r--r-- | main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs | 20 | ||||
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Extensions/AlertDialog.cs | 11 |
2 files changed, 16 insertions, 15 deletions
diff --git a/main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs b/main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs index cbb125a7a7..b70dad7348 100644 --- a/main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs +++ b/main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs @@ -132,28 +132,28 @@ namespace MonoDevelop.MacIntegration ((NSPanel) alert.Window).SetFrame (new RectangleF (frame.X, frame.Y, Math.Max (frame.Width, 600), frame.Height), true); alert.Layout (); - bool cancelled = false, completed = false; + bool completed = false; if (data.Message.CancellationToken.CanBeCanceled) { data.Message.CancellationToken.Register (delegate { alert.InvokeOnMainThread (() => { if (!completed) { - cancelled = true; NSApplication.SharedApplication.AbortModal (); } }); }); } - int result = alert.RunModal () - (int)NSAlertButtonReturn.First; - completed = true; - - if (result < 0 || result > buttons.Count) { - cancelled = true; - } else { - data.ResultButton = buttons [result]; + if (!data.Message.CancellationToken.IsCancellationRequested) { + int result = alert.RunModal () - (int)NSAlertButtonReturn.First; + completed = true; + if (result >= 0 && result < buttons.Count) { + data.ResultButton = buttons [result]; + } else { + data.ResultButton = null; + } } - if (cancelled || data.Message.CancellationToken.IsCancellationRequested) { + if (data.ResultButton == null || data.Message.CancellationToken.IsCancellationRequested) { data.SetResultToCancelled (); } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Extensions/AlertDialog.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Extensions/AlertDialog.cs index 7373d79a72..c1158c1ee8 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Extensions/AlertDialog.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Extensions/AlertDialog.cs @@ -93,11 +93,12 @@ namespace MonoDevelop.Components.Extensions }); } - MessageService.ShowCustomDialog (alertDialog, data.TransientFor); - if (alertDialog.ApplyToAll) - data.ApplyToAll = true; - data.ResultButton = alertDialog.ResultButton; - + if (!data.Message.CancellationToken.IsCancellationRequested) { + MessageService.ShowCustomDialog (alertDialog, data.TransientFor); + if (alertDialog.ApplyToAll) + data.ApplyToAll = true; + data.ResultButton = alertDialog.ResultButton; + } alertDialog = null; if (data.ResultButton == null || data.Message.CancellationToken.IsCancellationRequested) { |