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!
|
void Stop() // - Hammertime!
|
||||||
{
|
{
|
||||||
if (PowerPC::GetState() == PowerPC::CPU_POWERDOWN)
|
if (PowerPC::GetState() == PowerPC::CPU_POWERDOWN)
|
||||||
|
{
|
||||||
|
if (g_EmuThread.joinable())
|
||||||
|
g_EmuThread.join();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const SCoreStartupParameter& _CoreParameter =
|
const SCoreStartupParameter& _CoreParameter =
|
||||||
SConfig::GetInstance().m_LocalCoreStartupParameter;
|
SConfig::GetInstance().m_LocalCoreStartupParameter;
|
||||||
|
@ -346,6 +350,7 @@ void EmuThread()
|
||||||
if (!g_video_backend->Initialize(g_pWindowHandle))
|
if (!g_video_backend->Initialize(g_pWindowHandle))
|
||||||
{
|
{
|
||||||
PanicAlert("Failed to initialize video backend!");
|
PanicAlert("Failed to initialize video backend!");
|
||||||
|
Host_Message(WM_USER_STOP);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,6 +362,7 @@ void EmuThread()
|
||||||
HW::Shutdown();
|
HW::Shutdown();
|
||||||
g_video_backend->Shutdown();
|
g_video_backend->Shutdown();
|
||||||
PanicAlert("Failed to initialize DSP emulator!");
|
PanicAlert("Failed to initialize DSP emulator!");
|
||||||
|
Host_Message(WM_USER_STOP);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -983,7 +983,7 @@ void CFrame::OnKeyUp(wxKeyEvent& event)
|
||||||
void CFrame::OnMouse(wxMouseEvent& event)
|
void CFrame::OnMouse(wxMouseEvent& event)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_X11) && HAVE_X11
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
if(Core::GetState() != Core::CORE_UNINITIALIZED)
|
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
||||||
{
|
{
|
||||||
if(event.Dragging())
|
if(event.Dragging())
|
||||||
X11Utils::SendMotionEvent(X11Utils::XDisplayFromHandle(GetHandle()),
|
X11Utils::SendMotionEvent(X11Utils::XDisplayFromHandle(GetHandle()),
|
||||||
|
|
|
@ -1021,7 +1021,8 @@ void CFrame::DoPause()
|
||||||
// Stop the emulation
|
// Stop the emulation
|
||||||
void CFrame::DoStop()
|
void CFrame::DoStop()
|
||||||
{
|
{
|
||||||
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
if (Core::GetState() != Core::CORE_UNINITIALIZED ||
|
||||||
|
m_RenderParent != NULL)
|
||||||
{
|
{
|
||||||
#if defined __WXGTK__
|
#if defined __WXGTK__
|
||||||
wxMutexGuiLeave();
|
wxMutexGuiLeave();
|
||||||
|
@ -1466,32 +1467,41 @@ void CFrame::OnSaveStateToFile(wxCommandEvent& WXUNUSED (event))
|
||||||
|
|
||||||
void CFrame::OnLoadLastState(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))
|
void CFrame::OnUndoLoadState(wxCommandEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
State::UndoLoadState();
|
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
||||||
|
State::UndoLoadState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFrame::OnUndoSaveState(wxCommandEvent& WXUNUSED (event))
|
void CFrame::OnUndoSaveState(wxCommandEvent& WXUNUSED (event))
|
||||||
{
|
{
|
||||||
State::UndoSaveState();
|
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
||||||
|
State::UndoSaveState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CFrame::OnLoadState(wxCommandEvent& event)
|
void CFrame::OnLoadState(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
int id = event.GetId();
|
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
||||||
int slot = id - IDM_LOADSLOT1 + 1;
|
{
|
||||||
State::Load(slot);
|
int id = event.GetId();
|
||||||
|
int slot = id - IDM_LOADSLOT1 + 1;
|
||||||
|
State::Load(slot);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFrame::OnSaveState(wxCommandEvent& event)
|
void CFrame::OnSaveState(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
int id = event.GetId();
|
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
||||||
int slot = id - IDM_SAVESLOT1 + 1;
|
{
|
||||||
State::Save(slot);
|
int id = event.GetId();
|
||||||
|
int slot = id - IDM_SAVESLOT1 + 1;
|
||||||
|
State::Save(slot);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFrame::OnFrameSkip(wxCommandEvent& event)
|
void CFrame::OnFrameSkip(wxCommandEvent& event)
|
||||||
|
|
Loading…
Reference in New Issue