If hardware fails to initialize when emulation starts, die gracefully. This should fix issue 4602.
Also don't try to save and load states when the emulator is not running. This should fix most of issu 4600. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7607 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
b705b92075
commit
c2475f852e
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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()),
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue