mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-05-09 03:41:10 +08:00
Fixed to be able to turn on/off IME with $IAS and MS-KANJI API on macOS.
This commit is contained in:
parent
16f23fd331
commit
7739443bf5
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user