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:
authorMikayla Hutchinson <m.j.hutchinson@gmail.com>2017-03-22 01:40:42 +0300
committerMikayla Hutchinson <m.j.hutchinson@gmail.com>2017-03-22 01:40:42 +0300
commitb27d453acf39004fc38f63f579551fb46b49c316 (patch)
tree4296df18df1293556cf18ee69dde26fc138a2ace /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui
parent7950a7bb5bd7f26476a9bf324dcd62d337be7e57 (diff)
parent05102cc507ad10f0f67573431be7b59464ea9690 (diff)
Merge remote-tracking branch 'origin/master' into roslyn-ivt
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/DefaultWorkbench.cs22
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Document.cs4
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/HiddenWorkbenchWindow.cs7
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/IWorkbenchWindow.cs6
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs14
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs8
6 files changed, 37 insertions, 24 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/DefaultWorkbench.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/DefaultWorkbench.cs
index 3ee80e6944..056046ce66 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/DefaultWorkbench.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/DefaultWorkbench.cs
@@ -687,13 +687,21 @@ namespace MonoDevelop.Ide.Gui
}
}
}
-
- protected /*override*/ void OnClosing(object o, Gtk.DeleteEventArgs e)
+
+ bool closing;
+ protected /*override*/ async void OnClosing(object o, Gtk.DeleteEventArgs e)
{
- if (Close()) {
+ // close the window in case DeleteEvent fires again after a successful close
+ if (closing)
+ return;
+
+ // don't allow Gtk to close the workspace, in case Close() leaves the synchronization context
+ // Gtk.Application.Quit () will handle it for us.
+ e.RetVal = true;
+ if (await Close ()) {
+ closing = true;
+ Destroy (); // default delete action
Gtk.Application.Quit ();
- } else {
- e.RetVal = true;
}
}
@@ -720,7 +728,7 @@ namespace MonoDevelop.Ide.Gui
Destroy ();
}
- public bool Close()
+ public async Task<bool> Close()
{
if (!IdeApp.OnExit ())
return false;
@@ -745,7 +753,7 @@ namespace MonoDevelop.Ide.Gui
}
}
- if (!IdeApp.Workspace.Close (false, false))
+ if (!await IdeApp.Workspace.Close (false, false))
return false;
CloseAllViews ();
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Document.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Document.cs
index 242a605786..cd11281506 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Document.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Document.cs
@@ -517,9 +517,9 @@ namespace MonoDevelop.Ide.Gui
await UpdateParseDocument ();
}
- public bool Close ()
+ public async Task<bool> Close ()
{
- return ((SdiWorkspaceWindow)Window).CloseWindow (false, true);
+ return await ((SdiWorkspaceWindow)Window).CloseWindow (false, true);
}
protected override void OnSaved (EventArgs e)
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/HiddenWorkbenchWindow.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/HiddenWorkbenchWindow.cs
index 34d6fef15f..b5e3110a4e 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/HiddenWorkbenchWindow.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/HiddenWorkbenchWindow.cs
@@ -26,6 +26,7 @@
using System;
using System.Collections.Generic;
+using System.Threading.Tasks;
using Mono.Addins;
namespace MonoDevelop.Ide.Gui
@@ -74,9 +75,9 @@ namespace MonoDevelop.Ide.Gui
set {}
}
- public bool CloseWindow (bool force)
+ public Task<bool> CloseWindow (bool force)
{
- return true;
+ return Task.FromResult (true);
}
public void SelectWindow ()
@@ -112,7 +113,7 @@ namespace MonoDevelop.Ide.Gui
public event EventHandler TitleChanged { add {} remove {} }
public event EventHandler DocumentChanged { add {} remove {} }
- public event MonoDevelop.Ide.Gui.WorkbenchWindowEventHandler Closing { add {} remove {} }
+ public event MonoDevelop.Ide.Gui.WorkbenchWindowAsyncEventHandler Closing { add {} remove {} }
public event MonoDevelop.Ide.Gui.WorkbenchWindowEventHandler Closed { add {} remove {} }
public event MonoDevelop.Ide.Gui.ActiveViewContentEventHandler ActiveViewContentChanged { add {} remove {} }
public event EventHandler ViewsChanged { add {} remove {} }
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/IWorkbenchWindow.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/IWorkbenchWindow.cs
index 8bcc0cde5c..4614f4fe51 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/IWorkbenchWindow.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/IWorkbenchWindow.cs
@@ -30,6 +30,7 @@ using System.ComponentModel;
using System.Collections.Generic;
using Mono.Addins;
using MonoDevelop.Components.Docking;
+using System.Threading.Tasks;
namespace MonoDevelop.Ide.Gui
{
@@ -53,7 +54,7 @@ namespace MonoDevelop.Ide.Gui
void SwitchView (BaseViewContent subViewContent);
int FindView <T>();
- bool CloseWindow (bool force);
+ Task<bool> CloseWindow (bool force);
void SelectWindow ();
/// <summary>
@@ -63,11 +64,12 @@ namespace MonoDevelop.Ide.Gui
event EventHandler DocumentChanged;
event WorkbenchWindowEventHandler Closed;
- event WorkbenchWindowEventHandler Closing;
+ event WorkbenchWindowAsyncEventHandler Closing;
event ActiveViewContentEventHandler ActiveViewContentChanged;
event EventHandler ViewsChanged;
}
+ public delegate Task WorkbenchWindowAsyncEventHandler (object o, WorkbenchWindowEventArgs e);
public delegate void WorkbenchWindowEventHandler (object o, WorkbenchWindowEventArgs e);
public class WorkbenchWindowEventArgs : CancelEventArgs
{
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs
index b6eeec99d7..2b685ff1ef 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/SdiWorkspaceWindow.cs
@@ -38,6 +38,7 @@ using MonoDevelop.Components.Commands;
using MonoDevelop.Ide.Extensions;
using MonoDevelop.Ide.Gui.Content;
using MonoDevelop.Components.DockNotebook;
+using System.Threading.Tasks;
namespace MonoDevelop.Ide.Gui
{
@@ -443,17 +444,17 @@ namespace MonoDevelop.Ide.Gui
}
}
- public bool CloseWindow (bool force)
+ public Task<bool> CloseWindow (bool force)
{
return CloseWindow (force, false);
}
- public bool CloseWindow (bool force, bool animate)
+ public async Task<bool> CloseWindow (bool force, bool animate)
{
bool wasActive = workbench.ActiveWorkbenchWindow == this;
WorkbenchWindowEventArgs args = new WorkbenchWindowEventArgs (force, wasActive);
args.Cancel = false;
- OnClosing (args);
+ await OnClosing (args);
if (args.Cancel)
return false;
@@ -808,10 +809,11 @@ namespace MonoDevelop.Ide.Gui
}
}
- protected virtual void OnClosing (WorkbenchWindowEventArgs e)
+ protected virtual async Task OnClosing (WorkbenchWindowEventArgs e)
{
if (Closing != null) {
- Closing (this, e);
+ foreach (var handler in Closing.GetInvocationList ().Cast<WorkbenchWindowAsyncEventHandler> ())
+ await handler (this, e);
}
}
@@ -830,7 +832,7 @@ namespace MonoDevelop.Ide.Gui
public event EventHandler TitleChanged;
public event WorkbenchWindowEventHandler Closed;
- public event WorkbenchWindowEventHandler Closing;
+ public event WorkbenchWindowAsyncEventHandler Closing;
public event ActiveViewContentEventHandler ActiveViewContentChanged;
}
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs
index 324f2fc919..2840b11442 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Workbench.cs
@@ -142,9 +142,9 @@ namespace MonoDevelop.Ide.Gui
Present ();
}
- internal bool Close ()
+ internal async Task<bool> Close ()
{
- return workbench.Close();
+ return await workbench.Close();
}
public ImmutableList<Document> Documents {
@@ -584,7 +584,7 @@ namespace MonoDevelop.Ide.Gui
}
return doc;
} else {
- if (!doc.Close ())
+ if (!await doc.Close ())
return doc;
break;
}
@@ -841,7 +841,7 @@ namespace MonoDevelop.Ide.Gui
return pad;
}
- async void OnWindowClosing (object sender, WorkbenchWindowEventArgs args)
+ async Task OnWindowClosing (object sender, WorkbenchWindowEventArgs args)
{
var window = (IWorkbenchWindow) sender;
var viewContent = window.ViewContent;