#nullable enable using Terminal.Gui.Drivers; namespace Terminal.Gui.App; /// /// Handles bespoke behaviours that occur when application top level changes. /// public class ToplevelTransitionManager : IToplevelTransitionManager { private readonly HashSet _readiedTopLevels = new (); private View? _lastTop; /// public void RaiseReadyEventIfNeeded () { Toplevel? top = Application.Top; if (top != null && !_readiedTopLevels.Contains (top)) { top.OnReady (); _readiedTopLevels.Add (top); // Views can be closed and opened and run again multiple times, see End_Does_Not_Dispose top.Closed += (s, e) => _readiedTopLevels.Remove (top); } } /// public void HandleTopMaybeChanging () { Toplevel? newTop = Application.Top; if (_lastTop != null && _lastTop != newTop && newTop != null) { newTop.SetNeedsDraw (); } _lastTop = Application.Top; } }