patch 8.2.4153: MS-Windows: Global IME is no longer supported

Problem:    MS-Windows: Global IME is no longer supported.
Solution:   Remove the Global IME implementation. (Ken Takata, closes #9562)
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index 6889a91..23852df 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -34,7 +34,6 @@
 #	IME support: IME=yes	(default is yes)
 #	  DYNAMIC_IME=[yes or no]  (to load the imm32.dll dynamically, default
 #	  is yes)
-#	Global IME support: GIME=yes (requires GUI=yes)
 #
 #	Terminal support: TERMINAL=yes (default is yes if FEATURES is HUGE)
 #	  Will also enable CHANNEL
@@ -898,11 +897,6 @@
 ! endif
 !endif
 
-!if "$(GIME)" == "yes"
-CFLAGS = $(CFLAGS) -DGLOBAL_IME
-OBJ = $(OBJ) $(OUTDIR)\dimm_i.obj $(OUTDIR)\glbl_ime.obj
-!endif
-
 !if "$(GUI)" == "yes"
 SUBSYSTEM = windows
 CFLAGS = $(CFLAGS) -DFEAT_GUI_MSWIN
@@ -1475,9 +1469,6 @@
 	- if exist uninstall.exe del uninstall.exe
 	- if exist if_perl.c del if_perl.c
 	- if exist auto\if_perl.c del auto\if_perl.c
-	- if exist dimm.h del dimm.h
-	- if exist dimm_i.c del dimm_i.c
-	- if exist dimm.tlb del dimm.tlb
 	- if exist dosinst.exe del dosinst.exe
 	cd xxd
 	$(MAKE) /NOLOGO -f Make_mvc.mak clean
@@ -1893,13 +1884,6 @@
 	midl /nologo /error none /proxy nul /iid iid_ole.c /tlb vim.tlb \
 		/header if_ole.h if_ole.idl
 
-dimm.h dimm_i.c: dimm.idl
-	midl /nologo /error none /proxy nul dimm.idl
-
-$(OUTDIR)/dimm_i.obj: $(OUTDIR) dimm_i.c $(INCL)
-
-$(OUTDIR)/glbl_ime.obj:	$(OUTDIR) glbl_ime.cpp  dimm.h $(INCL)
-
 
 CCCTERM = $(CC) $(CFLAGS) -Ilibvterm/include -DINLINE="" \
 	-DVSNPRINTF=vim_vsnprintf \
diff --git a/src/dimm.idl b/src/dimm.idl
deleted file mode 100644
index ac44965..0000000
--- a/src/dimm.idl
+++ /dev/null
@@ -1,544 +0,0 @@
-//+-------------------------------------------------------------------------
-//
-//  Microsoft Windows
-//  Copyright (C) Microsoft Corporation, 1992-2000.
-//
-//  File: dimm.idl
-//
-//  Contents: ActiveIMM interface definitions
-//
-//
-//--------------------------------------------------------------------------
-
-cpp_quote("//=--------------------------------------------------------------------------=")
-cpp_quote("// dimm.h")
-cpp_quote("//=--------------------------------------------------------------------------=")
-cpp_quote("// (C) Copyright 1995-1998 Microsoft Corporation.  All Rights Reserved.")
-cpp_quote("//")
-cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
-cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
-cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
-cpp_quote("// PARTICULAR PURPOSE.")
-cpp_quote("//=--------------------------------------------------------------------------=")
-cpp_quote("")
-cpp_quote("#pragma comment(lib,\"uuid.lib\")")
-cpp_quote("")
-cpp_quote("//--------------------------------------------------------------------------")
-cpp_quote("// IActiveIMM Interfaces.")
-cpp_quote("")
-
-/*
-Disable a warning about lack of polymorphic type support for the following reasons
-- the only reason to have library block in the file is to make midl accept coclass
-  statement and generate CLSID for CActiveIMM.
-- the generated dimm_i.c has the clsid and that file is used to have clsid available
-- the dimm.tlb is not used at all
-- on top of it, there is no plans to port the app using dimm.idl to 64b platform.
-*/
-/*
- * midl_pragma is unsupported in midl version 3.01 shipped with VC5.0.
- * It is supported in midl version 5.01 shipped with VC6.0
- * I could not produce message 2395. Is this needed? W.Briscoe 2001-08-14
- */
-#if (__midl >= 501)
-midl_pragma warning( disable: 2395) // polymorphic types not supported in the TLB
-#endif
-
-#ifndef DO_NO_IMPORTS
-import "unknwn.idl";
-#endif
-
-[
-    uuid(4955DD30-B159-11d0-8FCF-00AA006BCC59),
-    helpstring("ActiveIMM"),
-    lcid(0x0000),
-    version(0.1)
-]
-library ActiveIMM
-{
-    importlib("stdole2.tlb");
-
-    cpp_quote("#include <imm.h>")
-
-    cpp_quote("#if 0")
-
-    typedef WORD LANGID;
-
-    typedef struct
-    {
-        LPSTR   lpReading;
-        LPSTR   lpWord;
-    } REGISTERWORDA;
-
-    typedef struct
-    {
-        LPWSTR   lpReading;
-        LPWSTR   lpWord;
-    } REGISTERWORDW;
-
-    #define LF_FACESIZE         32
-
-    typedef struct
-    {
-        LONG      lfHeight;
-        LONG      lfWidth;
-        LONG      lfEscapement;
-        LONG      lfOrientation;
-        LONG      lfWeight;
-        BYTE      lfItalic;
-        BYTE      lfUnderline;
-        BYTE      lfStrikeOut;
-        BYTE      lfCharSet;
-        BYTE      lfOutPrecision;
-        BYTE      lfClipPrecision;
-        BYTE      lfQuality;
-        BYTE      lfPitchAndFamily;
-        CHAR      lfFaceName[LF_FACESIZE];
-    } LOGFONTA;
-
-    typedef struct
-    {
-        LONG      lfHeight;
-        LONG      lfWidth;
-        LONG      lfEscapement;
-        LONG      lfOrientation;
-        LONG      lfWeight;
-        BYTE      lfItalic;
-        BYTE      lfUnderline;
-        BYTE      lfStrikeOut;
-        BYTE      lfCharSet;
-        BYTE      lfOutPrecision;
-        BYTE      lfClipPrecision;
-        BYTE      lfQuality;
-        BYTE      lfPitchAndFamily;
-        WCHAR     lfFaceName[LF_FACESIZE];
-    } LOGFONTW;
-
-    typedef DWORD     HIMC;
-    typedef DWORD     HIMCC;
-
-    typedef struct
-    {
-        DWORD dwIndex;
-        DWORD dwStyle;
-        POINT ptCurrentPos;
-        RECT  rcArea;
-    } CANDIDATEFORM;
-
-    typedef struct
-    {
-        DWORD dwStyle;
-        POINT ptCurrentPos;
-        RECT  rcArea;
-    } COMPOSITIONFORM;
-
-    typedef struct
-    {
-        DWORD dwSize;
-        DWORD dwStyle;
-        DWORD dwCount;
-        DWORD dwSelection;
-        DWORD dwPageStart;
-        DWORD dwPageSize;
-        DWORD dwOffset[1];
-    } CANDIDATELIST;
-
-    #define STYLE_DESCRIPTION_SIZE  32
-
-    typedef struct
-    {
-        DWORD       dwStyle;
-        CHAR        szDescription[STYLE_DESCRIPTION_SIZE];
-    } STYLEBUFA;
-
-    typedef struct
-    {
-        DWORD       dwStyle;
-        WCHAR       szDescription[STYLE_DESCRIPTION_SIZE];
-    } STYLEBUFW;
-
-    typedef WORD ATOM;
-
-    cpp_quote("#endif")
-
-    cpp_quote("#if (WINVER < 0x040A)")
-
-    #define IMEMENUITEM_STRING_SIZE 80
-
-    typedef struct
-    {
-        UINT        cbSize;
-        UINT        fType;
-        UINT        fState;
-        UINT        wID;
-        HBITMAP     hbmpChecked;
-        HBITMAP     hbmpUnchecked;
-        DWORD       dwItemData;
-        CHAR        szString[IMEMENUITEM_STRING_SIZE];
-        HBITMAP     hbmpItem;
-    } IMEMENUITEMINFOA;
-
-    typedef struct
-    {
-        UINT        cbSize;
-        UINT        fType;
-        UINT        fState;
-        UINT        wID;
-        HBITMAP     hbmpChecked;
-        HBITMAP     hbmpUnchecked;
-        DWORD       dwItemData;
-        WCHAR       szString[IMEMENUITEM_STRING_SIZE];
-        HBITMAP     hbmpItem;
-    } IMEMENUITEMINFOW;
-
-    cpp_quote("#endif")
-
-    cpp_quote("#ifndef _DDKIMM_H_")
-
-    typedef struct
-    {
-        HWND                hWnd;
-        BOOL                fOpen;
-        POINT               ptStatusWndPos;
-        POINT               ptSoftKbdPos;
-        DWORD               fdwConversion;
-        DWORD               fdwSentence;
-        union
-        {
-            LOGFONTA        A;
-            LOGFONTW        W;
-        } lfFont;
-        COMPOSITIONFORM     cfCompForm;
-        CANDIDATEFORM       cfCandForm[4];
-        HIMCC               hCompStr;
-        HIMCC               hCandInfo;
-        HIMCC               hGuideLine;
-        HIMCC               hPrivate;
-        DWORD               dwNumMsgBuf;
-        HIMCC               hMsgBuf;
-        DWORD               fdwInit;
-        DWORD               dwReserve[3];
-    } INPUTCONTEXT;
-
-    typedef struct
-    {
-        DWORD       dwPrivateDataSize;
-        DWORD       fdwProperty;
-        DWORD       fdwConversionCaps;
-        DWORD       fdwSentenceCaps;
-        DWORD       fdwUICaps;
-        DWORD       fdwSCSCaps;
-        DWORD       fdwSelectCaps;
-    } IMEINFO;
-
-    cpp_quote("#endif")
-
-    [
-      object,
-      uuid(08C03412-F96B-11d0-A475-00AA006BCC59),
-      pointer_default(unique)
-    ]
-    interface IEnumRegisterWordA : IUnknown
-    {
-        HRESULT Clone([out] IEnumRegisterWordA **ppEnum);
-        HRESULT Next([in] ULONG ulCount, [out] REGISTERWORDA *rgRegisterWord, [out] ULONG *pcFetched);
-        HRESULT Reset();
-        HRESULT Skip([in] ULONG ulCount);
-    };
-
-    [
-      object,
-      uuid(4955DD31-B159-11d0-8FCF-00AA006BCC59),
-      pointer_default(unique)
-    ]
-    interface IEnumRegisterWordW : IUnknown
-    {
-        HRESULT Clone([out] IEnumRegisterWordW **ppEnum);
-        HRESULT Next([in] ULONG ulCount, [out] REGISTERWORDW *rgRegisterWord, [out] ULONG *pcFetched);
-        HRESULT Reset();
-        HRESULT Skip([in] ULONG ulCount);
-    };
-
-
-    [
-      object,
-      uuid(09b5eab0-f997-11d1-93d4-0060b067b86e),
-      pointer_default(unique)
-    ]
-    interface IEnumInputContext : IUnknown
-    {
-        HRESULT Clone([out] IEnumInputContext **ppEnum);
-        HRESULT Next([in] ULONG ulCount, [out] HIMC *rgInputContext, [out] ULONG *pcFetched);
-        HRESULT Reset();
-        HRESULT Skip([in] ULONG ulCount);
-    };
-
-
-    [
-      object,
-      uuid(b3458082-bd00-11d1-939b-0060b067b86e),
-      pointer_default(unique)
-    ]
-    interface IActiveIMMRegistrar : IUnknown
-    {
-        HRESULT RegisterIME([in] REFCLSID rclsid, [in] LANGID lgid, [in] LPCWSTR pszIconFile, [in] LPCWSTR pszDesc);
-        HRESULT UnregisterIME([in] REFCLSID rclsid);
-    };
-
-    [
-      object,
-      uuid(b5cf2cfa-8aeb-11d1-9364-0060b067b86e),
-      pointer_default(unique)
-    ]
-    interface IActiveIMMMessagePumpOwner : IUnknown
-    {
-        HRESULT Start();
-        HRESULT End();
-        HRESULT OnTranslateMessage([in] const MSG *pMsg);
-        HRESULT Pause([out] DWORD *pdwCookie);
-        HRESULT Resume([in] DWORD dwCookie);
-    }
-
-    [
-      object,
-      uuid(08c0e040-62d1-11d1-9326-0060b067b86e),
-      pointer_default(unique)
-    ]
-    interface IActiveIMMApp : IUnknown
-    {
-        HRESULT AssociateContext([in] HWND hWnd, [in] HIMC hIME, [out] HIMC *phPrev);
-        HRESULT ConfigureIMEA([in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDA *pData);
-        HRESULT ConfigureIMEW([in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDW *pData);
-        HRESULT CreateContext([out] HIMC *phIMC);
-        HRESULT DestroyContext([in] HIMC hIME);
-        HRESULT EnumRegisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordA **pEnum);
-        HRESULT EnumRegisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordW **pEnum);
-        HRESULT EscapeA([in] HKL hKL, [in] HIMC hIMC, [in] UINT uEscape, [in, out] LPVOID pData, [out] LRESULT *plResult);
-        HRESULT EscapeW([in] HKL hKL, [in] HIMC hIMC, [in] UINT uEscape, [in, out] LPVOID pData, [out] LRESULT *plResult);
-        HRESULT GetCandidateListA([in] HIMC hIMC, [in] DWORD dwIndex, [in] UINT uBufLen, [out] CANDIDATELIST *pCandList, [out] UINT *puCopied);
-        HRESULT GetCandidateListW([in] HIMC hIMC, [in] DWORD dwIndex, [in] UINT uBufLen, [out] CANDIDATELIST *pCandList, [out] UINT *puCopied);
-        HRESULT GetCandidateListCountA([in] HIMC hIMC, [out] DWORD *pdwListSize, [out] DWORD *pdwBufLen);
-        HRESULT GetCandidateListCountW([in] HIMC hIMC, [out] DWORD *pdwListSize, [out] DWORD *pdwBufLen);
-        HRESULT GetCandidateWindow([in] HIMC hIMC, [in] DWORD dwIndex, [out] CANDIDATEFORM *pCandidate);
-        HRESULT GetCompositionFontA([in] HIMC hIMC, [out] LOGFONTA *plf);
-        HRESULT GetCompositionFontW([in] HIMC hIMC, [out] LOGFONTW *plf);
-        HRESULT GetCompositionStringA([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LONG *plCopied, [out] LPVOID pBuf);
-        HRESULT GetCompositionStringW([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LONG *plCopied, [out] LPVOID pBuf);
-        HRESULT GetCompositionWindow([in] HIMC hIMC, [out] COMPOSITIONFORM *pCompForm);
-        HRESULT GetContext([in] HWND hWnd, [out] HIMC *phIMC);
-        HRESULT GetConversionListA([in] HKL hKL, [in] HIMC hIMC, [in] LPSTR pSrc, [in] UINT uBufLen, [in] UINT uFlag, [out] CANDIDATELIST *pDst, [out] UINT *puCopied);
-        HRESULT GetConversionListW([in] HKL hKL, [in] HIMC hIMC, [in] LPWSTR pSrc, [in] UINT uBufLen, [in] UINT uFlag, [out] CANDIDATELIST *pDst, [out] UINT *puCopied);
-        HRESULT GetConversionStatus([in] HIMC hIMC, [out] DWORD *pfdwConversion, [out] DWORD *pfdwSentence);
-        HRESULT GetDefaultIMEWnd([in] HWND hWnd, [out] HWND *phDefWnd);
-        HRESULT GetDescriptionA([in] HKL hKL, [in] UINT uBufLen, [out] LPSTR szDescription, [out] UINT *puCopied);
-        HRESULT GetDescriptionW([in] HKL hKL, [in] UINT uBufLen, [out] LPWSTR szDescription, [out] UINT *puCopied);
-        HRESULT GetGuideLineA([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LPSTR pBuf, [out] DWORD *pdwResult);
-        HRESULT GetGuideLineW([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LPWSTR pBuf, [out] DWORD *pdwResult);
-        HRESULT GetIMEFileNameA([in] HKL hKL, [in] UINT uBufLen, [out] LPSTR szFileName, [out] UINT *puCopied);
-        HRESULT GetIMEFileNameW([in] HKL hKL, [in] UINT uBufLen, [out] LPWSTR szFileName, [out] UINT *puCopied);
-        HRESULT GetOpenStatus([in] HIMC hIMC);
-        HRESULT GetProperty([in] HKL hKL, [in] DWORD fdwIndex, [out] DWORD *pdwProperty);
-        HRESULT GetRegisterWordStyleA([in] HKL hKL, [in] UINT nItem, [out] STYLEBUFA *pStyleBuf, [out] UINT *puCopied);
-        HRESULT GetRegisterWordStyleW([in] HKL hKL, [in] UINT nItem, [out] STYLEBUFW *pStyleBuf, [out] UINT *puCopied);
-        HRESULT GetStatusWindowPos([in] HIMC hIMC, [out] POINT *pptPos);
-        HRESULT GetVirtualKey([in] HWND hWnd, [out] UINT *puVirtualKey);
-        HRESULT InstallIMEA([in] LPSTR szIMEFileName, [in] LPSTR szLayoutText, [out] HKL *phKL);
-        HRESULT InstallIMEW([in] LPWSTR szIMEFileName, [in] LPWSTR szLayoutText, [out] HKL *phKL);
-        HRESULT IsIME([in] HKL hKL);
-        HRESULT IsUIMessageA([in] HWND hWndIME, [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam);
-        HRESULT IsUIMessageW([in] HWND hWndIME, [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam);
-        HRESULT NotifyIME([in] HIMC hIMC, [in] DWORD dwAction, [in] DWORD dwIndex, [in] DWORD dwValue);
-        HRESULT RegisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szRegister);
-        HRESULT RegisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister);
-        HRESULT ReleaseContext([in] HWND hWnd, [in] HIMC hIMC);
-        HRESULT SetCandidateWindow([in] HIMC hIMC, [in] CANDIDATEFORM *pCandidate);
-        HRESULT SetCompositionFontA([in] HIMC hIMC, [in] LOGFONTA *plf);
-        HRESULT SetCompositionFontW([in] HIMC hIMC, [in] LOGFONTW *plf);
-        HRESULT SetCompositionStringA([in] HIMC hIMC, [in] DWORD dwIndex, [in] LPVOID pComp, [in] DWORD dwCompLen, [in] LPVOID pRead, [in] DWORD dwReadLen);
-        HRESULT SetCompositionStringW([in] HIMC hIMC, [in] DWORD dwIndex, [in] LPVOID pComp, [in] DWORD dwCompLen, [in] LPVOID pRead, [in] DWORD dwReadLen);
-        HRESULT SetCompositionWindow([in] HIMC hIMC, [in] COMPOSITIONFORM *pCompForm);
-        HRESULT SetConversionStatus([in] HIMC hIMC, [in] DWORD fdwConversion, [in] DWORD fdwSentence);
-        HRESULT SetOpenStatus([in] HIMC hIMC, [in] BOOL fOpen);
-        HRESULT SetStatusWindowPos([in] HIMC hIMC, [in] POINT *pptPos);
-        HRESULT SimulateHotKey([in] HWND hWnd, [in] DWORD dwHotKeyID);
-        HRESULT UnregisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szUnregister);
-        HRESULT UnregisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szUnregister);
-
-        HRESULT Activate([in] BOOL fRestoreLayout);
-        HRESULT Deactivate();
-
-        HRESULT OnDefWindowProc([in] HWND hWnd, [in] UINT Msg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult);
-
-        HRESULT FilterClientWindows([in] ATOM *aaClassList, [in] UINT uSize);
-
-        HRESULT GetCodePageA([in] HKL hKL, [out] UINT *uCodePage);
-        HRESULT GetLangId([in] HKL hKL, [out] LANGID *plid);
-
-        // win98/nt5 apis
-        HRESULT AssociateContextEx([in] HWND hWnd, [in] HIMC hIMC, [in] DWORD dwFlags);
-        HRESULT DisableIME([in] DWORD idThread);
-        HRESULT GetImeMenuItemsA([in] HIMC hIMC, [in] DWORD dwFlags, [in] DWORD dwType, [in] IMEMENUITEMINFOA *pImeParentMenu, [out] IMEMENUITEMINFOA *pImeMenu, [in] DWORD dwSize, [out] DWORD *pdwResult);
-        HRESULT GetImeMenuItemsW([in] HIMC hIMC, [in] DWORD dwFlags, [in] DWORD dwType, [in] IMEMENUITEMINFOW *pImeParentMenu, [out] IMEMENUITEMINFOW *pImeMenu, [in] DWORD dwSize, [out] DWORD *pdwResult);
-        HRESULT EnumInputContext([in] DWORD idThread, [out] IEnumInputContext **ppEnum);
-    };
-
-    [
-      object,
-      uuid(08C03411-F96B-11d0-A475-00AA006BCC59),
-      pointer_default(unique)
-    ]
-    interface IActiveIMMIME : IUnknown
-    {
-        HRESULT AssociateContext([in] HWND hWnd, [in] HIMC hIME, [out] HIMC *phPrev);
-        HRESULT ConfigureIMEA([in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDA *pData);
-        HRESULT ConfigureIMEW([in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDW *pData);
-        HRESULT CreateContext([out] HIMC *phIMC);
-        HRESULT DestroyContext([in] HIMC hIME);
-        HRESULT EnumRegisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordA **pEnum);
-        HRESULT EnumRegisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordW **pEnum);
-        HRESULT EscapeA([in] HKL hKL, [in] HIMC hIMC, [in] UINT uEscape, [in, out] LPVOID pData, [out] LRESULT *plResult);
-        HRESULT EscapeW([in] HKL hKL, [in] HIMC hIMC, [in] UINT uEscape, [in, out] LPVOID pData, [out] LRESULT *plResult);
-        HRESULT GetCandidateListA([in] HIMC hIMC, [in] DWORD dwIndex, [in] UINT uBufLen, [out] CANDIDATELIST *pCandList, [out] UINT *puCopied);
-        HRESULT GetCandidateListW([in] HIMC hIMC, [in] DWORD dwIndex, [in] UINT uBufLen, [out] CANDIDATELIST *pCandList, [out] UINT *puCopied);
-        HRESULT GetCandidateListCountA([in] HIMC hIMC, [out] DWORD *pdwListSize, [out] DWORD *pdwBufLen);
-        HRESULT GetCandidateListCountW([in] HIMC hIMC, [out] DWORD *pdwListSize, [out] DWORD *pdwBufLen);
-        HRESULT GetCandidateWindow([in] HIMC hIMC, [in] DWORD dwIndex, [out] CANDIDATEFORM *pCandidate);
-        HRESULT GetCompositionFontA([in] HIMC hIMC, [out] LOGFONTA *plf);
-        HRESULT GetCompositionFontW([in] HIMC hIMC, [out] LOGFONTW *plf);
-        HRESULT GetCompositionStringA([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LONG *plCopied, [out] LPVOID pBuf);
-        HRESULT GetCompositionStringW([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LONG *plCopied, [out] LPVOID pBuf);
-        HRESULT GetCompositionWindow([in] HIMC hIMC, [out] COMPOSITIONFORM *pCompForm);
-        HRESULT GetContext([in] HWND hWnd, [out] HIMC *phIMC);
-        HRESULT GetConversionListA([in] HKL hKL, [in] HIMC hIMC, [in] LPSTR pSrc, [in] UINT uBufLen, [in] UINT uFlag, [out] CANDIDATELIST *pDst, [out] UINT *puCopied);
-        HRESULT GetConversionListW([in] HKL hKL, [in] HIMC hIMC, [in] LPWSTR pSrc, [in] UINT uBufLen, [in] UINT uFlag, [out] CANDIDATELIST *pDst, [out] UINT *puCopied);
-        HRESULT GetConversionStatus([in] HIMC hIMC, [out] DWORD *pfdwConversion, [out] DWORD *pfdwSentence);
-        HRESULT GetDefaultIMEWnd([in] HWND hWnd, [out] HWND *phDefWnd);
-        HRESULT GetDescriptionA([in] HKL hKL, [in] UINT uBufLen, [out] LPSTR szDescription, [out] UINT *puCopied);
-        HRESULT GetDescriptionW([in] HKL hKL, [in] UINT uBufLen, [out] LPWSTR szDescription, [out] UINT *puCopied);
-        HRESULT GetGuideLineA([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LPSTR pBuf, [out] DWORD *pdwResult);
-        HRESULT GetGuideLineW([in] HIMC hIMC, [in] DWORD dwIndex, [in] DWORD dwBufLen, [out] LPWSTR pBuf, [out] DWORD *pdwResult);
-        HRESULT GetIMEFileNameA([in] HKL hKL, [in] UINT uBufLen, [out] LPSTR szFileName, [out] UINT *puCopied);
-        HRESULT GetIMEFileNameW([in] HKL hKL, [in] UINT uBufLen, [out] LPWSTR szFileName, [out] UINT *puCopied);
-        HRESULT GetOpenStatus([in] HIMC hIMC);
-        HRESULT GetProperty([in] HKL hKL, [in] DWORD fdwIndex, [out] DWORD *pdwProperty);
-        HRESULT GetRegisterWordStyleA([in] HKL hKL, [in] UINT nItem, [out] STYLEBUFA *pStyleBuf, [out] UINT *puCopied);
-        HRESULT GetRegisterWordStyleW([in] HKL hKL, [in] UINT nItem, [out] STYLEBUFW *pStyleBuf, [out] UINT *puCopied);
-        HRESULT GetStatusWindowPos([in] HIMC hIMC, [out] POINT *pptPos);
-        HRESULT GetVirtualKey([in] HWND hWnd, [out] UINT *puVirtualKey);
-        HRESULT InstallIMEA([in] LPSTR szIMEFileName, [in] LPSTR szLayoutText, [out] HKL *phKL);
-        HRESULT InstallIMEW([in] LPWSTR szIMEFileName, [in] LPWSTR szLayoutText, [out] HKL *phKL);
-        HRESULT IsIME([in] HKL hKL);
-        HRESULT IsUIMessageA([in] HWND hWndIME, [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam);
-        HRESULT IsUIMessageW([in] HWND hWndIME, [in] UINT msg, [in] WPARAM wParam, [in] LPARAM lParam);
-        HRESULT NotifyIME([in] HIMC hIMC, [in] DWORD dwAction, [in] DWORD dwIndex, [in] DWORD dwValue);
-        HRESULT RegisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szRegister);
-        HRESULT RegisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister);
-        HRESULT ReleaseContext([in] HWND hWnd, [in] HIMC hIMC);
-        HRESULT SetCandidateWindow([in] HIMC hIMC, [in] CANDIDATEFORM *pCandidate);
-        HRESULT SetCompositionFontA([in] HIMC hIMC, [in] LOGFONTA *plf);
-        HRESULT SetCompositionFontW([in] HIMC hIMC, [in] LOGFONTW *plf);
-        HRESULT SetCompositionStringA([in] HIMC hIMC, [in] DWORD dwIndex, [in] LPVOID pComp, [in] DWORD dwCompLen, [in] LPVOID pRead, [in] DWORD dwReadLen);
-        HRESULT SetCompositionStringW([in] HIMC hIMC, [in] DWORD dwIndex, [in] LPVOID pComp, [in] DWORD dwCompLen, [in] LPVOID pRead, [in] DWORD dwReadLen);
-        HRESULT SetCompositionWindow([in] HIMC hIMC, [in] COMPOSITIONFORM *pCompForm);
-        HRESULT SetConversionStatus([in] HIMC hIMC, [in] DWORD fdwConversion, [in] DWORD fdwSentence);
-        HRESULT SetOpenStatus([in] HIMC hIMC, [in] BOOL fOpen);
-        HRESULT SetStatusWindowPos([in] HIMC hIMC, [in] POINT *pptPos);
-        HRESULT SimulateHotKey([in] HWND hWnd, [in] DWORD dwHotKeyID);
-        HRESULT UnregisterWordA([in] HKL hKL, [in] LPSTR szReading, [in] DWORD dwStyle, [in] LPSTR szUnregister);
-        HRESULT UnregisterWordW([in] HKL hKL, [in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szUnregister);
-
-        // ime helper methods
-        HRESULT GenerateMessage([in] HIMC hIMC);
-
-        // HIMC and HIMCC management api's
-        HRESULT LockIMC([in] HIMC hIMC, [out] INPUTCONTEXT **ppIMC);
-        HRESULT UnlockIMC([in] HIMC hIMC);
-        HRESULT GetIMCLockCount([in] HIMC hIMC, [out] DWORD *pdwLockCount);
-        HRESULT CreateIMCC([in] DWORD dwSize, [out] HIMCC *phIMCC);
-        HRESULT DestroyIMCC([in] HIMCC hIMCC);
-        HRESULT LockIMCC([in] HIMCC hIMCC, [out] void **ppv);
-        HRESULT UnlockIMCC([in] HIMCC hIMCC);
-        HRESULT ReSizeIMCC([in] HIMCC hIMCC, [in] DWORD dwSize, [out] HIMCC *phIMCC);
-        HRESULT GetIMCCSize([in] HIMCC hIMCC, [out] DWORD *pdwSize);
-        HRESULT GetIMCCLockCount([in] HIMCC hIMCC, [out] DWORD *pdwLockCount);
-
-        // hot key manipulation api's
-        HRESULT GetHotKey([in] DWORD dwHotKeyID, [out] UINT *puModifiers, [out] UINT *puVKey, [out] HKL *phKL);
-        HRESULT SetHotKey([in] DWORD dwHotKeyID, [in] UINT uModifiers, [in] UINT uVKey, [in] HKL hKL);
-
-        // soft keyboard api's
-        HRESULT CreateSoftKeyboard([in] UINT uType, [in] HWND hOwner, [in] int x, [in] int y, [out] HWND *phSoftKbdWnd);
-        HRESULT DestroySoftKeyboard([in] HWND hSoftKbdWnd);
-        HRESULT ShowSoftKeyboard([in] HWND hSoftKbdWnd, [in] int nCmdShow);
-
-        HRESULT GetCodePageA([in] HKL hKL, [out] UINT *uCodePage);
-        HRESULT GetLangId([in] HKL hKL, [out] LANGID *plid);
-
-        HRESULT KeybdEvent([in] LANGID lgidIME, [in] BYTE bVk, [in] BYTE bScan, [in] DWORD dwFlags, [in] DWORD dwExtraInfo);
-
-        HRESULT LockModal();
-        HRESULT UnlockModal();
-
-        // win98/nt5 apis
-        HRESULT AssociateContextEx([in] HWND hWnd, [in] HIMC hIMC, [in] DWORD dwFlags);
-        HRESULT DisableIME([in] DWORD idThread);
-        HRESULT GetImeMenuItemsA([in] HIMC hIMC, [in] DWORD dwFlags, [in] DWORD dwType, [in] IMEMENUITEMINFOA *pImeParentMenu, [out] IMEMENUITEMINFOA *pImeMenu, [in] DWORD dwSize, [out] DWORD *pdwResult);
-        HRESULT GetImeMenuItemsW([in] HIMC hIMC, [in] DWORD dwFlags, [in] DWORD dwType, [in] IMEMENUITEMINFOW *pImeParentMenu, [out] IMEMENUITEMINFOW *pImeMenu, [in] DWORD dwSize, [out] DWORD *pdwResult);
-        HRESULT EnumInputContext([in] DWORD idThread, [out] IEnumInputContext **ppEnum);
-        HRESULT RequestMessageA([in] HIMC hIMC, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult);
-        HRESULT RequestMessageW([in] HIMC hIMC, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult);
-
-        HRESULT SendIMCA([in] HWND hWnd, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult);
-        HRESULT SendIMCW([in] HWND hWnd, [in] UINT uMsg, [in] WPARAM wParam, [in] LPARAM lParam, [out] LRESULT *plResult);
-
-        HRESULT IsSleeping();
-    };
-
-    [
-      object,
-      uuid(6FE20962-D077-11d0-8FE7-00AA006BCC59),
-      pointer_default(unique)
-    ]
-    interface IActiveIME : IUnknown
-    {
-        HRESULT Inquire([in] DWORD dwSystemInfoFlags, [out] IMEINFO *pIMEInfo, [out] LPWSTR szWndClass, [out] DWORD *pdwPrivate);
-        HRESULT ConversionList([in] HIMC hIMC, [in] LPWSTR szSource, [in] UINT uFlag, [in] UINT uBufLen, [out] CANDIDATELIST *pDest, [out] UINT *puCopied);
-        HRESULT Configure([in] HKL hKL, [in] HWND hWnd, [in] DWORD dwMode, [in] REGISTERWORDW *pRegisterWord);
-        HRESULT Destroy([in] UINT uReserved);
-        HRESULT Escape([in] HIMC hIMC, [in] UINT uEscape, [in, out] void *pData, [out] LRESULT *plResult);
-        HRESULT SetActiveContext([in] HIMC hIMC, [in] BOOL fFlag);
-        HRESULT ProcessKey([in] HIMC hIMC, [in] UINT uVirKey, [in] DWORD lParam, [in] BYTE *pbKeyState);
-        HRESULT Notify([in] HIMC hIMC, [in] DWORD dwAction, [in] DWORD dwIndex, [in] DWORD dwValue);
-        HRESULT Select([in] HIMC hIMC, [in] BOOL fSelect);
-        HRESULT SetCompositionString([in] HIMC hIMC, [in] DWORD dwIndex, [in] void *pComp, [in] DWORD dwCompLen, [in] void *pRead, [in] DWORD dwReadLen);
-        HRESULT ToAsciiEx([in] UINT uVirKey, [in] UINT uScanCode, [in] BYTE *pbKeyState, [in] UINT fuState, [in] HIMC hIMC, [out] DWORD *pdwTransBuf, [out] UINT *puSize);
-        HRESULT RegisterWord([in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szString);
-        HRESULT UnregisterWord([in] LPWSTR szReading, [in] DWORD  dwStyle, [in] LPWSTR szString);
-        HRESULT GetRegisterWordStyle([in] UINT nItem, [out] STYLEBUFW *pStyleBuf, [out] UINT *puBufSize);
-        HRESULT EnumRegisterWord([in] LPWSTR szReading, [in] DWORD dwStyle, [in] LPWSTR szRegister, [in] LPVOID pData, [out] IEnumRegisterWordW **ppEnum);
-        HRESULT GetCodePageA([out] UINT *uCodePage);
-        HRESULT GetLangId([out] LANGID *plid);
-    };
-
-    [
-      object,
-      uuid(e1c4bf0e-2d53-11d2-93e1-0060b067b86e),
-      pointer_default(unique)
-    ]
-    interface IActiveIME2 : IActiveIME
-    {
-        HRESULT Sleep();
-        HRESULT Unsleep([in] BOOL fDead);
-    };
-
-    [
-      uuid(4955DD33-B159-11d0-8FCF-00AA006BCC59),
-    ]
-    coclass CActiveIMM
-    {
-        [default] interface IActiveIMMApp;
-        interface IActiveIMMIME;
-        interface IActiveIMMRegistrar;
-        interface IActiveIMMMessagePumpOwner;
-    };
-}
diff --git a/src/glbl_ime.cpp b/src/glbl_ime.cpp
deleted file mode 100644
index 6fd84ec..0000000
--- a/src/glbl_ime.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4 noet:
- *
- * VIM - Vi IMproved		by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- */
-
-/*
- * DESCRIPTION:
- * This module produces Global IME for Vim, on Windows with Internet
- * Explorer 5.01 or higher.  You need three files "dimm.idl", "dimm.h", and
- * "dimm_i.c" when compile this module at your self.  "dimm.h", and
- * "dimm_i.c" are generated from "dimm.idl" by using MIDL.EXE as like
- * "if_ole.h".  You can get "dimm.idl" in MSDN web site.  I got it below
- * URL.
- *
- * WHAT IS THE GLOBAL IME?:
- * Global IME makes capability input Chinese, Japanese, and Korean text into
- * Vim buffer on any language version of Windows 98, Windows 95, and Windows
- * NT 4.0.  See below URL for detail of Global IME.  You can also find
- * various language version of Global IME at same place.
- *
- * RUNTIME REQUIREMENTS:
- * - Internet Explorer 5.01 or higher.
- * - Global IME (with language pack?).
- * - Of course Vim for Windows.
- *
- * URLS:
- * - Where you can probably get "dimm.idl".
- * http://msdn.microsoft.com/downloads/samples/internet/libraries/ie5_lib/sample.asp
- * - Global IME detailed information.
- * http://www.microsoft.com/windows/ie/features/ime.asp
- */
-
-#ifdef GLOBAL_IME
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <objbase.h>
-extern "C" {
-#include "vim.h"
-}
-#include "dimm.h"
-#include "glbl_ime.h"
-
-static IActiveIMMApp *pIApp = NULL;
-static IActiveIMMMessagePumpOwner *pIMsg = NULL;
-static HWND s_hWnd = NULL;
-static BOOL s_bStatus = FALSE; /* for evacuate */
-
-/*
- * Initialize Global IME.
- * "atom" must be return value of RegisterClass(Ex).
- */
-    void
-global_ime_init(ATOM atom, HWND hWnd)
-{
-    IUnknown *pI;
-    HRESULT hr;
-
-    if (pIApp != NULL || pIMsg != NULL)
-	return;
-    OleInitialize(NULL);
-
-    /*
-     * Get interface IUnknown
-     */
-    hr = CoCreateInstance(CLSID_CActiveIMM, NULL, CLSCTX_SERVER,
-	    IID_IUnknown, (void**)&pI);
-    if (FAILED(hr) || !pI)
-	return;
-
-    /*
-     * Get interface IActiveIMMApp
-     */
-    hr = pI->QueryInterface(IID_IActiveIMMApp, (void**)&pIApp);
-    if (FAILED(hr))
-	pIApp = NULL;
-
-    /*
-     * Get interface IActiveIMMMessagePumpOwner
-     */
-    hr = pI->QueryInterface(IID_IActiveIMMMessagePumpOwner, (void**)&pIMsg);
-    if (FAILED(hr))
-	pIMsg = NULL;
-
-    if (pIApp != NULL)
-    {
-	pIApp->Activate(TRUE);
-	pIApp->FilterClientWindows(&atom, 1);
-    }
-    if (pIMsg != NULL)
-	pIMsg->Start();
-
-    pI->Release();
-    s_hWnd = hWnd;
-}
-
-/*
- * Reset and clear Global IME.
- */
-    void
-global_ime_end()
-{
-    if (pIApp != NULL)
-    {
-	IActiveIMMApp *p = pIApp;
-
-	pIApp = NULL;
-	p->FilterClientWindows(NULL, 0);
-	p->Deactivate();
-	p->Release();
-    }
-    if (pIMsg != NULL)
-    {
-	IActiveIMMMessagePumpOwner *p = pIMsg;
-
-	pIMsg = NULL;
-	p->End();
-	p->Release();
-    }
-    OleUninitialize();
-}
-
-/*
- * Replacement for DefWindowProc().
- */
-    LRESULT WINAPI
-global_ime_DefWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
-{
-    LRESULT lResult;
-
-    if (pIApp == NULL || pIApp->OnDefWindowProc(hWnd, Msg,
-					    wParam, lParam, &lResult) != S_OK)
-	lResult = DefWindowProcW(hWnd, Msg, wParam, lParam);
-    return lResult;
-}
-
-/*
- * Replace with TranslateMessage()
- */
-    BOOL WINAPI
-global_ime_TranslateMessage(CONST MSG *lpMsg)
-{
-    if (pIMsg == NULL || pIMsg->OnTranslateMessage(lpMsg) == S_FALSE)
-	return TranslateMessage(lpMsg);
-    return TRUE;
-}
-
-/*
- * Set position of IME composition window.
- *
- * You have to call this before starting composition.  If once composition
- * started, this can take no effect until that composition have finished.  So
- * you should handle WM_IME_STARTCOMPOSITION and call this function.
- */
-    void WINAPI
-global_ime_set_position(POINT *pPoint)
-{
-    HIMC hImc = NULL;
-
-    if (pIApp == NULL || pPoint == NULL)
-	return;
-
-    if (SUCCEEDED(pIApp->GetContext(s_hWnd, &hImc)))
-    {
-	COMPOSITIONFORM CompForm;
-
-	CompForm.dwStyle = CFS_POINT;
-	CompForm.ptCurrentPos = *pPoint;
-	pIApp->SetCompositionWindow(hImc, &CompForm);
-	pIApp->ReleaseContext(s_hWnd, hImc);
-    }
-}
-
-/*
- * Set font to Global IME
- */
-/* GIME_TEST */
-    void WINAPI
-global_ime_set_font(LOGFONT *pFont)
-{
-    HIMC hImc = NULL;
-
-    if (pIApp == NULL || pFont == NULL)
-	return;
-
-    if (SUCCEEDED(pIApp->GetContext(s_hWnd, &hImc)))
-    {
-	pIApp->SetCompositionFontA(hImc, pFont);
-	pIApp->ReleaseContext(s_hWnd, hImc);
-    }
-}
-
-#if 0
-/*
- * for IME control.  Save current status of IME, and set force new-status to
- * English (turn off).
- */
-    void WINAPI
-global_ime_status_evacuate()
-{
-    HIMC    hImc;
-
-    if (pIApp != NULL && SUCCEEDED(pIApp->GetContext(s_hWnd, &hImc)))
-    {
-	s_bStatus = (pIApp->GetOpenStatus(hImc) == 0) ? TRUE : FALSE;
-	pIApp->SetOpenStatus(hImc, FALSE);
-	pIApp->ReleaseContext(s_hWnd, hImc);
-    }
-}
-
-/*
- * for IME control.  Change IME status to last saved one.
- */
-    void WINAPI
-global_ime_status_restore()
-{
-    HIMC    hImc;
-
-    if (pIApp != NULL && SUCCEEDED(pIApp->GetContext(s_hWnd, &hImc)))
-    {
-	pIApp->SetOpenStatus(hImc, s_bStatus);
-	pIApp->ReleaseContext(s_hWnd, hImc);
-    }
-}
-#endif
-
-    void WINAPI
-global_ime_set_status(int status)
-{
-    HIMC    hImc;
-
-    if (pIApp != NULL && SUCCEEDED(pIApp->GetContext(s_hWnd, &hImc)))
-    {
-	pIApp->SetOpenStatus(hImc, status ? TRUE : FALSE);
-	pIApp->ReleaseContext(s_hWnd, hImc);
-    }
-}
-
-    int WINAPI
-global_ime_get_status()
-{
-    int status = 0;
-    HIMC    hImc;
-
-    if (pIApp != NULL && SUCCEEDED(pIApp->GetContext(s_hWnd, &hImc)))
-    {
-	status = pIApp->GetOpenStatus(hImc) ? 1 : 0;
-	pIApp->ReleaseContext(s_hWnd, hImc);
-    }
-    return status;
-}
-
-#endif /* GLOBAL_IME */
diff --git a/src/glbl_ime.h b/src/glbl_ime.h
deleted file mode 100644
index bce9c73..0000000
--- a/src/glbl_ime.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4 noet:
- *
- * VIM - Vi IMproved		by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- */
-
-#ifdef GLOBAL_IME
-# ifndef _INC_GLOBAL_IME
-#  define _INC_GLOBAL_IME
-
-#  ifdef __cplusplus
-extern "C" {
-#  endif
-    void global_ime_init(ATOM, HWND);
-    void global_ime_end(void);
-    LRESULT WINAPI global_ime_DefWindowProc(HWND, UINT, WPARAM, LPARAM);
-    BOOL WINAPI global_ime_TranslateMessage(CONST MSG *);
-    void WINAPI global_ime_set_position(POINT*);
-    void WINAPI global_ime_set_font(LOGFONT*);
-#  if 0
-    void WINAPI global_ime_status_evacuate(void);
-    void WINAPI global_ime_status_restore(void);
-#  endif
-    void WINAPI global_ime_set_status(int status);
-    int WINAPI global_ime_get_status(void);
-#  ifdef __cplusplus
-}
-#  endif
-
-# endif // _INC_GLOBAL_IME
-#endif // GLOBAL_IME
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 4f047f1..cbbae9e 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -197,10 +197,6 @@
 # endif
 # include <windowsx.h>
 
-# ifdef GLOBAL_IME
-#  include "glbl_ime.h"
-# endif
-
 #endif // PROTO
 
 #ifdef FEAT_MENU
@@ -358,12 +354,6 @@
 // problems (e.g., while ":s" is working).
 static int allow_scrollbar = FALSE;
 
-#ifdef GLOBAL_IME
-# define MyTranslateMessage(x) global_ime_TranslateMessage(x)
-#else
-# define MyTranslateMessage(x) TranslateMessage(x)
-#endif
-
 #ifndef _DPI_AWARENESS_CONTEXTS_
 typedef HANDLE DPI_AWARENESS_CONTEXT;
 
@@ -449,9 +439,6 @@
 }
 #endif
 
-// use of WindowProc depends on Global IME
-static LRESULT WINAPI MyWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
-
 extern int current_font_height;	    // this is in os_mswin.c
 
 static struct
@@ -561,11 +548,9 @@
  *
  * These LOGFONTW used for IME.
  */
-#if defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)
+#ifdef FEAT_MBYTE_IME
 // holds LOGFONTW for 'guifontwide' if available, otherwise 'guifont'
 static LOGFONTW norm_logfont;
-#endif
-#ifdef FEAT_MBYTE_IME
 // holds LOGFONTW for 'guifont' always.
 static LOGFONTW sub_logfont;
 #endif
@@ -1315,20 +1300,10 @@
 	    return TRUE;
 #endif
 	default:
-	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+	    return DefWindowProcW(hwnd, uMsg, wParam, lParam);
     }
 }
 
-    static LRESULT WINAPI
-MyWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
-#ifdef GLOBAL_IME
-    return global_ime_DefWindowProc(hwnd, message, wParam, lParam);
-#else
-    return DefWindowProcW(hwnd, message, wParam, lParam);
-#endif
-}
-
 /*
  * Called when the foreground or background color has been changed.
  */
@@ -1844,7 +1819,7 @@
     deadCharExpel.hwnd    = originalMsg.hwnd;
     deadCharExpel.wParam  = VK_SPACE;
 
-    MyTranslateMessage(&deadCharExpel);
+    TranslateMessage(&deadCharExpel);
 
     // re-generate the current character free of the dead char influence
     PostMessage(originalMsg.hwnd, originalMsg.message, originalMsg.wParam,
@@ -1919,7 +1894,7 @@
 	 *
 	 * - Before doing something special such as regenerating keypresses to
 	 *   expel the dead character as this could trigger an infinite loop if
-	 *   for some reason MyTranslateMessage() do not trigger a call
+	 *   for some reason TranslateMessage() do not trigger a call
 	 *   immediately to _OnChar() (or _OnSysChar()).
 	 */
 	if (dead_key)
@@ -1939,7 +1914,7 @@
 	    if ((vk == VK_SPACE || vk == VK_BACK || vk == VK_ESCAPE))
 	    {
 		dead_key = 0;
-		MyTranslateMessage(&msg);
+		TranslateMessage(&msg);
 		return;
 	    }
 	    // In modes where we are not typing, dead keys should behave
@@ -2069,10 +2044,10 @@
 		    add_to_input_buf(string, 1);
 		}
 		else
-		    MyTranslateMessage(&msg);
+		    TranslateMessage(&msg);
 	    }
 	    else
-		MyTranslateMessage(&msg);
+		TranslateMessage(&msg);
 	}
     }
 #ifdef FEAT_MBYTE_IME
