From c77441676d1823707141fad53295cee1b38b53fb Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sat, 3 Aug 2013 02:20:00 -0400 Subject: [PATCH] Some fixes for SDL_MaximizeWindow(). Fixes Bugzilla #1441. --- src/video/SDL_video.c | 2 ++ src/video/cocoa/SDL_cocoawindow.m | 7 +++++++ src/video/x11/SDL_x11window.c | 16 +++++++--------- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index b02aad86f..a78104c54 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1756,6 +1756,8 @@ SDL_MaximizeWindow(SDL_Window * window) return; } + // !!! FIXME: should this check if the window is resizable? + if (_this->MaximizeWindow) { _this->MaximizeWindow(_this, window); } diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index ccb7d7fef..28a58e4e6 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -239,6 +239,13 @@ - (void)windowDidResize:(NSNotification *)aNotification or resizing from a corner */ SDL_SendWindowEvent(_data->window, SDL_WINDOWEVENT_MOVED, x, y); SDL_SendWindowEvent(_data->window, SDL_WINDOWEVENT_RESIZED, w, h); + + const BOOL zoomed = [_data->nswindow isZoomed]; + if (!zoomed) { + SDL_SendWindowEvent(_data->window, SDL_WINDOWEVENT_RESTORED, 0, 0); + } else if (zoomed) { + SDL_SendWindowEvent(_data->window, SDL_WINDOWEVENT_MAXIMIZED, 0, 0); + } } - (void)windowDidMiniaturize:(NSNotification *)aNotification diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c index 07a836dcf..078ca3014 100644 --- a/src/video/x11/SDL_x11window.c +++ b/src/video/x11/SDL_x11window.c @@ -878,6 +878,12 @@ SetWindowMaximized(_THIS, SDL_Window * window, SDL_bool maximized) Atom _NET_WM_STATE_MAXIMIZED_VERT = data->videodata->_NET_WM_STATE_MAXIMIZED_VERT; Atom _NET_WM_STATE_MAXIMIZED_HORZ = data->videodata->_NET_WM_STATE_MAXIMIZED_HORZ; + if (maximized) { + window->flags |= SDL_WINDOW_MAXIMIZED; + } else { + window->flags &= ~SDL_WINDOW_MAXIMIZED; + } + if (X11_IsWindowMapped(_this, window)) { XEvent e; @@ -895,15 +901,7 @@ SetWindowMaximized(_THIS, SDL_Window * window, SDL_bool maximized) XSendEvent(display, RootWindow(display, displaydata->screen), 0, SubstructureNotifyMask | SubstructureRedirectMask, &e); } else { - Uint32 flags; - - flags = window->flags; - if (maximized) { - flags |= SDL_WINDOW_MAXIMIZED; - } else { - flags &= ~SDL_WINDOW_MAXIMIZED; - } - X11_SetNetWMState(_this, data->xwindow, flags); + X11_SetNetWMState(_this, data->xwindow, window->flags); } XFlush(display); }