private void OnCloseWindow(IWindowResult result)
        {
            result.Window.CloseWindowEvent   -= OnCloseWindow;
            result.Window.DestroyWindowEvent -= OnDestroyWindow;

            var index            = _openedWindows.IndexOf(result.Window);
            var overlappedWindow = index > 0 ? _openedWindows.ElementAt(index - 1) : null;

            _openedWindows.Remove(result.Window);

            if (result.Window.IsInactiveOrDeactivated())
            {
                Destroy(result.Window.Canvas.gameObject);
            }
            else
            {
                result.Window.ActivatableStateChangedEvent += OnWindowDeactivateHandler;
            }

            if (overlappedWindow != null && overlappedWindow.IsInactiveOrDeactivated())
            {
                overlappedWindow.Activate();
            }

            _isUnique = false;
            WindowClosedEvent?.Invoke(result);

            _delayedWindows.ToList().ForEach(call =>
            {
                if (_isUnique || call.IsUnique && _openedWindows.Count > 0)
                {
                    return;
                }

                _delayedWindows.Remove(call);

                call.Window.Canvas.gameObject.SetActive(true);
                DoApplyWindow(call.Window, call.IsUnique, call.Overlap);
            });
        }
 private void OnDestroyWindow(IWindowResult result)
 {
     Debug.LogWarningFormat("Window {0} was destroyed outside of Close() method.", result.Window.WindowId);
     OnCloseWindow(result);
 }