# HG changeset patch # User Bram Moolenaar # Date 1642597204 -3600 # Node ID 6837d2c14dee7783f533cf3d292600a571c131b1 # Parent 50d7f7e0cbd29a8776a60076471853d4e5024f1c patch 8.2.4143: MS-Windows: IME support for Win9x is obsolete Commit: https://github.com/vim/vim/commit/b0b2b73dca40c26ff1f4befe5c3aad3fd4bccfad Author: K.Takata Date: Wed Jan 19 12:59:21 2022 +0000 patch 8.2.4143: MS-Windows: IME support for Win9x is obsolete Problem: MS-Windows: IME support for Win9x is obsolete. Solution: Remove the Win9x code. (Ken Takata, closes https://github.com/vim/vim/issues/9559) diff --git a/src/gui_w32.c b/src/gui_w32.c --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -368,14 +368,14 @@ static int allow_scrollbar = FALSE; typedef HANDLE DPI_AWARENESS_CONTEXT; typedef enum DPI_AWARENESS { - DPI_AWARENESS_INVALID = -1, - DPI_AWARENESS_UNAWARE = 0, - DPI_AWARENESS_SYSTEM_AWARE = 1, + DPI_AWARENESS_INVALID = -1, + DPI_AWARENESS_UNAWARE = 0, + DPI_AWARENESS_SYSTEM_AWARE = 1, DPI_AWARENESS_PER_MONITOR_AWARE = 2 } DPI_AWARENESS; -# define DPI_AWARENESS_CONTEXT_UNAWARE ((DPI_AWARENESS_CONTEXT)-1) -# define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE ((DPI_AWARENESS_CONTEXT)-2) +# define DPI_AWARENESS_CONTEXT_UNAWARE ((DPI_AWARENESS_CONTEXT)-1) +# define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE ((DPI_AWARENESS_CONTEXT)-2) # define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ((DPI_AWARENESS_CONTEXT)-3) # define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ((DPI_AWARENESS_CONTEXT)-4) # define DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED ((DPI_AWARENESS_CONTEXT)-5) @@ -4275,7 +4275,6 @@ typedef HANDLE HIMC; # endif static HINSTANCE hLibImm = NULL; -static LONG (WINAPI *pImmGetCompositionStringA)(HIMC, DWORD, LPVOID, DWORD); static LONG (WINAPI *pImmGetCompositionStringW)(HIMC, DWORD, LPVOID, DWORD); static HIMC (WINAPI *pImmGetContext)(HWND); static HIMC (WINAPI *pImmAssociateContext)(HWND, HIMC); @@ -4289,7 +4288,6 @@ static BOOL (WINAPI *pImmGetConversionSt static BOOL (WINAPI *pImmSetConversionStatus)(HIMC, DWORD, DWORD); static void dyn_imm_load(void); #else -# define pImmGetCompositionStringA ImmGetCompositionStringA # define pImmGetCompositionStringW ImmGetCompositionStringW # define pImmGetContext ImmGetContext # define pImmAssociateContext ImmAssociateContext @@ -5880,56 +5878,6 @@ gui_mch_set_sp_color(guicolor_T color) } /* - * get the current composition string, in UCS-2; *lenp is the number of - * *lenp is the number of Unicode characters. - */ - static short_u * -GetCompositionString_inUCS2(HIMC hIMC, DWORD GCS, int *lenp) -{ - LONG ret; - LPWSTR wbuf = NULL; - char_u *buf; - - if (!pImmGetContext) - return NULL; // no imm32.dll - - // Try Unicode; this will always work on NT regardless of codepage. - ret = pImmGetCompositionStringW(hIMC, GCS, NULL, 0); - if (ret == 0) - return NULL; // empty - - if (ret > 0) - { - // Allocate the requested buffer plus space for the NUL character. - wbuf = alloc(ret + sizeof(WCHAR)); - if (wbuf != NULL) - { - pImmGetCompositionStringW(hIMC, GCS, wbuf, ret); - *lenp = ret / sizeof(WCHAR); - } - return (short_u *)wbuf; - } - - // ret < 0; we got an error, so try the ANSI version. This will work - // on 9x/ME, but only if the codepage happens to be set to whatever - // we're inputting. - ret = pImmGetCompositionStringA(hIMC, GCS, NULL, 0); - if (ret <= 0) - return NULL; // empty or error - - buf = alloc(ret); - if (buf == NULL) - return NULL; - pImmGetCompositionStringA(hIMC, GCS, buf, ret); - - // convert from codepage to UCS-2 - MultiByteToWideChar_alloc(GetACP(), 0, (LPCSTR)buf, ret, &wbuf, lenp); - vim_free(buf); - - return (short_u *)wbuf; -} - -/* * void GetResultStr() * * This handles WM_IME_COMPOSITION with GCS_RESULTSTR flag on. @@ -5939,17 +5887,27 @@ GetCompositionString_inUCS2(HIMC hIMC, D GetResultStr(HWND hwnd, int GCS, int *lenp) { HIMC hIMC; // Input context handle. - short_u *buf = NULL; + LONG ret; + WCHAR *buf = NULL; char_u *convbuf = NULL; if (!pImmGetContext || (hIMC = pImmGetContext(hwnd)) == (HIMC)0) return NULL; - // Reads in the composition string. - buf = GetCompositionString_inUCS2(hIMC, GCS, lenp); + // Get the length of the composition string. + ret = pImmGetCompositionStringW(hIMC, GCS, NULL, 0); + if (ret <= 0) + return NULL; + + // Allocate the requested buffer plus space for the NUL character. + buf = alloc(ret + sizeof(WCHAR)); if (buf == NULL) return NULL; + // Reads in the composition string. + pImmGetCompositionStringW(hIMC, GCS, buf, ret); + *lenp = ret / sizeof(WCHAR); + convbuf = utf16_to_enc(buf, lenp); pImmReleaseContext(hwnd, hIMC); vim_free(buf); @@ -8399,8 +8357,6 @@ dyn_imm_load(void) if (hLibImm == NULL) return; - pImmGetCompositionStringA - = (void *)GetProcAddress(hLibImm, "ImmGetCompositionStringA"); pImmGetCompositionStringW = (void *)GetProcAddress(hLibImm, "ImmGetCompositionStringW"); pImmGetContext @@ -8424,8 +8380,7 @@ dyn_imm_load(void) pImmSetConversionStatus = (void *)GetProcAddress(hLibImm, "ImmSetConversionStatus"); - if ( pImmGetCompositionStringA == NULL - || pImmGetCompositionStringW == NULL + if ( pImmGetCompositionStringW == NULL || pImmGetContext == NULL || pImmAssociateContext == NULL || pImmReleaseContext == NULL diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4143, +/**/ 4142, /**/ 4141,