Module: wine Branch: master Commit: 18963963306cbb75d409189da8ec2df219850d25 URL: http://source.winehq.org/git/wine.git/?a=commit;h=18963963306cbb75d409189da8...
Author: Ken Thomases ken@codeweavers.com Date: Tue Jan 14 01:24:57 2014 -0600
winemac: When clearing the OpenGL context, disassociate it from its view.
---
dlls/winemac.drv/cocoa_opengl.m | 41 +++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_opengl.m b/dlls/winemac.drv/cocoa_opengl.m index f546be5..0b67ed1 100644 --- a/dlls/winemac.drv/cocoa_opengl.m +++ b/dlls/winemac.drv/cocoa_opengl.m @@ -90,6 +90,23 @@ } }
+ - (void) removeFromViews:(BOOL)removeViews + { + if ([self view]) + { + macdrv_remove_view_opengl_context((macdrv_view)[self view], (macdrv_opengl_context)self); + if (removeViews) + [self clearDrawableLeavingSurfaceOnScreen]; + } + if ([self latentView]) + { + macdrv_remove_view_opengl_context((macdrv_view)[self latentView], (macdrv_opengl_context)self); + if (removeViews) + [self setLatentView:nil]; + } + needsUpdate = FALSE; + } + @end
@@ -122,11 +139,7 @@ void macdrv_dispose_opengl_context(macdrv_opengl_context c) NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; WineOpenGLContext *context = (WineOpenGLContext*)c;
- if ([context view]) - macdrv_remove_view_opengl_context((macdrv_view)[context view], c); - if ([context latentView]) - macdrv_remove_view_opengl_context((macdrv_view)[context latentView], c); - [context clearDrawableLeavingSurfaceOnScreen]; + [context removeFromViews:YES]; [context release];
[pool release]; @@ -143,11 +156,7 @@ void macdrv_make_context_current(macdrv_opengl_context c, macdrv_view v)
if (context) { - if ([context view]) - macdrv_remove_view_opengl_context((macdrv_view)[context view], c); - if ([context latentView]) - macdrv_remove_view_opengl_context((macdrv_view)[context latentView], c); - context.needsUpdate = FALSE; + [context removeFromViews:NO]; if (view) { macdrv_add_view_opengl_context(v, c); @@ -169,11 +178,19 @@ void macdrv_make_context_current(macdrv_opengl_context c, macdrv_view v) else { [WineOpenGLContext clearCurrentContext]; - [context clearDrawableLeavingSurfaceOnScreen]; + [context removeFromViews:YES]; } } else - [WineOpenGLContext clearCurrentContext]; + { + WineOpenGLContext* currentContext = (WineOpenGLContext*)[WineOpenGLContext currentContext]; + + if ([currentContext isKindOfClass:[WineOpenGLContext class]]) + { + [WineOpenGLContext clearCurrentContext]; + [currentContext removeFromViews:YES]; + } + }
[pool release]; }