diff --git a/src/xrEngine/Device_create.cpp b/src/xrEngine/Device_create.cpp index 9738b1f02bf..a4ed8923f4c 100644 --- a/src/xrEngine/Device_create.cpp +++ b/src/xrEngine/Device_create.cpp @@ -130,6 +130,7 @@ void CRenderDevice::UpdateWindowProps(bool windowed) SDL_SetWindowGrab(m_sdlWnd, SDL_TRUE); UpdateWindowRect(); + SDL_FlushEvents(SDL_WINDOWEVENT, SDL_SYSWMEVENT); } diff --git a/src/xrEngine/device.cpp b/src/xrEngine/device.cpp index 36390e032a5..765115136be 100644 --- a/src/xrEngine/device.cpp +++ b/src/xrEngine/device.cpp @@ -350,21 +350,22 @@ void CRenderDevice::message_loop() case SDL_WINDOWEVENT_MOVED: UpdateWindowRect(); break; - /*case SDL_WINDOWEVENT_RESIZED: - string32 buff; - xr_sprintf(buff, sizeof(buff), "vid_mode %dx%d", event.window.data1, event.window.data2); - Console->Execute(buff); - [[fallthrough]];*/ - - case SDL_WINDOWEVENT_EXPOSED: - Reset(true); - break; case SDL_WINDOWEVENT_RESIZED: case SDL_WINDOWEVENT_SIZE_CHANGED: - UpdateWindowRect(); - OnWM_Activate(1, event.window.data2); + { + if (!psDeviceFlags.is(rsFullscreen)) + { + string32 buff; + xr_sprintf(buff, sizeof(buff), "vid_mode %dx%d", event.window.data1, event.window.data2); + Console->Execute(buff); + Reset(); + } + else + UpdateWindowRect(); + break; + } case SDL_WINDOWEVENT_SHOWN: case SDL_WINDOWEVENT_ENTER: @@ -389,6 +390,7 @@ void CRenderDevice::message_loop() } on_idle(); + SDL_PumpEvents(); } } @@ -416,6 +418,7 @@ void CRenderDevice::Run() seqAppStart.Process(); GEnv.Render->ClearTarget(); splash::hide(); + SDL_FlushEvents(SDL_WINDOWEVENT, SDL_SYSWMEVENT); SDL_ShowWindow(m_sdlWnd); SDL_RaiseWindow(m_sdlWnd); pInput->ClipCursor(true); diff --git a/src/xrEngine/xr_input.cpp b/src/xrEngine/xr_input.cpp index a075aab2cc0..382e0727398 100644 --- a/src/xrEngine/xr_input.cpp +++ b/src/xrEngine/xr_input.cpp @@ -247,10 +247,8 @@ void CInput::OnFrame(void) stats.FrameTime.Begin(); dwCurTime = RDEVICE.TimerAsync_MMT(); - while (SDL_PollEvent(&event)) + while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_KEYDOWN, SDL_MOUSEWHEEL)) { - BOOL b_break_cycle = false; - switch (event.type) { case SDL_KEYDOWN: { @@ -310,16 +308,7 @@ void CInput::OnFrame(void) cbStack.back()->IR_OnMouseWheel(event.wheel.y); } break; - case SDL_QUIT: // go to outside event loop - event.type = SDL_QUIT; - SDL_PushEvent(&event); - b_break_cycle = TRUE; - break; - default: break; } - - if (b_break_cycle) - break; } #ifndef _EDITOR