[vlc-commits] [Git][videolan/vlc][master] macosx: move nib loading helper to NSView category

Jean-Baptiste Kempf (@jbk) gitlab at videolan.org
Sat May 9 17:30:32 UTC 2026



Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC


Commits:
fc961c99 by Serhii Bykov at 2026-05-09T19:15:49+02:00
macosx: move nib loading helper to NSView category

- - - - -


26 changed files:

- modules/gui/macosx/extensions/NSView+VLCAdditions.h
- modules/gui/macosx/extensions/NSView+VLCAdditions.m
- modules/gui/macosx/library/VLCLibraryCarouselViewItemView.h
- modules/gui/macosx/library/VLCLibraryCarouselViewItemView.m
- modules/gui/macosx/library/VLCLibraryHeroView.h
- modules/gui/macosx/library/VLCLibraryHeroView.m
- modules/gui/macosx/library/VLCLibraryTableCellView.h
- modules/gui/macosx/library/VLCLibraryTableCellView.m
- modules/gui/macosx/library/VLCLibraryTableViewDelegate.h
- modules/gui/macosx/library/VLCLibraryTableViewDelegate.m
- modules/gui/macosx/library/audio-library/VLCLibraryAlbumTableCellView.h
- modules/gui/macosx/library/audio-library/VLCLibraryAlbumTableCellView.m
- modules/gui/macosx/library/audio-library/VLCLibraryAlbumTracksTableViewDelegate.m
- modules/gui/macosx/library/audio-library/VLCLibraryAudioDataSource.m
- modules/gui/macosx/library/audio-library/VLCLibraryAudioGroupTableViewDelegate.m
- modules/gui/macosx/library/audio-library/VLCLibraryAudioTableViewDelegate.m
- modules/gui/macosx/library/audio-library/VLCLibrarySongTableCellView.h
- modules/gui/macosx/library/audio-library/VLCLibrarySongTableCellView.m
- modules/gui/macosx/library/home-library/VLCLibraryHomeViewActionsView.h
- modules/gui/macosx/library/home-library/VLCLibraryHomeViewActionsView.m
- modules/gui/macosx/library/home-library/VLCLibraryHomeViewStackViewController.m
- modules/gui/macosx/library/home-library/VLCLibraryHomeViewVideoContainerViewDataSource.m
- modules/gui/macosx/library/video-library/VLCLibraryVideoTableViewDelegate.m
- modules/gui/macosx/playqueue/VLCPlayQueueDataSource.m
- modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.h
- modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.m


Changes:

=====================================
modules/gui/macosx/extensions/NSView+VLCAdditions.h
=====================================
@@ -28,6 +28,7 @@ NS_ASSUME_NONNULL_BEGIN
 @interface NSView (VLCAdditions)
 
 + (instancetype)fromNibNamed:(NSString *)nibName withClass:(Class)viewClass withOwner:(id)owner;
++ (instancetype)fromNibWithOwner:(id)owner;
 
 @property (readonly) BOOL shouldShowDarkAppearance;
 


=====================================
modules/gui/macosx/extensions/NSView+VLCAdditions.m
=====================================
@@ -27,6 +27,11 @@
 
 @implementation NSView (VLCAdditions)
 
