[vlc-commits] macosx/main menu: refactor the shortcuts handling

Felix Paul Kühne git at videolan.org
Sat Mar 30 14:16:56 CET 2019


vlc | branch: master | Felix Paul Kühne <felix at feepk.net> | Fri Mar 29 20:12:34 2019 +0100| [175f55a6f9946f88cbf8a2a49c33964247e1f356] | committer: Felix Paul Kühne

macosx/main menu: refactor the shortcuts handling

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

 .../macosx/coreinteraction/VLCCoreInteraction.m    |   6 +-
 modules/gui/macosx/extensions/NSString+Helpers.h   |   4 +-
 modules/gui/macosx/extensions/NSString+Helpers.m   |  18 +-
 modules/gui/macosx/menus/VLCMainMenu.m             | 315 ++++++++++-----------
 .../gui/macosx/windows/mainwindow/VLCMainWindow.m  |  50 ++--
 5 files changed, 192 insertions(+), 201 deletions(-)

diff --git a/modules/gui/macosx/coreinteraction/VLCCoreInteraction.m b/modules/gui/macosx/coreinteraction/VLCCoreInteraction.m
index 1be0dba2d7..4d511161ae 100644
--- a/modules/gui/macosx/coreinteraction/VLCCoreInteraction.m
+++ b/modules/gui/macosx/coreinteraction/VLCCoreInteraction.m
@@ -491,10 +491,10 @@ static int BossCallback(vlc_object_t *p_this, const char *psz_var,
         BOOL b_found_key = NO;
         NSUInteger numberOfUsedHotkeys = [_usedHotkeys count];
         for (NSUInteger i = 0; i < numberOfUsedHotkeys; i++) {
-            NSString *str = [_usedHotkeys objectAtIndex:i];
-            unsigned int i_keyModifiers = VLCModifiersToCocoa(str);
+            const char *str = [[_usedHotkeys objectAtIndex:i] UTF8String];
+            unsigned int i_keyModifiers = VLCModifiersToCocoa((char *)str);
 
-            if ([[characters lowercaseString] isEqualToString: VLCKeyToString(str)] &&
+            if ([[characters lowercaseString] isEqualToString:VLCKeyToString((char *)str)] &&
                 (i_keyModifiers & NSShiftKeyMask)     == (i_pressed_modifiers & NSShiftKeyMask) &&
                 (i_keyModifiers & NSControlKeyMask)   == (i_pressed_modifiers & NSControlKeyMask) &&
                 (i_keyModifiers & NSAlternateKeyMask) == (i_pressed_modifiers & NSAlternateKeyMask) &&
diff --git a/modules/gui/macosx/extensions/NSString+Helpers.h b/modules/gui/macosx/extensions/NSString+Helpers.h
index 2489ab59f0..2fc405851c 100644
--- a/modules/gui/macosx/extensions/NSString+Helpers.h
+++ b/modules/gui/macosx/extensions/NSString+Helpers.h
@@ -189,9 +189,9 @@ NSString * OSXStringKeyToString(NSString *theString);
 /**
  * Converts VLC key string to cocoa modifiers which can be used as setKeyEquivalent for menu items
  */
-NSString * VLCKeyToString(NSString *theString);
+NSString * VLCKeyToString(char *theChar);
 
 /**
  * Converts VLC key to cocoa string which can be used as setKeyEquivalentModifierMask for menu items
  */
-unsigned int VLCModifiersToCocoa(NSString *theString);
+unsigned int VLCModifiersToCocoa(char *theChar);
diff --git a/modules/gui/macosx/extensions/NSString+Helpers.m b/modules/gui/macosx/extensions/NSString+Helpers.m
index 8dcce48b52..82289303bd 100644
--- a/modules/gui/macosx/extensions/NSString+Helpers.m
+++ b/modules/gui/macosx/extensions/NSString+Helpers.m
@@ -409,8 +409,13 @@ NSString * OSXStringKeyToString(NSString *theString)
     return theString;
 }
 
-NSString * VLCKeyToString(NSString *theString)
+NSString * VLCKeyToString(char *theChar)
 {
+    if (theChar == NULL) {
+        return @"";
+    }
+    NSString *theString = toNSStr(theChar);
+
     if (![theString isEqualToString:@""]) {
         if ([theString characterAtIndex:([theString length] - 1)] != 0x2b)
             theString = [theString stringByReplacingOccurrencesOfString:@"+" withString:@""];
@@ -497,17 +502,18 @@ NSString * VLCKeyToString(NSString *theString)
     return theString;
 }
 
-unsigned int VLCModifiersToCocoa(NSString *theString)
+unsigned int VLCModifiersToCocoa(char *theChar)
 {
     unsigned int new = 0;
 
-    if ([theString rangeOfString:@"Command"].location != NSNotFound)
+    if (strstr(theChar, "Command") != NULL)
         new |= NSCommandKeyMask;
-    if ([theString rangeOfString:@"Alt"].location != NSNotFound)
+    if (strstr(theChar, "Alt") != NULL)
         new |= NSAlternateKeyMask;
-    if ([theString rangeOfString:@"Shift"].location != NSNotFound)
+    if (strstr(theChar, "Shift") != NULL)
         new |= NSShiftKeyMask;
-    if ([theString rangeOfString:@"Ctrl"].location != NSNotFound)
+    if (strstr(theChar, "Ctrl") != NULL)
         new |= NSControlKeyMask;
+
     return new;
 }
diff --git a/modules/gui/macosx/menus/VLCMainMenu.m b/modules/gui/macosx/menus/VLCMainMenu.m
index 95f2ae182b..fd53a3295b 100644
--- a/modules/gui/macosx/menus/VLCMainMenu.m
+++ b/modules/gui/macosx/menus/VLCMainMenu.m
@@ -115,105 +115,8 @@
     [_checkForUpdate setEnabled:NO];
 #endif
 
-    NSString* keyString;
-    char *key;
-
-    /* Get ExtensionsManager */
-    intf_thread_t *p_intf = getIntf();
-
     [self initStrings];
-
-    key = config_GetPsz("key-quit");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_quit setKeyEquivalent: VLCKeyToString(keyString)];
-    [_quit setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    // do not assign play/pause key
-
-    key = config_GetPsz("key-stop");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_stop setKeyEquivalent: VLCKeyToString(keyString)];
-    [_stop setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-prev");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_previous setKeyEquivalent: VLCKeyToString(keyString)];
-    [_previous setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-next");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_next setKeyEquivalent: VLCKeyToString(keyString)];
-    [_next setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-jump+short");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_fwd setKeyEquivalent: VLCKeyToString(keyString)];
-    [_fwd setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-jump-short");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_bwd setKeyEquivalent: VLCKeyToString(keyString)];
-    [_bwd setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-vol-up");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_vol_up setKeyEquivalent: VLCKeyToString(keyString)];
-    [_vol_up setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-vol-down");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_vol_down setKeyEquivalent: VLCKeyToString(keyString)];
-    [_vol_down setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-vol-mute");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_mute setKeyEquivalent: VLCKeyToString(keyString)];
-    [_mute setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-toggle-fullscreen");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_fullscreenItem setKeyEquivalent: VLCKeyToString(keyString)];
-    [_fullscreenItem setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-snapshot");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_snapshot setKeyEquivalent: VLCKeyToString(keyString)];
-    [_snapshot setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-random");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_random setKeyEquivalent: VLCKeyToString(keyString)];
-    [_random setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-zoom-half");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_half_window setKeyEquivalent: VLCKeyToString(keyString)];
-    [_half_window setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-zoom-original");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_normal_window setKeyEquivalent: VLCKeyToString(keyString)];
-    [_normal_window setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
-
-    key = config_GetPsz("key-zoom-double");
-    keyString = [NSString stringWithFormat:@"%s", key];
-    [_double_window setKeyEquivalent: VLCKeyToString(keyString)];
-    [_double_window setKeyEquivalentModifierMask: VLCModifiersToCocoa(keyString)];
-    FREENULL(key);
+    [self setupKeyboardShortcuts];
 
     [self setSubmenusEnabled: YES];
 
@@ -250,8 +153,10 @@
                                name:VLCPlaybackOrderChanged
                              object:self];
 
-    [self setupVarMenuItem:_add_intf target: (vlc_object_t *)p_intf
-                             var:"intf-add" selector: @selector(toggleVar:)];
+    [self setupVarMenuItem:_add_intf
+                    target:VLC_OBJECT(getIntf())
+                       var:"intf-add"
+                  selector:@selector(toggleVar:)];
 
     /* setup extensions menu */
     /* Let the ExtensionsManager itself build the menu */
@@ -260,26 +165,22 @@
     [_extensions setEnabled: ([_extensionsMenu numberOfItems] > 0)];
 
     // FIXME: Implement preference for autoloading extensions on mac
+    // FIXME: this is definitely the wrong place to do this.
     if (![extMgr isLoaded] && ![extMgr cannotLoad])
         [extMgr loadExtensions];
 
     /* setup post-proc menu */
-    NSUInteger count = (NSUInteger) [_postprocessingMenu numberOfItems];
-    if (count > 0)
-        [_postprocessingMenu removeAllItems];
-
-    // FIXME: re-write the following using VLCPlayerController
-    NSMenuItem *mitem;
+    [_postprocessingMenu removeAllItems];
     [_postprocessingMenu setAutoenablesItems: YES];
     [_postprocessingMenu addItemWithTitle: _NS("Disable") action:@selector(togglePostProcessing:) keyEquivalent:@""];
-    mitem = [_postprocessingMenu itemAtIndex: 0];
+    NSMenuItem *mitem = [_postprocessingMenu itemAtIndex: 0];
     [mitem setTag: -1];
     [mitem setEnabled: YES];
     [mitem setTarget: self];
     for (NSUInteger x = 1; x < 7; x++) {
         [_postprocessingMenu addItemWithTitle:[NSString stringWithFormat:_NS("Level %i"), x]
-                                               action:@selector(togglePostProcessing:)
-                                        keyEquivalent:@""];
+                                       action:@selector(togglePostProcessing:)
+                                keyEquivalent:@""];
         mitem = [_postprocessingMenu itemAtIndex:x];
         [mitem setEnabled:YES];
         [mitem setTag:x];
@@ -327,14 +228,14 @@
         { NULL, 0 }
     };
 
-    for(int i = 0; scaleValues[i].name; i++) {
+    for (int i = 0; scaleValues[i].name; i++) {
         NSMenuItem *menuItem = [_subtitle_sizeMenu addItemWithTitle: _NS(scaleValues[i].name) action:@selector(switchSubtitleSize:) keyEquivalent:@""];
         [menuItem setTag:scaleValues[i].scaleValue];
         [menuItem setTarget: self];
     }
 }
 
-- (void)setupMenu: (NSMenu*)menu withIntList: (char *)psz_name andSelector:(SEL)selector
+- (void)setupMenu:(NSMenu *)menu withIntList:(char *)psz_name andSelector:(SEL)selector
 {
     module_config_t *p_item;
 
@@ -548,6 +449,88 @@
     [_voutMenusnapshot setTitle: _NS("Snapshot")];
 }
 
+- (void)setupKeyboardShortcuts
+{
+    char *key;
+
+    key = config_GetPsz("key-quit");
+    [_quit setKeyEquivalent: VLCKeyToString(key)];
+    [_quit setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    // do not assign play/pause key
+
+    key = config_GetPsz("key-stop");
+    [_stop setKeyEquivalent: VLCKeyToString(key)];
+    [_stop setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-prev");
+    [_previous setKeyEquivalent: VLCKeyToString(key)];
+    [_previous setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-next");
+    [_next setKeyEquivalent: VLCKeyToString(key)];
+    [_next setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-jump+short");
+    [_fwd setKeyEquivalent: VLCKeyToString(key)];
+    [_fwd setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-jump-short");
+    [_bwd setKeyEquivalent: VLCKeyToString(key)];
+    [_bwd setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-vol-up");
+    [_vol_up setKeyEquivalent: VLCKeyToString(key)];
+    [_vol_up setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-vol-down");
+    [_vol_down setKeyEquivalent: VLCKeyToString(key)];
+    [_vol_down setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-vol-mute");
+    [_mute setKeyEquivalent: VLCKeyToString(key)];
+    [_mute setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-toggle-fullscreen");
+    [_fullscreenItem setKeyEquivalent: VLCKeyToString(key)];
+    [_fullscreenItem setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-snapshot");
+    [_snapshot setKeyEquivalent: VLCKeyToString(key)];
+    [_snapshot setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-random");
+    [_random setKeyEquivalent: VLCKeyToString(key)];
+    [_random setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-zoom-half");
+    [_half_window setKeyEquivalent: VLCKeyToString(key)];
+    [_half_window setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-zoom-original");
+    [_normal_window setKeyEquivalent: VLCKeyToString(key)];
+    [_normal_window setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+
+    key = config_GetPsz("key-zoom-double");
+    [_double_window setKeyEquivalent: VLCKeyToString(key)];
+    [_double_window setKeyEquivalentModifierMask: VLCModifiersToCocoa(key)];
+    FREENULL(key);
+}
+
 #pragma mark - Termination
 
 - (void)releaseRepresentedObjects:(NSMenu *)the_menu
@@ -567,10 +550,10 @@
 
 - (void)setupMenus
 {
-    playlist_t *p_playlist = pl_Get(getIntf());
-    input_thread_t *p_input = playlist_CurrentInput(p_playlist);
-    if (p_input != NULL) {
-        [self setupVarMenuItem:_program target: (vlc_object_t *)p_input
+    input_item_t *p_mediaItem = _playerController.currentMedia;
+
+    if (p_mediaItem != NULL) {
+/*        [self setupVarMenuItem:_program target: (vlc_object_t *)p_input
                                  var:"program" selector: @selector(toggleVar:)];
 
         [self setupVarMenuItem:_title target: (vlc_object_t *)p_input
@@ -586,39 +569,38 @@
                                  var:"video-es" selector: @selector(toggleVar:)];
 
         [self setupVarMenuItem:_subtitle_track target: (vlc_object_t *)p_input
-                                 var:"spu-es" selector: @selector(toggleVar:)];
+                                 var:"spu-es" selector: @selector(toggleVar:)];*/
 
         audio_output_t *p_aout = [_playerController mainAudioOutput];
         if (p_aout != NULL) {
-            [self setupVarMenuItem:_channels target: (vlc_object_t *)p_aout
-                                     var:"stereo-mode" selector: @selector(toggleVar:)];
+            [self setupVarMenuItem:_channels target:VLC_OBJECT(p_aout)
+                               var:"stereo-mode" selector:@selector(toggleVar:)];
 
-            [self setupVarMenuItem:_visual target: (vlc_object_t *)p_aout
-                                     var:"visual" selector: @selector(toggleVar:)];
+            [self setupVarMenuItem:_visual target:VLC_OBJECT(p_aout)
+                               var:"visual" selector:@selector(toggleVar:)];
             aout_Release(p_aout);
         }
 
         vout_thread_t *p_vout = [_playerController videoOutputThreadForKeyWindow];
-
         if (p_vout != NULL) {
-            [self setupVarMenuItem:_aspect_ratio target: (vlc_object_t *)p_vout
-                                     var:"aspect-ratio" selector: @selector(toggleVar:)];
+            [self setupVarMenuItem:_aspect_ratio target:VLC_OBJECT(p_vout)
+                               var:"aspect-ratio" selector: @selector(toggleVar:)];
 
-            [self setupVarMenuItem:_crop target: (vlc_object_t *) p_vout
-                                     var:"crop" selector: @selector(toggleVar:)];
+            [self setupVarMenuItem:_crop target:VLC_OBJECT(p_vout)
+                               var:"crop" selector: @selector(toggleVar:)];
 
-            [self setupVarMenuItem:_deinterlace target: (vlc_object_t *)p_vout
-                                     var:"deinterlace" selector: @selector(toggleVar:)];
+            [self setupVarMenuItem:_deinterlace target:VLC_OBJECT(p_vout)
+                               var:"deinterlace" selector: @selector(toggleVar:)];
 
-            [self setupVarMenuItem:_deinterlace_mode target: (vlc_object_t *)p_vout
-                                     var:"deinterlace-mode" selector: @selector(toggleVar:)];
+            [self setupVarMenuItem:_deinterlace_mode target:VLC_OBJECT(p_vout)
+                               var:"deinterlace-mode" selector: @selector(toggleVar:)];
 
             vout_Release(p_vout);
 
             [self refreshVoutDeviceMenu:nil];
         }
         [_postprocessing setEnabled:YES];
-        input_Release(p_input);
+        input_item_Release(p_mediaItem);
     } else {
         [_postprocessing setEnabled:NO];
     }
@@ -626,29 +608,28 @@
 
 - (void)refreshVoutDeviceMenu:(NSNotification *)notification
 {
-    NSUInteger count = (NSUInteger) [_screenMenu numberOfItems];
     NSMenu *submenu = _screenMenu;
-    if (count > 0)
-        [submenu removeAllItems];
+    [submenu removeAllItems];
 
     NSArray *screens = [NSScreen screens];
-    NSMenuItem *mitem;
-    count = [screens count];
+    NSMenuItem *menuItem;
+    NSUInteger numberOfScreens = [screens count];
     [_screen setEnabled: YES];
     [submenu addItemWithTitle: _NS("Default") action:@selector(toggleFullscreenDevice:) keyEquivalent:@""];
-    mitem = [submenu itemAtIndex: 0];
-    [mitem setTag: 0];
-    [mitem setEnabled: YES];
-    [mitem setTarget: self];
+    menuItem = [submenu itemAtIndex: 0];
+    [menuItem setTag: 0];
+    [menuItem setEnabled: YES];
+    [menuItem setTarget: self];
     NSRect s_rect;
-    for (NSUInteger i = 0; i < count; i++) {
+    for (NSUInteger i = 0; i < numberOfScreens; i++) {
         s_rect = [[screens objectAtIndex:i] frame];
-        [submenu addItemWithTitle: [NSString stringWithFormat: @"%@ %li (%ix%i)", _NS("Screen"), i+1,
-                                      (int)s_rect.size.width, (int)s_rect.size.height] action:@selector(toggleFullscreenDevice:) keyEquivalent:@""];
-        mitem = [submenu itemAtIndex:i+1];
-        [mitem setTag: (int)[[screens objectAtIndex:i] displayID]];
-        [mitem setEnabled: YES];
-        [mitem setTarget: self];
+        [submenu addItemWithTitle:[NSString stringWithFormat: @"%@ %li (%ix%i)", _NS("Screen"), i+1, (int)s_rect.size.width, (int)s_rect.size.height]
+                           action:@selector(toggleFullscreenDevice:)
+                    keyEquivalent:@""];
+        menuItem = [submenu itemAtIndex:i+1];
+        [menuItem setTag: (int)[[screens objectAtIndex:i] displayID]];
+        [menuItem setEnabled: YES];
+        [menuItem setTarget: self];
     }
     [[submenu itemWithTag: var_InheritInteger(getIntf(), "macosx-vdev")] setState: NSOnState];
 }
@@ -744,27 +725,31 @@
 
 - (IBAction)play:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] playOrPause];
+    [_playerController togglePlayPause];
 }
 
 - (IBAction)stop:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] stop];
+    [_playerController stop];
 }
 
 - (IBAction)prev:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] previous];
+    [_playlistController playPreviousItem];
 }
 
 - (IBAction)next:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] next];
+    [_playlistController playNextItem];
 }
 
 - (IBAction)random:(id)sender
 {
-    [[VLCCoreInteraction sharedInstance] shuffle];
+    if (_playlistController.playbackOrder == VLC_PLAYLIST_PLAYBACK_ORDER_RANDOM) {
+        _playlistController.playbackOrder = VLC_PLAYLIST_PLAYBACK_ORDER_NORMAL;
+    } else {
+        _playlistController.playbackOrder = VLC_PLAYLIST_PLAYBACK_ORDER_RANDOM;
+    }
 }
 
 - (IBAction)repeat:(id)sender
@@ -819,7 +804,11 @@
 
 - (IBAction)quitAfterPlayback:(id)sender
 {
-    _playerController.actionAfterStop = VLC_PLAYER_MEDIA_STOPPED_EXIT;
+    if (_playerController.actionAfterStop != VLC_PLAYER_MEDIA_STOPPED_EXIT) {
+        _playerController.actionAfterStop = VLC_PLAYER_MEDIA_STOPPED_EXIT;
+    } else {
+        _playerController.actionAfterStop = VLC_PLAYER_MEDIA_STOPPED_CONTINUE;
+    }
 }
 
 - (IBAction)toggleRecord:(id)sender
@@ -891,8 +880,8 @@
     if (!p_aout)
         return;
 
-    int n = aout_DevicesList(p_aout, &ids, &names);
-    if (n == -1) {
+    int numberOfAudioDevices = aout_DevicesList(p_aout, &ids, &names);
+    if (numberOfAudioDevices == -1) {
         aout_Release(p_aout);
         return;
     }
@@ -900,7 +889,7 @@
     currentDevice = aout_DeviceGet(p_aout);
     NSMenuItem *_tmp;
 
-    for (NSUInteger x = 0; x < n; x++) {
+    for (NSUInteger x = 0; x < numberOfAudioDevices; x++) {
         _tmp = [_audioDeviceMenu addItemWithTitle:toNSStr(names[x]) action:@selector(toggleAudioDevice:) keyEquivalent:@""];
         [_tmp setTarget:self];
         [_tmp setTag:[[NSString stringWithFormat:@"%s", ids[x]] intValue]];
@@ -911,7 +900,7 @@
 
     free(currentDevice);
 
-    for (NSUInteger x = 0; x < n; x++) {
+    for (NSUInteger x = 0; x < numberOfAudioDevices; x++) {
         free(ids[x]);
         free(names[x]);
     }
@@ -1356,7 +1345,7 @@
 
 #pragma mark - Dynamic menu creation and validation
 
-- (void)setupVarMenuItem:(NSMenuItem *)mi
+- (void)setupVarMenuItem:(NSMenuItem *)menuItem
                   target:(vlc_object_t *)p_object
                      var:(const char *)psz_variable
                 selector:(SEL)pf_callback
@@ -1379,12 +1368,12 @@
 
     /* Get the descriptive name of the variable */
     var_Change(p_object, psz_variable, VLC_VAR_GETTEXT, &text);
-    [mi setTitle: _NS(text ? text : psz_variable)];
+    [menuItem setTitle: _NS(text ? text : psz_variable)];
 
     if (i_type & VLC_VAR_HASCHOICE) {
-        NSMenu *menu = [mi submenu];
+        NSMenu *menu = [menuItem submenu];
 
-        [self setupVarMenu:menu forMenuItem:mi target:p_object
+        [self setupVarMenu:menu forMenuItem:menuItem target:p_object
                        var:psz_variable selector:pf_callback];
 
         free(text);
@@ -1399,15 +1388,15 @@
         case VLC_VAR_VOID:
             data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: psz_variable ofObject: p_object
                                                                       andValue: val ofType: i_type];
-            [mi setRepresentedObject:data];
+            [menuItem setRepresentedObject:data];
             break;
 
         case VLC_VAR_BOOL:
             data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: psz_variable ofObject: p_object
                                                                       andValue: val ofType: i_type];
-            [mi setRepresentedObject:data];
+            [menuItem setRepresentedObject:data];
             if (!(i_type & VLC_VAR_ISCOMMAND))
-                [mi setState: val.b_bool ? TRUE : FALSE ];
+                [menuItem setState: val.b_bool ? TRUE : FALSE ];
             break;
 
         default:
diff --git a/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m b/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m
index fc6316a492..78bdadbfcf 100644
--- a/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m
+++ b/modules/gui/macosx/windows/mainwindow/VLCMainWindow.m
@@ -86,50 +86,46 @@ static const float f_min_window_height = 307.;
 #pragma mark -
 #pragma mark Initialization
 
-- (BOOL)isEvent:(NSEvent *)o_event forKey:(const char *)keyString
+- (BOOL)isEvent:(NSEvent *)anEvent forKey:(const char *)keyString
 {
-    char *key;
-    NSString *o_key;
-
-    key = config_GetPsz(keyString);
-    o_key = [NSString stringWithFormat:@"%s", key];
+    char *key = config_GetPsz(keyString);
+    unsigned int keyModifiers = VLCModifiersToCocoa(key);
+    NSString *vlcKeyString = VLCKeyToString(key);
     FREENULL(key);
 
-    unsigned int i_keyModifiers = VLCModifiersToCocoa(o_key);
-
-    NSString * characters = [o_event charactersIgnoringModifiers];
+    NSString *characters = [anEvent charactersIgnoringModifiers];
     if ([characters length] > 0) {
-        return [[characters lowercaseString] isEqualToString: VLCKeyToString(o_key)] &&
-                (i_keyModifiers & NSShiftKeyMask)     == ([o_event modifierFlags] & NSShiftKeyMask) &&
-                (i_keyModifiers & NSControlKeyMask)   == ([o_event modifierFlags] & NSControlKeyMask) &&
-                (i_keyModifiers & NSAlternateKeyMask) == ([o_event modifierFlags] & NSAlternateKeyMask) &&
-                (i_keyModifiers & NSCommandKeyMask)   == ([o_event modifierFlags] & NSCommandKeyMask);
+        return [[characters lowercaseString] isEqualToString: vlcKeyString] &&
+        (keyModifiers & NSShiftKeyMask)     == ([anEvent modifierFlags] & NSShiftKeyMask) &&
+        (keyModifiers & NSControlKeyMask)   == ([anEvent modifierFlags] & NSControlKeyMask) &&
+        (keyModifiers & NSAlternateKeyMask) == ([anEvent modifierFlags] & NSAlternateKeyMask) &&
+        (keyModifiers & NSCommandKeyMask)   == ([anEvent modifierFlags] & NSCommandKeyMask);
     }
     return NO;
 }
 
-- (BOOL)performKeyEquivalent:(NSEvent *)o_event
+- (BOOL)performKeyEquivalent:(NSEvent *)anEvent
 {
     BOOL b_force = NO;
     // these are key events which should be handled by vlc core, but are attached to a main menu item
-    if (![self isEvent: o_event forKey: "key-vol-up"] &&
-        ![self isEvent: o_event forKey: "key-vol-down"] &&
-        ![self isEvent: o_event forKey: "key-vol-mute"] &&
-        ![self isEvent: o_event forKey: "key-prev"] &&
-        ![self isEvent: o_event forKey: "key-next"] &&
-        ![self isEvent: o_event forKey: "key-jump+short"] &&
-        ![self isEvent: o_event forKey: "key-jump-short"]) {
+    if (![self isEvent: anEvent forKey: "key-vol-up"] &&
+        ![self isEvent: anEvent forKey: "key-vol-down"] &&
+        ![self isEvent: anEvent forKey: "key-vol-mute"] &&
+        ![self isEvent: anEvent forKey: "key-prev"] &&
+        ![self isEvent: anEvent forKey: "key-next"] &&
+        ![self isEvent: anEvent forKey: "key-jump+short"] &&
+        ![self isEvent: anEvent forKey: "key-jump-short"]) {
         /* We indeed want to prioritize some Cocoa key equivalent against libvlc,
          so we perform the menu equivalent now. */
-        if ([[NSApp mainMenu] performKeyEquivalent:o_event])
+        if ([[NSApp mainMenu] performKeyEquivalent:anEvent])
             return TRUE;
-    }
-    else
+    } else {
         b_force = YES;
+    }
 
     VLCCoreInteraction *coreInteraction = [VLCCoreInteraction sharedInstance];
-    return [coreInteraction hasDefinedShortcutKey:o_event force:b_force] ||
-           [coreInteraction keyEvent:o_event];
+    return [coreInteraction hasDefinedShortcutKey:anEvent force:b_force] ||
+           [coreInteraction keyEvent:anEvent];
 }
 
 - (void)dealloc



More information about the vlc-commits mailing list