diff --git a/src/video/uikit/SDL_uikitvideo.m b/src/video/uikit/SDL_uikitvideo.m index 4b9f24071..2678a37aa 100644 --- a/src/video/uikit/SDL_uikitvideo.m +++ b/src/video/uikit/SDL_uikitvideo.m @@ -212,7 +212,8 @@ UIKit_AddDisplay(UIScreen *uiscreen, UIScreenMode *uimode, int w, int h) mode.h = h; mode.refresh_rate = 0; - [uimode retain]; + [uimode retain]; // once for the desktop_mode + [uimode retain]; // once for the current_mode mode.driverdata = uimode; SDL_zero(display); @@ -286,13 +287,14 @@ UIKit_VideoQuit(_THIS) UIScreen *uiscreen = (UIScreen *) display->driverdata; [uiscreen release]; display->driverdata = NULL; + [((UIScreenMode *) display->desktop_mode.driverdata) release]; + display->desktop_mode.driverdata = NULL; + [((UIScreenMode *) display->current_mode.driverdata) release]; + display->current_mode.driverdata = NULL; for (j = 0; j < display->num_display_modes; j++) { SDL_DisplayMode *mode = &display->display_modes[j]; - UIScreenMode *uimode = (UIScreenMode *) mode->driverdata; - if (uimode) { - [uimode release]; - mode->driverdata = NULL; - } + [((UIScreenMode *) mode->driverdata) release]; + mode->driverdata = NULL; } } } diff --git a/src/video/uikit/SDL_uikitwindow.m b/src/video/uikit/SDL_uikitwindow.m index 1745f0033..fc35762a4 100644 --- a/src/video/uikit/SDL_uikitwindow.m +++ b/src/video/uikit/SDL_uikitwindow.m @@ -151,8 +151,13 @@ UIKit_CreateWindow(_THIS, SDL_Window *window) if (bestmode) { UIScreenMode *uimode = (UIScreenMode *) bestmode->driverdata; [uiscreen setCurrentMode:uimode]; - display->desktop_mode = *bestmode; + + // desktop_mode doesn't change here (the higher level will + // use it to set all the screens back to their defaults + // upon window destruction, SDL_Quit(), etc. + [((UIScreenMode *) display->current_mode.driverdata) release]; display->current_mode = *bestmode; + [((UIScreenMode *) display->current_mode.driverdata) retain]; } } }