@@ -2080,20 +2055,7 @@
 	_OnImeNotify(msg.hwnd, (DWORD)msg.wParam, (DWORD)msg.lParam);
     else if (msg.message == WM_KEYUP && im_get_status())
 	// added for non-MS IME (Yasuhiro Matsumoto)
-	MyTranslateMessage(&msg);
-#endif
-#if !defined(FEAT_MBYTE_IME) && defined(GLOBAL_IME)
-// GIME_TEST
-    else if (msg.message == WM_IME_STARTCOMPOSITION)
-    {
-	POINT point;
-
-	global_ime_set_font(&norm_logfont);
-	point.x = FILL_X(gui.col);
-	point.y = FILL_Y(gui.row);
-	MapWindowPoints(s_textArea, s_hwnd, &point, 1);
-	global_ime_set_position(&point);
-    }
+	TranslateMessage(&msg);
 #endif
 
 #ifdef FEAT_MENU
@@ -2947,7 +2909,7 @@
 {
     gui_focus_change(TRUE);
     s_getting_focus = TRUE;
-    (void)MyWindowProc(hwnd, WM_SETFOCUS, (WPARAM)hwndOldFocus, 0);
+    (void)DefWindowProcW(hwnd, WM_SETFOCUS, (WPARAM)hwndOldFocus, 0);
 }
 
     static void
