summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/am/applets/software_keyboard.cpp
diff options
context:
space:
mode:
authorZach Hilman <zachhilman@gmail.com>2018-11-12 02:16:38 +0100
committerZach Hilman <zachhilman@gmail.com>2018-11-18 16:53:47 +0100
commit7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d (patch)
tree6ed63f8c93a0d9b4e0cb6ac8d41e0a94aa149e99 /src/core/hle/service/am/applets/software_keyboard.cpp
parentam: Implement ILibraryAppletAccessor IsCompleted and GetResult (diff)
downloadyuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar.gz
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar.bz2
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar.lz
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar.xz
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.tar.zst
yuzu-7cfb29de23836aa1873bbb108e3d25a0e9dcfa6d.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/am/applets/software_keyboard.cpp27
1 files changed, 11 insertions, 16 deletions
diff --git a/src/core/hle/service/am/applets/software_keyboard.cpp b/src/core/hle/service/am/applets/software_keyboard.cpp
index 044a16264..7352f3bdf 100644
--- a/src/core/hle/service/am/applets/software_keyboard.cpp
+++ b/src/core/hle/service/am/applets/software_keyboard.cpp
@@ -87,42 +87,37 @@ void SoftwareKeyboard::ReceiveInteractiveData(std::shared_ptr<IStorage> storage)
}
}
-IStorage SoftwareKeyboard::Execute() {
+void SoftwareKeyboard::Execute(AppletStorageProxyFunction out_data,
+ AppletStorageProxyFunction out_interactive_data) {
if (complete)
- return IStorage{final_data};
+ return;
const auto& frontend{Core::System::GetInstance().GetSoftwareKeyboard()};
const auto parameters = ConvertToFrontendParameters(config, initial_text);
- std::u16string text;
- const auto success = frontend.GetText(parameters, text);
+ const auto res = frontend.GetText(parameters);
std::vector<u8> output(SWKBD_OUTPUT_BUFFER_SIZE);
- if (success) {
+ if (res.has_value()) {
if (config.text_check) {
- const auto size = static_cast<u32>(text.size() * 2 + 4);
+ const auto size = static_cast<u32>(res->size() * 2 + 4);
std::memcpy(output.data(), &size, sizeof(u32));
} else {
output[0] = 1;
}
- std::memcpy(output.data() + 4, text.data(),
- std::min(text.size() * 2, SWKBD_OUTPUT_BUFFER_SIZE - 4));
+ std::memcpy(output.data() + 4, res->data(),
+ std::min(res->size() * 2, SWKBD_OUTPUT_BUFFER_SIZE - 4));
} else {
complete = true;
- final_data = std::move(output);
- return IStorage{final_data};
+ out_data(IStorage{output});
+ return;
}
complete = !config.text_check;
- if (complete) {
- final_data = std::move(output);
- return IStorage{final_data};
- }
-
- return IStorage{output};
+ (complete ? out_data : out_interactive_data)(IStorage{output});
}
} // namespace Service::AM::Applets