[vlc-commits] macosx/main menu: mostly re-write with player controller

Felix Paul Kühne git at videolan.org
Mon Feb 4 22:45:01 CET 2019


vlc | branch: master | Felix Paul Kühne <felix at feepk.net> | Mon Feb  4 22:41:31 2019 +0100| [878f8b9a50efae8c1690800e30eb775fcd02c27a] | committer: Felix Paul Kühne

macosx/main menu: mostly re-write with player controller

Note that notably track selection and minor internal variables are not supported for now

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=878f8b9a50efae8c1690800e30eb775fcd02c27a
---

 .../gui/macosx/coreinteraction/VLCInputManager.m   |   5 -
 modules/gui/macosx/menus/VLCMainMenu.h             |   2 -
 modules/gui/macosx/menus/VLCMainMenu.m             | 278 +++++++++------------
 modules/gui/macosx/playlist/VLCPlayerController.h  |   5 +
 modules/gui/macosx/playlist/VLCPlayerController.m  |   8 +-
 5 files changed, 128 insertions(+), 170 deletions(-)

diff --git a/modules/gui/macosx/coreinteraction/VLCInputManager.m b/modules/gui/macosx/coreinteraction/VLCInputManager.m
index b534ddef3a..d75c4d16e6 100644
--- a/modules/gui/macosx/coreinteraction/VLCInputManager.m
+++ b/modules/gui/macosx/coreinteraction/VLCInputManager.m
@@ -72,7 +72,6 @@ static int InputEvent(vlc_object_t *p_this, const char *psz_var,
                 [inputManager performSelectorOnMainThread:@selector(playbackStatusUpdated) withObject: nil waitUntilDone:NO];
                 break;
             case INPUT_EVENT_RATE:
-                [[[VLCMain sharedInstance] mainMenu] performSelectorOnMainThread:@selector(updatePlaybackRate) withObject: nil waitUntilDone:NO];
                 break;
             case INPUT_EVENT_POSITION:
 
@@ -109,9 +108,6 @@ static int InputEvent(vlc_object_t *p_this, const char *psz_var,
             case INPUT_EVENT_BOOKMARK:
                 break;
             case INPUT_EVENT_RECORD:
-                dispatch_async(dispatch_get_main_queue(), ^{
-                    [[[VLCMain sharedInstance] mainMenu] updateRecordState: var_InheritBool(p_this, "record")];
-                });
                 break;
             case INPUT_EVENT_PROGRAM:
                 [inputManager performSelectorOnMainThread:@selector(updateMainMenu) withObject: nil waitUntilDone:NO];
@@ -570,7 +566,6 @@ static int InputEvent(vlc_object_t *p_this, const char *psz_var,
 - (void)updateMainMenu
 {
     [[o_main mainMenu] setupMenus];
-    [[o_main mainMenu] updatePlaybackRate];
     [[VLCCoreInteraction sharedInstance] resetAtoB];
 }
 
diff --git a/modules/gui/macosx/menus/VLCMainMenu.h b/modules/gui/macosx/menus/VLCMainMenu.h
index 2b084b736f..9ef268fdbe 100644
--- a/modules/gui/macosx/menus/VLCMainMenu.h
+++ b/modules/gui/macosx/menus/VLCMainMenu.h
@@ -250,9 +250,7 @@
 
 - (IBAction)quitAfterPlayback:(id)sender;
 - (IBAction)toggleRecord:(id)sender;
-- (void)updateRecordState:(BOOL)b_value;
 - (IBAction)setPlaybackRate:(id)sender;
-- (void)updatePlaybackRate;
 - (IBAction)toggleAtoBloop:(id)sender;
 - (IBAction)selectRenderer:(id)sender;
 
diff --git a/modules/gui/macosx/menus/VLCMainMenu.m b/modules/gui/macosx/menus/VLCMainMenu.m
index 5e10b04f12..3d5eeb1fab 100644
--- a/modules/gui/macosx/menus/VLCMainMenu.m
+++ b/modules/gui/macosx/menus/VLCMainMenu.m
@@ -1,7 +1,7 @@
 /*****************************************************************************
  *MainMenu.m: MacOS X interface module
  *****************************************************************************
- *Copyright (C) 2011-2018 Felix Paul Kühne
+ *Copyright (C) 2011-2019 Felix Paul Kühne
  *
  *Authors: Felix Paul Kühne <fkuehne -at- videolan -dot- org>
  *
@@ -44,6 +44,7 @@
 #import "panels/VLCTimeSelectionPanelController.h"
 
 #import "playlist/VLCPlaylistController.h"
+#import "playlist/VLCPlayerController.h"
 #import "preferences/VLCSimplePrefsController.h"
 
 #import "windows/VLCAboutWindowController.h"
@@ -69,6 +70,7 @@
     VLCAddonsWindowController *_addonsController;
     VLCRendererMenuController *_rendererMenuController;
     VLCPlaylistController *_playlistController;
+    VLCPlayerController *_playerController;
     NSTimer *_cancelRendererDiscoveryTimer;
 
     NSMenu *_playlistTableColumnsContextMenu;
@@ -100,7 +102,7 @@
 
     if ([NSLocale characterDirectionForLanguage:preferredLanguage] == NSLocaleLanguageDirectionRightToLeft) {
         msg_Dbg(getIntf(), "adapting interface since '%s' is a RTL language", [preferredLanguage UTF8String]);
-        [_rateTextField setAlignment: NSLeftTextAlignment];
+        [_rateTextField setAlignment:NSLeftTextAlignment];
     }
 
     [self setRateControlsEnabled:NO];
@@ -221,10 +223,19 @@
     _rendererMenuController.rendererNoneItem = _rendererNoneItem;
     _rendererMenuController.rendererMenu = _rendererMenu;
 
-    [[NSNotificationCenter defaultCenter] addObserver: self
-                                             selector: @selector(refreshVoutDeviceMenu:)
-                                                 name: NSApplicationDidChangeScreenParametersNotification
-                                               object: nil];
+    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
+    [notificationCenter addObserver:self
+                           selector:@selector(refreshVoutDeviceMenu:)
+                               name:NSApplicationDidChangeScreenParametersNotification
+                             object:nil];
+    [notificationCenter addObserver:self
+                           selector:@selector(updatePlaybackRate)
+                               name:VLCPlayerRateChanged
+                             object:nil];
+    [notificationCenter addObserver:self
+                           selector:@selector(updateRecordState)
+                               name:VLCPlayerRecordingChanged
+                             object:nil];
 
     [self setupVarMenuItem:_add_intf target: (vlc_object_t *)p_intf
                              var:"intf-add" selector: @selector(toggleVar:)];
@@ -244,6 +255,7 @@
     if (count > 0)
         [_postprocessingMenu removeAllItems];
 
+    // FIXME: re-write the following using VLCPlayerController
     NSMenuItem *mitem;
     [_postprocessingMenu setAutoenablesItems: YES];
     [_postprocessingMenu addItemWithTitle: _NS("Disable") action:@selector(togglePostProcessing:) keyEquivalent:@""];
@@ -342,8 +354,7 @@
 - (void)initStrings
 {
     /* main menu */
-    [_about setTitle: [_NS("About VLC media player") \
-                           stringByAppendingString: @"..."]];
+    [_about setTitle: [_NS("About VLC media player") stringByAppendingString: @"..."]];
     [_checkForUpdate setTitle: _NS("Check for Update...")];
     [_prefs setTitle: _NS("Preferences...")];
     [_extensions setTitle: _NS("Extensions")];
@@ -357,6 +368,9 @@
     [_show_all setTitle: _NS("Show All")];
     [_quit setTitle: _NS("Quit VLC")];
 
+    /* this special case is needed to due to archiac legacy translations of the File menu
+     * on the Mac to the German translation which resulted in 'Ablage' instead of 'Datei'.
+     * This remains until the present day and does not affect the Windows world. */
     [_fileMenu setTitle: _ANS("1:File")];
     [_open_generic setTitle: _NS("Advanced Open File...")];
     [_open_file setTitle: _NS("Open File...")];
@@ -651,7 +665,7 @@
         [_subtitle_bgopacityLabel setHidden: YES];
     }
     [_subtitle_bgopacity_sld setEnabled: b_enabled];
-    [_teletext setEnabled: b_enabled];
+    [_teletext setEnabled:_playerController.teletextMenuAvailable];
 }
 
 - (void)setRateControlsEnabled:(BOOL)b_enabled
@@ -743,125 +757,109 @@
 
 - (IBAction)repeat:(id)sender
 {
-    vlc_value_t val;
-    intf_thread_t *p_intf = getIntf();
-    playlist_t *p_playlist = pl_Get(p_intf);
-
-    var_Get(p_playlist, "repeat", &val);
-    if (! val.b_bool)
-        [[VLCCoreInteraction sharedInstance] repeatOne];
-    else
-        [[VLCCoreInteraction sharedInstance] repeatOff];
+    if (_playlistController.playbackRepeat == VLC_PLAYLIST_PLAYBACK_REPEAT_CURRENT) {
+        _playlistController.playbackRepeat = VLC_PLAYLIST_PLAYBACK_REPEAT_NONE;
+    } else {
+        _playlistController.playbackRepeat = VLC_PLAYLIST_PLAYBACK_REPEAT_CURRENT;
+    }
 }
 
 - (IBAction)loop:(id)sender
 {
-    vlc_value_t val;
-    intf_thread_t *p_intf = getIntf();
-    playlist_t *p_playlist = pl_Get(p_intf);
-
-    var_Get(p_playlist, "loop", &val);
-    if (! val.b_bool)
-        [[VLCCoreInteraction sharedInstance] repeatAll];
-    else
-        [[VLCCoreInteraction sharedInstance] repeatOff];
+    if (_playlistController.playbackRepeat == VLC_PLAYLIST_PLAYBACK_REPEAT_ALL) {
+        _playlistController.playbackRepeat = VLC_PLAYLIST_PLAYBACK_REPEAT_NONE;
+    } else {
+        _playlistController.playbackRepeat = VLC_PLAYLIST_PLAYBACK_REPEAT_ALL;
+    }
 }
 
 - (IBAction)forward:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] forwardShort];
