Fix async OSK loading (#2531)

This commit is contained in:
al0xf 2017-03-16 10:34:47 +01:00 committed by Ivan
parent 1b5a479bbd
commit c5e6665010
3 changed files with 18 additions and 3 deletions

View File

@ -79,6 +79,7 @@ public:
MsgDialogType type{};
std::function<void(s32 status)> on_close;
std::function<void()> on_osk_input_entered;
virtual ~MsgDialogBase();
virtual void Create(const std::string& msg) = 0;

View File

@ -21,7 +21,7 @@ s32 cellOskDialogLoadAsync(u32 container, vm::ptr<CellOskDialogParam> dialogPara
osk->on_close = [&](s32 status)
{
if (status == 1) {
if (status == CELL_MSGDIALOG_BUTTON_OK) {
sysutil_send_system_cmd(CELL_SYSUTIL_OSKDIALOG_FINISHED, 0);
}
else {
@ -30,11 +30,18 @@ s32 cellOskDialogLoadAsync(u32 container, vm::ptr<CellOskDialogParam> dialogPara
result = true;
};
osk->on_osk_input_entered = [&]()
{
sysutil_send_system_cmd(CELL_SYSUTIL_OSKDIALOG_INPUT_ENTERED, 0);
};
Emu.CallAfter([&]()
{
osk->CreateOsk("On Screen Keyboard", s_osk_text);
});
sysutil_send_system_cmd(CELL_SYSUTIL_OSKDIALOG_LOADED, 0);
while (!result)
{
thread_ctrl::wait_for(1000);
@ -52,6 +59,8 @@ s32 cellOskDialogUnloadAsync(vm::ptr<CellOskDialogCallbackReturnParam> OutputInf
*(OutputInfo->pResultString + i) = (be_t<u16>)*(s_osk_text + i);
}
sysutil_send_system_cmd(CELL_SYSUTIL_OSKDIALOG_UNLOADED, 0);
return CELL_OSKDIALOG_OK;
}

View File

@ -26,6 +26,13 @@ void MsgDialogFrame::CreateOsk(const std::string& msg, char16_t* osk_text)
osk_text_input->SetFocus();
}
osk_text_input->Bind(wxEVT_TEXT, [&](wxCommandEvent& event)
{
wxUString wx_osk_string = osk_text_input->GetValue();
std::memcpy(osk_text_return, wx_osk_string.utf16_str(), wx_osk_string.size() * 2);
on_osk_input_entered();
});
osk_button_ok = new wxButton(m_dialog, wxID_OK);
osk_button_sizer->Add(osk_button_ok, 0, wxLEFT | wxRIGHT | wxBOTTOM, 4);
@ -39,8 +46,6 @@ void MsgDialogFrame::CreateOsk(const std::string& msg, char16_t* osk_text)
m_dialog->Bind(wxEVT_BUTTON, [&](wxCommandEvent& event)
{
wxUString wx_osk_string = osk_text_input->GetValue();
std::memcpy(osk_text_return, wx_osk_string.utf16_str(), wx_osk_string.size() * 2);
on_close(CELL_MSGDIALOG_BUTTON_OK);
});