From 9de0529a1bd6ba92494867de136adf9c2d0b2869 Mon Sep 17 00:00:00 2001 From: Charlie Jiang Date: Tue, 14 Apr 2026 09:17:35 +0900 Subject: [PATCH] fix (WeaselUI): Crash when the Weasel Panel creation is re-entried. Do not create UI::pimpl_->panel when the previous one is still alive. --- WeaselUI/WeaselUI.cpp | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/WeaselUI/WeaselUI.cpp b/WeaselUI/WeaselUI.cpp index 53a9b92fe..b9c549b7a 100644 --- a/WeaselUI/WeaselUI.cpp +++ b/WeaselUI/WeaselUI.cpp @@ -83,23 +83,19 @@ VOID CALLBACK UIImpl::OnTimer(_In_ HWND hwnd, } bool UI::Create(HWND parent) { - if (pimpl_) { - pimpl_->panel.Create( - parent, 0, 0, WS_POPUP, - WS_EX_TOOLWINDOW | WS_EX_TOPMOST | WS_EX_NOACTIVATE | WS_EX_TRANSPARENT, - 0U, 0); - return true; + if (!pimpl_) { + pimpl_ = new UIImpl(*this); + if (!pimpl_) + return false; } - pimpl_ = new UIImpl(*this); - if (!pimpl_) - return false; + if (pimpl_->panel.IsWindow()) + return true; - pimpl_->panel.Create( - parent, 0, 0, WS_POPUP, - WS_EX_TOOLWINDOW | WS_EX_TOPMOST | WS_EX_NOACTIVATE | WS_EX_TRANSPARENT, - 0U, 0); - return true; + return pimpl_->panel.Create(parent, 0, 0, WS_POPUP, + WS_EX_TOOLWINDOW | WS_EX_TOPMOST | + WS_EX_NOACTIVATE | WS_EX_TRANSPARENT, + 0U, 0) != nullptr; } void UI::Destroy(bool full) {