[SDK][IMM32][NTUSER] Delete <jpnvkeys.h> and use <wine/ime.h> instead (#8847)

Follow-up of #8846. Now <jpnvkeys.h>
is useless. Minor refactoring and
standardation.
JIRA issue: CORE-19268
- Replace <jpnvkeys.h> usage with
  <wine/ime.h> and fix
  VK_DBE_ENTERIMECONFIGMODE
  naming.
- Remove duplicated
  WM_IME_REPORT/IR_* and
  UNDETERMINESTRUCT definitions
  now provided by wine/ime.h.
- Introduce win3send.c half-
  implementing
  ImmSendIMEMessageExA/W.
- Add CMake option
  IMM_WIN3_SUPPORT (default: ON).
This commit is contained in:
Katayama Hirofumi MZ
2026-04-10 08:30:56 +09:00
committed by GitHub
parent ce73ba4426
commit 61fb4db34c
10 changed files with 108 additions and 98 deletions
+6
View File
@@ -20,6 +20,7 @@ list(APPEND SOURCE
softkbd.c
utils.c
win3.c
win3send.c
${CMAKE_CURRENT_BINARY_DIR}/imm32_stubs.c
${CMAKE_CURRENT_BINARY_DIR}/imm32.def)
@@ -31,3 +32,8 @@ set_module_type(imm32 win32dll UNICODE ENTRYPOINT ImmDllInitialize 12)
target_link_libraries(imm32 wine win32ksys uuid)
add_importlibs(imm32 advapi32 user32 gdi32 kernel32 ntdll)
add_cd_file(TARGET imm32 DESTINATION reactos/system32 FOR all)
option(IMM_WIN3_SUPPORT "IMM Win 3.x support" ON)
if(IMM_WIN3_SUPPORT)
target_compile_definitions(imm32 PRIVATE IMM_WIN3_SUPPORT)
endif()
+2 -1
View File
@@ -6,10 +6,11 @@
* Copyright 2002, 2003, 2007 CodeWeavers, Aric Stewart
* Copyright 2017 James Tabor <[email protected]>
* Copyright 2018 Amine Khaldi <[email protected]>
* Copyright 2020-2025 Katayama Hirofumi MZ <[email protected]>
* Copyright 2020-2026 Katayama Hirofumi MZ <[email protected]>
*/
#include "precomp.h"
#include <wine/ime.h>
WINE_DEFAULT_DEBUG_CHANNEL(imm);
+2 -2
View File
@@ -10,7 +10,7 @@
*/
#include "precomp.h"
#include <jpnvkeys.h>
#include <wine/ime.h>
WINE_DEFAULT_DEBUG_CHANNEL(imm);
@@ -1245,7 +1245,7 @@ ImmCallImeConsoleIME(
case VK_DBE_CODEINPUT:
case VK_DBE_NOCODEINPUT:
case VK_DBE_ENTERWORDREGISTERMODE:
case VK_DBE_ENTERCONFIGMODE:
case VK_DBE_ENTERIMECONFIGMODE:
break;
default:
+3
View File
@@ -187,3 +187,6 @@ LRESULT
CtfImmSetLangBand(
_In_ HWND hWnd,
_In_ BOOL fSet);
DWORD
WINNLSTranslateMessage(DWORD dwCount, LPTRANSMSG pEntries, HIMC hIMC, BOOL bAnsi, WORD wLang);
+9 -27
View File
@@ -2,10 +2,11 @@
* PROJECT: ReactOS IMM32
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Implementing IMM32 Win3.x compatibility
* COPYRIGHT: Copyright 2020-2021 Katayama Hirofumi MZ <[email protected]>
* COPYRIGHT: Copyright 2020-2026 Katayama Hirofumi MZ <[email protected]>
*/
#include "precomp.h"
#include <wine/ime.h>
WINE_DEFAULT_DEBUG_CHANNEL(imm);
@@ -178,10 +179,14 @@ WINNLSTranslateMessageK(DWORD dwCount, LPTRANSMSG pEntries, LPINPUTCONTEXTDX pIC
return dwCount;
}
#endif /* def IMM_WIN3_SUPPORT */
/* This function is used in ImmGenerateMessage and ImmTranslateMessage */
DWORD
WINNLSTranslateMessage(DWORD dwCount, LPTRANSMSG pEntries, HIMC hIMC, BOOL bAnsi, WORD wLang)
{
BOOL ret = FALSE;
#ifdef IMM_WIN3_SUPPORT
DWORD ret = 0;
LPINPUTCONTEXTDX pIC;
LPCOMPOSITIONSTRING pCS;
@@ -204,30 +209,7 @@ WINNLSTranslateMessage(DWORD dwCount, LPTRANSMSG pEntries, HIMC hIMC, BOOL bAnsi
ImmUnlockIMCC(pIC->hCompStr);
ImmUnlockIMC(hIMC);
return ret;
}
#endif /* IMM_WIN3_SUPPORT */
/***********************************************************************
* ImmSendIMEMessageExA(IMM32.@)
*/
WORD WINAPI
ImmSendIMEMessageExA(
_In_ HWND hWnd,
_In_ LPARAM lParam)
{
FIXME("(%p, %p)\n", hWnd, lParam);
return 0;
}
/***********************************************************************
* ImmSendIMEMessageExW(IMM32.@)
*/
WORD WINAPI
ImmSendIMEMessageExW(
_In_ HWND hWnd,
_In_ LPARAM lParam)
{
FIXME("(%p, %p)\n", hWnd, lParam);
#else
return 0;
#endif
}
+82
View File
@@ -0,0 +1,82 @@
/*
* PROJECT: ReactOS IMM32
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Implementing ImmSendIMEMessageExA/W
* COPYRIGHT: Copyright 2020-2026 Katayama Hirofumi MZ <[email protected]>
*/
#include "precomp.h"
#include <wine/ime.h>
WINE_DEFAULT_DEBUG_CHANNEL(imm);
#ifdef IMM_WIN3_SUPPORT /* 3.x support */
static DWORD Imm32TranslateIMESubFunctions(HWND hWnd, PIMESTRUCT pIme, BOOL bAnsi)
{
FIXME("(%p, %p, %d)\n", hWnd, pIme, bAnsi);
return 0;
}
static LRESULT Imm32SendIMEMessageExAW(HWND hWnd, HGLOBAL hIME, BOOL bAnsi)
{
PIMESTRUCT pIme = GlobalLock(hIME);
if (!pIme)
return 0;
LRESULT ret;
HKL hKL = GetKeyboardLayout(0);
if (Imm32IsSystemJapaneseOrKorean() && ImmIsIME(hKL))
{
HWND hwndIme = ImmGetDefaultIMEWnd(hWnd);
if (IsWindow(hwndIme))
{
HWND hTargetWnd = IsWindow(hWnd) ? hWnd : GetFocus();
ret = Imm32TranslateIMESubFunctions(hTargetWnd, pIme, bAnsi);
}
else
{
ret = (pIme->fnc == IME_GETVERSION) ? IME_RS_INVALID : IME_RS_ERROR;
}
}
else
{
pIme->wParam = IME_RS_INVALID;
ret = 0;
}
GlobalUnlock(hIME);
return ret;
}
#endif /* def IMM_WIN3_SUPPORT */
/***********************************************************************
* ImmSendIMEMessageExA(IMM32.@)
*/
LRESULT WINAPI
ImmSendIMEMessageExA(
_In_ HWND hWnd,
_In_ LPARAM lParam)
{
#ifdef IMM_WIN3_SUPPORT
return Imm32SendIMEMessageExAW(hWnd, (HGLOBAL)lParam, TRUE);
#else
return 0;
#endif
}
/***********************************************************************
* ImmSendIMEMessageExW(IMM32.@)
*/
LRESULT WINAPI
ImmSendIMEMessageExW(
_In_ HWND hWnd,
_In_ LPARAM lParam)
{
#ifdef IMM_WIN3_SUPPORT
return Imm32SendIMEMessageExAW(hWnd, (HGLOBAL)lParam, FALSE);
#else
return 0;
#endif
}
+2 -2
View File
@@ -8,7 +8,7 @@
*/
#include <win32k.h>
#include <jpnvkeys.h>
#include <wine/ime.h>
#include <cjkcode.h>
DBG_DEFAULT_CHANNEL(UserMisc);
@@ -690,7 +690,7 @@ IntImmProcessKey(
switch (uVirtualKey)
{
case VK_DBE_CODEINPUT:
case VK_DBE_ENTERCONFIGMODE:
case VK_DBE_ENTERIMECONFIGMODE:
case VK_DBE_ENTERWORDREGISTERMODE:
case VK_DBE_HIRAGANA:
case VK_DBE_KATAKANA: