From 2d47ae61ef2869c0914936a7ac629b55cd699db5 Mon Sep 17 00:00:00 2001 From: goat <16760685+goaaats@users.noreply.github.com> Date: Wed, 28 Apr 2021 16:36:31 +0200 Subject: [PATCH] fix(Window): unfuck OnOpen/OnClose logic (fixes #312) --- Dalamud/Interface/Windowing/Window.cs | 32 ++++++++++++++++++--------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/Dalamud/Interface/Windowing/Window.cs b/Dalamud/Interface/Windowing/Window.cs index e32bc2271..d74778a9b 100644 --- a/Dalamud/Interface/Windowing/Window.cs +++ b/Dalamud/Interface/Windowing/Window.cs @@ -99,13 +99,10 @@ namespace Dalamud.Interface.Windowing /// public bool IsOpen { - get => this.mainIsOpen; + get => this.internalIsOpen; set { - if (!value) - this.internalIsOpen = true; - - this.mainIsOpen = value; + this.internalIsOpen = value; } } @@ -130,8 +127,19 @@ namespace Dalamud.Interface.Windowing /// internal void DrawInternal() { + //if (WindowName.Contains("Credits")) + // Log.Information($"Draw: {IsOpen} {this.internalIsOpen} {this.internalLastIsOpen}"); + if (!this.IsOpen) + { + if (this.internalIsOpen != this.internalLastIsOpen) + { + this.internalLastIsOpen = this.internalIsOpen; + this.OnClose(); + } + return; + } var hasNamespace = !string.IsNullOrEmpty(this.Namespace); @@ -143,6 +151,12 @@ namespace Dalamud.Interface.Windowing if (this.ForceMainWindow) ImGuiHelpers.ForceNextWindowMainViewport(); + if (this.internalLastIsOpen != this.internalIsOpen && this.internalIsOpen) + { + this.internalLastIsOpen = this.internalIsOpen; + this.OnOpen(); + } + if (ImGui.Begin(this.WindowName, ref this.internalIsOpen, this.Flags)) { // Draw the actual window contents @@ -153,7 +167,10 @@ namespace Dalamud.Interface.Windowing if (hasNamespace) ImGui.PopID(); + } + private void CheckState() + { if (this.internalLastIsOpen != this.internalIsOpen) { if (this.internalIsOpen) @@ -165,11 +182,6 @@ namespace Dalamud.Interface.Windowing this.OnClose(); } } - - this.internalLastIsOpen = this.internalIsOpen; - - if (this.internalIsOpen != true) - this.IsOpen = false; } private void ApplyConditionals()