]> git.sesse.net Git - vlc/commitdiff
macosx: move fullscreen logic to VLCVoutController and remove now unneeded helper...
authorDavid Fuhrmann <david.fuhrmann@googlemail.com>
Fri, 15 Feb 2013 19:19:08 +0000 (20:19 +0100)
committerDavid Fuhrmann <david.fuhrmann@googlemail.com>
Fri, 15 Feb 2013 19:22:39 +0000 (20:22 +0100)
modules/gui/macosx/CoreInteraction.m
modules/gui/macosx/VLCVoutWindowController.h
modules/gui/macosx/VLCVoutWindowController.m
modules/gui/macosx/intf.h
modules/gui/macosx/intf.m

index d5d9abbf8d9d6a0029f3869eb39fa01d3ae93d04..9dc4c79ce1daeabd7f790012891d310ca0a62c99 100644 (file)
@@ -622,7 +622,7 @@ static VLCCoreInteraction *_o_sharedInstance = nil;
         vlc_object_release(p_vout);
     } else { // e.g. lion fullscreen toggle
         BOOL b_fs = var_ToggleBool(pl_Get(p_intf), "fullscreen");
-        [[VLCMain sharedInstance] setFullscreen:b_fs forWindow:nil];
+        [[[VLCMain sharedInstance] voutController] setFullscreen:b_fs forWindow:nil];
     }
 }
 
index 3071028d5a54b057a048b051158a90b9999fe997..c2caab91054d37e2e06636d018d0e7c3204c2f28 100644 (file)
 
 - (VLCVoutView *)setupVoutForWindow:(vout_window_t *)p_wnd withProposedVideoViewPosition:(NSRect)videoViewPosition;
 - (void)removeVoutforDisplay:(NSValue *)o_key;
+- (void)setNativeVideoSize:(NSSize)size forWindow:(vout_window_t *)p_wnd;
+- (void)setWindowLevel:(NSInteger)i_level forWindow:(vout_window_t *)p_wnd;
+- (void)setFullscreen:(int)i_full forWindow:(vout_window_t *)p_wnd;
 
 - (void)updateWindowsControlsBarWithSelector:(SEL)aSel;
-- (VLCVideoWindowCommon *)getWindow:(vout_window_t *)p_wnd;
 - (void)updateWindowsUsingBlock:(void (^)(VLCVideoWindowCommon *o_window))windowUpdater;
 
-- (void)updateWindow:(vout_window_t *)p_wnd withSelector:(SEL)aSel;
-
-- (void)setNativeVideoSize:(NSSize)size forWindow:(vout_window_t *)p_wnd;
-- (void)setWindowLevel:(NSInteger)i_level forWindow:(vout_window_t *)p_wnd;
-
 - (void)updateWindowLevelForHelperWindows:(NSInteger)i_level;
 
 @end
index 713b30924654fbe7feefe80be2d6710dcc3897ae..b3e33bb0446bc5daeed26ccf148dff89c77f5443 100644 (file)
@@ -53,6 +53,8 @@
     [super dealloc];
 }
 
+#pragma mark -
+#pragma mark Methods for vout provider
 
 - (VLCVoutView *)setupVoutForWindow:(vout_window_t *)p_wnd withProposedVideoViewPosition:(NSRect)videoViewPosition
 {
         [[VLCMain sharedInstance] setActiveVideoPlayback:NO];
 }
 
-- (void)updateWindowsControlsBarWithSelector:(SEL)aSel
-{
-    [o_vout_dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
-        if ([obj respondsToSelector:@selector(controlsBar)]) {
-            id o_controlsBar = [obj controlsBar];
-            if (o_controlsBar)
-                [o_controlsBar performSelector:aSel];
-        }
-    }];
-}
-
-- (void)updateWindow:(vout_window_t *)p_wnd withSelector:(SEL)aSel;
-{
-    VLCVideoWindowCommon *o_window = [o_vout_dict objectForKey:[NSValue valueWithPointer:p_wnd]];
-    if (!o_window) {
-        msg_Err(VLCIntf, "Cannot call selector for nonexisting window");
-        return;
-    }
-
-    [o_window performSelector:aSel];
-}
-
-- (VLCVideoWindowCommon *)getWindow:(vout_window_t *)p_wnd
-{
-    VLCVideoWindowCommon *o_window = [o_vout_dict objectForKey:[NSValue valueWithPointer:p_wnd]];
-    assert(o_window);
-    return o_window;
-
-}
-
-- (void)updateWindowsUsingBlock:(void (^)(VLCVideoWindowCommon *o_window))windowUpdater
-{
-    [o_vout_dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
-        if ([obj isKindOfClass: [NSWindow class]])
-            windowUpdater(obj);
-    }];
-}
 
 - (void)setNativeVideoSize:(NSSize)size forWindow:(vout_window_t *)p_wnd
 {
     [o_window setWindowLevel:i_level];
 }
 
