mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-25 09:17:12 +01:00
Fixed bug 3410 - SDL_WINDOW_HIDDEN flag is inaccurate.
Jason Wyatt After hiding the window, SDL_WINDOW_HIDDEN/SDL_WINDOW_SHOWN flags on a window are correctly updated. However on the next SDL_PumpEvents, they are set incorrectly. This appears to be because X11_GetNetWMState does not check whether the _NET_WM_STATE property exists (it shouldn't on unmapped windows, see https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html#idm140130317598336). This results in an empty list of atoms for the state, which would imply that the window is not hidden. (Seen on Fedora 24, Gnome) -- Dan Ginsburg More details on my proposed patch: I am on Kubuntu 16.04.2. I ran into this same bug, but with Jason's patch I found that actualType != None was true so the SDL_WINDOW_HIDDEN would still not be set. My fix instead is to explicitly check for whether the window is unmapped rather than relying on the returned values in XGetWindowProperty.
This commit is contained in:
parent
36998b823e
commit
177f19aff0
@ -225,6 +225,19 @@ X11_GetNetWMState(_THIS, Window xwindow)
|
|||||||
if (fullscreen == 1) {
|
if (fullscreen == 1) {
|
||||||
flags |= SDL_WINDOW_FULLSCREEN;
|
flags |= SDL_WINDOW_FULLSCREEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the window is unmapped, numItems will be zero and _NET_WM_STATE_HIDDEN
|
||||||
|
* will not be set. Do an additional check to see if the window is unmapped
|
||||||
|
* and mark it as SDL_WINDOW_HIDDEN if it is.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
XWindowAttributes attr;
|
||||||
|
SDL_memset(&attr,0,sizeof(attr));
|
||||||
|
X11_XGetWindowAttributes(videodata->display, xwindow, &attr);
|
||||||
|
if (attr.map_state == IsUnmapped) {
|
||||||
|
flags |= SDL_WINDOW_HIDDEN;
|
||||||
|
}
|
||||||
|
}
|
||||||
X11_XFree(propertyValue);
|
X11_XFree(propertyValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user