Skip to content

Commit b4e471c

Browse files
authored
[IMM32][SDK] Add install.c and move some code (reactos#8032)
Splitting IME installation code for code readability. JIRA issue: CORE-19268 - Add win32ss/user/imm32/install.c. - Move some code to install.c. - Add SAL annotations. Use debugstr_a/_w macro. - Modify <imm32_undoc.h>. - Don't CharUpperW for IME pathname due to security reason.
1 parent b627a42 commit b4e471c

File tree

10 files changed

+672
-592
lines changed

10 files changed

+672
-592
lines changed

sdk/include/reactos/imm32_undoc.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,14 @@ BOOL WINAPI ImmSetActiveContext(_In_ HWND hwnd, _In_ HIMC hIMC, _In_ BOOL fFlag)
230230
BOOL WINAPI ImmLoadIME(_In_ HKL hKL);
231231
DWORD WINAPI ImmProcessKey(_In_ HWND, _In_ HKL, _In_ UINT, _In_ LPARAM, _In_ DWORD);
232232
LRESULT WINAPI ImmPutImeMenuItemsIntoMappedFile(_In_ HIMC hIMC);
233+
BOOL WINAPI ImmWINNLSGetEnableStatus(_In_opt_ HWND hWnd);
234+
BOOL WINAPI ImmSetActiveContextConsoleIME(_In_ HWND hwnd, _In_ BOOL fFlag);
235+
236+
LRESULT WINAPI
237+
ImmSystemHandler(
238+
_In_ HIMC hIMC,
239+
_Inout_opt_ WPARAM wParam,
240+
_Inout_opt_ LPARAM lParam);
233241

234242
BOOL WINAPI ImmIMPGetIMEA(_In_opt_ HWND hWnd, _Out_ LPIMEPROA pImePro);
235243
BOOL WINAPI ImmIMPGetIMEW(_In_opt_ HWND hWnd, _Out_ LPIMEPROW pImePro);
@@ -251,9 +259,9 @@ VOID WINAPI CtfImmCoUninitialize(VOID);
251259
VOID WINAPI CtfImmEnterCoInitCountSkipMode(VOID);
252260
BOOL WINAPI CtfImmLeaveCoInitCountSkipMode(VOID);
253261
HRESULT WINAPI CtfImmLastEnabledWndDestroy(_In_ BOOL bCreate);
254-
BOOL WINAPI CtfImmIsCiceroStartedInThread(VOID);
255262
HRESULT WINAPI CtfImmTIMActivate(_In_ HKL hKL);
256263
BOOL WINAPI CtfImmIsTextFrameServiceDisabled(VOID);
264+
BOOL WINAPI CtfImmIsCiceroEnabled(VOID);
257265

258266
LRESULT WINAPI
259267
CtfImmDispatchDefImeMessage(

win32ss/user/imm32/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ list(APPEND SOURCE
1414
imemenu.c
1515
imepro.c
1616
imm.c
17+
install.c
1718
keymsg.c
1819
regword.c
1920
softkbd.c

win32ss/user/imm32/candidate.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99

1010
WINE_DEFAULT_DEBUG_CHANNEL(imm);
1111

12-
// Win: InternalGetCandidateListWtoA
12+
#define ROUNDUP4(n) (((n) + 3) & ~3) /* DWORD alignment */
13+
1314
DWORD APIENTRY
1415
CandidateListWideToAnsi(const CANDIDATELIST *pWideCL, LPCANDIDATELIST pAnsiCL, DWORD dwBufLen,
1516
UINT uCodePage)

win32ss/user/imm32/ctf.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,52 +1130,52 @@ CtfImmTIMActivate(_In_ HKL hKL)
11301130
{
11311131
TRACE("g_disable_CUAS_flag\n");
11321132
GetWin32ClientInfo()->CI_flags |= CI_TSFDISABLED;
1133-
return FALSE;
1133+
return S_OK;
11341134
}
11351135

11361136
if (GetWin32ClientInfo()->CI_flags & CI_TSFDISABLED)
11371137
{
11381138
TRACE("CI_TSFDISABLED\n");
1139-
return FALSE;
1139+
return S_OK;
11401140
}
11411141

11421142
if (Imm32IsTIMDisabledInRegistry())
11431143
{
11441144
TRACE("TIM is disabled in registry\n");
11451145
GetWin32ClientInfo()->CI_flags |= CI_TSFDISABLED;
1146-
return FALSE;
1146+
return S_OK;
11471147
}
11481148

11491149
if (!Imm32IsInteractiveUserLogon() || Imm32IsRunningInMsoobe())
11501150
{
11511151
TRACE("TIM is disabled due to LOGON or MSOBE\n");
1152-
return FALSE;
1152+
return S_OK;
11531153
}
11541154

11551155
if (!Imm32IsCUASEnabledInRegistry())
11561156
{
11571157
TRACE("CUAS is disabled in registry\n");
11581158
GetWin32ClientInfo()->CI_flags |= CI_TSFDISABLED;
1159-
return FALSE;
1159+
return S_OK;
11601160
}
11611161

11621162
if (NtCurrentTeb()->ProcessEnvironmentBlock->AppCompatFlags.LowPart & 0x100)
11631163
{
11641164
TRACE("CUAS is disabled by AppCompatFlags\n");
11651165
GetWin32ClientInfo()->CI_flags |= CI_TSFDISABLED;
1166-
return FALSE;
1166+
return S_OK;
11671167
}
11681168

11691169
if (RtlIsThreadWithinLoaderCallout() || Imm32InsideLoaderLock())
11701170
{
11711171
TRACE("TIM is disabled by Loader\n");
1172-
return FALSE;
1172+
return S_OK;
11731173
}
11741174

11751175
if (!IS_CICERO_MODE() || IS_16BIT_MODE())
11761176
{
11771177
TRACE("TIM is disabled because CICERO mode is unset\n");
1178-
return FALSE;
1178+
return S_OK;
11791179
}
11801180

11811181
if (IS_IME_HKL(hKL))

win32ss/user/imm32/ime.c

Lines changed: 0 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -424,138 +424,6 @@ BOOL APIENTRY Imm32ReleaseIME(HKL hKL)
424424
return ret;
425425
}
426426

427-
/***********************************************************************
428-
* ImmInstallIMEA (IMM32.@)
429-
*/
430-
HKL WINAPI ImmInstallIMEA(LPCSTR lpszIMEFileName, LPCSTR lpszLayoutText)
431-
{
432-
HKL hKL = NULL;
433-
LPWSTR pszFileNameW = NULL, pszLayoutTextW = NULL;
434-
435-
TRACE("(%s, %s)\n", lpszIMEFileName, lpszLayoutText);
436-
437-
pszFileNameW = Imm32WideFromAnsi(CP_ACP, lpszIMEFileName);
438-
if (IS_NULL_UNEXPECTEDLY(pszFileNameW))
439-
goto Quit;
440-
441-
pszLayoutTextW = Imm32WideFromAnsi(CP_ACP, lpszLayoutText);
442-
if (IS_NULL_UNEXPECTEDLY(pszLayoutTextW))
443-
goto Quit;
444-
445-
hKL = ImmInstallIMEW(pszFileNameW, pszLayoutTextW);
446-
447-
Quit:
448-
ImmLocalFree(pszFileNameW);
449-
ImmLocalFree(pszLayoutTextW);
450-
return hKL;
451-
}
452-
453-
/***********************************************************************
454-
* ImmInstallIMEW (IMM32.@)
455-
*/
456-
HKL WINAPI ImmInstallIMEW(LPCWSTR lpszIMEFileName, LPCWSTR lpszLayoutText)
457-
{
458-
WCHAR szImeFileName[MAX_PATH], szImeDestPath[MAX_PATH], szImeKey[20];
459-
IMEINFOEX InfoEx;
460-
LPWSTR pchFilePart;
461-
UINT iLayout, cLayouts;
462-
HKL hNewKL;
463-
WORD wLangID;
464-
PREG_IME pLayouts = NULL;
465-
466-
TRACE("(%S, %S)\n", lpszIMEFileName, lpszLayoutText);
467-
468-
GetFullPathNameW(lpszIMEFileName, _countof(szImeFileName), szImeFileName, &pchFilePart);
469-
CharUpperW(szImeFileName);
470-
if (IS_NULL_UNEXPECTEDLY(pchFilePart))
471-
return NULL;
472-
473-
/* Load the IME version info */
474-
InfoEx.hkl = hNewKL = NULL;
475-
StringCchCopyW(InfoEx.wszImeFile, _countof(InfoEx.wszImeFile), pchFilePart);
476-
if (!Imm32LoadImeVerInfo(&InfoEx) || !InfoEx.hkl)
477-
{
478-
ERR("\n");
479-
return NULL;
480-
}
481-
wLangID = LOWORD(InfoEx.hkl);
482-
483-
/* Get the IME layouts from registry */
484-
cLayouts = Imm32GetImeLayout(NULL, 0);
485-
if (cLayouts)
486-
{
487-
pLayouts = ImmLocalAlloc(0, cLayouts * sizeof(REG_IME));
488-
if (IS_NULL_UNEXPECTEDLY(pLayouts))
489-
return NULL;
490-
491-
if (!Imm32GetImeLayout(pLayouts, cLayouts))
492-
{
493-
ERR("\n");
494-
ImmLocalFree(pLayouts);
495-
return NULL;
496-
}
497-
498-
for (iLayout = 0; iLayout < cLayouts; ++iLayout)
499-
{
500-
if (lstrcmpiW(pLayouts[iLayout].szFileName, pchFilePart) == 0)
501-
{
502-
if (wLangID != LOWORD(pLayouts[iLayout].hKL))
503-
{
504-
ERR("\n");
505-
goto Quit; /* The language is different */
506-
}
507-
508-
hNewKL = pLayouts[iLayout].hKL; /* Found */
509-
break;
510-
}
511-
}
512-
}
513-
514-
/* If the IME for the specified filename is valid, then unload it now */
515-
if (ImmGetImeInfoEx(&InfoEx, ImeInfoExImeFileName, pchFilePart) &&
516-
!UnloadKeyboardLayout(InfoEx.hkl))
517-
{
518-
ERR("\n");
519-
hNewKL = NULL;
520-
goto Quit;
521-
}
522-
523-
Imm32GetSystemLibraryPath(szImeDestPath, _countof(szImeDestPath), pchFilePart);
524-
CharUpperW(szImeDestPath);
525-
526-
/* If the source and the destination pathnames were different, then copy the IME file */
527-
if (lstrcmpiW(szImeFileName, szImeDestPath) != 0 &&
528-
!Imm32CopyImeFile(szImeFileName, szImeDestPath))
529-
{
530-
ERR("\n");
531-
hNewKL = NULL;
532-
goto Quit;
533-
}
534-
535-
if (hNewKL == NULL)
536-
hNewKL = Imm32AssignNewLayout(cLayouts, pLayouts, wLangID);
537-
538-
if (hNewKL)
539-
{
540-
/* Write the IME layout to registry */
541-
if (Imm32WriteImeLayout(hNewKL, pchFilePart, lpszLayoutText))
542-
{
543-
/* Load the keyboard layout */
544-
StringCchPrintfW(szImeKey, _countof(szImeKey), L"%08X", HandleToUlong(hNewKL));
545-
hNewKL = LoadKeyboardLayoutW(szImeKey, KLF_REPLACELANG);
546-
}
547-
else
548-
{
549-
ERR("\n");
550-
hNewKL = NULL;
551-
}
552-
}
553-
554-
Quit:
555-
ImmLocalFree(pLayouts);
556-
return hNewKL;
557-
}
558-
559427
/***********************************************************************
560428
* ImmIsIME (IMM32.@)
561429
*/

win32ss/user/imm32/imm.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ static BOOL APIENTRY ImmInitializeGlobals(HMODULE hMod)
5454
* ImmRegisterClient(IMM32.@)
5555
* ( Undocumented, called from user32.dll )
5656
*/
57-
BOOL WINAPI ImmRegisterClient(PSHAREDINFO ptr, HINSTANCE hMod)
57+
BOOL WINAPI
58+
ImmRegisterClient(
59+
_Inout_ PSHAREDINFO ptr,
60+
_In_ HINSTANCE hMod)
5861
{
5962
gSharedInfo = *ptr;
6063
gpsi = gSharedInfo.psi;
@@ -1000,8 +1003,10 @@ VOID WINAPI ImmUnlockClientImc(PCLIENTIMC pClientImc)
10001003
ImmLocalFree(pClientImc);
10011004
}
10021005

1003-
// Win: ImmGetSaveContext
1004-
static HIMC APIENTRY ImmGetSaveContext(HWND hWnd, DWORD dwContextFlags)
1006+
static HIMC
1007+
ImmGetSaveContext(
1008+
_In_opt_ HWND hWnd,
1009+
_In_ DWORD dwContextFlags)
10051010
{
10061011
HIMC hIMC;
10071012
PCLIENTIMC pClientImc;
@@ -1219,8 +1224,8 @@ BOOL WINAPI ImmSetActiveContext(HWND hWnd, HIMC hIMC, BOOL fActive)
12191224
/***********************************************************************
12201225
* ImmWINNLSGetEnableStatus (IMM32.@)
12211226
*/
1222-
1223-
BOOL WINAPI ImmWINNLSGetEnableStatus(HWND hWnd)
1227+
BOOL WINAPI
1228+
ImmWINNLSGetEnableStatus(_In_opt_ HWND hWnd)
12241229
{
12251230
if (!Imm32IsSystemJapaneseOrKorean())
12261231
{
@@ -1234,7 +1239,10 @@ BOOL WINAPI ImmWINNLSGetEnableStatus(HWND hWnd)
12341239
/***********************************************************************
12351240
* ImmSetActiveContextConsoleIME(IMM32.@)
12361241
*/
1237-
BOOL WINAPI ImmSetActiveContextConsoleIME(HWND hwnd, BOOL fFlag)
1242+
BOOL WINAPI
1243+
ImmSetActiveContextConsoleIME(
1244+
_In_ HWND hwnd,
1245+
_In_ BOOL fFlag)
12381246
{
12391247
HIMC hIMC;
12401248
TRACE("(%p, %d)\n", hwnd, fFlag);

0 commit comments

Comments
 (0)