diff --git a/src/video/uikit/SDL_uikitvideo.m b/src/video/uikit/SDL_uikitvideo.m --- a/src/video/uikit/SDL_uikitvideo.m +++ b/src/video/uikit/SDL_uikitvideo.m @@ -212,7 +212,8 @@ 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 @@ 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 --- a/src/video/uikit/SDL_uikitwindow.m +++ b/src/video/uikit/SDL_uikitwindow.m @@ -151,8 +151,15 @@ if (bestmode) { UIScreenMode *uimode = (UIScreenMode *) bestmode->driverdata; [uiscreen setCurrentMode:uimode]; + + // !!! FIXME: should desktop_mode change here? + [((UIScreenMode *) display->desktop_mode.driverdata) release]; display->desktop_mode = *bestmode; + [((UIScreenMode *) display->desktop_mode.driverdata) retain]; + + [((UIScreenMode *) display->current_mode.driverdata) release]; display->current_mode = *bestmode; + [((UIScreenMode *) display->current_mode.driverdata) retain]; } } }