Async Android text input

This commit is contained in:
pelya
2017-03-31 23:24:14 +03:00
parent ce56dd8023
commit 3ed747e0ab

View File

@@ -46,6 +46,8 @@ enum OskActivation {
OSKA_IMMEDIATELY, ///< Focusing click already opens OSK.
};
static char _android_text_input[512];
static const NWidgetPart _nested_land_info_widgets[] = {
NWidget(NWID_HORIZONTAL),
@@ -773,6 +775,14 @@ void QueryString::HandleEditBox(Window *w, int wid)
/* For the OSK also invalidate the parent window */
if (w->window_class == WC_OSK) w->InvalidateData();
}
#ifdef __ANDROID__
if (SDL_IsScreenKeyboardShown(NULL)) {
if (SDL_ANDROID_GetScreenKeyboardTextInputAsync(_android_text_input, sizeof(_android_text_input)) == SDL_ANDROID_TEXTINPUT_ASYNC_FINISHED) {
this->text.Assign(_android_text_input);
w->OnEditboxChanged(wid);
}
}
#endif
}
void QueryString::DrawEditBox(const Window *w, int wid) const
@@ -954,15 +964,12 @@ void QueryString::ClickEditBox(Window *w, Point pt, int wid, int click_count, bo
ShowOnScreenKeyboard(w, wid);
}
#ifdef __ANDROID__
char text[512];
strecpy(text, this->text.buf, lastof(text));
strecpy(_android_text_input, this->text.buf, lastof(_android_text_input));
this->text.DeleteAll();
SDL_ANDROID_ToggleScreenKeyboardTextInput(text); // Invoke Android built-in screen keyboard, this will not block
/*
SDL_ANDROID_GetScreenKeyboardTextInput(text, sizeof(text) - 1); // Invoke Android built-in screen keyboard, this will block
this->text.Assign(text);
w->OnEditboxChanged(wid);
*/
if (SDL_ANDROID_GetScreenKeyboardTextInputAsync(_android_text_input, sizeof(_android_text_input)) == SDL_ANDROID_TEXTINPUT_ASYNC_FINISHED) {
this->text.Assign(_android_text_input);
w->OnEditboxChanged(wid);
}
#endif
}