Skip to content
Permalink
Browse files

WinUpdater: Wait in UI::Init until window is done creating to avoid l…

…osing UI::SetVisible signals
  • Loading branch information...
CookiePLMonster committed Aug 5, 2019
1 parent f70efbb commit 8e7970585492b9c1c17727c2b0a46ce5e7c4130e
Showing with 9 additions and 0 deletions.
  1. +9 −0 Source/Core/WinUpdater/WinUI.cpp
@@ -12,6 +12,8 @@
#include <ShObjIdl.h>
#include <shellapi.h>

#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()

0 comments on commit 8e79705

Please sign in to comment.
You can’t perform that action at this time.