++ (instancetype)fromNibWithOwner:(id)owner
+{
+    return [self fromNibNamed:NSStringFromClass(self) withClass:self withOwner:owner];
+}
+
 + (instancetype)fromNibNamed:(NSString *)nibName withClass:(Class)viewClass withOwner:(id)owner
 {
     /* the following code saves us an instance of NSViewController which we don't need */


=====================================
modules/gui/macosx/library/VLCLibraryCarouselViewItemView.h
=====================================
@@ -44,8 +44,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (readwrite, nonatomic) BOOL selected;
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 - (void)playRepresentedItem;
 
 @end


=====================================
modules/gui/macosx/library/VLCLibraryCarouselViewItemView.m
=====================================
@@ -46,13 +46,6 @@
 
 @implementation VLCLibraryCarouselViewItemView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibraryCarouselViewItemView *)[NSView fromNibNamed:@"VLCLibraryCarouselViewItemView"
-                                                        withClass:VLCLibraryCarouselViewItemView.class
-                                                        withOwner:owner];
-}
-
 - (instancetype)init
 {
     self = [super init];


=====================================
modules/gui/macosx/library/VLCLibraryHeroView.h
=====================================
@@ -38,8 +38,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (readwrite, nonatomic) VLCLibraryRepresentedItem *representedItem;
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 - (IBAction)playRepresentedItem:(id)sender;
 - (void)setOptimalRepresentedItem;
 


=====================================
modules/gui/macosx/library/VLCLibraryHeroView.m
=====================================
@@ -45,13 +45,6 @@
 
 @implementation VLCLibraryHeroView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibraryHeroView*)[NSView fromNibNamed:@"VLCLibraryHeroView"
-                                                     withClass:VLCLibraryHeroView.class
-                                                     withOwner:owner];
-}
-
 - (void)awakeFromNib
 {
     self.largeImageView.contentGravity = VLCImageViewContentGravityResizeAspectFill;


=====================================
modules/gui/macosx/library/VLCLibraryTableCellView.h
=====================================
@@ -36,8 +36,6 @@ extern NSString * const VLCLibraryTableCellViewIdentifier;
 
 @interface VLCLibraryTableCellView : NSTableCellView<VLCLibraryTableCellViewProtocol>
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 @property (readwrite, weak) IBOutlet VLCTrackingView *trackingView;
 @property (readwrite, weak) IBOutlet NSTextField *singlePrimaryTitleTextField;
 @property (readwrite, weak) IBOutlet NSTextField *secondaryTitleTextField;


=====================================
modules/gui/macosx/library/VLCLibraryTableCellView.m
=====================================
@@ -47,13 +47,6 @@ NSString * const VLCLibraryTableCellViewIdentifier = @"VLCLibraryTableCellViewId
 
 @implementation VLCLibraryTableCellView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibraryTableCellView*)[NSView fromNibNamed:NSStringFromClass(VLCLibraryTableCellView.class)
-                                                withClass:[VLCLibraryTableCellView class]
-                                                withOwner:owner];
-}
-
 - (void)awakeFromNib
 {
     [self prepareForReuse];


=====================================
modules/gui/macosx/library/VLCLibraryTableViewDelegate.h
=====================================
@@ -22,12 +22,15 @@
 
 #import <Cocoa/Cocoa.h>
 
+#import "library/VLCLibraryTableCellViewProtocol.h"
+
 NS_ASSUME_NONNULL_BEGIN
 
 @interface VLCLibraryTableViewDelegate : NSObject <NSTableViewDelegate>
 
 @property (readwrite, assign) NSString *cellViewIdentifier;
- at property (readwrite, assign) Class cellViewClass;
+
+- (NSView<VLCLibraryTableCellViewProtocol> *)makeCellView;
 
 @end
 


=====================================
modules/gui/macosx/library/VLCLibraryTableViewDelegate.m
=====================================
@@ -23,6 +23,7 @@
 #import "VLCLibraryTableViewDelegate.h"
 
 #import "extensions/NSColor+VLCAdditions.h"
+#import "extensions/NSView+VLCAdditions.h"
 #import "extensions/NSString+Helpers.h"
 
 #import "library/VLCInputItem.h"
@@ -44,11 +45,15 @@
     self = [super init];
     if (self) {
         self.cellViewIdentifier = @"VLCLibraryTableViewCellIdentifier";
-        self.cellViewClass = [VLCLibraryTableCellView class];
     }
     return self;
 }
 
