1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +01:00

use WM_ACTIVATEAPP for alt+tab logic

This commit is contained in:
FunkyFr3sh 2021-05-29 15:30:32 +02:00
parent 910bade5ba
commit 21555e06f7
2 changed files with 20 additions and 17 deletions

View File

@ -59,7 +59,6 @@ void mouse_lock()
if (g_ddraw->handlemouse) if (g_ddraw->handlemouse)
{ {
SetCapture(g_ddraw->hwnd);
real_ClipCursor(&rc); real_ClipCursor(&rc);
while (real_ShowCursor(FALSE) >= 0); while (real_ShowCursor(FALSE) >= 0);
} }
@ -127,7 +126,6 @@ void mouse_unlock()
} }
real_ClipCursor(NULL); real_ClipCursor(NULL);
ReleaseCapture();
real_SetCursorPos( real_SetCursorPos(
(int)(rc.left + g_ddraw->render.viewport.x + (g_ddraw->cursor.x * g_ddraw->render.scale_w)), (int)(rc.left + g_ddraw->render.viewport.x + (g_ddraw->cursor.x * g_ddraw->render.scale_w)),

View File

@ -445,29 +445,37 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
} }
case WM_MOUSELEAVE: case WM_MOUSELEAVE:
{
mouse_unlock(); mouse_unlock();
return 0; return 0;
}
case WM_ACTIVATE: case WM_ACTIVATE:
{
if (wParam == WA_ACTIVE || wParam == WA_CLICKACTIVE) if (wParam == WA_ACTIVE || wParam == WA_CLICKACTIVE)
{
if (!g_ddraw->handlemouse)
RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);
}
//if (g_ddraw->windowed || g_ddraw->noactivateapp)
return 0;
break;
}
case WM_ACTIVATEAPP:
{
if (wParam)
{ {
if (!g_ddraw->windowed) if (!g_ddraw->windowed)
{ {
if (g_ddraw->renderer != d3d9_render_main) if (g_ddraw->renderer != d3d9_render_main)
{ {
ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN); ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN);
mouse_lock();
if (wParam == WA_ACTIVE)
{
mouse_lock();
}
} }
} }
if (!g_ddraw->handlemouse)
RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);
} }
else if (wParam == WA_INACTIVE) else
{ {
if (!g_ddraw->windowed && !g_ddraw->locked && g_ddraw->noactivateapp && !g_ddraw->devmode) if (!g_ddraw->windowed && !g_ddraw->locked && g_ddraw->noactivateapp && !g_ddraw->devmode)
return 0; return 0;
@ -477,7 +485,6 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
if (g_ddraw->wine && g_ddraw->last_set_window_pos_tick + 500 > timeGetTime()) if (g_ddraw->wine && g_ddraw->last_set_window_pos_tick + 500 > timeGetTime())
return 0; return 0;
/* minimize our window on defocus when in fullscreen */
if (!g_ddraw->windowed) if (!g_ddraw->windowed)
{ {
if (g_ddraw->renderer != d3d9_render_main) if (g_ddraw->renderer != d3d9_render_main)
@ -487,13 +494,10 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
} }
} }
} }
return 0;
case WM_ACTIVATEAPP:
/* C&C and RA stop drawing when they receive this with FALSE wParam, disable in windowed mode */
if (g_ddraw->windowed || g_ddraw->noactivateapp) if (g_ddraw->windowed || g_ddraw->noactivateapp)
{ {
// let it pass through once (tiberian sun) /* let it pass through once (tiberian sun) */
static BOOL one_time; static BOOL one_time;
if (wParam && !one_time && !g_ddraw->handlemouse && g_ddraw->noactivateapp) if (wParam && !one_time && !g_ddraw->handlemouse && g_ddraw->noactivateapp)
@ -508,6 +512,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
return 0; return 0;
} }
break; break;
}
case WM_AUTORENDERER: case WM_AUTORENDERER:
{ {
mouse_unlock(); mouse_unlock();