| Summary: | focus/keyboard events not generated correctly for multiple windows | ||
|---|---|---|---|
| Product: | SDL | Reporter: | Mai Lavelle <mai.lavelle> |
| Component: | events | Assignee: | Sam Lantinga <slouken> |
| Status: | RESOLVED FIXED | QA Contact: | Sam Lantinga <slouken> |
| Severity: | normal | ||
| Priority: | P2 | CC: | marack |
| Version: | HG 2.1 | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
| Attachments: | Patch to prevent redundant focus out events stealing keyboard focus when using multiple window | ||
|
Description
Mai Lavelle
2013-07-25 16:55:32 UTC
Created attachment 1399 [details]
Patch to prevent redundant focus out events stealing keyboard focus when using multiple window
Focus change events are queued and delayed (200 ticks) before they are dispatched. The problem occurs when a focus out and focus in event are received on the same tick. When these delayed events are dispatched they will be sent in the order determined by the window list rather than the order in which they are received.
The focus out dispatch is implemented by calling SDL_SetKeyboardFocus(NULL). This will remove focus from any window, regardless of whether it is the one originally targeted by the X11 event.
Since SDL_SetKeyboardFocus() will always dispatch a focus lost event as needed, the easiest solution is simply to only call SDL_SetKeyboardFocus(NULL) when SDL_GetKeyboardFocus() matches the target window.
Attached patch implements this solution.
The patch looks good, thanks! https://hg.libsdl.org/SDL/rev/0c2e2b91eeea |