+- (NSView<VLCLibraryTableCellViewProtocol> *)makeCellView
+{
+    return [VLCLibraryTableCellView fromNibWithOwner:self];
+}
+
 - (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
 {
     if (![tableView.dataSource conformsToProtocol:@protocol(VLCLibraryTableViewDataSource)]) {
@@ -60,8 +65,8 @@
 
     NSView<VLCLibraryTableCellViewProtocol> * cellView = (NSView<VLCLibraryTableCellViewProtocol> *)[tableView makeViewWithIdentifier:self.cellViewIdentifier owner:self];
 
-    if (cellView == nil && [self.cellViewClass respondsToSelector:@selector(fromNibWithOwner:)]) {
-        cellView = [self.cellViewClass fromNibWithOwner:self];
+    if (cellView == nil) {
+        cellView = [self makeCellView];
         cellView.identifier = self.cellViewIdentifier;
     }
 


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAlbumTableCellView.h
=====================================
@@ -38,7 +38,6 @@ extern NSString * const VLCLibraryAlbumTableCellTableViewColumnIdentifier;
 
 @property (class, readonly) CGFloat defaultHeight;
 
-+ (instancetype)fromNibWithOwner:(id)owner;
 + (CGFloat)heightForAlbum:(VLCMediaLibraryAlbum *)album;
 
 @property (readwrite, weak) IBOutlet VLCTrackingView *trackingView;


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAlbumTableCellView.m
=====================================
@@ -80,13 +80,6 @@ const CGFloat VLCLibraryAlbumTableCellViewDefaultHeight = 168.;
 
 @implementation VLCLibraryAlbumTableCellView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibraryAlbumTableCellView*)[NSView fromNibNamed:@"VLCLibraryAlbumTableCellView"
-                                                     withClass:[VLCLibraryAlbumTableCellView class]
-                                                     withOwner:owner];
-}
-
 + (CGFloat)defaultHeight
 {
     return VLCLibraryAlbumTableCellViewDefaultHeight;


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAlbumTracksTableViewDelegate.m
=====================================
@@ -22,6 +22,8 @@
 
 #import "VLCLibraryAlbumTracksTableViewDelegate.h"
 
+#import "extensions/NSView+VLCAdditions.h"
+
 #import "library/audio-library/VLCLibrarySongTableCellView.h"
 
 @implementation VLCLibraryAlbumTracksTableViewDelegate
@@ -31,10 +33,14 @@
     self = [super init];
     if (self) {
         self.cellViewIdentifier = VLCAudioLibrarySongCellIdentifier;
-        self.cellViewClass = [VLCLibrarySongTableCellView class];
     }
     return self;
 }
 
+- (NSView<VLCLibraryTableCellViewProtocol> *)makeCellView
+{
+    return [VLCLibrarySongTableCellView fromNibWithOwner:self];
+}
+
 
 @end


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioDataSource.m
=====================================
@@ -22,6 +22,8 @@
 
 #import "VLCLibraryAudioDataSource.h"
 
+#import "extensions/NSView+VLCAdditions.h"
+
 #import "main/VLCMain.h"
 
 #import "library/VLCInputItem.h"


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioGroupTableViewDelegate.m
=====================================
@@ -22,6 +22,8 @@
 
 #import "VLCLibraryAudioGroupTableViewDelegate.h"
 
+#import "extensions/NSView+VLCAdditions.h"
+
 #import "VLCLibraryAlbumTableCellView.h"
 #import "VLCLibraryAudioDataSource.h"
 
@@ -35,11 +37,15 @@
     self = [super init];
     if (self) {
         self.cellViewIdentifier = VLCAudioLibraryCellIdentifier;
-        self.cellViewClass = [VLCLibraryAlbumTableCellView class];
     }
     return self;
 }
 
+- (NSView<VLCLibraryTableCellViewProtocol> *)makeCellView
+{
+    return [VLCLibraryAlbumTableCellView fromNibWithOwner:self];
+}
+
 - (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)rowIndex
 {
     // We use this with nested table views, since the table view cell is the VLCLibraryAlbumTableCellView.


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioTableViewDelegate.m
=====================================
@@ -38,7 +38,6 @@
     self = [super init];
     if (self) {
         self.cellViewIdentifier = VLCAudioLibraryCellIdentifier;
-        self.cellViewClass = [VLCLibraryTableCellView class];
     }
     return self;
 }


=====================================
modules/gui/macosx/library/audio-library/VLCLibrarySongTableCellView.h
=====================================
@@ -34,8 +34,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 extern NSString *VLCAudioLibrarySongCellIdentifier;
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 @property (readwrite, weak) IBOutlet VLCTrackingView *trackingView;
 @property (readwrite, weak) IBOutlet NSTextField *songNameTextField;
 @property (readwrite, weak) IBOutlet NSTextField *durationTextField;


=====================================
modules/gui/macosx/library/audio-library/VLCLibrarySongTableCellView.m
=====================================
@@ -52,13 +52,6 @@ NSString *VLCAudioLibrarySongCellIdentifier = @"VLCAudioLibrarySongCellIdentifie
 
 @implementation VLCLibrarySongTableCellView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibrarySongTableCellView*)[NSView fromNibNamed:@"VLCLibrarySongTableCellView"
-                                                     withClass:[VLCLibrarySongTableCellView class]
-                                                     withOwner:owner];
-}
-
 - (void)awakeFromNib
 {
     self.playInstantlyButton.target = self;


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewActionsView.h
=====================================
@@ -32,8 +32,6 @@ NS_ASSUME_NONNULL_BEGIN
 @property (readwrite, weak) IBOutlet NSButton *openCaptureDeviceButton;
 @property (readwrite, weak) IBOutlet NSButton *openBrowseButton;
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 - (IBAction)openFileAction:(id)sender;
 - (IBAction)openDiscAction:(id)sender;
 - (IBAction)openUrlAction:(id)sender;


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewActionsView.m
=====================================
@@ -30,14 +30,6 @@
 
 @implementation VLCLibraryHomeViewActionsView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCLibraryHomeViewActionsView*)[NSView fromNibNamed:@"VLCLibraryHomeViewActionsView"
-                                                      withClass:VLCLibraryHomeViewActionsView.class
-                                                      withOwner:owner];
-}
-
-
 - (void)awakeFromNib
 {
     [super awakeFromNib];


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewStackViewController.m
=====================================
@@ -25,6 +25,8 @@
 #import "library/VLCLibraryCollectionViewDelegate.h"
 #import "library/VLCLibraryCollectionViewFlowLayout.h"
 #import "library/VLCLibraryCollectionViewSupplementaryElementView.h"
+#import "extensions/NSView+VLCAdditions.h"
+
 #import "library/VLCLibraryController.h"
 #import "library/VLCLibraryHeroView.h"
 #import "library/VLCLibraryModel.h"


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewVideoContainerViewDataSource.m
=====================================
@@ -22,6 +22,8 @@
 
 #import "VLCLibraryHomeViewVideoContainerViewDataSource.h"
 
+#import "extensions/NSView+VLCAdditions.h"
+
 #import "library/VLCLibraryCarouselViewItemView.h"
 #import "library/VLCLibraryCollectionViewFlowLayout.h"
 #import "library/VLCLibraryCollectionViewItem.h"


=====================================
modules/gui/macosx/library/video-library/VLCLibraryVideoTableViewDelegate.m
=====================================
@@ -41,7 +41,6 @@
     self = [super init];
     if (self) {
         self.cellViewIdentifier = @"VLCVideoLibraryTableViewCellIdentifier";
-        self.cellViewClass = [VLCLibraryTableCellView class];
     }
     return self;
 }


