diff --git a/pcsx2/gui/AppMain.cpp b/pcsx2/gui/AppMain.cpp index e4e48b6dca..136a77a060 100644 --- a/pcsx2/gui/AppMain.cpp +++ b/pcsx2/gui/AppMain.cpp @@ -60,17 +60,21 @@ DEFINE_EVENT_TYPE( pxEvt_ThreadTaskTimeout_SysExec ); ScopedPtr g_Conf; template -int AppOpenModalDialog( wxWindow* parent=NULL ) +int AppOpenModalDialog( wxString panel_name, wxWindow* parent=NULL ) { if( wxWindow* window = wxFindWindowByName( L"Dialog:" + DialogType::GetNameStatic() ) ) { window->SetFocus(); if( wxDialog* dialog = wxDynamicCast( window, wxDialog ) ) { + // Switch to the requested panel. + wxCommandEvent evt(pxEvt_SetSettingsPage); + evt.SetString(panel_name); + dialog->GetEventHandler()->ProcessEvent(evt); + // It's legal to call ShowModal on a non-modal dialog, therefore making // it modal in nature for the needs of whatever other thread of action wants // to block against it: - if( !dialog->IsModal() ) { int result = dialog->ShowModal(); @@ -87,19 +91,23 @@ int AppOpenModalDialog( wxWindow* parent=NULL ) static bool HandlePluginError( BaseException& ex ) { - if( !pxDialogExists( L"CoreSettings" ) ) + if (!pxDialogExists(L"Dialog:" + Dialogs::ComponentsConfigDialog::GetNameStatic())) { if( !Msgbox::OkCancel( ex.FormatDisplayMessage() + _("\n\nPress Ok to go to the Plugin Configuration Panel.") ) ) return false; } + else + { + Msgbox::Alert(ex.FormatDisplayMessage()); + } g_Conf->ComponentsTabName = L"Plugins"; // TODO: Send a message to the panel to select the failed plugin. - return AppOpenModalDialog() != wxID_CANCEL; + return AppOpenModalDialog(L"Plugins") != wxID_CANCEL; } class PluginErrorEvent : public pxExceptionEvent @@ -188,16 +196,20 @@ protected: static bool HandleBIOSError(BaseException& ex) { - if (!pxDialogExists(L"CoreSettings")) + if (!pxDialogExists(L"Dialog:" + Dialogs::ComponentsConfigDialog::GetNameStatic())) { if (!Msgbox::OkCancel(ex.FormatDisplayMessage() + L"\n\n" + BIOS_GetMsg_Required() + L"\n\n" + _("Press Ok to go to the BIOS Configuration Panel."), _("PS2 BIOS Error"))) return false; } + else + { + Msgbox::Alert(ex.FormatDisplayMessage() + L"\n\n" + BIOS_GetMsg_Required(), _("PS2 BIOS Error")); + } g_Conf->ComponentsTabName = L"BIOS"; - return AppOpenModalDialog() != wxID_CANCEL; + return AppOpenModalDialog(L"BIOS") != wxID_CANCEL; } void BIOSLoadErrorEvent::InvokeEvent() diff --git a/pcsx2/gui/ConsoleLogger.cpp b/pcsx2/gui/ConsoleLogger.cpp index a276f66a23..3caa666a95 100644 --- a/pcsx2/gui/ConsoleLogger.cpp +++ b/pcsx2/gui/ConsoleLogger.cpp @@ -764,10 +764,9 @@ void ConsoleLogFrame::OnCloseWindow(wxCloseEvent& event) // instead of closing just hide the window to be able to Show() it later Show( false ); - // Can't do this via a Connect() on the MainFrame because Close events are not commands, - // and thus do not propagate up/down the event chain. - if( wxWindow* main = GetParent() ) - wxStaticCast( main, MainEmuFrame )->OnLogBoxHidden(); + // In the nogui case there might not be a Main frame window. + if (MainEmuFrame* mainframe = GetMainFramePtr()) + mainframe->OnLogBoxHidden(); } else {