From 8e7970585492b9c1c17727c2b0a46ce5e7c4130e Mon Sep 17 00:00:00 2001 From: Silent Date: Mon, 5 Aug 2019 21:47:53 +0200 Subject: [PATCH] WinUpdater: Wait in UI::Init until window is done creating to avoid losing UI::SetVisible signals --- Source/Core/WinUpdater/WinUI.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/Core/WinUpdater/WinUI.cpp b/Source/Core/WinUpdater/WinUI.cpp index 6958be9d40..f6b0a7345c 100644 --- a/Source/Core/WinUpdater/WinUI.cpp +++ b/Source/Core/WinUpdater/WinUI.cpp @@ -12,6 +12,8 @@ #include #include +#include "Common/Event.h" +#include "Common/ScopeGuard.h" #include "Common/StringUtil.h" namespace @@ -23,6 +25,7 @@ HWND current_progressbar_handle = nullptr; ITaskbarList3* taskbar_list = nullptr; std::thread ui_thread; +Common::Event window_created_event; int GetWindowHeight(HWND hwnd) { @@ -54,6 +57,9 @@ bool InitWindow() { InitCommonControls(); + // Notify main thread we're done creating the window when we return + Common::ScopeGuard ui_guard{[] { window_created_event.Set(); }}; + WNDCLASS wndcl = {}; wndcl.lpfnWndProc = WindowProc; wndcl.hbrBackground = GetSysColorBrush(COLOR_MENU); @@ -226,6 +232,9 @@ void MessageLoop() void Init() { ui_thread = std::thread(MessageLoop); + + // Wait for UI thread to finish creating the window (or at least attempting to) + window_created_event.Wait(); } void Stop()