Fix up some retain/release issues with UIScreenMode objects.
Fixes Bugzilla #1191. This patch is based on work done by Vittorio Giovara.
This commit is contained in:
parent
3f0781af54
commit
4ff67de178
2 changed files with 14 additions and 7 deletions
|
@ -212,7 +212,8 @@ UIKit_AddDisplay(UIScreen *uiscreen, UIScreenMode *uimode, int w, int h)
|
||||||
mode.h = h;
|
mode.h = h;
|
||||||
mode.refresh_rate = 0;
|
mode.refresh_rate = 0;
|
||||||
|
|
||||||
[uimode retain];
|
[uimode retain]; // once for the desktop_mode
|
||||||
|
[uimode retain]; // once for the current_mode
|
||||||
mode.driverdata = uimode;
|
mode.driverdata = uimode;
|
||||||
|
|
||||||
SDL_zero(display);
|
SDL_zero(display);
|
||||||
|
@ -286,13 +287,14 @@ UIKit_VideoQuit(_THIS)
|
||||||
UIScreen *uiscreen = (UIScreen *) display->driverdata;
|
UIScreen *uiscreen = (UIScreen *) display->driverdata;
|
||||||
[uiscreen release];
|
[uiscreen release];
|
||||||
display->driverdata = NULL;
|
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++) {
|
for (j = 0; j < display->num_display_modes; j++) {
|
||||||
SDL_DisplayMode *mode = &display->display_modes[j];
|
SDL_DisplayMode *mode = &display->display_modes[j];
|
||||||
UIScreenMode *uimode = (UIScreenMode *) mode->driverdata;
|
[((UIScreenMode *) mode->driverdata) release];
|
||||||
if (uimode) {
|
mode->driverdata = NULL;
|
||||||
[uimode release];
|
|
||||||
mode->driverdata = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,8 +151,13 @@ UIKit_CreateWindow(_THIS, SDL_Window *window)
|
||||||
if (bestmode) {
|
if (bestmode) {
|
||||||
UIScreenMode *uimode = (UIScreenMode *) bestmode->driverdata;
|
UIScreenMode *uimode = (UIScreenMode *) bestmode->driverdata;
|
||||||
[uiscreen setCurrentMode:uimode];
|
[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;
|
display->current_mode = *bestmode;
|
||||||
|
[((UIScreenMode *) display->current_mode.driverdata) retain];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue