4141
4242using nn::swkbd::LanguageType;
4343using nn::swkbd::RegionType;
44+ using nn::swkbd::KeyboardLayout;
4445
4546namespace
4647{
@@ -416,6 +417,52 @@ namespace
416417 return *cached_system_region;
417418 }
418419
420+ KeyboardLayout
421+ get_default_layout (RegionType region,
422+ LanguageType language)
423+ {
424+ switch (region) {
425+ case RegionType::Japan:
426+ return KeyboardLayout::JPN_JP_QWERTY;
427+ case RegionType::USA:
428+ switch (language) {
429+ case LanguageType::English:
430+ return KeyboardLayout::USA_EN_QWERTY;
431+ case LanguageType::French:
432+ return KeyboardLayout::USA_FR_QWERTY;
433+ case LanguageType::Spanish:
434+ return KeyboardLayout::USA_ES_QWERTY;
435+ case LanguageType::Portuguese:
436+ return KeyboardLayout::USA_PT_QWERTY;
437+ default :
438+ return KeyboardLayout::LanguageDefault;
439+ }
440+ case RegionType::Europe:
441+ switch (language) {
442+ case LanguageType::English:
443+ return KeyboardLayout::EUR_EN_QWERTY;
444+ case LanguageType::French:
445+ return KeyboardLayout::EUR_FR_AZERTY;
446+ case LanguageType::German:
447+ return KeyboardLayout::EUR_DE_QWERTZ;
448+ case LanguageType::Italian:
449+ return KeyboardLayout::EUR_IT_QWERTY;
450+ case LanguageType::Spanish:
451+ return KeyboardLayout::EUR_ES_QWERTY;
452+ case LanguageType::Dutch:
453+ return KeyboardLayout::EUR_NL_QWERTY;
454+ case LanguageType::Portuguese:
455+ return KeyboardLayout::EUR_PT_QWERTY;
456+ case LanguageType::Russian:
457+ return KeyboardLayout::EUR_RU_JCUKEN;
458+ default :
459+ return KeyboardLayout::LanguageDefault;
460+ }
461+ default :
462+ return KeyboardLayout::LanguageDefault;
463+ }
464+ }
465+
419466 std::size_t
420467 strlen_16 (const char16_t *s)
421468 {
@@ -567,8 +614,6 @@ void WIIU_SWKBD_Calc(void)
567614 detail::wmMsgFinish.subsystem = SDL_SYSWM_WIIU;
568615 detail::wmMsgFinish.msg .wiiu .event = SDL_WIIU_SYSWM_SWKBD_OK_FINISH_EVENT;
569616 SDL_SendSysWMEvent (&detail::wmMsgFinish);
570-
571- // WIIU_SWKBD_HideScreenKeyboard(nullptr, nullptr);
572617 }
573618
574619 if (nn::swkbd::IsDecideCancelButton (nullptr )) {
@@ -577,8 +622,6 @@ void WIIU_SWKBD_Calc(void)
577622 detail::wmMsgFinish.subsystem = SDL_SYSWM_WIIU;
578623 detail::wmMsgFinish.msg .wiiu .event = SDL_WIIU_SYSWM_SWKBD_CANCEL_EVENT;
579624 SDL_SendSysWMEvent (&detail::wmMsgFinish);
580-
581- // WIIU_SWKBD_HideScreenKeyboard(nullptr, nullptr);
582625 }
583626}
584627
@@ -619,13 +662,19 @@ void WIIU_SWKBD_ShowScreenKeyboard(_THIS, SDL_Window *window)
619662
620663 nn::swkbd::AppearArg &arg = detail::appear::theArg;
621664 arg = nn::swkbd::AppearArg{}; // reset all values to default
665+
622666 // Set language
623667 auto [language, country] = detail::parse_locale (detail::swkbdLocale);
624668 if (auto lang = detail::to_language (language, country))
625669 arg.keyboardArg .configArg .languageType = *lang;
626670 else
627671 arg.keyboardArg .configArg .languageType = detail::get_language_from_system ();
628672
673+ // Choose a default layout, this seems necessary to activate the correct dictionary.
674+ arg.keyboardArg .configArg .keyboardLayout =
675+ detail::get_default_layout (detail::create::region.value_or (RegionType::Europe),
676+ arg.keyboardArg .configArg .languageType );
677+
629678 // Set keyboard mode
630679 arg.keyboardArg .configArg .keyboardMode = detail::appear::keyboardMode;
631680
0 commit comments