mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 11:13:05 +00:00

imm32 and win32ss have common interface. This move will improve grep-ability. JIRA issue: N/A - Move dll/win32/imm32 to win32ss/user/imm32. - Adapt CMakeLists.txt to this move. - No code content change except CMakeLists.txt and .github\labeler.yml.
138 lines
3.8 KiB
C
138 lines
3.8 KiB
C
/*
|
|
* PROJECT: ReactOS IMM32
|
|
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
|
* PURPOSE: Implementing ImmIMP* functions
|
|
* COPYRIGHT: Copyright 2020-2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
|
*/
|
|
|
|
#include "precomp.h"
|
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(imm);
|
|
|
|
/*
|
|
* An IMEPROA/IMEPROW structure is an IME program information.
|
|
* The ImmIMP* functions just treat these information.
|
|
*/
|
|
|
|
static VOID
|
|
Imm32ConvertImeProWideToAnsi(_In_ const IMEPROW *pProW, _Out_ PIMEPROA pProA)
|
|
{
|
|
pProA->hWnd = pProW->hWnd;
|
|
pProA->InstDate = pProW->InstDate;
|
|
pProA->wVersion = pProW->wVersion;
|
|
|
|
WideCharToMultiByte(CP_ACP, 0, pProW->szDescription, -1,
|
|
(PSTR)pProA->szDescription, _countof(pProA->szDescription), NULL, NULL);
|
|
pProA->szDescription[_countof(pProA->szDescription) - 1] = ANSI_NULL; /* Avoid buffer overrun */
|
|
|
|
WideCharToMultiByte(CP_ACP, 0, pProW->szName, -1,
|
|
(PSTR)pProA->szName, _countof(pProA->szName), NULL, NULL);
|
|
pProA->szName[_countof(pProA->szName) - 1] = ANSI_NULL; /* Avoid buffer overrun */
|
|
|
|
pProA->szOptions[0] = ANSI_NULL;
|
|
}
|
|
|
|
static BOOL
|
|
Imm32IMPGetIME(_In_ HKL hKL, _Out_ PIMEPROW pProW)
|
|
{
|
|
IMEINFOEX ImeInfoEx;
|
|
if (!ImmGetImeInfoEx(&ImeInfoEx, ImeInfoExKeyboardLayout, &hKL))
|
|
return FALSE;
|
|
|
|
pProW->hWnd = NULL;
|
|
ZeroMemory(&pProW->InstDate, sizeof(pProW->InstDate));
|
|
pProW->wVersion = ImeInfoEx.dwImeWinVersion;
|
|
|
|
StringCchCopyNW(pProW->szDescription, _countof(pProW->szDescription),
|
|
ImeInfoEx.wszImeDescription, _countof(ImeInfoEx.wszImeDescription));
|
|
StringCchCopyNW(pProW->szName, _countof(pProW->szName),
|
|
ImeInfoEx.wszImeFile, _countof(ImeInfoEx.wszImeFile));
|
|
pProW->szOptions[0] = UNICODE_NULL;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/***********************************************************************
|
|
* ImmIMPGetIMEA(IMM32.@)
|
|
*/
|
|
BOOL WINAPI
|
|
ImmIMPGetIMEA(_In_opt_ HWND hWnd, _Out_ LPIMEPROA pImePro)
|
|
{
|
|
UNREFERENCED_PARAMETER(hWnd);
|
|
|
|
TRACE("(%p, %p)\n", hWnd, pImePro);
|
|
|
|
if (!Imm32IsSystemJapaneseOrKorean())
|
|
{
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
}
|
|
|
|
IMEPROW ImeProW;
|
|
HKL hKL = GetKeyboardLayout(0);
|
|
if (!Imm32IMPGetIME(hKL, &ImeProW))
|
|
return FALSE;
|
|
|
|
Imm32ConvertImeProWideToAnsi(&ImeProW, pImePro);
|
|
return TRUE;
|
|
}
|
|
|
|
/***********************************************************************
|
|
* ImmIMPGetIMEW(IMM32.@)
|
|
*/
|
|
BOOL WINAPI
|
|
ImmIMPGetIMEW(_In_opt_ HWND hWnd, _Out_ LPIMEPROW pImePro)
|
|
{
|
|
UNREFERENCED_PARAMETER(hWnd);
|
|
|
|
TRACE("(%p, %p)\n", hWnd, pImePro);
|
|
|
|
if (!Imm32IsSystemJapaneseOrKorean())
|
|
{
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
}
|
|
|
|
HKL hKL = GetKeyboardLayout(0);
|
|
return Imm32IMPGetIME(hKL, pImePro);
|
|
}
|
|
|
|
/***********************************************************************
|
|
* ImmIMPQueryIMEA(IMM32.@)
|
|
*/
|
|
BOOL WINAPI ImmIMPQueryIMEA(LPIMEPROA pImePro)
|
|
{
|
|
FIXME("(%p)\n", pImePro);
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
}
|
|
|
|
/***********************************************************************
|
|
* ImmIMPQueryIMEW(IMM32.@)
|
|
*/
|
|
BOOL WINAPI ImmIMPQueryIMEW(LPIMEPROW pImePro)
|
|
{
|
|
FIXME("(%p)\n", pImePro);
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
}
|
|
|
|
/***********************************************************************
|
|
* ImmIMPSetIMEA(IMM32.@)
|
|
*/
|
|
BOOL WINAPI ImmIMPSetIMEA(HWND hWnd, LPIMEPROA pImePro)
|
|
{
|
|
FIXME("(%p, %p)\n", hWnd, pImePro);
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
}
|
|
|
|
/***********************************************************************
|
|
* ImmIMPSetIMEW(IMM32.@)
|
|
*/
|
|
BOOL WINAPI ImmIMPSetIMEW(HWND hWnd, LPIMEPROW pImePro)
|
|
{
|
|
FIXME("(%p, %p)\n", hWnd, pImePro);
|
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
|
return FALSE;
|
|
}
|