From ca6c447ae615ca1d7168af836b5e84c152e4977e Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Thu, 3 Oct 2024 03:57:10 +0200 Subject: [PATCH] fix window resize and maximize for macOS + fix resize on linux --- inc/config.h | 1 - src/config.c | 2 -- src/dd.c | 4 ++-- src/wndproc.c | 13 ++++++++++++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/inc/config.h b/inc/config.h index 168c54d..fef71bb 100644 --- a/inc/config.h +++ b/inc/config.h @@ -65,7 +65,6 @@ typedef struct CNCDDRAWCONFIG BOOL fix_alt_key_stuck; BOOL fix_not_responding; BOOL no_compat_warning; - BOOL wine_allow_resize; int guard_lines; int max_resolutions; BOOL lock_surfaces; diff --git a/src/config.c b/src/config.c index 6b25434..9472523 100644 --- a/src/config.c +++ b/src/config.c @@ -78,7 +78,6 @@ void cfg_load() GET_BOOL(GameHandlesClose, "game_handles_close", FALSE); GET_BOOL(g_config.fix_not_responding, "fix_not_responding", FALSE); GET_BOOL(g_config.no_compat_warning, "no_compat_warning", FALSE); - GET_BOOL(g_config.wine_allow_resize, "wine_allow_resize", FALSE); GET_INT(g_config.guard_lines, "guard_lines", 200); GET_INT(g_config.max_resolutions, "max_resolutions", 0); GET_BOOL(g_config.lock_surfaces, "lock_surfaces", FALSE); @@ -314,7 +313,6 @@ static void cfg_create_ini() "game_handles_close=false\n" "fix_not_responding=false\n" "no_compat_warning=false\n" - "wine_allow_resize=false\n" "guard_lines=200\n" "max_resolutions=0\n" "lock_surfaces=false\n" diff --git a/src/dd.c b/src/dd.c index b6c3382..94b7adf 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1093,12 +1093,12 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl real_SetWindowLongA(g_ddraw.hwnd, GWL_EXSTYLE, exstyle & ~(WS_EX_CLIENTEDGE)); } - if (!g_config.wine_allow_resize && IsWine()) + if (IsLinux()) { real_SetWindowLongA( g_ddraw.hwnd, GWL_STYLE, - (real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE) | WS_MINIMIZEBOX) & ~(WS_MAXIMIZEBOX | WS_THICKFRAME)); + (real_GetWindowLongA(g_ddraw.hwnd, GWL_STYLE) | WS_MINIMIZEBOX) & ~(WS_MAXIMIZEBOX)); } /* center the window with correct dimensions */ diff --git a/src/wndproc.c b/src/wndproc.c index eecba37..a76e126 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -443,12 +443,23 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (wParam == SIZE_RESTORED) { + if (in_size_move && g_ddraw.render.thread && IsMacOS()) + { + EnterCriticalSection(&g_ddraw.cs); + g_ddraw.render.run = FALSE; + ReleaseSemaphore(g_ddraw.render.sem, 1, NULL); + LeaveCriticalSection(&g_ddraw.cs); + + WaitForSingleObject(g_ddraw.render.thread, INFINITE); + g_ddraw.render.thread = NULL; + } + if (in_size_move && !g_ddraw.render.thread) { g_config.window_rect.right = LOWORD(lParam); g_config.window_rect.bottom = HIWORD(lParam); } - else if (!in_size_move && g_ddraw.render.thread && !g_config.fullscreen && g_config.wine_allow_resize && IsLinux()) + else if (!in_size_move && g_ddraw.render.thread && !g_config.fullscreen && IsLinux()) { g_config.window_rect.right = LOWORD(lParam); g_config.window_rect.bottom = HIWORD(lParam);