X11: Add events related to maximizing a window (thanks, Andrei and Gergely!). Fixes Bugzilla #1447.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c
index c99b197..02dc8a9 100644
--- a/src/video/x11/SDL_x11events.c
+++ b/src/video/x11/SDL_x11events.c
@@ -1108,15 +1108,25 @@ X11_DispatchEvent(_THIS)
without ever mapping / unmapping them, so we handle that here,
because they use the NETWM protocol to notify us of changes.
*/
- Uint32 flags = X11_GetNetWMState(_this, xevent.xproperty.window);
- if ((flags^data->window->flags) & SDL_WINDOW_HIDDEN ||
- (flags^data->window->flags) & SDL_WINDOW_FULLSCREEN ) {
- if (flags & SDL_WINDOW_HIDDEN) {
- X11_DispatchUnmapNotify(data);
- } else {
- X11_DispatchMapNotify(data);
+ const Uint32 flags = X11_GetNetWMState(_this, xevent.xproperty.window);
+ const Uint32 changed = flags ^ data->window->flags;
+
+ if ((changed & SDL_WINDOW_HIDDEN) || (changed & SDL_WINDOW_FULLSCREEN)) {
+ if (flags & SDL_WINDOW_HIDDEN) {
+ X11_DispatchUnmapNotify(data);
+ } else {
+ X11_DispatchMapNotify(data);
}
}
+
+ if (changed & SDL_WINDOW_MAXIMIZED) {
+ if (flags & SDL_WINDOW_MAXIMIZED) {
+ SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_MAXIMIZED, 0, 0);
+ } else {
+ SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_RESTORED, 0, 0);
+ }
+ }
+
}
}
break;