+    [_playerController jumpForwardShort];
 }
 
 - (IBAction)backward:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] backwardShort];
+    [_playerController jumpBackwardShort];
 }
 
 - (IBAction)volumeUp:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] volumeUp];
+    [_playerController incrementVolume];
 }
 
 - (IBAction)volumeDown:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] volumeDown];
+    [_playerController decrementVolume];
 }
 
 - (IBAction)mute:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] toggleMute];
+    [_playerController toggleMute];
 }
 
 - (void)lockVideosAspectRatio:(id)sender
 {
+    // FIXME: re-write the following using VLCPlayerController
     [[VLCCoreInteraction sharedInstance] setAspectRatioIsLocked: ![sender state]];
     [sender setState: [[VLCCoreInteraction sharedInstance] aspectRatioIsLocked]];
 }
 
 - (IBAction)quitAfterPlayback:(id)sender
 {
-    playlist_t *p_playlist = pl_Get(getIntf());
-    bool b_value = !var_CreateGetBool(p_playlist, "play-and-exit");
-    var_SetBool(p_playlist, "play-and-exit", b_value);
-    config_PutInt("play-and-exit", b_value);
+    _playerController.actionAfterStop = VLC_PLAYER_MEDIA_STOPPED_EXIT;
 }
 
 - (IBAction)toggleRecord:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] toggleRecord];
