From b9e1088003e3e5c1fb6202affd63b3b6b3d914ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Paul=20K=C3=BChne?= <fkuehne@videolan.org> Date: Wed, 11 Jan 2012 19:53:27 +0100 Subject: [PATCH] macosx: reimplement 'fullscreen video device' (fixes #5831) --- modules/gui/macosx/MainMenu.h | 1 + modules/gui/macosx/MainMenu.m | 52 ++++++++++++++++++++++----------- modules/gui/macosx/MainWindow.m | 2 +- 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/modules/gui/macosx/MainMenu.h b/modules/gui/macosx/MainMenu.h index 346c9acb9ce4..7189a2f10ff1 100644 --- a/modules/gui/macosx/MainMenu.h +++ b/modules/gui/macosx/MainMenu.h @@ -212,6 +212,7 @@ - (IBAction)resizeVideoWindow:(id)sender; - (IBAction)floatOnTop:(id)sender; - (IBAction)createVideoSnapshot:(id)sender; +- (IBAction)toggleFullscreenDevice:(id)sender; - (IBAction)showWizard:(id)sender; - (IBAction)showVideoEffects:(id)sender; diff --git a/modules/gui/macosx/MainMenu.m b/modules/gui/macosx/MainMenu.m index 3e7a2b6dccc1..657a7e3c5a46 100644 --- a/modules/gui/macosx/MainMenu.m +++ b/modules/gui/macosx/MainMenu.m @@ -445,9 +445,6 @@ static VLCMainMenu *_o_sharedInstance = nil; [self setupVarMenuItem: o_mi_crop target: (vlc_object_t *) p_vout var: "crop" selector: @selector(toggleVar:)]; - [self setupVarMenuItem: o_mi_screen target: (vlc_object_t *)p_vout - var: "video-device" selector: @selector(toggleVar:)]; - [self setupVarMenuItem: o_mi_deinterlace target: (vlc_object_t *)p_vout var: "deinterlace" selector: @selector(toggleVar:)]; @@ -460,6 +457,9 @@ static VLCMainMenu *_o_sharedInstance = nil; @selector(toggleVar:)]; #endif vlc_object_release( (vlc_object_t *)p_vout ); + + [self refreshVoutDeviceMenu:nil]; + [self setSubmenusEnabled: YES]; } vlc_object_release( p_input ); } @@ -471,25 +471,37 @@ static VLCMainMenu *_o_sharedInstance = nil; - (void)refreshVoutDeviceMenu:(NSNotification *)o_notification { - int x, y = 0; - vout_thread_t * p_vout = getVout(); - if( !p_vout ) - return; - - /* clean the menu before adding new entries */ - if( [o_mi_screen hasSubmenu] ) + NSUInteger count = [o_mu_screen numberOfItems]; + NSMenu * o_submenu = o_mu_screen; + if (count > 0) { - y = [[o_mi_screen submenu] numberOfItems] - 1; - while( x != y ) + if (OSX_LEOPARD) { - [[o_mi_screen submenu] removeItemAtIndex: x]; - x++; + NSUInteger count = [o_submenu numberOfItems]; + for( NSUInteger i = 0; i < count; i++ ) + [o_submenu removeItemAtIndex: 0]; } + else + [o_submenu removeAllItems]; } - [self setupVarMenuItem: o_mi_screen target: (vlc_object_t *)p_vout - var: "video-device" selector: @selector(toggleVar:)]; - vlc_object_release( (vlc_object_t *)p_vout ); + NSArray * o_screens = [NSScreen screens]; + count = [o_screens count]; + [o_submenu addItemWithTitle: _NS("Default") action:@selector(toggleFullscreenDevice:) keyEquivalent:@""]; + [[o_submenu itemAtIndex: 0] setTag: 0]; + [[o_submenu itemAtIndex: 0] setEnabled: YES]; + [[o_submenu itemAtIndex: 0] setTarget: self]; + NSRect s_rect; + for (NSUInteger i = 0; i < count; i++) + { + s_rect = [[o_screens objectAtIndex: i] frame]; + [o_submenu addItemWithTitle: [NSString stringWithFormat: @"%@ %i (%ix%i)", _NS("Screen"), i+1, + (int)s_rect.size.width, (int)s_rect.size.height] action:@selector(toggleFullscreenDevice:) keyEquivalent:@""]; + [[o_submenu itemAtIndex:i+1] setTag: (int)[[o_screens objectAtIndex: i] displayID]]; + [[o_submenu itemAtIndex:i+1] setEnabled: YES]; + [[o_submenu itemAtIndex:i+1] setTarget: self]; + } + [[o_submenu itemWithTag: config_GetInt( VLCIntf, "macosx-vdev" )] setState: NSOnState]; } - (void)setSubmenusEnabled:(BOOL)b_enabled @@ -624,6 +636,12 @@ static VLCMainMenu *_o_sharedInstance = nil; } } +- (IBAction)toggleFullscreenDevice:(id)sender +{ + config_PutInt( VLCIntf, "macosx-vdev", [sender tag] ); + [self refreshVoutDeviceMenu: nil]; +} + - (id)voutMenu { return o_vout_menu; diff --git a/modules/gui/macosx/MainWindow.m b/modules/gui/macosx/MainWindow.m index fea024952752..df746d6dc681 100644 --- a/modules/gui/macosx/MainWindow.m +++ b/modules/gui/macosx/MainWindow.m @@ -1285,7 +1285,7 @@ static VLCMainWindow *_o_sharedInstance = nil; BOOL blackout_other_displays = config_GetInt( VLCIntf, "macosx-black" ); if( p_vout ) - screen = [NSScreen screenWithDisplayID:(CGDirectDisplayID)var_GetInteger( p_vout, "video-device" )]; + screen = [NSScreen screenWithDisplayID:(CGDirectDisplayID)config_GetInt( VLCIntf, "macosx-vdev" )]; [self lockFullscreenAnimation]; -- GitLab