diff --git a/inc/dd.h b/inc/dd.h index a1778c8..01a0826 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -145,6 +145,7 @@ typedef struct CNCDDRAW BOOL nonexclusive; int fixchilds; BOOL fixwndprochook; + BOOL fixnotresponding; BOOL flipclear; BOOL locktopleft; BOOL lock_surfaces; diff --git a/src/config.c b/src/config.c index 334deee..b020396 100644 --- a/src/config.c +++ b/src/config.c @@ -40,6 +40,7 @@ void cfg_load() g_ddraw->fixwndprochook = cfg_get_bool("fixwndprochook", FALSE); g_ddraw->flipclear = cfg_get_bool("flipclear", FALSE); g_ddraw->novidmem = cfg_get_bool("novidmem", FALSE); + g_ddraw->fixnotresponding = cfg_get_bool("fixnotresponding", FALSE); g_ddraw->locktopleft = cfg_get_bool("locktopleft", FALSE); g_ddraw->lock_surfaces = cfg_get_bool("lock_surfaces", FALSE); g_ddraw->releasealt = cfg_get_bool("releasealt", FALSE); @@ -365,6 +366,7 @@ static void cfg_create_ini() "fixpitch=true\n" "fixwndprochook=false\n" "novidmem=false\n" + "fixnotresponding=false\n" "locktopleft=false\n" "lock_surfaces=false\n" "releasealt=false\n" @@ -735,6 +737,7 @@ static void cfg_create_ini() "; Economic War\n" "[EcoW]\n" "maxgameticks=60\n" + "fixnotresponding=true\n" "\n" "; Fallout\n" "[falloutw]\n" diff --git a/src/dd.c b/src/dd.c index 87a9558..81e7bac 100644 --- a/src/dd.c +++ b/src/dd.c @@ -711,12 +711,8 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl if (g_ddraw->windowed) { - /* workaround for "Not Responding" window problem in cnc games */ - if (GetCurrentThreadId() == g_ddraw->gui_thread_id) - { - MSG msg; - PeekMessage(&msg, g_ddraw->hwnd, 0, 0, PM_NOREMOVE); - } + MSG msg; /* workaround for "Not Responding" window problem in cnc games */ + PeekMessage(&msg, g_ddraw->hwnd, 0, 0, PM_NOREMOVE); if (!border) { diff --git a/src/ddsurface.c b/src/ddsurface.c index 46251e3..bd89a5c 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -940,10 +940,9 @@ HRESULT dds_Lock( dbg_dump_dds_lock_flags(dwFlags); - /* workaround for "Not Responding" window problem */ - if (g_ddraw && g_ddraw->windowed && GetCurrentThreadId() == g_ddraw->gui_thread_id) + if (g_ddraw && g_ddraw->fixnotresponding) { - MSG msg; + MSG msg; /* workaround for "Not Responding" window problem */ PeekMessage(&msg, g_ddraw->hwnd, 0, 0, PM_NOREMOVE); }