Skip to content

Commit

Permalink
Redo modal manager connect and check properly (#5067)
Browse files Browse the repository at this point in the history
  • Loading branch information
hhyyrylainen committed Apr 26, 2024
1 parent 4cf8a01 commit bdc1b7f
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 14 deletions.
13 changes: 0 additions & 13 deletions src/engine/ObjectHelpers.cs

This file was deleted.

24 changes: 23 additions & 1 deletion src/gui_common/ModalManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public partial class ModalManager : NodeWithInput
private readonly Deque<TopLevelContainer> modalStack = new();
private readonly Queue<TopLevelContainer> demotedModals = new();

private readonly StringName modalConnectedMeta = "ModalManagerConnected";

#pragma warning disable CA2213 // Disposable fields should be disposed
private CanvasLayer canvasLayer = null!;
private Control activeModalContainer = null!;
Expand Down Expand Up @@ -87,7 +89,14 @@ public void MakeModal(TopLevelContainer popup)
modalStack.AddToFront(popup);
modalsDirty = true;

popup.CheckAndConnect(TopLevelContainer.SignalName.Closed, Callable.From(() => OnModalLost(popup)),
// Connect closed signal only when not already done so
if (popup.HasMeta(modalConnectedMeta))
return;

popup.SetMeta(modalConnectedMeta, Variant.From(true));

// PROBLEM:
popup.Connect(TopLevelContainer.SignalName.Closed, Callable.From(() => OnModalLost(popup)),
(uint)ConnectFlags.OneShot);
}

Expand Down Expand Up @@ -134,6 +143,16 @@ public bool HideTopMostPopup()
return null;
}

protected override void Dispose(bool disposing)
{
if (disposing)
{
modalConnectedMeta.Dispose();
}

base.Dispose(disposing);
}

private void UpdateModals()
{
while (demotedModals.Count > 0)
Expand Down Expand Up @@ -228,6 +247,9 @@ private void OnModalContainerInput(InputEvent @event)
/// </summary>
private void OnModalLost(TopLevelContainer popup)
{
// Remove meta signal connection info as this should only be triggered through the signal
popup.RemoveMeta(modalConnectedMeta);

if (!modalStack.Contains(popup))
return;

Expand Down

0 comments on commit bdc1b7f

Please sign in to comment.