diff --git a/ddraw.rc b/ddraw.rc index 4af3f0c..22a7c86 100644 --- a/ddraw.rc +++ b/ddraw.rc @@ -4,7 +4,7 @@ #define VERSION_MAJOR 1 #define VERSION_MINOR 3 #define VERSION_BUILD 4 -#define VERSION_REVISION 3 +#define VERSION_REVISION 4 #define VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD, VERSION_REVISION #define VERSION_STRING ver_str(VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD, VERSION_REVISION) diff --git a/inc/main.h b/inc/main.h index 19b8e5f..a5d81a1 100644 --- a/inc/main.h +++ b/inc/main.h @@ -28,11 +28,14 @@ #define WM_WINEFULLSCREEN WM_USER+112 #define WM_D3D9DEVICELOST WM_USER+113 +#define IDT_TIMER_LEAVE_BNET 541287654 + DEFINE_GUID(IID_IMediaStream, 0xb502d1bd, 0x9a57, 0x11d0, 0x8f, 0xde, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d); DEFINE_GUID(IID_IAMMediaStream, 0xbebe595d, 0x9a6f, 0x11d0, 0x8f, 0xde, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d); extern BOOL ShowDriverWarning; extern RECT WindowRect; +extern int WindowState; extern BOOL ChildWindowExists; BOOL detect_cutscene(); diff --git a/src/main.c b/src/main.c index 23a251d..bbbeb3d 100644 --- a/src/main.c +++ b/src/main.c @@ -1053,6 +1053,30 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } return 0; } + case WM_TIMER: + { + switch (wParam) + { + case IDT_TIMER_LEAVE_BNET: + { + KillTimer(ddraw->hWnd, IDT_TIMER_LEAVE_BNET); + + if (!ddraw->windowed) + ddraw->bnetWasFullscreen = FALSE; + + if (!ddraw->bnetActive && ddraw->bnetWasFullscreen) + { + int ws = WindowState; + ToggleFullscreen(); + WindowState = ws; + ddraw->bnetWasFullscreen = FALSE; + } + + return 0; + } + } + break; + } case WM_WINDOWPOSCHANGED: { WINDOWPOS *pos = (WINDOWPOS *)lParam; diff --git a/src/mouse.c b/src/mouse.c index 4d00de1..136b458 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -437,8 +437,7 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd) if (ddraw->windowed && ddraw->bnetWasFullscreen) { - ToggleFullscreen(); - ddraw->bnetWasFullscreen = FALSE; + SetTimer(ddraw->hWnd, IDT_TIMER_LEAVE_BNET, 1000, (TIMERPROC)NULL); } } } @@ -456,7 +455,9 @@ HWND WINAPI fake_CreateWindowExA( { if (!ddraw->windowed && !ddraw->bnetWasFullscreen) { + int ws = WindowState; ToggleFullscreen(); + WindowState = ws; ddraw->bnetWasFullscreen = TRUE; }