X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fmacosx%2Fvout.m;h=aca5b877862e6543f32e949fa2d988e048807b14;hb=f48ad230e977b7f04729f6c0ecb4e44bdb7276d9;hp=de4bd86364c6bd94713ee80bf52924cf1cd42431;hpb=3ad6ea967fe0ae37c01b6883599319e7ee37c0fc;p=vlc diff --git a/modules/gui/macosx/vout.m b/modules/gui/macosx/vout.m index de4bd86364..aca5b87786 100644 --- a/modules/gui/macosx/vout.m +++ b/modules/gui/macosx/vout.m @@ -770,12 +770,22 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, - (void)enterFullscreen { + if( var_GetBool( p_real_vout, "video-on-top" ) ) + { + [o_window setLevel: NSNormalWindowLevel]; + } + [[o_view class] performSelectorOnMainThread:@selector(resetVout:) withObject:[NSValue valueWithPointer:p_vout] waitUntilDone:YES]; [[[[VLCMain sharedInstance] getControls] getFSPanel] setActive: nil]; } - (void)leaveFullscreen { + if( var_GetBool( p_real_vout, "video-on-top" ) ) + { + [o_window setLevel: NSStatusWindowLevel]; + } + [[o_view class] performSelectorOnMainThread:@selector(resetVout:) withObject:[NSValue valueWithPointer:p_vout] waitUntilDone:YES]; [[[[VLCMain sharedInstance] getControls] getFSPanel] setNonActive: nil]; } @@ -809,7 +819,6 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, [o_window setLevel: NSStatusWindowLevel]; } - [o_window setAcceptsMouseMovedEvents: TRUE]; return b_return; } @@ -874,11 +883,19 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, @implementation VLCEmbeddedVoutView +- (void)awakeFromNib +{ + o_embeddedwindow = [self window]; +} + - (id)initWithFrame: (NSRect)frameRect { - [super initWithFrame: frameRect]; - b_used = NO; - [[[VLCMain sharedInstance] getEmbeddedList] addEmbeddedVout: self]; + if(self = [super initWithFrame: frameRect]) + { + b_used = NO; + [[[VLCMain sharedInstance] getEmbeddedList] addEmbeddedVout: self]; + o_embeddedwindow = nil; /* Filled later on in -awakeFromNib */ + } return self; } @@ -886,6 +903,9 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, frame: (NSRect *)s_arg_frame showWindow: (BOOL)b_show_window { BOOL b_return; + + [NSObject cancelPreviousPerformRequestsWithTarget:o_window]; + b_return = [super setVout: p_arg_vout subView: view frame: s_arg_frame]; if( b_return ) { @@ -901,46 +921,6 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, [view setFrameSize: [self frame].size]; } - return b_return; -} - -- (BOOL)setVout: (vout_thread_t *) p_arg_vout subView: (NSView *) view - frame: (NSRect *) s_arg_frame - -{ - return [self setVout: p_arg_vout subView: view frame:s_arg_frame showWindow: YES]; -} - -- (void)setUsed: (BOOL)b_new_used -{ - b_used = b_new_used; -} - -- (BOOL)isUsed -{ - return b_used; -} - -- (void)closeVout -{ - [super closeVout]; - [o_window setAcceptsMouseMovedEvents: NO]; - [[[VLCMain sharedInstance] getEmbeddedList] releaseEmbeddedVout: self]; -} - - -@end - -@implementation VLCDetachedEmbeddedVoutView -- (void)awakeFromNib -{ - o_embeddedwindow = [self window]; -} - -- (BOOL)setVout: (vout_thread_t *) p_arg_vout subView: (NSView *) view - frame: (NSRect *) s_arg_frame -{ - BOOL b_return = [super setVout: p_arg_vout subView: view frame: s_arg_frame showWindow: NO]; /* o_window needs to point to our o_embeddedwindow, super might have set it * to the fullscreen window that o_embeddedwindow setups during fullscreen */ @@ -954,6 +934,8 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, [self updateTitle]; + [NSObject cancelPreviousPerformRequestsWithTarget:o_window]; + /* Make the window the front and key window before animating */ if ([o_window isVisible] && (![o_window isFullscreen])) [o_window makeKeyAndOrderFront: self]; @@ -968,19 +950,37 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, [o_window unlockFullscreenAnimation]; } + return b_return; } -- (void)closeVout +- (BOOL)setVout: (vout_thread_t *) p_arg_vout subView: (NSView *) view + frame: (NSRect *) s_arg_frame + { - playlist_t * p_playlist = pl_Yield( VLCIntf ); + return [self setVout: p_arg_vout subView: view frame:s_arg_frame showWindow: YES]; +} - if(!playlist_IsPlaying( p_playlist )) - [o_window performSelectorOnMainThread: @selector(orderOut:) withObject: self waitUntilDone: YES]; - - vlc_object_release( p_playlist ); +- (void)setUsed: (BOOL)b_new_used +{ + b_used = b_new_used; +} + +- (BOOL)isUsed +{ + return b_used; +} + +- (void)closeVout +{ + /* Don't close the window yet, wait a bit to see if a new input is poping up */ + /* FIXME: Probably fade the window In and Out */ + /* FIXME: fix core */ + [o_embeddedwindow performSelector:@selector(orderOut:) withObject:nil afterDelay:1.5]; [super closeVout]; + [o_window setAcceptsMouseMovedEvents: NO]; + [[[VLCMain sharedInstance] getEmbeddedList] releaseEmbeddedVout: self]; } - (void)enterFullscreen @@ -1008,7 +1008,7 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, o_view = view; s_frame = frame; - [self performSelectorOnMainThread: @selector(initReal:) + [self performSelectorOnMainThread: @selector(initMainThread:) withObject: NULL waitUntilDone: YES]; if( !b_init_ok ) @@ -1019,7 +1019,7 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, return self; } -- (id)initReal: (id) sender +- (id)initMainThread: (id) sender { NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init]; NSArray *o_screens = [NSScreen screens]; @@ -1148,11 +1148,11 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, { /* XXX waitUntilDone = NO to avoid a possible deadlock when hitting Command-Q */ - [self performSelectorOnMainThread: @selector(closeReal:) + [self performSelectorOnMainThread: @selector(closeMainThread:) withObject: NULL waitUntilDone: NO]; } -- (id)closeReal:(id)sender +- (id)closeMainThread:(id)sender { if( b_black == true ) { @@ -1198,8 +1198,7 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable, - (BOOL)windowShouldClose:(id)sender { - playlist_t * p_playlist = vlc_object_find( p_vout, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); + playlist_t * p_playlist = pl_Yield( p_vout ); if( p_playlist == NULL ) { return NO;