@@ -2957,7 +2919,7 @@
 {
     gui_focus_change(FALSE);
     s_getting_focus = FALSE;
-    (void)MyWindowProc(hwnd, WM_KILLFOCUS, (WPARAM)hwndNewFocus, 0);
+    (void)DefWindowProcW(hwnd, WM_KILLFOCUS, (WPARAM)hwndNewFocus, 0);
 }
 
 /*
@@ -2971,7 +2933,7 @@
 {
     // we call gui_focus_change() in _OnSetFocus()
     // gui_focus_change((int)fActivate);
-    return MyWindowProc(hwnd, WM_ACTIVATEAPP, fActivate, (DWORD)dwThreadId);
+    return DefWindowProcW(hwnd, WM_ACTIVATEAPP, fActivate, (DWORD)dwThreadId);
 }
 
     void
@@ -3244,10 +3206,6 @@
 	destroying = TRUE;	// ignore WM_DESTROY message now
 	DestroyWindow(s_hwnd);
     }
-
-#ifdef GLOBAL_IME
-    global_ime_end();
-#endif
 }
 
     static char_u *
@@ -3399,13 +3357,9 @@
 
     if (font_name == NULL)
 	font_name = (char_u *)lf.lfFaceName;
-#if defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)
+#ifdef FEAT_MBYTE_IME
     norm_logfont = lf;
-#endif
-#ifdef FEAT_MBYTE_IME
     sub_logfont = lf;
-#endif
-#ifdef FEAT_MBYTE_IME
     if (!s_in_dpichanged)
 	update_im_font();
 #endif
@@ -4550,7 +4504,7 @@
 	netbeans_frame_moved(x, y);
     }
     // Allow to send WM_SIZE and WM_MOVE
-    FORWARD_WM_WINDOWPOSCHANGED(hwnd, lpwpos, MyWindowProc);
+    FORWARD_WM_WINDOWPOSCHANGED(hwnd, lpwpos, DefWindowProcW);
 }
 #endif
 
@@ -4716,7 +4670,7 @@
 		    return 0L;
 		}
 	    }
-	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+	    return DefWindowProcW(hwnd, uMsg, wParam, lParam);
 	}
 	case WM_LBUTTONDBLCLK:
 	{
@@ -4733,7 +4687,7 @@
 		if (pt.y < rect.top)
 		    send_tabline_menu_event(0, TABLINE_MENU_NEW);
 	    }
-	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+	    return DefWindowProcW(hwnd, uMsg, wParam, lParam);
 	}
 #endif
 
@@ -4773,7 +4727,7 @@
 	}
 #ifdef FEAT_MENU
 	else
-	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+	    return DefWindowProcW(hwnd, uMsg, wParam, lParam);
 #endif
 
     case WM_SYSKEYUP:
@@ -4782,7 +4736,7 @@
 	// that.  But that caused problems when menu is disabled and using
 	// Alt-Tab-Esc: get into a strange state where no mouse-moved events
 	// are received, mouse pointer remains hidden.
-	return MyWindowProc(hwnd, uMsg, wParam, lParam);
+	return DefWindowProcW(hwnd, uMsg, wParam, lParam);
 #else
 	return 0L;
 #endif
@@ -4923,7 +4877,7 @@
 # ifdef FEAT_GUI_TABLINE
 		if (gui_mch_showing_tabline()
 				  && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
-		    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+		    return DefWindowProcW(hwnd, uMsg, wParam, lParam);
 # endif
 		break;
 	}
@@ -4970,7 +4924,7 @@
 	    int		x, y;
 	    int		xPos = GET_X_LPARAM(lParam);
 
-	    result = MyWindowProc(hwnd, uMsg, wParam, lParam);
+	    result = DefWindowProcW(hwnd, uMsg, wParam, lParam);
 	    if (result == HTCLIENT)
 	    {
 #ifdef FEAT_GUI_TABLINE
@@ -5002,12 +4956,12 @@
 #ifdef FEAT_MBYTE_IME
     case WM_IME_NOTIFY:
 	if (!_OnImeNotify(hwnd, (DWORD)wParam, (DWORD)lParam))
-	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+	    return DefWindowProcW(hwnd, uMsg, wParam, lParam);
 	return 1L;
 
     case WM_IME_COMPOSITION:
 	if (!_OnImeComposition(hwnd, wParam, lParam))
-	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+	    return DefWindowProcW(hwnd, uMsg, wParam, lParam);
 	return 1L;
 #endif
     case WM_DPICHANGED:
@@ -5019,10 +4973,10 @@
 	if (uMsg == s_findrep_msg && s_findrep_msg != 0)
 	    _OnFindRepl();
 #endif
-	return MyWindowProc(hwnd, uMsg, wParam, lParam);
+	return DefWindowProcW(hwnd, uMsg, wParam, lParam);
     }
 
-    return DefWindowProc(hwnd, uMsg, wParam, lParam);
+    return DefWindowProcW(hwnd, uMsg, wParam, lParam);
 }
 
 /*
@@ -5366,9 +5320,6 @@
     const WCHAR szVimWndClassW[] = VIM_CLASSW;
     const WCHAR szTextAreaClassW[] = L"VimTextArea";
     WNDCLASSW wndclassw;
-#ifdef GLOBAL_IME
-    ATOM	atom;
-#endif
 
     // Return here if the window was already opened (happens when
     // gui_mch_dialog() is called early).
@@ -5412,11 +5363,7 @@
 	wndclassw.lpszMenuName = NULL;
 	wndclassw.lpszClassName = szVimWndClassW;
 
-	if ((
-#ifdef GLOBAL_IME
-		    atom =
-#endif
-		    RegisterClassW(&wndclassw)) == 0)
+	if (RegisterClassW(&wndclassw) == 0)
 	    return FAIL;
     }
 
@@ -5489,9 +5436,6 @@
 	//TRACE("System DPI: %d, DPI: %d", pGetDpiForSystem(), s_dpi);
     }
 
-#ifdef GLOBAL_IME
-    global_ime_init(atom, s_hwnd);
-#endif
 #if defined(FEAT_MBYTE_IME) && defined(DYNAMIC_IME)
     dyn_imm_load();
 #endif
@@ -6062,42 +6006,6 @@
 
 #endif // FEAT_MBYTE_IME
 
-#if !defined(FEAT_MBYTE_IME) && defined(GLOBAL_IME)
-// Win32 with GLOBAL IME
-
-/*
- * Notify cursor position to IM.
- */
-    void
-im_set_position(int row, int col)
-{
-    // Win32 with GLOBAL IME
-    POINT p;
-
-    p.x = FILL_X(col);
-    p.y = FILL_Y(row);
-    MapWindowPoints(s_textArea, s_hwnd, &p, 1);
-    global_ime_set_position(&p);
-}
-
-/*
- * Set IM status on ("active" is TRUE) or off ("active" is FALSE).
- */
-    void
-im_set_active(int active)
-{
-    global_ime_set_status(active);
-}
-
-/*
- * Get IM status.  When IM is on, return not 0.  Else return 0.
- */
-    int
-im_get_status(void)
-{
-    return global_ime_get_status();
-}
-#endif
 
 /*
  * Convert latin9 text "text[len]" to ucs-2 in "unicodebuf".
diff --git a/src/version.c b/src/version.c
index ef0b3b3..54a9ebe 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4153,
+/**/
     4152,
 /**/
     4151,
diff --git a/src/vim.h b/src/vim.h
index cb8af5d..357873c 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -2252,17 +2252,15 @@
 #endif
 
 # if defined(FEAT_EVAL) \
-	&& (!defined(FEAT_GUI_MSWIN) \
-	     || !(defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)))
+	&& (!defined(FEAT_GUI_MSWIN) || !defined(FEAT_MBYTE_IME))
 // Whether IME is supported by im_get_status() defined in mbyte.c.
-// For Win32 GUI it's in gui_w32.c when FEAT_MBYTE_IME or GLOBAL_IME is defined.
+// For Win32 GUI it's in gui_w32.c when FEAT_MBYTE_IME is defined.
 # define IME_WITHOUT_XIM
 #endif
 
 #if defined(FEAT_XIM) \
 	|| defined(IME_WITHOUT_XIM) \
-	|| (defined(FEAT_GUI_MSWIN) \
-	    && (defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)))
+	|| (defined(FEAT_GUI_MSWIN) && defined(FEAT_MBYTE_IME))
 // im_set_active() is available
 # define HAVE_INPUT_METHOD
 #endif