From 4d7fc88d379471a787d4344498dc91624eec8acc Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Mon, 16 Oct 2023 02:08:38 +0200 Subject: [PATCH] block all keys except Esc while a dvd video is playing --- inc/dd.h | 1 + src/render_d3d9.c | 2 +- src/render_gdi.c | 2 +- src/render_ogl.c | 2 +- src/utils.c | 2 ++ src/wndproc.c | 12 ++++++++++++ 6 files changed, 18 insertions(+), 3 deletions(-) diff --git a/inc/dd.h b/inc/dd.h index 1d0aa8f..042a258 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -136,6 +136,7 @@ typedef struct CNCDDRAW void* last_freed_palette; /* Dungeon Keeper hack */ void* last_freed_surface; /* Nox hack */ BOOL child_window_exists; + BOOL video_window_exists; BOOL got_child_windows; DWORD last_set_window_pos_tick; /* WINE hack */ SPEEDLIMITER ticks_limiter; diff --git a/src/render_d3d9.c b/src/render_d3d9.c index 66511ad..0934807 100644 --- a/src/render_d3d9.c +++ b/src/render_d3d9.c @@ -540,7 +540,7 @@ DWORD WINAPI d3d9_render_main(void) if (g_config.fixchilds) { - g_ddraw->child_window_exists = FALSE; + g_ddraw->child_window_exists = g_ddraw->video_window_exists = FALSE; EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary); if (g_ddraw->render.width != g_ddraw->width || g_ddraw->render.height != g_ddraw->height) diff --git a/src/render_gdi.c b/src/render_gdi.c index c3f339f..9d14d26 100644 --- a/src/render_gdi.c +++ b/src/render_gdi.c @@ -83,7 +83,7 @@ DWORD WINAPI gdi_render_main(void) if (g_config.fixchilds) { - g_ddraw->child_window_exists = FALSE; + g_ddraw->child_window_exists = g_ddraw->video_window_exists = FALSE; EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary); } diff --git a/src/render_ogl.c b/src/render_ogl.c index cc87e92..27420b9 100644 --- a/src/render_ogl.c +++ b/src/render_ogl.c @@ -769,7 +769,7 @@ static void ogl_render() if (g_config.fixchilds) { - g_ddraw->child_window_exists = FALSE; + g_ddraw->child_window_exists = g_ddraw->video_window_exists = FALSE; EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary); if (g_ddraw->render.width != g_ddraw->width || g_ddraw->render.height != g_ddraw->height) diff --git a/src/utils.c b/src/utils.c index af11859..a9fee1b 100644 --- a/src/utils.c +++ b/src/utils.c @@ -476,6 +476,8 @@ BOOL CALLBACK util_enum_child_proc(HWND hwnd, LPARAM lparam) strcmp(class_name, "Afx:400000:3") == 0 || strcmp(class_name, "MCIWndClass") == 0) { + g_ddraw->video_window_exists = TRUE; + LONG style = real_GetWindowLongA(hwnd, GWL_EXSTYLE); if (!(style & WS_EX_TRANSPARENT)) diff --git a/src/wndproc.c b/src/wndproc.c index 961f33d..366b8f3 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -709,6 +709,12 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } case WM_KEYDOWN: { + if (g_ddraw->video_window_exists) + { + if (wParam != VK_ESCAPE) + return 0; + } + if (g_config.hotkeys.unlock_cursor1 && (wParam == VK_CONTROL || wParam == g_config.hotkeys.unlock_cursor1)) { @@ -733,6 +739,12 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } case WM_KEYUP: { + if (g_ddraw->video_window_exists) + { + if (wParam != VK_ESCAPE) + return 0; + } + if (g_config.hotkeys.screenshot && wParam == g_config.hotkeys.screenshot) ss_take_screenshot(g_ddraw->primary);