mirror of
https://github.com/glfw/glfw.git
synced 2025-10-02 12:51:14 +00:00
Win32: Use dynamic load for imm32
This commit is contained in:
parent
15a64185b0
commit
59e192be6d
@ -13,7 +13,6 @@ if (MSVC OR CMAKE_C_SIMULATE_ID STREQUAL "MSVC")
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
link_libraries(imm32)
|
||||
set(ICON glfw.rc)
|
||||
elseif (APPLE)
|
||||
set(ICON glfw.icns)
|
||||
|
@ -153,7 +153,7 @@ if (CMAKE_VERSION VERSION_LESS "3.16" AND APPLE)
|
||||
endif()
|
||||
|
||||
if (GLFW_BUILD_WIN32)
|
||||
list(APPEND glfw_PKG_LIBS "-lgdi32 -limm32")
|
||||
list(APPEND glfw_PKG_LIBS "-lgdi32")
|
||||
endif()
|
||||
|
||||
if (GLFW_BUILD_COCOA)
|
||||
|
@ -167,6 +167,29 @@ static GLFWbool loadLibraries(void)
|
||||
_glfwPlatformGetModuleSymbol(_glfw.win32.ntdll.instance, "RtlVerifyVersionInfo");
|
||||
}
|
||||
|
||||
_glfw.win32.imm32.instance = _glfwPlatformLoadModule("imm32.dll");
|
||||
if (_glfw.win32.imm32.instance)
|
||||
{
|
||||
_glfw.win32.imm32.ImmGetCompositionStringW_ = (PFN_ImmGetCompositionStringW)
|
||||
_glfwPlatformGetModuleSymbol(_glfw.win32.imm32.instance, "ImmGetCompositionStringW");
|
||||
_glfw.win32.imm32.ImmGetContext_ = (PFN_ImmGetContext)
|
||||
_glfwPlatformGetModuleSymbol(_glfw.win32.imm32.instance, "ImmGetContext");
|
||||
_glfw.win32.imm32.ImmGetConversionStatus_ = (PFN_ImmGetConversionStatus)
|
||||
_glfwPlatformGetModuleSymbol(_glfw.win32.imm32.instance, "ImmGetConversionStatus");
|
||||
_glfw.win32.imm32.ImmGetDescriptionW_ = (PFN_ImmGetDescriptionW)
|
||||
_glfwPlatformGetModuleSymbol(_glfw.win32.imm32.instance, "ImmGetDescriptionW");
|
||||
_glfw.win32.imm32.ImmGetOpenStatus_ = (PFN_ImmGetOpenStatus)
|
||||
_glfwPlatformGetModuleSymbol(_glfw.win32.imm32.instance, "ImmGetOpenStatus");
|
||||
_glfw.win32.imm32.ImmNotifyIME_ = (PFN_ImmNotifyIME)
|
||||
_glfwPlatformGetModuleSymbol(_glfw.win32.imm32.instance, "ImmNotifyIME");
|
||||
_glfw.win32.imm32.ImmReleaseContext_ = (PFN_ImmReleaseContext)
|
||||
_glfwPlatformGetModuleSymbol(_glfw.win32.imm32.instance, "ImmReleaseContext");
|
||||
_glfw.win32.imm32.ImmSetCandidateWindow_ = (PFN_ImmSetCandidateWindow)
|
||||
_glfwPlatformGetModuleSymbol(_glfw.win32.imm32.instance, "ImmSetCandidateWindow");
|
||||
_glfw.win32.imm32.ImmSetOpenStatus_ = (PFN_ImmSetOpenStatus)
|
||||
_glfwPlatformGetModuleSymbol(_glfw.win32.imm32.instance, "ImmSetOpenStatus");
|
||||
}
|
||||
|
||||
return GLFW_TRUE;
|
||||
}
|
||||
|
||||
@ -191,6 +214,9 @@ static void freeLibraries(void)
|
||||
|
||||
if (_glfw.win32.ntdll.instance)
|
||||
_glfwPlatformFreeModule(_glfw.win32.ntdll.instance);
|
||||
|
||||
if (_glfw.win32.imm32.instance)
|
||||
_glfwPlatformFreeModule(_glfw.win32.imm32.instance);
|
||||
}
|
||||
|
||||
// Create key code translation tables
|
||||
|
@ -316,6 +316,26 @@ typedef HRESULT (WINAPI * PFN_GetDpiForMonitor)(HMONITOR,MONITOR_DPI_TYPE,UINT*,
|
||||
typedef LONG (WINAPI * PFN_RtlVerifyVersionInfo)(OSVERSIONINFOEXW*,ULONG,ULONGLONG);
|
||||
#define RtlVerifyVersionInfo _glfw.win32.ntdll.RtlVerifyVersionInfo_
|
||||
|
||||
// imm32 function pointer typedefs
|
||||
typedef LONG (WINAPI * PFN_ImmGetCompositionStringW)(HIMC,DWORD,LPVOID,DWORD);
|
||||
typedef HIMC (WINAPI * PFN_ImmGetContext)(HWND);
|
||||
typedef BOOL (WINAPI * PFN_ImmGetConversionStatus)(HIMC,LPDWORD,LPDWORD);
|
||||
typedef UINT (WINAPI * PFN_ImmGetDescriptionW)(HKL,LPWSTR,UINT);
|
||||
typedef BOOL (WINAPI * PFN_ImmGetOpenStatus)(HIMC);
|
||||
typedef BOOL (WINAPI * PFN_ImmNotifyIME)(HIMC,DWORD,DWORD,DWORD);
|
||||
typedef BOOL (WINAPI * PFN_ImmReleaseContext)(HWND,HIMC);
|
||||
typedef BOOL (WINAPI * PFN_ImmSetCandidateWindow)(HIMC,LPCANDIDATEFORM);
|
||||
typedef BOOL (WINAPI * PFN_ImmSetOpenStatus)(HIMC,BOOL);
|
||||
#define ImmGetCompositionStringW _glfw.win32.imm32.ImmGetCompositionStringW_
|
||||
#define ImmGetContext _glfw.win32.imm32.ImmGetContext_
|
||||
#define ImmGetConversionStatus _glfw.win32.imm32.ImmGetConversionStatus_
|
||||
#define ImmGetDescriptionW _glfw.win32.imm32.ImmGetDescriptionW_
|
||||
#define ImmGetOpenStatus _glfw.win32.imm32.ImmGetOpenStatus_
|
||||
#define ImmNotifyIME _glfw.win32.imm32.ImmNotifyIME_
|
||||
#define ImmReleaseContext _glfw.win32.imm32.ImmReleaseContext_
|
||||
#define ImmSetCandidateWindow _glfw.win32.imm32.ImmSetCandidateWindow_
|
||||
#define ImmSetOpenStatus _glfw.win32.imm32.ImmSetOpenStatus_
|
||||
|
||||
// WGL extension pointer typedefs
|
||||
typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC)(int);
|
||||
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC)(HDC,int,int,UINT,const int*,int*);
|
||||
@ -499,6 +519,19 @@ typedef struct _GLFWlibraryWin32
|
||||
HINSTANCE instance;
|
||||
PFN_RtlVerifyVersionInfo RtlVerifyVersionInfo_;
|
||||
} ntdll;
|
||||
|
||||
struct {
|
||||
HINSTANCE instance;
|
||||
PFN_ImmGetCompositionStringW ImmGetCompositionStringW_;
|
||||
PFN_ImmGetContext ImmGetContext_;
|
||||
PFN_ImmGetConversionStatus ImmGetConversionStatus_;
|
||||
PFN_ImmGetDescriptionW ImmGetDescriptionW_;
|
||||
PFN_ImmGetOpenStatus ImmGetOpenStatus_;
|
||||
PFN_ImmNotifyIME ImmNotifyIME_;
|
||||
PFN_ImmReleaseContext ImmReleaseContext_;
|
||||
PFN_ImmSetCandidateWindow ImmSetCandidateWindow_;
|
||||
PFN_ImmSetOpenStatus ImmSetOpenStatus_;
|
||||
} imm32;
|
||||
} _GLFWlibraryWin32;
|
||||
|
||||
// Win32-specific per-monitor data
|
||||
|
@ -34,7 +34,6 @@
|
||||
#include <string.h>
|
||||
#include <windowsx.h>
|
||||
#include <shellapi.h>
|
||||
#include <imm.h>
|
||||
|
||||
// Returns the window style for the specified window
|
||||
//
|
||||
|
@ -3,10 +3,6 @@ link_libraries(glfw)
|
||||
|
||||
include_directories("${GLFW_SOURCE_DIR}/deps")
|
||||
|
||||
if (WIN32)
|
||||
link_libraries(imm32)
|
||||
endif()
|
||||
|
||||
if (MATH_LIBRARY)
|
||||
link_libraries("${MATH_LIBRARY}")
|
||||
endif()
|
||||
|
Loading…
Reference in New Issue
Block a user