+    [_playerController toggleRecord];
 }
 
-- (void)updateRecordState:(BOOL)b_value
+- (void)updateRecordState
 {
-    [_record setState:b_value];
+    [_record setState:_playerController.enableRecording];
 }
 
 - (IBAction)setPlaybackRate:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] setPlaybackRate: [_rate_sld intValue]];
-    int i = [[VLCCoreInteraction sharedInstance] playbackRate];
-    double speed =  pow(2, (double)i / 17);
+    double speed =  pow(2, (double)[_rate_sld intValue] / 17);
+    _playerController.playbackRate = speed;
     [_rateTextField setStringValue: [NSString stringWithFormat:@"%.2fx", speed]];
 }
 
 - (void)updatePlaybackRate
 {
-    int i = [[VLCCoreInteraction sharedInstance] playbackRate];
-    double speed =  pow(2, (double)i / 17);
-    [_rateTextField setStringValue: [NSString stringWithFormat:@"%.2fx", speed]];
-    [_rate_sld setIntValue: i];
+    double playbackRate = _playerController.playbackRate;
+    double value = 17 * log(playbackRate) / log(2.);
+    int intValue = (int) ((value > 0) ? value + .5 : value - .5);
+
+    if (intValue < -34)
+        intValue = -34;
+    else if (intValue > 34)
+        intValue = 34;
+
+    [_rateTextField setStringValue: [NSString stringWithFormat:@"%.2fx", playbackRate]];
+    [_rate_sld setIntValue: intValue];
 }
 
 - (IBAction)toggleAtoBloop:(id)sender
 {
+    // re-write the following using VLCPlayerController
     [[VLCCoreInteraction sharedInstance] setAtoB];
 }
 
 - (IBAction)goToSpecificTime:(id)sender
 {
-    input_thread_t *p_input = pl_CurrentInput(getIntf());
-    if (p_input) {
-        /* we can obviously only do that if an input is available */
-        vlc_tick_t length = var_GetInteger(p_input, "length");
-        [_timeSelectionPanel setMaxTime:(int)SEC_FROM_VLC_TICK(length)];
-        vlc_tick_t pos = var_GetInteger(p_input, "time");
-        [_timeSelectionPanel setPosition: (int)SEC_FROM_VLC_TICK(pos)];
-        [_timeSelectionPanel runModalForWindow:[NSApp mainWindow]
-                             completionHandler:^(NSInteger returnCode, int64_t returnTime) {
-
-            if (returnCode != NSModalResponseOK)
-                return;
-
-            input_thread_t *p_input = pl_CurrentInput(getIntf());
-            if (p_input) {
-                input_SetTime(p_input, vlc_tick_from_sec(returnTime),
-                              var_GetBool(p_input, "input-fast-seek"));
-                vlc_object_release(p_input);
-            }
-        }];
-
-        vlc_object_release(p_input);
-    }
+    vlc_tick_t length = _playerController.length;
+    [_timeSelectionPanel setMaxTime:(int)SEC_FROM_VLC_TICK(length)];
+    vlc_tick_t time = _playerController.time;
+    [_timeSelectionPanel setPosition: (int)SEC_FROM_VLC_TICK(time)];
+    [_timeSelectionPanel runModalForWindow:[NSApp mainWindow]
+                         completionHandler:^(NSInteger returnCode, int64_t returnTime) {
+                             if (returnCode != NSModalResponseOK)
+                                 return;
+                             [self->_playerController setTimePrecise:vlc_tick_from_sec(returnTime)];
+                         }];
 }
 
 - (IBAction)selectRenderer:(id)sender
