Skip to content
Permalink
Browse files

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.
  • Loading branch information
slouken committed Jul 20, 2017
1 parent 36998b8 commit 177f19aff097ab943efd2d86353b26639444b16e
Showing with 13 additions and 0 deletions.
  1. +13 −0 src/video/x11/SDL_x11window.c
@@ -225,6 +225,19 @@ X11_GetNetWMState(_THIS, Window xwindow)
if (fullscreen == 1) {
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);
}

0 comments on commit 177f19a

Please sign in to comment.