diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index d5f5646098..e47b0c074f 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -351,6 +351,8 @@ CFrame::CFrame(wxFrame* parent, for (int i = 0; i <= IDM_CODEWINDOW - IDM_LOGWINDOW; i++) bFloatWindow[i] = false; + panic_event.Init(); + if (ShowLogWindow) SConfig::GetInstance().m_InterfaceLogWindow = true; // Give it a console early to show potential messages from this onward @@ -490,6 +492,8 @@ CFrame::~CFrame() ClosePages(); + panic_event.Shutdown(); + delete m_Mgr; } @@ -647,6 +651,14 @@ void CFrame::OnHostMessage(wxCommandEvent& event) m_RenderParent->SetCursor(wxCURSOR_BLANK); break; +#ifdef __WXGTK__ + case IDM_PANIC: + bPanicResult = (wxYES == wxMessageBox(event.GetString(), + wxT("Warning"), event.GetInt() ? wxYES_NO : wxOK)); + panic_event.Set(); + break; +#endif + #if defined(HAVE_X11) && HAVE_X11 case WM_USER_STOP: DoStop(); diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h index 076420c631..7e325d48f3 100644 --- a/Source/Core/DolphinWX/Src/Frame.h +++ b/Source/Core/DolphinWX/Src/Frame.h @@ -135,6 +135,11 @@ class CFrame : public CRenderFrame void DoFullscreen(bool bF); void ToggleDisplayMode (bool bFullscreen); + #ifdef __WXGTK__ + Common::Event panic_event; + bool bPanicResult; + #endif + #if defined(HAVE_XRANDR) && HAVE_XRANDR X11Utils::XRRConfiguration *m_XRRConfig; #endif diff --git a/Source/Core/DolphinWX/Src/Globals.h b/Source/Core/DolphinWX/Src/Globals.h index a4a7a90367..9b5beb8ce8 100644 --- a/Source/Core/DolphinWX/Src/Globals.h +++ b/Source/Core/DolphinWX/Src/Globals.h @@ -237,6 +237,7 @@ enum IDM_UPDATESTATUSBAR, IDM_UPDATETITLE, IDM_UPDATEBREAKPOINTS, + IDM_PANIC, IDM_HOST_MESSAGE, IDM_MPANEL, ID_STATUSBAR, diff --git a/Source/Core/DolphinWX/Src/Main.cpp b/Source/Core/DolphinWX/Src/Main.cpp index 3ae68bb9d3..5d0238b379 100644 --- a/Source/Core/DolphinWX/Src/Main.cpp +++ b/Source/Core/DolphinWX/Src/Main.cpp @@ -452,9 +452,23 @@ void Host_SysMessage(const char *fmt, ...) bool wxMsgAlert(const char* caption, const char* text, bool yes_no, int /*Style*/) { - return wxYES == wxMessageBox(wxString::FromAscii(text), - wxString::FromAscii(caption), - (yes_no)?wxYES_NO:wxOK); +#ifdef __WXGTK__ + if (wxIsMainThread()) +#endif + return wxYES == wxMessageBox(wxString::FromAscii(text), + wxString::FromAscii(caption), + (yes_no) ? wxYES_NO : wxOK); +#ifdef __WXGTK__ + else + { + wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_PANIC); + event.SetString(wxString::FromAscii(text)); + event.SetInt(yes_no); + main_frame->GetEventHandler()->AddPendingEvent(event); + main_frame->panic_event.Wait(); + return main_frame->bPanicResult; + } +#endif } // Accessor for the main window class