Fixed to be able to turn on/off IME with $IAS and MS-KANJI API on macOS.

This commit is contained in:
nanshiki 2022-11-19 12:45:00 +09:00
parent 16f23fd331
commit 7739443bf5
3 changed files with 49 additions and 6 deletions

View File

@ -53,6 +53,29 @@ bool IME_GetEnable() {
CFBooleanRef ret = (CFBooleanRef)TISGetInputSourceProperty(is, kTISPropertyInputSourceIsASCIICapable);
return !CFBooleanGetValue(ret);
}
void IME_SetEnable(int state) {
if(state) {
NSString *locale;
NSArray *languages = [NSLocale preferredLanguages];
if (languages != nil) {
locale = [languages objectAtIndex:0];
} else {
locale = [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode];
}
TISInputSourceRef source = TISCopyInputSourceForLanguage((CFStringRef)locale);
if (source) {
TISSelectInputSource(source);
}
} else {
NSArray *source_list = CFBridgingRelease(TISCreateASCIICapableInputSourceList());
TISInputSourceRef source;
source = (__bridge TISInputSourceRef)([source_list firstObject]);
if (source) {
TISSelectInputSource(source);
}
}
}
#endif
extern int pause_menu_item_tag;

View File

@ -1166,6 +1166,16 @@ static bool IsEnhancedKey(uint16_t &key) {
extern void IME_SetEnable(BOOL state);
extern bool IME_GetEnable();
#endif
#if defined(MACOSX) && defined(C_SDL2) && defined(SDL_DOSBOX_X_IME)
extern bool IME_GetEnable();
extern void IME_SetEnable(int state);
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#endif
extern bool DOS_BreakFlag;
extern bool DOS_BreakConioFlag;
@ -1316,7 +1326,7 @@ Bitu INT16_Handler(void) {
}
}
}
#elif defined(WIN32) && !defined(HX_DOS) && defined(C_SDL2)
#elif (defined(WIN32) && !defined(HX_DOS) || defined(MACOSX)) && defined(C_SDL2)
#if defined(USE_TTF)
if((IS_DOSV || ttf_dosv) && IS_DOS_CJK && (DOSV_GetFepCtrl() & DOSV_FEP_CTRL_IAS)) {
#else

View File

@ -1799,6 +1799,16 @@ static Bitu write_font24x24(void)
return CBRET_NONE;
}
#if defined(MACOSX) && defined(C_SDL2) && defined(SDL_DOSBOX_X_IME)
extern bool IME_GetEnable();
extern void IME_SetEnable(int state);
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#endif
static Bitu mskanji_api(void)
{
@ -1837,14 +1847,14 @@ static Bitu mskanji_api(void)
real_writew(param_seg, param_off + 2, 0x0009);
}
}
#elif defined(WIN32) && !defined(HX_DOS) && defined(C_SDL2)
#elif (defined(WIN32) && !defined(HX_DOS) || defined(MACOSX)) && defined(C_SDL2)
if(mode & 0x8000) {
if(mode & 0x0001)
IME_SetEnable(FALSE);
else if(mode & 0x0002)
IME_SetEnable(TRUE);
} else {
if(IME_GetEnable() == NULL)
if(IME_GetEnable())
real_writew(param_seg, param_off + 2, 0x000a);
else
real_writew(param_seg, param_off + 2, 0x0009);
@ -2283,14 +2293,14 @@ Bitu INT6F_Handler(void)
case 0x05:
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11) && !defined(C_SDL2) && defined(SDL_DOSBOX_X_SPECIAL)
SDL_SetIMValues(SDL_IM_ONOFF, 1, NULL);
#elif defined(WIN32) && !defined(HX_DOS) && defined(C_SDL2)
#elif (defined(WIN32) && !defined(HX_DOS) || defined(MACOSX)) && defined(C_SDL2)
IME_SetEnable(TRUE);
#endif
break;
case 0x0b:
#if (defined(WIN32) && !defined(HX_DOS) || defined(LINUX) && C_X11) && !defined(C_SDL2) && defined(SDL_DOSBOX_X_SPECIAL)
SDL_SetIMValues(SDL_IM_ONOFF, 0, NULL);
#elif defined(WIN32) && !defined(HX_DOS) && defined(C_SDL2)
#elif (defined(WIN32) && !defined(HX_DOS) || defined(MACOSX)) && defined(C_SDL2)
IME_SetEnable(FALSE);
#endif
break;
@ -2304,7 +2314,7 @@ Bitu INT6F_Handler(void)
reg_al = 0x01;
}
}
#elif defined(WIN32) && !defined(HX_DOS) && defined(C_SDL2)
#elif (defined(WIN32) && !defined(HX_DOS) || defined(MACOSX)) && defined(C_SDL2)
if(IME_GetEnable()) {
reg_al = 0x01;
}