diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 43ef0792ca..aa52b9994d 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -583,9 +583,9 @@ bool Emulator::BootRsxCapture(const std::string& path) GetCallbacks().on_ready(); auto gsrender = fxm::import(Emu.GetCallbacks().get_gs_render); - auto padhandler = fxm::import(Emu.GetCallbacks().get_pad_handler, ""); + Emu.GetCallbacks().init_pad_handler(""); - if (gsrender.get() == nullptr || padhandler.get() == nullptr) + if (gsrender.get() == nullptr) return false; GetCallbacks().on_run(); @@ -1516,7 +1516,7 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa g_fxo->init(); fxm::import(Emu.GetCallbacks().get_gs_render); // TODO: must be created in appropriate sys_rsx syscall - fxm::import(Emu.GetCallbacks().get_pad_handler, m_title_id); + Emu.GetCallbacks().init_pad_handler(m_title_id); network_thread_init(); } else if (ppu_prx.open(elf_file) == elf_error::ok) diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index 660b6a2c0a..e71c6e2093 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -219,7 +219,7 @@ struct EmuCallbacks std::function handle_taskbar_progress; // (type, value) type: 0 for reset, 1 for increment, 2 for set_limit std::function()> get_kb_handler; std::function()> get_mouse_handler; - std::function(const std::string&)> get_pad_handler; + std::function init_pad_handler; std::function()> get_gs_frame; std::function()> get_gs_render; std::function()> get_audio; diff --git a/rpcs3/main_application.cpp b/rpcs3/main_application.cpp index bda1d7399b..321611ce2c 100644 --- a/rpcs3/main_application.cpp +++ b/rpcs3/main_application.cpp @@ -103,9 +103,9 @@ EmuCallbacks main_application::CreateCallbacks() } }; - callbacks.get_pad_handler = [this](const std::string& title_id) -> std::shared_ptr + callbacks.init_pad_handler = [this](std::string_view title_id) { - return std::make_shared(get_thread(), m_game_window, title_id); + g_fxo->init(get_thread(), m_game_window, title_id); }; callbacks.get_gs_render = []() -> std::shared_ptr diff --git a/rpcs3/pad_thread.cpp b/rpcs3/pad_thread.cpp index 3006c7fa25..58b6a90c5a 100644 --- a/rpcs3/pad_thread.cpp +++ b/rpcs3/pad_thread.cpp @@ -24,7 +24,7 @@ struct pad_setting u32 device_type; }; -pad_thread::pad_thread(void *_curthread, void *_curwindow, const std::string& title_id) : curthread(_curthread), curwindow(_curwindow) +pad_thread::pad_thread(void *_curthread, void *_curwindow, std::string_view title_id) : curthread(_curthread), curwindow(_curwindow) { pad::g_title_id = title_id; Init(); @@ -144,7 +144,7 @@ void pad_thread::SetRumble(const u32 pad, u8 largeMotor, bool smallMotor) } } -void pad_thread::Reset(const std::string& title_id) +void pad_thread::Reset(std::string_view title_id) { pad::g_title_id = title_id; reset = active.load(); diff --git a/rpcs3/pad_thread.h b/rpcs3/pad_thread.h index 28593800b3..ae9d3f225f 100644 --- a/rpcs3/pad_thread.h +++ b/rpcs3/pad_thread.h @@ -16,14 +16,14 @@ struct PadInfo class pad_thread { public: - pad_thread(void* _curthread, void* _curwindow, const std::string& title_id = ""); // void * instead of QThread * and QWindow * because of include in emucore + pad_thread(void* _curthread, void* _curwindow, std::string_view title_id); // void * instead of QThread * and QWindow * because of include in emucore ~pad_thread(); PadInfo& GetInfo() { return m_info; } auto& GetPads() { return m_pads; } void SetRumble(const u32 pad, u8 largeMotor, bool smallMotor); void Init(); - void Reset(const std::string& title_id = ""); + void Reset(std::string_view title_id); void SetEnabled(bool enabled); void SetIntercepted(bool intercepted);