From 935292c6fcc99d6a10126cfb4b2acaa2d29974e5 Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Thu, 16 Jul 2015 02:00:56 +0200 Subject: [PATCH] DolphinWX: In Host_ConnectWiimote(), instead of calling CFrame::ConnectWiimote() directly, dispatch an event that will call it for us in the GUI thread. This eliminates a possible stutter/short freeze that can happen during PowerPC::Pause(). --- Source/Core/DolphinWX/Frame.cpp | 16 ++++++++++++++++ Source/Core/DolphinWX/Globals.h | 12 ++++++++++++ Source/Core/DolphinWX/Main.cpp | 11 ++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp index 759c2bdc6e..e58a8c4ce1 100644 --- a/Source/Core/DolphinWX/Frame.cpp +++ b/Source/Core/DolphinWX/Frame.cpp @@ -776,6 +776,22 @@ void CFrame::OnHostMessage(wxCommandEvent& event) case IDM_STOPPED: OnStopped(); break; + + case IDM_FORCE_CONNECT_WIIMOTE1: + case IDM_FORCE_CONNECT_WIIMOTE2: + case IDM_FORCE_CONNECT_WIIMOTE3: + case IDM_FORCE_CONNECT_WIIMOTE4: + case IDM_FORCE_CONNECT_BALANCEBOARD: + ConnectWiimote(event.GetId() - IDM_FORCE_CONNECT_WIIMOTE1, true); + break; + + case IDM_FORCE_DISCONNECT_WIIMOTE1: + case IDM_FORCE_DISCONNECT_WIIMOTE2: + case IDM_FORCE_DISCONNECT_WIIMOTE3: + case IDM_FORCE_DISCONNECT_WIIMOTE4: + case IDM_FORCE_DISCONNECT_BALANCEBOARD: + ConnectWiimote(event.GetId() - IDM_FORCE_DISCONNECT_WIIMOTE1, false); + break; } } diff --git a/Source/Core/DolphinWX/Globals.h b/Source/Core/DolphinWX/Globals.h index 2b327b0fad..cd3a981e07 100644 --- a/Source/Core/DolphinWX/Globals.h +++ b/Source/Core/DolphinWX/Globals.h @@ -298,6 +298,18 @@ enum IDM_HOST_MESSAGE, IDM_FULLSCREEN_REQUEST, + // Used for Host_ConnectWiimote() + IDM_FORCE_CONNECT_WIIMOTE1, + IDM_FORCE_CONNECT_WIIMOTE2, + IDM_FORCE_CONNECT_WIIMOTE3, + IDM_FORCE_CONNECT_WIIMOTE4, + IDM_FORCE_CONNECT_BALANCEBOARD, + IDM_FORCE_DISCONNECT_WIIMOTE1, + IDM_FORCE_DISCONNECT_WIIMOTE2, + IDM_FORCE_DISCONNECT_WIIMOTE3, + IDM_FORCE_DISCONNECT_WIIMOTE4, + IDM_FORCE_DISCONNECT_BALANCEBOARD, + IDM_MPANEL, ID_STATUSBAR, IDM_FREELOOK_DECREASE_SPEED, diff --git a/Source/Core/DolphinWX/Main.cpp b/Source/Core/DolphinWX/Main.cpp index 59de81fff6..194ca7b566 100644 --- a/Source/Core/DolphinWX/Main.cpp +++ b/Source/Core/DolphinWX/Main.cpp @@ -540,7 +540,16 @@ bool Host_RendererIsFullscreen() void Host_ConnectWiimote(int wm_idx, bool connect) { - CFrame::ConnectWiimote(wm_idx, connect); + if (connect) + { + wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_FORCE_CONNECT_WIIMOTE1 + wm_idx); + main_frame->GetEventHandler()->AddPendingEvent(event); + } + else + { + wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_FORCE_DISCONNECT_WIIMOTE1 + wm_idx); + main_frame->GetEventHandler()->AddPendingEvent(event); + } } void Host_ShowVideoConfig(void* parent, const std::string& backend_name,