@@ -937,33 +935,30 @@
 
 - (IBAction)toggleFullscreen:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] toggleFullscreen];
+    [_playerController toggleFullscreen];
 }
 
 - (IBAction)resizeVideoWindow:(id)sender
 {
-    input_thread_t *p_input = pl_CurrentInput(getIntf());
-    if (p_input) {
-        vout_thread_t *p_vout = getVoutForActiveWindow();
-        if (p_vout) {
-            if (sender == _half_window)
-                var_SetFloat(p_vout, "zoom", 0.5);
-            else if (sender == _normal_window)
-                var_SetFloat(p_vout, "zoom", 1.0);
-            else if (sender == _double_window)
-                var_SetFloat(p_vout, "zoom", 2.0);
-            else
-            {
-                [[NSApp keyWindow] performZoom:sender];
-            }
-            vlc_object_release(p_vout);
+    vout_thread_t *p_vout = getVoutForActiveWindow();
+    if (p_vout) {
+        if (sender == _half_window)
+            var_SetFloat(p_vout, "zoom", 0.5);
+        else if (sender == _normal_window)
+            var_SetFloat(p_vout, "zoom", 1.0);
+        else if (sender == _double_window)
+            var_SetFloat(p_vout, "zoom", 2.0);
+        else
+        {
+            [[NSApp keyWindow] performZoom:sender];
         }
-        vlc_object_release(p_input);
+        vlc_object_release(p_vout);
     }
 }
 
 - (IBAction)floatOnTop:(id)sender
 {
+    // FIXME re-write using VLCPlayerController
     input_thread_t *p_input = pl_CurrentInput(getIntf());
     if (p_input) {
         vout_thread_t *p_vout = getVoutForActiveWindow();
@@ -979,29 +974,24 @@
 
 - (IBAction)createVideoSnapshot:(id)sender
 {
-    input_thread_t *p_input = pl_CurrentInput(getIntf());
-    if (p_input) {
-        vout_thread_t *p_vout = getVoutForActiveWindow();
-        if (p_vout) {
-            var_TriggerCallback(p_vout, "video-snapshot");
-            vlc_object_release(p_vout);
-        }
-        vlc_object_release(p_input);
-    }
+    [_playerController takeSnapshot];
 }
 
 - (void)_disablePostProcessing
 {
+    // FIXME re-write using VLCPlayerController
     [VLCVideoFilterHelper setVideoFilter:"postproc" on:false];
 }
 
 - (void)_enablePostProcessing
 {
+    // FIXME re-write using VLCPlayerController
     [VLCVideoFilterHelper setVideoFilter:"postproc" on:true];
 }
 
 - (void)togglePostProcessing:(id)sender
 {
+    // FIXME re-write using VLCPlayerController
     NSInteger count = [_postprocessingMenu numberOfItems];
     for (NSUInteger x = 0; x < count; x++)
         [[_postprocessingMenu itemAtIndex:x] setState:NSOffState];
@@ -1058,17 +1048,16 @@
 
     i_returnValue = [openPanel runModal];
 
+    // FIXME: this cannot work anymore
     if (i_returnValue == NSModalResponseOK)
         [[VLCCoreInteraction sharedInstance] addSubtitlesToCurrentInput:[openPanel URLs]];
 }
 
 - (void)switchSubtitleSize:(id)sender
 {
-    NSInteger intValue = [sender tag];
-    var_SetInteger(pl_Get(getIntf()), "sub-text-scale", intValue);
+    _playerController.subtitleTextScalingFactor = (unsigned int)[sender tag];
 }
 
-
 - (void)switchSubtitleOption:(id)sender
 {
     NSInteger intValue = [sender tag];
@@ -1090,37 +1079,25 @@
 
 - (IBAction)telxTransparent:(id)sender
 {
-    vlc_object_t *p_vbi;
-    p_vbi = (vlc_object_t *) vlc_object_find_name(pl_Get(getIntf()), "zvbi");
-    if (p_vbi) {
-        var_SetBool(p_vbi, "vbi-opaque", [sender state]);
-        [sender setState: ![sender state]];
-        vlc_object_release(p_vbi);
-    }
+    _playerController.teletextTransparent = !_playerController.teletextTransparent;
 }
 
 - (IBAction)telxNavLink:(id)sender
 {
-    vlc_object_t *p_vbi;
-    int i_page = 0;
+    unsigned int page = 0;
 
     if ([[sender title] isEqualToString: _NS("Index")])
-        i_page = 'i' << 16;
+        page = VLC_PLAYER_TELETEXT_KEY_INDEX;
     else if ([[sender title] isEqualToString: _NS("Red")])
-        i_page = 'r' << 16;
+        page = VLC_PLAYER_TELETEXT_KEY_RED;
     else if ([[sender title] isEqualToString: _NS("Green")])
-        i_page = 'g' << 16;
+        page = VLC_PLAYER_TELETEXT_KEY_GREEN;
     else if ([[sender title] isEqualToString: _NS("Yellow")])
-        i_page = 'y' << 16;
+        page = VLC_PLAYER_TELETEXT_KEY_YELLOW;
     else if ([[sender title] isEqualToString: _NS("Blue")])
-        i_page = 'b' << 16;
-    if (i_page == 0) return;
+        page = VLC_PLAYER_TELETEXT_KEY_BLUE;
 
-    p_vbi = (vlc_object_t *) vlc_object_find_name(pl_Get(getIntf()), "zvbi");
-    if (p_vbi) {
-        var_SetInteger(p_vbi, "vbi-page", i_page);
-        vlc_object_release(p_vbi);
-    }
+    _playerController.teletextPage = page;
 }
 
 #pragma mark - Panels
@@ -1128,7 +1105,7 @@
 - (IBAction)intfOpenFile:(id)sender
 {
     [[[VLCMain sharedInstance] open] openFileWithAction:^(NSArray *files) {
-        [[[VLCMain sharedInstance] playlistController] addPlaylistItems:files];
+        [self->_playlistController addPlaylistItems:files];
     }];
 }
 
@@ -1198,6 +1175,7 @@
         if ([[filename pathExtension] caseInsensitiveCompare:ext] != NSOrderedSame)
             actualFilename = [NSString stringWithFormat: @"%@.%@", filename, ext];
 
+        // FIXME: This will always export an empty playlist unless we do something about it
         playlist_Export(p_playlist,
                         [actualFilename fileSystemRepresentation],
                         psz_module);
@@ -1358,11 +1336,7 @@
 
 - (void)setShuffle
 {
-    bool b_value;
-    playlist_t *p_playlist = pl_Get(getIntf());
-    b_value = var_GetBool(p_playlist, "random");
-
-    [_random setState: b_value];
+    [_random setState:_playlistController.playbackOrder == VLC_PLAYLIST_PLAYBACK_ORDER_RANDOM];
 }
 
 #pragma mark - Dynamic menu creation and validation
@@ -1606,7 +1580,6 @@
 - (BOOL)validateMenuItem:(NSMenuItem *)mi
 {
     BOOL enabled = YES;
-    vlc_value_t val;
     input_item_t *inputItem = _playlistController.currentlyPlayingInputItem;
     if (inputItem) {
         input_item_Hold(inputItem);
@@ -1626,10 +1599,7 @@
                mi == _dockMenunext) {
         enabled = _playlistController.hasNextPlaylistItem;
     } else if (mi == _record) {
-        enabled = NO;
-        // FIXME: this internal state is no longer available
-/*        if (p_input)
-            enabled = var_GetBool(p_input, "can-record");*/
+        enabled = _playerController.recordable;
     } else if (mi == _random) {
         enum vlc_playlist_playback_order playbackOrder = [_playlistController playbackOrder];
         [mi setState: playbackOrder == VLC_PLAYLIST_PLAYBACK_ORDER_RANDOM ? NSOnState : NSOffState];
@@ -1640,25 +1610,12 @@
         enum vlc_playlist_playback_repeat playbackRepeat = [_playlistController playbackRepeat];
         [mi setState: playbackRepeat == VLC_PLAYLIST_PLAYBACK_REPEAT_ALL ? NSOnState : NSOffState];
     } else if (mi == _quitAfterPB) {
-        enabled = NO;
-        // FIXME: this internal state is no longer available
-        /*
-        int i_state;
-        bool b_value = var_InheritBool(p_playlist, "play-and-exit");
-        i_state = b_value ? NSOnState : NSOffState;
-        [mi setState: i_state];*/
+        BOOL state = _playerController.actionAfterStop == VLC_PLAYER_MEDIA_STOPPED_EXIT;
+        [mi setState: state ? NSOnState : NSOffState];
     } else if (mi == _fwd || mi == _bwd || mi == _jumpToTime) {
-        enabled = NO;
-        // FIXME: this internal state depends on the future abstraction of the player
-        /*
-        if (p_input != NULL) {
-            var_Get(p_input, "can-seek", &val);
-            enabled = val.b_bool;
-        } else {
-            enabled = NO;
-        }*/
+        enabled = _playerController.seekable;
     } else if (mi == _mute || mi == _dockMenumute || mi == _voutMenumute) {
-        [mi setState: [[VLCCoreInteraction sharedInstance] mute] ? NSOnState : NSOffState];
+        [mi setState: _playerController.mute ? NSOnState : NSOffState];
         [self setupMenus]; /* Make sure audio menu is up to date */
         [self refreshAudioDeviceList];
     } else if (mi == _half_window           ||
@@ -1671,23 +1628,19 @@
                mi == _voutMenufullscreen    ||
                mi == _floatontop
                ) {
-        enabled = NO;
 
-        // FIXME: this internal state depends on the future abstraction of the player
-        /*
-        if (p_input != NULL) {
-            vout_thread_t *p_vout = getVoutForActiveWindow();
-            if (p_vout != NULL) {
-                if (mi == _floatontop)
-                    [mi setState: var_GetBool(p_vout, "video-on-top")];
+        vout_thread_t *p_vout = getVoutForActiveWindow();
+        if (p_vout != NULL) {
+            // FIXME: re-write using VLCPlayerController
+            if (mi == _floatontop)
+                [mi setState: var_GetBool(p_vout, "video-on-top")];
 
-                if (mi == _fullscreenItem || mi == _voutMenufullscreen)
-                    [mi setState: var_GetBool(p_vout, "fullscreen")];
+            if (mi == _fullscreenItem || mi == _voutMenufullscreen)
+                [mi setState: _playerController.fullscreen];
 
-                enabled = YES;
-                vlc_object_release(p_vout);
-            }
-        }*/
+            enabled = YES;
+            vlc_object_release(p_vout);
+        }
 
         [self setupMenus]; /* Make sure video menu is up to date */
 
@@ -1700,10 +1653,11 @@
             _parent == _subtitle_textcolor || mi == _subtitle_textcolor ||
             _parent == _subtitle_bgcolor || mi == _subtitle_bgcolor     ||
             _parent == _subtitle_bgopacity || mi == _subtitle_bgopacity ||
-            _parent == _subtitle_outlinethickness || mi == _subtitle_outlinethickness ||
-            _parent == _teletext || mi == _teletext
+            _parent == _subtitle_outlinethickness || mi == _subtitle_outlinethickness
             ) {
             enabled = _openSubtitleFile.isEnabled;
+        } else if (_parent == _teletext || mi == _teletext) {
+            enabled = _playerController.teletextMenuAvailable;
         }
     }
 
diff --git a/modules/gui/macosx/playlist/VLCPlayerController.h b/modules/gui/macosx/playlist/VLCPlayerController.h
index a5d2415fce..3406f236c9 100644
--- a/modules/gui/macosx/playlist/VLCPlayerController.h
+++ b/modules/gui/macosx/playlist/VLCPlayerController.h
@@ -426,6 +426,11 @@ extern NSString *VLCPlayerMuteChanged;
  */
 @property (readwrite, nonatomic) BOOL enableRecording;
 
+/**
+ * helper function to inverse the current recording state
+ */
+- (void)toggleRecord;
+
 #pragma mark - video output properties
 
 /**
diff --git a/modules/gui/macosx/playlist/VLCPlayerController.m b/modules/gui/macosx/playlist/VLCPlayerController.m
index 76bde08df2..e3666f9771 100644
--- a/modules/gui/macosx/playlist/VLCPlayerController.m
+++ b/modules/gui/macosx/playlist/VLCPlayerController.m
@@ -69,7 +69,6 @@ NSString *VLCPlayerMuteChanged = @"VLCPlayerMuteChanged";
 - (void)teletextTransparencyChanged:(BOOL)isTransparent;
 - (void)audioDelayChanged:(vlc_tick_t)audioDelay;
 - (void)subtitlesDelayChanged:(vlc_tick_t)subtitlesDelay;
-- (void)subtitleTextScaleChanged:(unsigned int)subtitleTextScalingFactor;
 - (void)recordingChanged:(BOOL)recording;
 - (void)stopActionChanged:(enum vlc_player_media_stopped_action)stoppedAction;
 
@@ -720,6 +719,13 @@ static const struct vlc_player_aout_cbs player_aout_callbacks = {
     vlc_player_Unlock(_p_player);
 }
 
+- (void)toggleRecord
+{
+    vlc_player_Lock(_p_player);
+    vlc_player_SetRecordingEnabled(_p_player, !_enableRecording);
+    vlc_player_Unlock(_p_player);
+}
+
 #pragma mark - video specific delegation
 
 - (void)fullscreenChanged:(BOOL)isFullscreen



More information about the vlc-commits mailing list