diff --git a/src/SharpIDE.Godot/Features/CodeEditor/CodeEditorPanel.cs b/src/SharpIDE.Godot/Features/CodeEditor/CodeEditorPanel.cs index cd0db1b..ed98ed4 100644 --- a/src/SharpIDE.Godot/Features/CodeEditor/CodeEditorPanel.cs +++ b/src/SharpIDE.Godot/Features/CodeEditor/CodeEditorPanel.cs @@ -104,7 +104,7 @@ public partial class CodeEditorPanel : MarginContainer _tabContainer.SetTabTooltip(newTabIndex, file.Path); _tabContainer.CurrentTab = newTabIndex; - file.IsDirty.Skip(1).SubscribeOnThreadPool().SubscribeAwait(async (isDirty, ct) => + file.IsDirty.Skip(1).SubscribeOnThreadPool().ObserveOnThreadPool().SubscribeAwait(async (isDirty, ct) => { //GD.Print($"File dirty state changed: {file.Path} is now {(isDirty ? "dirty" : "clean")}"); await this.InvokeAsync(() => diff --git a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs index 516790f..cd69108 100644 --- a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs +++ b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs @@ -278,7 +278,7 @@ public partial class SharpIdeCodeEdit : CodeEdit var project = ((IChildSharpIdeNode)_currentFile).GetNearestProjectNode(); if (project is not null) { - _projectDiagnosticsObserveDisposable = project.Diagnostics.ObserveChanged() + _projectDiagnosticsObserveDisposable = project.Diagnostics.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (innerEvent, ct) => { var projectDiagnosticsForFile = project.Diagnostics.Where(s => s.FilePath == _currentFile.Path).ToImmutableArray(); diff --git a/src/SharpIDE.Godot/Features/Problems/ProblemsPanel.cs b/src/SharpIDE.Godot/Features/Problems/ProblemsPanel.cs index 21d8366..31c65f7 100644 --- a/src/SharpIDE.Godot/Features/Problems/ProblemsPanel.cs +++ b/src/SharpIDE.Godot/Features/Problems/ProblemsPanel.cs @@ -48,7 +48,7 @@ public partial class ProblemsPanel : Control public void BindToTree(ObservableHashSet list) { var view = list.CreateView(y => new TreeItemContainer()); - view.ObserveChanged() + view.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (e, ct) => await (e.Action switch { NotifyCollectionChangedAction.Add => CreateProjectTreeItem(_tree, _rootItem, e), @@ -70,7 +70,7 @@ public partial class ProblemsPanel : Control Observable.EveryValueChanged(e.NewItem.Value, s => s.Diagnostics.Count).Subscribe(s => treeItem.Visible = s is not 0).AddTo(this); var projectDiagnosticsView = e.NewItem.Value.Diagnostics.CreateView(y => new TreeItemContainer()); - projectDiagnosticsView.ObserveChanged() + projectDiagnosticsView.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch { NotifyCollectionChangedAction.Add => CreateDiagnosticTreeItem(_tree, treeItem, innerEvent), diff --git a/src/SharpIDE.Godot/Features/SolutionExplorer/SolutionExplorerPanel.cs b/src/SharpIDE.Godot/Features/SolutionExplorer/SolutionExplorerPanel.cs index db78da9..364cb98 100644 --- a/src/SharpIDE.Godot/Features/SolutionExplorer/SolutionExplorerPanel.cs +++ b/src/SharpIDE.Godot/Features/SolutionExplorer/SolutionExplorerPanel.cs @@ -141,7 +141,7 @@ public partial class SolutionExplorerPanel : MarginContainer var projectsView = solution.Projects.CreateView(y => new TreeItemContainer()); projectsView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateProjectTreeItem(_tree, rootItem, s.Value)); - projectsView.ObserveChanged() + projectsView.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (e, ct) => await (e.Action switch { NotifyCollectionChangedAction.Add => this.InvokeAsync(() => e.NewItem.View.Value = CreateProjectTreeItem(_tree, _rootItem, e.NewItem.Value)), @@ -152,7 +152,7 @@ public partial class SolutionExplorerPanel : MarginContainer // Observe Solution Folders var foldersView = solution.SlnFolders.CreateView(y => new TreeItemContainer()); foldersView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateSlnFolderTreeItem(_tree, rootItem, s.Value)); - foldersView.ObserveChanged() + foldersView.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (e, ct) => await (e.Action switch { NotifyCollectionChangedAction.Add => this.InvokeAsync(() => e.NewItem.View.Value = CreateSlnFolderTreeItem(_tree, _rootItem, e.NewItem.Value)), @@ -176,7 +176,7 @@ public partial class SolutionExplorerPanel : MarginContainer var subFoldersView = slnFolder.Folders.CreateView(y => new TreeItemContainer()); subFoldersView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateSlnFolderTreeItem(_tree, folderItem, s.Value)); - subFoldersView.ObserveChanged() + subFoldersView.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch { NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateSlnFolderTreeItem(_tree, folderItem, innerEvent.NewItem.Value)), @@ -186,7 +186,7 @@ public partial class SolutionExplorerPanel : MarginContainer var projectsView = slnFolder.Projects.CreateView(y => new TreeItemContainer()); projectsView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateProjectTreeItem(_tree, folderItem, s.Value)); - projectsView.ObserveChanged() + projectsView.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch { NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateProjectTreeItem(_tree, folderItem, innerEvent.NewItem.Value)), @@ -196,7 +196,7 @@ public partial class SolutionExplorerPanel : MarginContainer var filesView = slnFolder.Files.CreateView(y => new TreeItemContainer()); filesView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFileTreeItem(_tree, folderItem, s.Value)); - filesView.ObserveChanged() + filesView.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch { NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFileTreeItem(_tree, folderItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)), @@ -218,7 +218,7 @@ public partial class SolutionExplorerPanel : MarginContainer var foldersView = projectModel.Folders.CreateView(y => new TreeItemContainer()); foldersView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFolderTreeItem(_tree, projectItem, s.Value)); - foldersView.ObserveChanged() + foldersView.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch { NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFolderTreeItem(_tree, projectItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)), @@ -230,7 +230,7 @@ public partial class SolutionExplorerPanel : MarginContainer // Observe project files var filesView = projectModel.Files.CreateView(y => new TreeItemContainer()); filesView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFileTreeItem(_tree, projectItem, s.Value)); - filesView.ObserveChanged() + filesView.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch { NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFileTreeItem(_tree, projectItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)), @@ -259,7 +259,7 @@ public partial class SolutionExplorerPanel : MarginContainer var subFoldersView = sharpIdeFolder.Folders.CreateView(y => new TreeItemContainer()); subFoldersView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFolderTreeItem(_tree, folderItem, s.Value)); - subFoldersView.ObserveChanged() + subFoldersView.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch { NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFolderTreeItem(_tree, folderItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)), @@ -271,7 +271,7 @@ public partial class SolutionExplorerPanel : MarginContainer // Observe files var filesView = sharpIdeFolder.Files.CreateView(y => new TreeItemContainer()); filesView.Unfiltered.ToList().ForEach(s => s.View.Value = CreateFileTreeItem(_tree, folderItem, s.Value)); - filesView.ObserveChanged() + filesView.ObserveChanged().SubscribeOnThreadPool().ObserveOnThreadPool() .SubscribeAwait(async (innerEvent, ct) => await (innerEvent.Action switch { NotifyCollectionChangedAction.Add => this.InvokeAsync(() => innerEvent.NewItem.View.Value = CreateFileTreeItem(_tree, folderItem, innerEvent.NewItem.Value, innerEvent.NewStartingIndex)),