diff options
author | Mike Krüger <mikkrg@microsoft.com> | 2019-06-05 08:53:07 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-05 08:53:07 +0300 |
commit | 794d45c338a9372744c70849e5f7081100929b64 (patch) | |
tree | 6aee8654156655d8fa825924c57a2397ffe442ae | |
parent | fca071aa393b142f2b14b97df405a5fcda4696a3 (diff) | |
parent | 800c10b8d37ebc6aeb9367390bc3015244614701 (diff) |
Merge pull request #7708 from mono/master-DisposedToken
[Ide] Added a disposed token to the document controller API.
4 files changed, 26 insertions, 21 deletions
diff --git a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserViewContent.cs b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserViewContent.cs index 2e2740eea2..15a38cfc9f 100644 --- a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserViewContent.cs +++ b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserViewContent.cs @@ -64,7 +64,6 @@ namespace MonoDevelop.AssemblyBrowser { DocumentTitle = GettextCatalog.GetString ("Assembly Browser"); widget = new AssemblyBrowserWidget (); - IsDisposed = false; FillWidget (); } @@ -104,14 +103,8 @@ namespace MonoDevelop.AssemblyBrowser widget.EnsureDefinitionsLoaded (definitions); } - public bool IsDisposed { - get; - private set; - } - protected override void OnDispose () { - IsDisposed = true; if (currentWs != null) currentWs.WorkspaceLoaded -= Handle_WorkspaceLoaded; diff --git a/main/src/addins/MonoDevelop.TextEditor/MonoDevelop.TextEditor/TextViewContent.cs b/main/src/addins/MonoDevelop.TextEditor/MonoDevelop.TextEditor/TextViewContent.cs index 4a46c93df7..1bbfbb0e4b 100644 --- a/main/src/addins/MonoDevelop.TextEditor/MonoDevelop.TextEditor/TextViewContent.cs +++ b/main/src/addins/MonoDevelop.TextEditor/MonoDevelop.TextEditor/TextViewContent.cs @@ -1,4 +1,4 @@ -// +// // Copyright (c) Microsoft Corp. (https://www.microsoft.com) // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -291,14 +291,11 @@ namespace MonoDevelop.TextEditor Components.Control control; - bool isDisposed; protected override void OnDispose () { - if (isDisposed) + if (IsDisposed) return; - isDisposed = true; - textBufferRegistration?.Dispose (); textBufferRegistration = null; @@ -579,7 +576,7 @@ namespace MonoDevelop.TextEditor Task autoSaveTask; void InformAutoSave () { - if (isDisposed) + if (IsDisposed) return; RemoveAutoSaveTimer (); autoSaveTimer = GLib.Timeout.Add (500, delegate { @@ -725,7 +722,7 @@ namespace MonoDevelop.TextEditor void ReloadFromDisk () { try { - if (isDisposed || !File.Exists (FilePath)) + if (IsDisposed || !File.Exists (FilePath)) return; Load (true); @@ -739,7 +736,7 @@ namespace MonoDevelop.TextEditor void KeepChanges () { - if (isDisposed) + if (IsDisposed) return; ShowNotification = false; DismissInfoBar (); @@ -841,4 +838,4 @@ namespace MonoDevelop.TextEditor => throw new NotImplementedException (); } } -}
\ No newline at end of file +} diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.BuildOutputView/BuildOutputViewContent.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.BuildOutputView/BuildOutputViewContent.cs index e08d862924..ff00434baf 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.BuildOutputView/BuildOutputViewContent.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.BuildOutputView/BuildOutputViewContent.cs @@ -1,4 +1,4 @@ -// +// // BuildOutputView.cs // // Author: @@ -110,16 +110,14 @@ namespace MonoDevelop.Ide.BuildOutputView return control; } - bool disposed = false; protected override void OnDispose () { - if (!disposed) { + if (!IsDisposed) { if (control != null) { control.FileNameChanged -= FileNameChanged; control.Dispose (); } - disposed = true; } base.OnDispose (); } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Documents/DocumentController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Documents/DocumentController.cs index 1f7364566c..85646e209a 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Documents/DocumentController.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Documents/DocumentController.cs @@ -1,4 +1,4 @@ -// +// // DocumentController.cs // // Author: @@ -384,12 +384,26 @@ namespace MonoDevelop.Ide.Gui.Documents } } + CancellationTokenSource disposedTokenSource = new CancellationTokenSource (); + + /// <summary> + /// Returns a dispose token that's canceled when the document controller disposes. + /// </summary> + protected CancellationToken DisposedToken { get; } + + protected bool IsDisposed { get => disposed; } + protected virtual bool ControllerIsViewOnly => false; internal FilePath OriginalContentName { get; set; } internal bool Initialized => initialized; + public DocumentController () + { + DisposedToken = disposedTokenSource.Token; + } + /// <summary> /// Initializes the controller /// </summary> @@ -413,6 +427,9 @@ namespace MonoDevelop.Ide.Gui.Documents public void Dispose () { if (!disposed) { + disposedTokenSource.Cancel (); + disposedTokenSource.Dispose (); + disposedTokenSource = null; linkedController?.Dispose (); disposed = true; OnDispose (); |