mirror of
https://github.com/Ryujinx/SDL.git
synced 2025-03-23 21:55:12 +00:00
Fix race condition that can lead to ENTER/LEAVE window events never firing
On windows, when toggling the state of RelativeMode rapidly, there is a high chance that SDL_WINDOWEVENT_ENTER / SDL_WINDOWEVENT_LEAVE events will stop firing indefinitely. This aims to resolve that shortcoming by ensuring mouse focus state is correctly updated via WM_MOUSELEAVE events arriving via the windows event hook.
This commit is contained in:
parent
4cee1012c6
commit
89b6209313
|
@ -783,8 +783,16 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SDL_SetMouseFocus(NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* When WM_MOUSELEAVE is fired we can be assured that the cursor has left the window.
|
||||||
|
Regardless of relative mode, it is important that mouse focus is reset as there is a potential
|
||||||
|
race condition when in the process of leaving/entering relative mode, resulting in focus never
|
||||||
|
being lost. This then causes a cascading failure where SDL_WINDOWEVENT_ENTER / SDL_WINDOWEVENT_LEAVE
|
||||||
|
can stop firing permanently, due to the focus being in the wrong state and TrackMouseEvent never
|
||||||
|
resubscribing. */
|
||||||
|
SDL_SetMouseFocus(NULL);
|
||||||
|
|
||||||
returnCode = 0;
|
returnCode = 0;
|
||||||
break;
|
break;
|
||||||
#endif /* WM_MOUSELEAVE */
|
#endif /* WM_MOUSELEAVE */
|
||||||
|
|
Loading…
Reference in a new issue