fix(Window): unfuck OnOpen/OnClose logic (fixes #312)

This commit is contained in:
goat 2021-04-28 16:36:31 +02:00
parent a5aa9cd849
commit 2d47ae61ef
No known key found for this signature in database
GPG key ID: F18F057873895461

View file

@ -99,13 +99,10 @@ namespace Dalamud.Interface.Windowing
/// </summary> /// </summary>
public bool IsOpen public bool IsOpen
{ {
get => this.mainIsOpen; get => this.internalIsOpen;
set set
{ {
if (!value) this.internalIsOpen = value;
this.internalIsOpen = true;
this.mainIsOpen = value;
} }
} }
@ -130,8 +127,19 @@ namespace Dalamud.Interface.Windowing
/// </summary> /// </summary>
internal void DrawInternal() internal void DrawInternal()
{ {
//if (WindowName.Contains("Credits"))
// Log.Information($"Draw: {IsOpen} {this.internalIsOpen} {this.internalLastIsOpen}");
if (!this.IsOpen) if (!this.IsOpen)
{
if (this.internalIsOpen != this.internalLastIsOpen)
{
this.internalLastIsOpen = this.internalIsOpen;
this.OnClose();
}
return; return;
}
var hasNamespace = !string.IsNullOrEmpty(this.Namespace); var hasNamespace = !string.IsNullOrEmpty(this.Namespace);
@ -143,6 +151,12 @@ namespace Dalamud.Interface.Windowing
if (this.ForceMainWindow) if (this.ForceMainWindow)
ImGuiHelpers.ForceNextWindowMainViewport(); 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)) if (ImGui.Begin(this.WindowName, ref this.internalIsOpen, this.Flags))
{ {
// Draw the actual window contents // Draw the actual window contents
@ -153,7 +167,10 @@ namespace Dalamud.Interface.Windowing
if (hasNamespace) if (hasNamespace)
ImGui.PopID(); ImGui.PopID();
}
private void CheckState()
{
if (this.internalLastIsOpen != this.internalIsOpen) if (this.internalLastIsOpen != this.internalIsOpen)
{ {
if (this.internalIsOpen) if (this.internalIsOpen)
@ -165,11 +182,6 @@ namespace Dalamud.Interface.Windowing
this.OnClose(); this.OnClose();
} }
} }
this.internalLastIsOpen = this.internalIsOpen;
if (this.internalIsOpen != true)
this.IsOpen = false;
} }
private void ApplyConditionals() private void ApplyConditionals()