Frame: Remove callback function prototypes from header

Gets rid of more direct usages of the main_frame global, keeping the
callbacks internal to the frame itself.
This commit is contained in:
Lioncash 2017-04-03 05:39:48 -04:00
parent ee0e6fa09c
commit c457ee4995
6 changed files with 27 additions and 38 deletions

View File

@ -104,7 +104,7 @@ static Common::Flag s_is_booting;
static void* s_window_handle = nullptr; static void* s_window_handle = nullptr;
static std::string s_state_filename; static std::string s_state_filename;
static std::thread s_emu_thread; static std::thread s_emu_thread;
static StoppedCallbackFunc s_on_stopped_callback = nullptr; static StoppedCallbackFunc s_on_stopped_callback;
static std::thread s_cpu_thread; static std::thread s_cpu_thread;
static bool s_request_refresh_info = false; static bool s_request_refresh_info = false;
@ -938,7 +938,7 @@ void Shutdown()
void SetOnStoppedCallback(StoppedCallbackFunc callback) void SetOnStoppedCallback(StoppedCallbackFunc callback)
{ {
s_on_stopped_callback = callback; s_on_stopped_callback = std::move(callback);
} }
void UpdateWantDeterminism(bool initial) void UpdateWantDeterminism(bool initial)

View File

@ -84,7 +84,7 @@ void UpdateTitle();
bool PauseAndLock(bool doLock, bool unpauseOnUnlock = true); bool PauseAndLock(bool doLock, bool unpauseOnUnlock = true);
// for calling back into UI code without introducing a dependency on it in core // for calling back into UI code without introducing a dependency on it in core
typedef void (*StoppedCallbackFunc)(void); using StoppedCallbackFunc = std::function<void()>;
void SetOnStoppedCallback(StoppedCallbackFunc callback); void SetOnStoppedCallback(StoppedCallbackFunc callback);
// Run on the Host thread when the factors change. [NOT THREADSAFE] // Run on the Host thread when the factors change. [NOT THREADSAFE]

View File

@ -57,7 +57,7 @@ static HEAP_ALLOC(wrkmem, LZO1X_1_MEM_COMPRESS);
static std::string g_last_filename; static std::string g_last_filename;
static CallbackFunc g_onAfterLoadCb = nullptr; static AfterLoadCallbackFunc s_on_after_load_callback;
// Temporary undo state buffer // Temporary undo state buffer
static std::vector<u8> g_undo_load_buffer; static std::vector<u8> g_undo_load_buffer;
@ -607,8 +607,8 @@ void LoadAs(const std::string& filename)
} }
} }
if (g_onAfterLoadCb) if (s_on_after_load_callback)
g_onAfterLoadCb(); s_on_after_load_callback();
g_loadDepth--; g_loadDepth--;
@ -616,9 +616,9 @@ void LoadAs(const std::string& filename)
Core::PauseAndLock(false, wasUnpaused); Core::PauseAndLock(false, wasUnpaused);
} }
void SetOnAfterLoadCallback(CallbackFunc callback) void SetOnAfterLoadCallback(AfterLoadCallbackFunc callback)
{ {
g_onAfterLoadCb = callback; s_on_after_load_callback = std::move(callback);
} }
void VerifyAt(const std::string& filename) void VerifyAt(const std::string& filename)

View File

@ -6,6 +6,7 @@
#pragma once #pragma once
#include <functional>
#include <string> #include <string>
#include <vector> #include <vector>
@ -61,6 +62,6 @@ void UndoLoadState();
void Flush(); void Flush();
// for calling back into UI code without introducing a dependency on it in core // for calling back into UI code without introducing a dependency on it in core
typedef void (*CallbackFunc)(void); using AfterLoadCallbackFunc = std::function<void()>;
void SetOnAfterLoadCallback(CallbackFunc callback); void SetOnAfterLoadCallback(AfterLoadCallbackFunc callback);
} }

View File

@ -392,9 +392,7 @@ CFrame::CFrame(wxFrame* parent, wxWindowID id, const wxString& title, wxRect geo
m_LogWindow->Disable(); m_LogWindow->Disable();
InitializeTASDialogs(); InitializeTASDialogs();
InitializeCoreCallbacks();
State::SetOnAfterLoadCallback(OnAfterLoadCallback);
Core::SetOnStoppedCallback(OnStoppedCallback);
// Setup perspectives // Setup perspectives
if (g_pCodeWindow) if (g_pCodeWindow)
@ -515,6 +513,20 @@ void CFrame::InitializeTASDialogs()
}); });
} }
void CFrame::InitializeCoreCallbacks()
{
// Warning: this gets called from the CPU thread, so we should
// only queue things to do on the proper thread
State::SetOnAfterLoadCallback([this] {
AddPendingEvent(wxCommandEvent{wxEVT_HOST_COMMAND, IDM_UPDATE_GUI});
});
// Warning: this gets called from the EmuThread
Core::SetOnStoppedCallback([this] {
AddPendingEvent(wxCommandEvent{wxEVT_HOST_COMMAND, IDM_STOPPED});
});
}
bool CFrame::RendererIsFullscreen() bool CFrame::RendererIsFullscreen()
{ {
bool fullscreen = false; bool fullscreen = false;
@ -1025,28 +1037,6 @@ static int GetMenuIDFromHotkey(unsigned int key)
return -1; return -1;
} }
void OnAfterLoadCallback()
{
// warning: this gets called from the CPU thread, so we should only queue things to do on the
// proper thread
if (main_frame)
{
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_UPDATE_GUI);
main_frame->GetEventHandler()->AddPendingEvent(event);
}
}
void OnStoppedCallback()
{
// warning: this gets called from the EmuThread, so we should only queue things to do on the
// proper thread
if (main_frame)
{
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_STOPPED);
main_frame->GetEventHandler()->AddPendingEvent(event);
}
}
void CFrame::OnKeyDown(wxKeyEvent& event) void CFrame::OnKeyDown(wxKeyEvent& event)
{ {
// On OS X, we claim all keyboard events while // On OS X, we claim all keyboard events while

View File

@ -174,6 +174,7 @@ private:
wxMenuBar* CreateMenuBar() const; wxMenuBar* CreateMenuBar() const;
void InitializeTASDialogs(); void InitializeTASDialogs();
void InitializeCoreCallbacks();
// Utility // Utility
wxWindow* GetNotebookPageFromId(wxWindowID Id); wxWindow* GetNotebookPageFromId(wxWindowID Id);
@ -337,6 +338,3 @@ private:
// Event table // Event table
DECLARE_EVENT_TABLE(); DECLARE_EVENT_TABLE();
}; };
void OnAfterLoadCallback();
void OnStoppedCallback();