From 1443b13432d8dab83a4afb6f7a8048c46eb5e242 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 5 Nov 2023 02:17:39 +0100 Subject: [PATCH] unlock cursor on dialog boxes in windowed mode --- src/utils.c | 2 +- src/wndproc.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/utils.c b/src/utils.c index 986d123..8e62c26 100644 --- a/src/utils.c +++ b/src/utils.c @@ -549,7 +549,7 @@ BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam) char class_name[MAX_PATH] = { 0 }; GetClassNameA(hwnd, class_name, sizeof(class_name) - 1); - //TRACE_EXT(" AVIWINDOW class=%s\n", class_name); + //TRACE(" AVIWINDOW class=%s\n", class_name); if (g_config.fixchilds == FIX_CHILDS_DETECT_HIDE || strcmp(class_name, "VideoRenderer") == 0 || diff --git a/src/wndproc.c b/src/wndproc.c index 930a5c1..445d271 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -560,6 +560,43 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN); } + if (wParam == WA_INACTIVE) + { + if (g_config.windowed && !g_config.fullscreen && lParam && GetParent((HWND)lParam) == hWnd) + { + char class_name[MAX_PATH] = { 0 }; + GetClassNameA((HWND)lParam, class_name, sizeof(class_name) - 1); + + if (strcmp(class_name, "#32770") == 0) // dialog box + { + mouse_unlock(); + + /* + // Center to main window + RECT rc_main = { 0 }; + RECT rc_dialog = { 0 }; + RECT rc = { 0 }; + + real_GetWindowRect(hWnd, &rc_main); + real_GetWindowRect((HWND)lParam, &rc_dialog); + CopyRect(&rc, &rc_main); + + OffsetRect(&rc_dialog, -rc_dialog.left, -rc_dialog.top); + OffsetRect(&rc, -rc.left, -rc.top); + OffsetRect(&rc, -rc_dialog.right, -rc_dialog.bottom); + + real_SetWindowPos( + (HWND)lParam, + HWND_TOP, + rc_main.left + (rc.right / 2), + rc_main.top + (rc.bottom / 2), + 0, 0, + SWP_NOSIZE); + */ + } + } + } + //if (g_ddraw->windowed || g_ddraw->noactivateapp) if (!g_config.allow_wmactivate)