+
+- (void)setFullscreen:(int)i_full forWindow:(vout_window_t *)p_wnd
+{
+    intf_thread_t *p_intf = VLCIntf;
+    BOOL b_nativeFullscreenMode = [[VLCMain sharedInstance] nativeFullscreenMode];
+    
+    if (!p_intf || (!b_nativeFullscreenMode && !p_wnd))
+        return;
+    playlist_t *p_playlist = pl_Get(p_intf);
+    BOOL b_fullscreen = i_full;
+
+    if (!var_GetBool(p_playlist, "fullscreen") != !b_fullscreen)
+        var_SetBool(p_playlist, "fullscreen", b_fullscreen);
+
+    VLCVideoWindowCommon *o_current_window = nil;
+    if(p_wnd)
+        o_current_window = [o_vout_dict objectForKey:[NSValue valueWithPointer:p_wnd]];
+
+    if (b_nativeFullscreenMode) {
+        if(!o_current_window)
+            o_current_window = [VLCMainWindow sharedInstance];        
+        assert(o_current_window);
+
+        // fullscreen might be triggered twice (vout event)
+        // so ignore duplicate events here
+        if((b_fullscreen && !([o_current_window fullscreen] || [o_current_window enteringFullscreenTransition])) ||
+           (!b_fullscreen && [o_current_window fullscreen])) {
+
+            [o_current_window toggleFullScreen:self];
+        }
+
+        if (b_fullscreen)
+            [NSApp setPresentationOptions:(NSApplicationPresentationFullScreen | NSApplicationPresentationAutoHideDock | NSApplicationPresentationAutoHideMenuBar)];
+        else
+            [NSApp setPresentationOptions:(NSApplicationPresentationDefault)];
+    } else {
+        assert(o_current_window);
+
+        if (b_fullscreen) {
+            input_thread_t * p_input = pl_CurrentInput(p_intf);
+            if (p_input != NULL && [[VLCMain sharedInstance] activeVideoPlayback]) {
+                // activate app, as method can also be triggered from outside the app (prevents nasty window layout)
+                [NSApp activateIgnoringOtherApps:YES];
+                [o_current_window enterFullscreen];
+
+            }
+            if (p_input)
+                vlc_object_release(p_input);
+        } else {
+            // leaving fullscreen is always allowed
+            [o_current_window leaveFullscreen];
+        }
+    }
+}
+
+#pragma mark -
+#pragma mark Misc methods
+
+- (void)updateWindowsControlsBarWithSelector:(SEL)aSel
+{
+    [o_vout_dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
+        if ([obj respondsToSelector:@selector(controlsBar)]) {
+            id o_controlsBar = [obj controlsBar];
+            if (o_controlsBar)
+                [o_controlsBar performSelector:aSel];
+        }
+    }];
+}
+
+- (void)updateWindowsUsingBlock:(void (^)(VLCVideoWindowCommon *o_window))windowUpdater
+{
+    [o_vout_dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
+        if ([obj isKindOfClass: [NSWindow class]])
+            windowUpdater(obj);
+    }];
+}
+
 - (void)updateWindowLevelForHelperWindows:(NSInteger)i_level
 {
     if (var_InheritBool(VLCIntf, "video-wallpaper"))
index 2551cf65a6fd8afc60775f7776f968c1f7cbb4fa..f264d20c1e0965d21613278af54192f6d539bb15 100644 (file)
@@ -177,8 +177,6 @@ struct intf_sys_t
 - (void)updateCurrentlyUsedHotkeys;
 - (BOOL)hasDefinedShortcutKey:(NSEvent *)o_event force:(BOOL)b_force;
 
-- (void)setFullscreen:(int)i_full forWindow:(vout_window_t *)p_wnd;
-
 - (void)PlaylistItemChanged;
 - (void)playbackStatusUpdated;
 - (void)sendDistributedNotificationWithUpdatedPlaybackStatus;
index 8da95b962fddd0e4f7fb9f7d0802c75904855da6..fcb005ccc479f87fe0d26d85c49aa82b664efb21 100644 (file)
@@ -172,8 +172,8 @@ int WindowOpen(vout_window_t *p_wnd, const vout_window_cfg_t *cfg)
         int i_full = 1;
 
         SEL sel = @selector(setFullscreen:forWindow:);
-        NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[[VLCMain sharedInstance] methodSignatureForSelector:sel]];
-        [inv setTarget:[VLCMain sharedInstance]];
+        NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[[[VLCMain sharedInstance] voutController] methodSignatureForSelector:sel]];
+        [inv setTarget:[[VLCMain sharedInstance] voutController]];
         [inv setSelector:sel];
         [inv setArgument:&i_full atIndex:2];
         [inv setArgument:&p_wnd atIndex:3];
