[vlc-commits] [Git][videolan/vlc][master] 3 commits: macosx: Add menu item to toggle favorite on media library item(s)

Marvin Scholz (@ePirat) gitlab at videolan.org
Sun Jul 6 15:54:34 UTC 2025



Marvin Scholz pushed to branch master at VideoLAN / VLC


Commits:
a0d3f7f6 by Claudio Cambra at 2025-07-06T15:41:43+00:00
macosx: Add menu item to toggle favorite on media library item(s)

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
9236cfc6 by Claudio Cambra at 2025-07-06T15:41:43+00:00
macosx: Provide more descriptive and predictable favouriting behaviour in item menus

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
8f523cb6 by Claudio Cambra at 2025-07-06T15:41:43+00:00
macosx: Assign favoriteItem property to menu item directly on instantiation

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -


1 changed file:

- modules/gui/macosx/library/VLCLibraryMenuController.m


Changes:

=====================================
modules/gui/macosx/library/VLCLibraryMenuController.m
=====================================
@@ -50,6 +50,9 @@
     NSHashTable<NSMenuItem*> *_localInputItemRequiringMenuItems;
     NSHashTable<NSMenuItem*> *_folderInputItemRequiringMenuItems;
 }
+
+ at property (readwrite) NSMenuItem *favoriteItem;
+
 @end
 
 @implementation VLCLibraryMenuController
@@ -91,10 +94,14 @@
                                                           keyEquivalent:@""];
     bookmarkItem.target = self;
 
+    _favoriteItem = [[NSMenuItem alloc] initWithTitle:_NS("Toggle Favorite") action:@selector(toggleFavorite:) keyEquivalent:@""];
+    self.favoriteItem.target = self;
+
     _libraryMenu = [[NSMenu alloc] initWithTitle:@""];
     [_libraryMenu addMenuItemsFromArray:@[
         playItem,
         appendItem,
+        self.favoriteItem,
         bookmarkItem,
         revealItem,
         deleteItem,
@@ -107,6 +114,7 @@
     _mediaItemRequiringMenuItems = [NSHashTable weakObjectsHashTable];
     [_mediaItemRequiringMenuItems addObject:playItem];
     [_mediaItemRequiringMenuItems addObject:appendItem];
+    [_mediaItemRequiringMenuItems addObject:self.favoriteItem];
     [_mediaItemRequiringMenuItems addObject:revealItem];
     [_mediaItemRequiringMenuItems addObject:deleteItem];
     [_mediaItemRequiringMenuItems addObject:informationItem];
@@ -155,6 +163,20 @@
             }
         }
         [self menuItems:_recentsMediaItemRequiringMenuItems setHidden:anyNonRecent];
+        
+        __block BOOL anyUnfavorited = NO;
+        for (VLCLibraryRepresentedItem * const item in self.representedItems) {
+            [item.item iterateMediaItemsWithBlock:^(VLCMediaLibraryMediaItem * _Nonnull const mediaItem) {
+                if (!mediaItem.favorited) {
+                    anyUnfavorited = YES;
+                    return;
+                }
+            }];
+            if (anyUnfavorited)
+                break;
+        }
+        self.favoriteItem.title = anyUnfavorited ? _NS("Add to Favorites") : _NS("Remove from Favorites");
+        self.favoriteItem.action = anyUnfavorited ? @selector(addFavorite:) : @selector(removeFavorite:);
 
     } else if (_representedInputItems != nil && self.representedInputItems.count > 0) {
         [self menuItems:_mediaItemRequiringMenuItems setHidden:YES];
@@ -284,6 +306,25 @@
     [_informationWindowController toggleWindow:sender];
 }
 
+- (void)addFavorite:(id)sender
+{
+    [self setItemsFavorite:YES];
+}
+
+- (void)removeFavorite:(id)sender
+{
+    [self setItemsFavorite:NO];
+}
+
+- (void)setItemsFavorite:(BOOL)favorite
+{
+    for (VLCLibraryRepresentedItem * const item in self.representedItems) {
+        [item.item iterateMediaItemsWithBlock:^(VLCMediaLibraryMediaItem * _Nonnull const mediaItem) {
+            [mediaItem setFavorite:favorite];
+        }];
+    }
+}
+
 - (void)toggleBookmark:(id)sender
 {
     if (self.representedInputItems == nil || 



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/87247e6cf3a275680ebf50304969c3b72f0826a5...8f523cb62563868a12dd26fdd14dd2b46a843edc

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/87247e6cf3a275680ebf50304969c3b72f0826a5...8f523cb62563868a12dd26fdd14dd2b46a843edc
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list