only lock cursor in borderless if game window is the foreground window

This commit is contained in:
FunkyFr3sh 2022-09-20 08:59:36 +02:00
parent c6701a8cd6
commit 1b791fb2cb
7 changed files with 27 additions and 24 deletions

View file

@ -105,7 +105,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
case HTTOPRIGHT:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
case HTCLIENT:
if (!g_ddraw->locked && !g_ddraw->devmode)
if (!g_mouse_locked && !g_ddraw->devmode)
{
real_SetCursor(LoadCursor(NULL, IDC_ARROW));
return TRUE;
@ -476,7 +476,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
case WM_WINDOWPOSCHANGING:
{
/* workaround for a bug where sometimes a background window steals the focus */
if (g_ddraw->locked)
if (g_mouse_locked)
{
WINDOWPOS* pos = (WINDOWPOS*)lParam;
@ -486,8 +486,8 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
if (GetForegroundWindow() == g_ddraw->hwnd)
mouse_lock();
}
}
}
break;
}
case WM_MOUSELEAVE:
@ -523,14 +523,14 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
mouse_lock();
}
}
else if (g_ddraw->fullscreen)
else if (g_ddraw->fullscreen && GetForegroundWindow() == g_ddraw->hwnd)
{
mouse_lock();
}
}
else
{
if (!g_ddraw->windowed && !g_ddraw->locked && g_ddraw->noactivateapp && !g_ddraw->devmode)
if (!g_ddraw->windowed && !g_mouse_locked && g_ddraw->noactivateapp && !g_ddraw->devmode)
return 0;
mouse_unlock();
@ -677,7 +677,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
case WM_RBUTTONUP:
case WM_MBUTTONUP:
{
if (!g_ddraw->devmode && !g_ddraw->locked)
if (!g_ddraw->devmode && !g_mouse_locked)
{
int x = GET_X_LPARAM(lParam);
int y = GET_Y_LPARAM(lParam);
@ -718,7 +718,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
case WM_MBUTTONDOWN:
case WM_MOUSEMOVE:
{
if (!g_ddraw->devmode && !g_ddraw->locked)
if (!g_ddraw->devmode && !g_mouse_locked)
{
return 0;
}
@ -765,7 +765,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
case WM_RBUTTONDOWN:
case WM_XBUTTONDOWN:
{
if (!g_ddraw->devmode && !g_ddraw->locked)
if (!g_ddraw->devmode && !g_mouse_locked)
{
int x = (DWORD)((GET_X_LPARAM(lParam) - g_ddraw->render.viewport.x) * g_ddraw->render.unscale_w);
int y = (DWORD)((GET_Y_LPARAM(lParam) - g_ddraw->render.viewport.y) * g_ddraw->render.unscale_h);