@@ -236,8 +236,8 @@ static int WindowControl(vout_window_t *p_wnd, int i_query, va_list args)
             int i_full = va_arg(args, int);
 
             SEL sel = @selector(setFullscreen:forWindow:);
-            NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[[VLCMain sharedInstance] methodSignatureForSelector:sel]];
-            [inv setTarget:[VLCMain sharedInstance]];
+            NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[[[VLCMain sharedInstance] voutController] methodSignatureForSelector:sel]];
+            [inv setTarget:[[VLCMain sharedInstance] voutController]];
             [inv setSelector:sel];
             [inv setArgument:&i_full atIndex:2]; // starting at 2!
             [inv setArgument:&p_wnd atIndex:3];
@@ -1253,54 +1253,6 @@ static VLCMain *_o_sharedMainInstance = nil;
 
 #pragma mark -
 #pragma mark Interface updaters
-- (void)setFullscreen:(int)i_full forWindow:(vout_window_t *)p_wnd
-{
-    if (!p_intf || (!b_nativeFullscreenMode && !p_wnd))
-        return;
-    playlist_t * p_playlist = pl_Get(p_intf);
-    BOOL b_fullscreen = i_full;
-
-    if (!var_GetBool(p_playlist, "fullscreen") != !b_fullscreen)
-        var_SetBool(p_playlist, "fullscreen", b_fullscreen);
-
-    if (b_nativeFullscreenMode) {
-        VLCVideoWindowCommon *o_active_window = nil;
-        if(p_wnd)
-            o_active_window = [o_vout_controller getWindow: p_wnd];
-        else
-            o_active_window = o_mainwindow;
-
-        // fullscreen might be triggered twice (vout event)
-        // so ignore duplicate events here
-        if((b_fullscreen && !([o_active_window fullscreen] || [o_active_window enteringFullscreenTransition])) ||
-            (!b_fullscreen && [o_active_window fullscreen])) {
-
-            [o_active_window toggleFullScreen:self];
-        }
-
-        if (b_fullscreen)
-            [NSApp setPresentationOptions:(NSApplicationPresentationFullScreen | NSApplicationPresentationAutoHideDock | NSApplicationPresentationAutoHideMenuBar)];
-        else
-            [NSApp setPresentationOptions:(NSApplicationPresentationDefault)];
-    } else {
-        assert(p_wnd);
-
-        if (b_fullscreen) {
-            input_thread_t * p_input = pl_CurrentInput(p_intf);
-            if (p_input != NULL && [self activeVideoPlayback]) {
-                // activate app, as method can also be triggered from outside the app (prevents nasty window layout)
-                [NSApp activateIgnoringOtherApps:YES];
-                [o_vout_controller updateWindow:p_wnd withSelector:@selector(enterFullscreen)];
-
-            }
-            if (p_input)
-                vlc_object_release(p_input);
-        } else {
-            // leaving fullscreen is always allowed
-            [o_vout_controller updateWindow:p_wnd withSelector:@selector(leaveFullscreen)];
-        }
-    }
-}
 
 - (void)PlaylistItemChanged
 {