From 4749214383bf7d881e85cb82fea2d751c9b292da Mon Sep 17 00:00:00 2001 From: Pere Pujal i Carabantes Date: Wed, 15 Dec 2021 20:35:43 +0100 Subject: [PATCH] Onscreen keyboard working on Windows, by TOYAMA Shin-ichi. --- src/im.c | 5 +++++ src/onscreen_keyboard.c | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/im.c b/src/im.c index 7371cb3ee..c10376f85 100644 --- a/src/im.c +++ b/src/im.c @@ -54,6 +54,11 @@ #include "android_mbstowcs.h" #endif +#ifdef WIN32 +#include +#define mbstowcs(wtok, tok, size) MultiByteToWideChar(CP_UTF8,0,tok,-1,wtok,size) +#endif + /* *************************************************************************** * I18N GETTEXT */ diff --git a/src/onscreen_keyboard.c b/src/onscreen_keyboard.c index 2cb650ab3..31e75a9e7 100644 --- a/src/onscreen_keyboard.c +++ b/src/onscreen_keyboard.c @@ -53,7 +53,8 @@ static void print_composemap(osk_composenode * composemap, char *sp); #ifdef WIN32 #include -#define mbstowcs(wtok, tok, size) MultiByteToWideChar(CP_UTF8,MB_COMPOSITE,tok,-1,wtok,size) +#define mbstowcs(wtok, tok, size) MultiByteToWideChar(CP_UTF8,0,tok,-1,wtok,size) +#define wcstombs(tok, wtok, size) WideCharToMultiByte(CP_UTF8,0,wtok,-1,tok,size,NULL,NULL) #endif struct osk_keyboard *osk_create(char * layout_name, SDL_Surface * canvas, @@ -1829,9 +1830,12 @@ struct osk_keyboard *osk_clicked(on_screen_keyboard * keyboard, int x, int y) if (keyboard->composed_type == 1) wcstombs(event.text.text, keyboard->composed, 16); // event.text.text = *keyboard->composed; - else - snprintf(event.text.text, 16, "%lc", keysym2unicode(mnemo2keysym(mnemo, keyboard), keyboard)); + else{ + //snprintf(event.text.text, 16, "%lc", keysym2unicode(mnemo2keysym(mnemo, keyboard), keyboard)); + int iwc = keysym2unicode(mnemo2keysym(mnemo, keyboard), keyboard); + wcstombs(event.text.text, (wchar_t *) &iwc, 16); //event.text.text = keysym2unicode(mnemo2keysym(mnemo, keyboard), keyboard); + } clear_dead_sticks(keyboard); event.type = SDL_TEXTINPUT;