Add back AfterInit which essentially does such actions that would
normally (on a fresh install) be triggered by the user clicking on the GUI. This notably includes refreshing the game list. The progress dialog used in the course of updating the game list relies on wxWidgets being able to yield to its event handler which isn't started until after OnInit. In fact, we might want to consider just moving all the initialization currently triggered by OnInit into AfterInit so that we can rely on the event handler running there. This would mean that we don't have to worry about whether those code paths are triggered by a user click or run at init time. This will require some more testing, though. For now just move automatic booting along as this requires the game list initialization to be done. We also could instead choose to special-case cases like updating the game list and simply not use a progress dialog there if the event handler isn't running, but this approach is clearly cleaner. See thread at http://code.google.com/p/dolphin-emu/source/detail?r=5848 . git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5849 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
0ad71eda6b
commit
0a47e12b18
|
@ -498,8 +498,6 @@ CFrame::CFrame(wxFrame* parent,
|
||||||
m_bControlsCreated = true;
|
m_bControlsCreated = true;
|
||||||
UpdateGUI();
|
UpdateGUI();
|
||||||
|
|
||||||
if (m_GameListCtrl) m_GameListCtrl->Update();
|
|
||||||
|
|
||||||
// If we are rerecording create the status bar now instead of later when a game starts
|
// If we are rerecording create the status bar now instead of later when a game starts
|
||||||
#ifdef RERECORDING
|
#ifdef RERECORDING
|
||||||
ModifyStatusBar();
|
ModifyStatusBar();
|
||||||
|
|
|
@ -48,10 +48,16 @@
|
||||||
|
|
||||||
IMPLEMENT_APP(DolphinApp)
|
IMPLEMENT_APP(DolphinApp)
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(DolphinApp, wxApp)
|
||||||
|
EVT_TIMER(wxID_ANY, DolphinApp::AfterInit)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
#include <wx/stdpaths.h>
|
#include <wx/stdpaths.h>
|
||||||
bool wxMsgAlert(const char*, const char*, bool, int);
|
bool wxMsgAlert(const char*, const char*, bool, int);
|
||||||
|
|
||||||
CFrame* main_frame = NULL;
|
CFrame* main_frame = NULL;
|
||||||
|
static bool LoadFile = false;
|
||||||
|
static wxString FileToLoad;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
//Has no error handling.
|
//Has no error handling.
|
||||||
|
@ -88,12 +94,10 @@ bool DolphinApp::OnInit()
|
||||||
// Declarations and definitions
|
// Declarations and definitions
|
||||||
bool UseDebugger = false;
|
bool UseDebugger = false;
|
||||||
bool UseLogger = false;
|
bool UseLogger = false;
|
||||||
bool LoadFile = false;
|
|
||||||
bool selectVideoPlugin = false;
|
bool selectVideoPlugin = false;
|
||||||
bool selectAudioPlugin = false;
|
bool selectAudioPlugin = false;
|
||||||
bool selectWiimotePlugin = false;
|
bool selectWiimotePlugin = false;
|
||||||
|
|
||||||
wxString FileToLoad;
|
|
||||||
wxString videoPluginFilename;
|
wxString videoPluginFilename;
|
||||||
wxString audioPluginFilename;
|
wxString audioPluginFilename;
|
||||||
wxString wiimotePluginFilename;
|
wxString wiimotePluginFilename;
|
||||||
|
@ -381,17 +385,37 @@ bool DolphinApp::OnInit()
|
||||||
|
|
||||||
main_frame = new CFrame((wxFrame*)NULL, wxID_ANY, wxString::FromAscii(title),
|
main_frame = new CFrame((wxFrame*)NULL, wxID_ANY, wxString::FromAscii(title),
|
||||||
wxPoint(x, y), wxSize(w, h), UseDebugger, UseLogger);
|
wxPoint(x, y), wxSize(w, h), UseDebugger, UseLogger);
|
||||||
|
SetTopWindow(main_frame);
|
||||||
|
|
||||||
// ------------
|
#if defined HAVE_X11 && HAVE_X11
|
||||||
// Check the autoboot options.
|
XInitThreads();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Postpone final actions until event handler is running
|
||||||
|
m_afterinit = new wxTimer(this, wxID_ANY);
|
||||||
|
m_afterinit->Start(1, wxTIMER_ONE_SHOT);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DolphinApp::AfterInit(wxTimerEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
delete m_afterinit;
|
||||||
|
|
||||||
|
// Updating the game list makes use of wxProgressDialog which may
|
||||||
|
// only be run after OnInit() when the event handler is running.
|
||||||
|
main_frame->UpdateGameList();
|
||||||
|
|
||||||
|
// Check the autoboot options:
|
||||||
|
|
||||||
// First check if we have an exec command line.
|
// First check if we have an exec command line.
|
||||||
if (LoadFile && FileToLoad != wxEmptyString)
|
if (LoadFile && FileToLoad != wxEmptyString)
|
||||||
{
|
{
|
||||||
main_frame->BootGame(std::string(FileToLoad.mb_str()));
|
main_frame->BootGame(std::string(FileToLoad.mb_str()));
|
||||||
}
|
}
|
||||||
// If we have selected Automatic Start, start the default ISO, or if no default
|
|
||||||
// ISO exists, start the last loaded ISO
|
// If we have selected Automatic Start, start the default ISO,
|
||||||
|
// or if no default ISO exists, start the last loaded ISO
|
||||||
else if (main_frame->g_pCodeWindow)
|
else if (main_frame->g_pCodeWindow)
|
||||||
{
|
{
|
||||||
if (main_frame->g_pCodeWindow->AutomaticStart())
|
if (main_frame->g_pCodeWindow->AutomaticStart())
|
||||||
|
@ -410,16 +434,6 @@ bool DolphinApp::OnInit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ---------------------
|
|
||||||
|
|
||||||
// Set main parent window
|
|
||||||
SetTopWindow(main_frame);
|
|
||||||
|
|
||||||
#if defined HAVE_X11 && HAVE_X11
|
|
||||||
XInitThreads();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DolphinApp::OnEndSession()
|
void DolphinApp::OnEndSession()
|
||||||
|
|
|
@ -29,6 +29,13 @@ public:
|
||||||
void OnEndSession();
|
void OnEndSession();
|
||||||
int OnExit();
|
int OnExit();
|
||||||
CFrame* GetCFrame();
|
CFrame* GetCFrame();
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
|
||||||
|
wxTimer *m_afterinit;
|
||||||
|
|
||||||
|
void AfterInit(wxTimerEvent& WXUNUSED(event));
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_APP(DolphinApp);
|
DECLARE_APP(DolphinApp);
|
||||||
|
|
Loading…
Reference in New Issue