From e33b79f2f7d90dedae32adad27e4c452a8ec278a Mon Sep 17 00:00:00 2001 From: David Fuhrmann Date: Tue, 28 Feb 2012 15:26:07 +0100 Subject: [PATCH] macosx vout: reliably set the window level MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit setLevel: seems to be not thread-safe, therefore we set this on the main thread to ensure its functionality Signed-off-by: Felix Paul Kühne --- modules/video_output/macosx.m | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/video_output/macosx.m b/modules/video_output/macosx.m index c14017285a..91ffdfdd8c 100644 --- a/modules/video_output/macosx.m +++ b/modules/video_output/macosx.m @@ -320,11 +320,10 @@ static int Control (vout_display_t *vd, int query, va_list ap) } case VOUT_DISPLAY_CHANGE_WINDOW_STATE: { + NSAutoreleasePool * o_pool = [[NSAutoreleasePool alloc] init]; unsigned state = va_arg (ap, unsigned); - if( (state & VOUT_WINDOW_STATE_ABOVE) != 0) - [[sys->glView window] setLevel: NSStatusWindowLevel]; - else - [[sys->glView window] setLevel: NSNormalWindowLevel]; + [sys->glView performSelectorOnMainThread:@selector(setWindowLevel:) withObject:[NSNumber numberWithUnsignedInt:state] waitUntilDone:NO]; + [o_pool release]; return VLC_SUCCESS; } case VOUT_DISPLAY_CHANGE_DISPLAY_FILLED: @@ -713,4 +712,12 @@ static void OpenglSwap(vlc_gl_t *gl) { return YES; } + +- (void)setWindowLevel:(NSNumber*)state +{ + if( [state unsignedIntValue] & VOUT_WINDOW_STATE_ABOVE ) + [[self window] setLevel: NSStatusWindowLevel]; + else + [[self window] setLevel: NSNormalWindowLevel]; +} @end -- 2.39.2