=====================================
modules/gui/macosx/playqueue/VLCPlayQueueDataSource.m
=====================================
@@ -23,6 +23,7 @@
 #import "VLCPlayQueueDataSource.h"
 
 #import "extensions/NSString+Helpers.h"
+#import "extensions/NSView+VLCAdditions.h"
 #import "main/VLCMain.h"
 #import "playqueue/VLCPlayQueueController.h"
 #import "playqueue/VLCPlayQueueTableCellView.h"
@@ -72,20 +73,11 @@ static NSString *VLCPlayQueueCellIdentifier = @"VLCPlayQueueCellIdentifier";
         [tableView makeViewWithIdentifier:VLCPlayQueueCellIdentifier owner:self];
 
     if (cellView == nil) {
-        /* the following code saves us an instance of NSViewController which we don't need */
-        NSNib *nib = [[NSNib alloc] initWithNibNamed:@"VLCPlayQueueTableCellView" bundle:nil];
-        NSArray *topLevelObjects;
-        if (![nib instantiateWithOwner:self topLevelObjects:&topLevelObjects]) {
+        cellView = [VLCPlayQueueTableCellView fromNibWithOwner:self];
+        if (cellView == nil) {
             msg_Err(getIntf(), "Failed to load nib file to show playlist items");
             return nil;
         }
-
-        for (id topLevelObject in topLevelObjects) {
-            if ([topLevelObject isKindOfClass:[VLCPlayQueueTableCellView class]]) {
-                cellView = topLevelObject;
-                break;
-            }
-        }
         cellView.identifier = VLCPlayQueueCellIdentifier;
     }
 


=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.h
=====================================
@@ -26,8 +26,6 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface VLCMainVideoViewAudioMediaDecorativeView : NSView
 
-+ (instancetype)fromNibWithOwner:(id)owner;
-
 @property (readwrite, strong) IBOutlet NSImageView *foregroundCoverArtView;
 @property (readwrite, strong) IBOutlet NSImageView *backgroundCoverArtView;
 @property (readwrite, strong) IBOutlet NSVisualEffectView *backgroundVisualEffectView;


=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.m
=====================================
@@ -44,13 +44,6 @@
 
 @implementation VLCMainVideoViewAudioMediaDecorativeView
 
-+ (instancetype)fromNibWithOwner:(id)owner
-{
-    return (VLCMainVideoViewAudioMediaDecorativeView*)[NSView fromNibNamed:@"VLCMainVideoViewAudioMediaDecorativeView"
-                                                                 withClass:[VLCMainVideoViewAudioMediaDecorativeView class]
-                                                                 withOwner:owner];
-}
-
 - (void)awakeFromNib
 {
     _lyricsEntries = @[];



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/fc961c9941054d751760dbd60ab68d2251f558b4

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/fc961c9941054d751760dbd60ab68d2251f558b4
You're receiving this email because of your account on code.videolan.org.




More information about the vlc-commits mailing list