diff options
Diffstat (limited to 'alf/alfcompat.cpp')
| -rw-r--r-- | alf/alfcompat.cpp | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/alf/alfcompat.cpp b/alf/alfcompat.cpp index 164032f..ec14b00 100644 --- a/alf/alfcompat.cpp +++ b/alf/alfcompat.cpp @@ -140,87 +140,6 @@ ALF_Compat_fallbackAdjustWindowRectExForDpi(LPRECT lpRect, DWORD dwStyle, BOOL b return AdjustWindowRectEx(lpRect, dwStyle, bMenu, dwExStyle); } - -// FIXME: these support one subclass only, negating the whole point of it - -typedef struct { - ALF_COMPAT_SUBCLASSPROC pfnSubclass; - UINT_PTR uIdSubclass; - DWORD_PTR dwRefData; - UINT runCounter; - WNDPROC orig; -} ALFWindowSubclassData; - -static LRESULT CALLBACK -ALF_Compat_fallbackSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - ALFWindowSubclassData *data = (ALFWindowSubclassData *)GetWindowLongPtr(hwnd, GWLP_USERDATA); - - LRESULT ret = 0; - - data->runCounter++; - - if (data->pfnSubclass) - ret = data->pfnSubclass(hwnd, uMsg, wParam, lParam, data->uIdSubclass, data->dwRefData); - else - ret = CallWindowProc(data->orig, hwnd, uMsg, wParam, lParam); - - data->runCounter--; - - if (!data->pfnSubclass && !data->runCounter) { - SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); - ALF_Free(data); - } - - return ret; -} - -static BOOL WINAPI -ALF_Compat_fallbackSetWindowSubclass(HWND hwnd, ALF_COMPAT_SUBCLASSPROC pfnSubclass, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) -{ - ALFWindowSubclassData *data = ALF_New(ALFWindowSubclassData, 1); - - data->pfnSubclass = pfnSubclass; - data->uIdSubclass = uIdSubclass; - data->dwRefData = dwRefData; - data->orig = (WNDPROC)GetWindowLongPtr(hwnd, GWLP_WNDPROC); - - SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)data); - SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)ALF_Compat_fallbackSubclassProc); - - return TRUE; -} - -static LRESULT WINAPI -ALF_Compat_fallbackDefSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - ALFWindowSubclassData *data = (ALFWindowSubclassData *)GetWindowLongPtr(hwnd, GWLP_USERDATA); - - return CallWindowProc(data->orig, hwnd, uMsg, wParam, lParam); -} - -static BOOL WINAPI -ALF_Compat_fallbackRemoveWindowSubclass(HWND hwnd, ALF_COMPAT_SUBCLASSPROC pfnSubclass, UINT_PTR uIdSubclass) -{ - (void)pfnSubclass; - (void)uIdSubclass; - - ALFWindowSubclassData *data = (ALFWindowSubclassData *)GetWindowLongPtr(hwnd, GWLP_USERDATA); - - data->pfnSubclass = 0; - data->uIdSubclass = 0; - SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)data->orig); - - // can't free it while the subclass is running, possibly in a nested SendMessage - // and wants to call DefSubclassProc - if (!data->runCounter) { - SetWindowLongPtr(hwnd, GWLP_USERDATA, 0); - ALF_Free(data); - } - - return TRUE; -} - long ALF_GetAveCharWidth(HDC hdc) { @@ -472,25 +391,6 @@ void ALF_LoadCompatFunctions(void) LOAD_FUNC(user32, GetDpiForWindow); LOAD_FUNC(user32, AdjustWindowRectExForDpi); LOAD_FUNC(user32, GetSystemMetricsForDpi); - - *((FARPROC*)&ALF_Compat_SetWindowSubclass) = GetProcAddress(_alf_dll_comctl32, "SetWindowSubclass"); - if (!ALF_Compat_SetWindowSubclass) - *((FARPROC*)&ALF_Compat_SetWindowSubclass) = GetProcAddress(_alf_dll_comctl32, (char*)410); - if (!ALF_Compat_SetWindowSubclass) - ALF_Compat_SetWindowSubclass = ALF_Compat_fallbackSetWindowSubclass; - - *((FARPROC*)&ALF_Compat_DefSubclassProc) = GetProcAddress(_alf_dll_comctl32, "DefSubclassProc"); - if (!ALF_Compat_DefSubclassProc) - *((FARPROC*)&ALF_Compat_DefSubclassProc) = GetProcAddress(_alf_dll_comctl32, (char*)413); - if (!ALF_Compat_DefSubclassProc) - ALF_Compat_DefSubclassProc = ALF_Compat_fallbackDefSubclassProc; - - *((FARPROC*)&ALF_Compat_RemoveWindowSubclass) = GetProcAddress(_alf_dll_comctl32, "RemoveWindowSubclass"); - if (!ALF_Compat_RemoveWindowSubclass) - *((FARPROC*)&ALF_Compat_RemoveWindowSubclass) = GetProcAddress(_alf_dll_comctl32, (char*)412); - if (!ALF_Compat_RemoveWindowSubclass) - ALF_Compat_RemoveWindowSubclass = ALF_Compat_fallbackRemoveWindowSubclass; - LOAD_FUNC(user32, SystemParametersInfoForDpi); *((FARPROC*)&ALF_Compat_TrackMouseEvent) = GetProcAddress(_alf_dll_comctl32, "_TrackMouseEvent"); @@ -521,9 +421,6 @@ void ALF_UnloadCompatFunctions(void) UNLOAD_FUNC(GetDpiForWindow); UNLOAD_FUNC(AdjustWindowRectExForDpi); UNLOAD_FUNC(GetSystemMetricsForDpi); - UNLOAD_FUNC(SetWindowSubclass); - UNLOAD_FUNC(DefSubclassProc); - UNLOAD_FUNC(RemoveWindowSubclass); UNLOAD_FUNC(SystemParametersInfoForDpi); UNLOAD_FUNC(TrackMouseEvent); UNLOAD_FUNC(OpenThemeData); @@ -555,9 +452,6 @@ BOOL (WINAPI *ALF_Compat_IsAppThemed)(void) = NULL; UINT (WINAPI *ALF_Compat_GetDpiForWindow)(HWND /*window*/) = NULL; BOOL (WINAPI *ALF_Compat_AdjustWindowRectExForDpi)(LPRECT,DWORD,BOOL,DWORD,UINT) = NULL; int (WINAPI *ALF_Compat_GetSystemMetricsForDpi)(int, UINT) = NULL; -BOOL (WINAPI *ALF_Compat_SetWindowSubclass)(HWND, ALF_COMPAT_SUBCLASSPROC, UINT_PTR, DWORD_PTR) = NULL; -LRESULT (WINAPI *ALF_Compat_DefSubclassProc)(HWND, UINT, WPARAM, LPARAM) = NULL; -BOOL (WINAPI *ALF_Compat_RemoveWindowSubclass)(HWND, ALF_COMPAT_SUBCLASSPROC, UINT_PTR) = NULL; BOOL (WINAPI *ALF_Compat_SystemParametersInfoForDpi)(UINT,UINT,PVOID,UINT,UINT) = NULL; HTHEME (WINAPI *ALF_Compat_OpenThemeData)(HWND, LPCWSTR) = NULL; |
