diff --git a/Source/Core/Core/Src/Core.cpp b/Source/Core/Core/Src/Core.cpp index 263b1a4f81..cc86c4385d 100644 --- a/Source/Core/Core/Src/Core.cpp +++ b/Source/Core/Core/Src/Core.cpp @@ -208,7 +208,11 @@ bool Init() void Stop() // - Hammertime! { if (PowerPC::GetState() == PowerPC::CPU_POWERDOWN) + { + if (g_EmuThread.joinable()) + g_EmuThread.join(); return; + } const SCoreStartupParameter& _CoreParameter = SConfig::GetInstance().m_LocalCoreStartupParameter; @@ -346,6 +350,7 @@ void EmuThread() if (!g_video_backend->Initialize(g_pWindowHandle)) { PanicAlert("Failed to initialize video backend!"); + Host_Message(WM_USER_STOP); return; } @@ -357,6 +362,7 @@ void EmuThread() HW::Shutdown(); g_video_backend->Shutdown(); PanicAlert("Failed to initialize DSP emulator!"); + Host_Message(WM_USER_STOP); return; } diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index 51c1f83f9b..a0081384e0 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -983,7 +983,7 @@ void CFrame::OnKeyUp(wxKeyEvent& event) void CFrame::OnMouse(wxMouseEvent& event) { #if defined(HAVE_X11) && HAVE_X11 - if(Core::GetState() != Core::CORE_UNINITIALIZED) + if (Core::GetState() != Core::CORE_UNINITIALIZED) { if(event.Dragging()) X11Utils::SendMotionEvent(X11Utils::XDisplayFromHandle(GetHandle()), diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index e8ba372f55..ab986f6b85 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -1021,7 +1021,8 @@ void CFrame::DoPause() // Stop the emulation void CFrame::DoStop() { - if (Core::GetState() != Core::CORE_UNINITIALIZED) + if (Core::GetState() != Core::CORE_UNINITIALIZED || + m_RenderParent != NULL) { #if defined __WXGTK__ wxMutexGuiLeave(); @@ -1466,32 +1467,41 @@ void CFrame::OnSaveStateToFile(wxCommandEvent& WXUNUSED (event)) void CFrame::OnLoadLastState(wxCommandEvent& WXUNUSED (event)) { - State::LoadLastSaved(); + if (Core::GetState() != Core::CORE_UNINITIALIZED) + State::LoadLastSaved(); } void CFrame::OnUndoLoadState(wxCommandEvent& WXUNUSED (event)) { - State::UndoLoadState(); + if (Core::GetState() != Core::CORE_UNINITIALIZED) + State::UndoLoadState(); } void CFrame::OnUndoSaveState(wxCommandEvent& WXUNUSED (event)) { - State::UndoSaveState(); + if (Core::GetState() != Core::CORE_UNINITIALIZED) + State::UndoSaveState(); } void CFrame::OnLoadState(wxCommandEvent& event) { - int id = event.GetId(); - int slot = id - IDM_LOADSLOT1 + 1; - State::Load(slot); + if (Core::GetState() != Core::CORE_UNINITIALIZED) + { + int id = event.GetId(); + int slot = id - IDM_LOADSLOT1 + 1; + State::Load(slot); + } } void CFrame::OnSaveState(wxCommandEvent& event) { - int id = event.GetId(); - int slot = id - IDM_SAVESLOT1 + 1; - State::Save(slot); + if (Core::GetState() != Core::CORE_UNINITIALIZED) + { + int id = event.GetId(); + int slot = id - IDM_SAVESLOT1 + 1; + State::Save(slot); + } } void CFrame::OnFrameSkip(wxCommandEvent& event)