From 3f937bdacca030c2806ebffea7ac363856a5e53f Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Sat, 17 Jan 2026 15:16:44 +1000 Subject: [PATCH] disable build buttons during build --- src/SharpIDE.Godot/IdeRoot.cs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/SharpIDE.Godot/IdeRoot.cs b/src/SharpIDE.Godot/IdeRoot.cs index 3e093d6..746fd8a 100644 --- a/src/SharpIDE.Godot/IdeRoot.cs +++ b/src/SharpIDE.Godot/IdeRoot.cs @@ -91,13 +91,27 @@ public partial class IdeRoot : Control _cleanSlnButton.Pressed += OnCleanSlnButtonPressed; _restoreSlnButton.Pressed += OnRestoreSlnButtonPressed; _cancelMsBuildActionButton.Pressed += async () => await _buildService.CancelBuildAsync(); - _buildService.BuildStarted.Subscribe(async () => await this.InvokeAsync(() => _cancelMsBuildActionButton.Disabled = false)); - _buildService.BuildFinished.Subscribe(async () => await this.InvokeAsync(() => _cancelMsBuildActionButton.Disabled = true)); + _buildService.BuildStarted.Subscribe(OnBuildStarted); + _buildService.BuildFinished.Subscribe(OnBuildFinished); GodotGlobalEvents.Instance.BottomPanelVisibilityChangeRequested.Subscribe(async show => await this.InvokeAsync(() => _invertedVSplitContainer.InvertedSetCollapsed(!show))); GetTree().GetRoot().FocusExited += OnFocusExited; _nodeReadyTcs.SetResult(); } - + + private async Task OnBuildStarted() => await OnBuildRunningStateChanged(true); + private async Task OnBuildFinished() => await OnBuildRunningStateChanged(false); + private async Task OnBuildRunningStateChanged(bool running) + { + await this.InvokeAsync(() => + { + _cancelMsBuildActionButton.Disabled = !running; + _buildSlnButton.Disabled = running; + _rebuildSlnButton.Disabled = running; + _cleanSlnButton.Disabled = running; + _restoreSlnButton.Disabled = running; + }); + } + // TODO: Problematic, as this is called even when the focus shifts to an embedded subwindow, such as a popup private void OnFocusExited() {