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:
authorMichael Hutchinson <m.j.hutchinson@gmail.com>2012-01-28 00:41:25 +0400
committerMichael Hutchinson <m.j.hutchinson@gmail.com>2012-01-28 00:50:25 +0400
commitca00645c0f884e6cab8e8794fc7d65b2f6f3e5c3 (patch)
tree8bf6b20d77d74a7d175fe6d057c163a6351bc54c
parent79d95b2d5597b5382e932255413d768167c5d4af (diff)
[Ide,Mac] Fix race in cancellation of dialogsmonodevelop-2.8.6.4
-rw-r--r--main/src/addins/MacPlatform/Dialogs/MacAlertDialogHandler.cs20
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Extensions/AlertDialog.cs11
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) {