diff --git a/inc/fps_limiter.h b/inc/fps_limiter.h index 5e9d098..911225b 100644 --- a/inc/fps_limiter.h +++ b/inc/fps_limiter.h @@ -22,6 +22,12 @@ typedef struct _D3DKMT_CLOSEADAPTER { UINT hAdapter; } D3DKMT_CLOSEADAPTER; +typedef HRESULT(WINAPI* DWMFLUSHPROC)(VOID); +typedef HRESULT(WINAPI* DWMISCOMPOSITIONENABLEDPROC)(BOOL*); +typedef NTSTATUS(WINAPI* D3DKMTWAITFORVERTICALBLANKEVENTPROC)(const D3DKMT_WAITFORVERTICALBLANKEVENT* Arg1); +typedef NTSTATUS(WINAPI* D3DKMTOPENADAPTERFROMHDCPROC)(D3DKMT_OPENADAPTERFROMHDC* Arg1); +typedef NTSTATUS(WINAPI* D3DKMTCLOSEADAPTERPROC)(D3DKMT_CLOSEADAPTER* Arg1); + typedef struct fps_limiter { DWORD tick_start; @@ -35,11 +41,11 @@ typedef struct fps_limiter D3DKMT_CLOSEADAPTER close_adapter; HMODULE gdi32_dll; HMODULE dwmapi_dll; - HRESULT(WINAPI* DwmFlush)(VOID); - HRESULT(WINAPI* DwmIsCompositionEnabled)(BOOL*); - NTSTATUS(WINAPI* D3DKMTWaitForVerticalBlankEvent)(const D3DKMT_WAITFORVERTICALBLANKEVENT* Arg1); - NTSTATUS(WINAPI* D3DKMTOpenAdapterFromHdc)(D3DKMT_OPENADAPTERFROMHDC* Arg1); - NTSTATUS(WINAPI* D3DKMTCloseAdapter)(D3DKMT_CLOSEADAPTER* Arg1); + DWMFLUSHPROC DwmFlush; + DWMISCOMPOSITIONENABLEDPROC DwmIsCompositionEnabled; + D3DKMTWAITFORVERTICALBLANKEVENTPROC D3DKMTWaitForVerticalBlankEvent; + D3DKMTOPENADAPTERFROMHDCPROC D3DKMTOpenAdapterFromHdc; + D3DKMTCLOSEADAPTERPROC D3DKMTCloseAdapter; BOOL got_adapter; } fps_limiter; diff --git a/src/fps_limiter.c b/src/fps_limiter.c index 0cf4a94..61fd4c0 100644 --- a/src/fps_limiter.c +++ b/src/fps_limiter.c @@ -39,22 +39,19 @@ void fpsl_init() g_fpsl.dwmapi_dll = LoadLibraryA("dwmapi.dll"); g_fpsl.DwmFlush = - (HRESULT(WINAPI*)(VOID))GetProcAddress(g_fpsl.dwmapi_dll, "DwmFlush"); + (DWMFLUSHPROC)GetProcAddress(g_fpsl.dwmapi_dll, "DwmFlush"); g_fpsl.DwmIsCompositionEnabled = - (HRESULT(WINAPI*)(BOOL*))GetProcAddress(g_fpsl.dwmapi_dll, "DwmIsCompositionEnabled"); + (DWMISCOMPOSITIONENABLEDPROC)GetProcAddress(g_fpsl.dwmapi_dll, "DwmIsCompositionEnabled"); g_fpsl.D3DKMTWaitForVerticalBlankEvent = - (NTSTATUS(WINAPI*)(const D3DKMT_WAITFORVERTICALBLANKEVENT * Arg1)) - GetProcAddress(g_fpsl.gdi32_dll, "D3DKMTWaitForVerticalBlankEvent"); + (D3DKMTWAITFORVERTICALBLANKEVENTPROC)GetProcAddress(g_fpsl.gdi32_dll, "D3DKMTWaitForVerticalBlankEvent"); g_fpsl.D3DKMTOpenAdapterFromHdc = - (NTSTATUS(WINAPI*)(D3DKMT_OPENADAPTERFROMHDC * Arg1)) - GetProcAddress(g_fpsl.gdi32_dll, "D3DKMTOpenAdapterFromHdc"); + (D3DKMTOPENADAPTERFROMHDCPROC)GetProcAddress(g_fpsl.gdi32_dll, "D3DKMTOpenAdapterFromHdc"); g_fpsl.D3DKMTCloseAdapter = - (NTSTATUS(WINAPI*)(D3DKMT_CLOSEADAPTER * Arg1)) - GetProcAddress(g_fpsl.gdi32_dll, "D3DKMTCloseAdapter"); + (D3DKMTCLOSEADAPTERPROC)GetProcAddress(g_fpsl.gdi32_dll, "D3DKMTCloseAdapter"); } BOOL fpsl_wait_for_vblank() diff --git a/src/wndproc.c b/src/wndproc.c index c683160..f3503f4 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -380,15 +380,26 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam case WM_NCMOUSELEAVE: { if (!g_ddraw->wine) /* hack: disable aero snap */ - real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, GetWindowLong(g_ddraw->hwnd, GWL_STYLE) | WS_MAXIMIZEBOX); + { + LONG style = GetWindowLong(g_ddraw->hwnd, GWL_STYLE); + if (!(style & WS_MAXIMIZEBOX)) + { + real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, style | WS_MAXIMIZEBOX); + } + } break; } case WM_SYSCOMMAND: if ((wParam & ~0x0F) == SC_MOVE && !g_ddraw->wine) /* hack: disable aero snap */ { - real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, GetWindowLong(g_ddraw->hwnd, GWL_STYLE) & ~WS_MAXIMIZEBOX); + LONG style = GetWindowLong(g_ddraw->hwnd, GWL_STYLE); + + if ((style & WS_MAXIMIZEBOX)) + { + real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, style & ~WS_MAXIMIZEBOX); + } } if (wParam == SC_MAXIMIZE)