From ddd68852c0eb4bb0785c68d0112ca46f55b1398b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 27 Feb 2011 21:17:06 -0800 Subject: [PATCH] Fixed minimizing fullscreen windows. Removed misleading hide/unhide Cocoa notifications. We have no way of knowing when a Cocoa window is maximized and then restored (right?) Disabled spamy mouse motion events by default. --- src/video/SDL_video.c | 50 ++++++++++++++++++------------- src/video/cocoa/SDL_cocoawindow.h | 2 -- src/video/cocoa/SDL_cocoawindow.m | 14 --------- test/common.c | 5 ++++ 4 files changed, 34 insertions(+), 37 deletions(-) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index c2a011916..88774b25b 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1018,12 +1018,12 @@ SDL_GetWindowPixelFormat(SDL_Window * window) } static void -SDL_UpdateFullscreenMode(SDL_Window * window) +SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen) { SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); SDL_Window *other; - if (FULLSCREEN_VISIBLE(window)) { + if (fullscreen) { /* Hide any other fullscreen windows */ if (display->fullscreen_window && display->fullscreen_window != window) { @@ -1032,15 +1032,24 @@ SDL_UpdateFullscreenMode(SDL_Window * window) } /* See if anything needs to be done now */ - if ((display->fullscreen_window == window) == FULLSCREEN_VISIBLE(window)) { + if ((display->fullscreen_window == window) == fullscreen) { return; } /* See if there are any fullscreen windows */ for (other = _this->windows; other; other = other->next) { - if (FULLSCREEN_VISIBLE(other) && - SDL_GetDisplayForWindow(other) == display) { + SDL_bool setDisplayMode = SDL_FALSE; + + if (other == window) { + setDisplayMode = fullscreen; + } else if (FULLSCREEN_VISIBLE(other) && + SDL_GetDisplayForWindow(other) == display) { + setDisplayMode = SDL_TRUE; + } + + if (setDisplayMode) { SDL_DisplayMode fullscreen_mode; + if (SDL_GetWindowDisplayMode(other, &fullscreen_mode) == 0) { SDL_bool resized = SDL_TRUE; @@ -1144,7 +1153,7 @@ SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags) displayIndex = SDL_GetIndexOfDisplay(display); SDL_GetDisplayBounds(displayIndex, &bounds); - if (SDL_WINDOWPOS_ISUNDEFINED(x) || SDL_WINDOWPOS_ISCENTERED(y)) { + if (SDL_WINDOWPOS_ISUNDEFINED(x) || SDL_WINDOWPOS_ISCENTERED(x)) { window->x = bounds.x + (bounds.w - w) / 2; } if (SDL_WINDOWPOS_ISUNDEFINED(y) || SDL_WINDOWPOS_ISCENTERED(y)) { @@ -1512,6 +1521,8 @@ SDL_HideWindow(SDL_Window * window) return; } + SDL_UpdateFullscreenMode(window, SDL_FALSE); + if (_this->HideWindow) { _this->HideWindow(_this, window); } @@ -1528,9 +1539,6 @@ SDL_RaiseWindow(SDL_Window * window) } if (_this->RaiseWindow) { _this->RaiseWindow(_this, window); - } else { - /* FIXME: What we really want is a way to request focus */ - SDL_SendWindowEvent(window, SDL_WINDOWEVENT_FOCUS_GAINED, 0, 0); } } @@ -1557,6 +1565,8 @@ SDL_MinimizeWindow(SDL_Window * window) return; } + SDL_UpdateFullscreenMode(window, SDL_FALSE); + if (_this->MinimizeWindow) { _this->MinimizeWindow(_this, window); } @@ -1574,7 +1584,6 @@ SDL_RestoreWindow(SDL_Window * window) if (_this->RestoreWindow) { _this->RestoreWindow(_this, window); } - SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESTORED, 0, 0); } int @@ -1582,10 +1591,7 @@ SDL_SetWindowFullscreen(SDL_Window * window, SDL_bool fullscreen) { CHECK_WINDOW_MAGIC(window, -1); - if (fullscreen) { - fullscreen = SDL_WINDOW_FULLSCREEN; - } - if ((window->flags & SDL_WINDOW_FULLSCREEN) == fullscreen) { + if (!!fullscreen == !!(window->flags & SDL_WINDOW_FULLSCREEN)) { return 0; } if (fullscreen) { @@ -1593,7 +1599,7 @@ SDL_SetWindowFullscreen(SDL_Window * window, SDL_bool fullscreen) } else { window->flags &= ~SDL_WINDOW_FULLSCREEN; } - SDL_UpdateFullscreenMode(window); + SDL_UpdateFullscreenMode(window, FULLSCREEN_VISIBLE(window)); return 0; } @@ -1682,7 +1688,7 @@ SDL_SetWindowGrab(SDL_Window * window, SDL_bool grabbed) { CHECK_WINDOW_MAGIC(window, ); - if ((!!grabbed == !!(window->flags & SDL_WINDOW_INPUT_GRABBED))) { + if (!!grabbed == !!(window->flags & SDL_WINDOW_INPUT_GRABBED)) { return; } if (grabbed) { @@ -1704,14 +1710,13 @@ SDL_GetWindowGrab(SDL_Window * window) void SDL_OnWindowShown(SDL_Window * window) { - SDL_RaiseWindow(window); - SDL_UpdateFullscreenMode(window); + SDL_OnWindowRestored(window); } void SDL_OnWindowHidden(SDL_Window * window) { - SDL_UpdateFullscreenMode(window); + SDL_UpdateFullscreenMode(window, SDL_FALSE); } void @@ -1724,14 +1729,17 @@ SDL_OnWindowResized(SDL_Window * window) void SDL_OnWindowMinimized(SDL_Window * window) { - SDL_UpdateFullscreenMode(window); + SDL_UpdateFullscreenMode(window, SDL_FALSE); } void SDL_OnWindowRestored(SDL_Window * window) { SDL_RaiseWindow(window); - SDL_UpdateFullscreenMode(window); + + if (FULLSCREEN_VISIBLE(window)) { + SDL_UpdateFullscreenMode(window, SDL_TRUE); + } } void diff --git a/src/video/cocoa/SDL_cocoawindow.h b/src/video/cocoa/SDL_cocoawindow.h index 10465037e..d2cfb8bca 100644 --- a/src/video/cocoa/SDL_cocoawindow.h +++ b/src/video/cocoa/SDL_cocoawindow.h @@ -49,8 +49,6 @@ typedef struct SDL_WindowData SDL_WindowData; -(void) windowDidDeminiaturize:(NSNotification *) aNotification; -(void) windowDidBecomeKey:(NSNotification *) aNotification; -(void) windowDidResignKey:(NSNotification *) aNotification; --(void) windowDidHide:(NSNotification *) aNotification; --(void) windowDidUnhide:(NSNotification *) aNotification; /* Window event handling */ -(void) mouseDown:(NSEvent *) theEvent; diff --git a/src/video/cocoa/SDL_cocoawindow.m b/src/video/cocoa/SDL_cocoawindow.m index ece1d5422..d77c5799a 100644 --- a/src/video/cocoa/SDL_cocoawindow.m +++ b/src/video/cocoa/SDL_cocoawindow.m @@ -63,8 +63,6 @@ - (void)listen:(SDL_WindowData *)data } else { [window setDelegate:self]; } - [center addObserver:self selector:@selector(windowDidHide:) name:NSApplicationDidHideNotification object:NSApp]; - [center addObserver:self selector:@selector(windowDidUnhide:) name:NSApplicationDidUnhideNotification object:NSApp]; [window setNextResponder:self]; [window setAcceptsMouseMovedEvents:YES]; @@ -94,8 +92,6 @@ - (void)close } else { [window setDelegate:nil]; } - [center removeObserver:self name:NSApplicationDidHideNotification object:NSApp]; - [center removeObserver:self name:NSApplicationDidUnhideNotification object:NSApp]; if ([window nextResponder] == self) { [window setNextResponder:nil]; @@ -206,16 +202,6 @@ - (void)windowDidResignKey:(NSNotification *)aNotification } } -- (void)windowDidHide:(NSNotification *)aNotification -{ - SDL_SendWindowEvent(_data->window, SDL_WINDOWEVENT_HIDDEN, 0, 0); -} - -- (void)windowDidUnhide:(NSNotification *)aNotification -{ - SDL_SendWindowEvent(_data->window, SDL_WINDOWEVENT_SHOWN, 0, 0); -} - - (void)mouseDown:(NSEvent *)theEvent { int button; diff --git a/test/common.c b/test/common.c index 41867b430..51270e5a0 100644 --- a/test/common.c +++ b/test/common.c @@ -810,6 +810,11 @@ CommonInit(CommonState * state) static void PrintEvent(SDL_Event * event) { + if (event->type == SDL_MOUSEMOTION) { + /* Mouse motion is really spammy */ + return; + } + fprintf(stderr, "SDL EVENT: "); switch (event->type) { case SDL_WINDOWEVENT: