vlc | branch: master | Felix Paul Kühne <fe...@feepk.net> | Mon May 6 08:23:46 2019 +0200| [510805b252b5185413056e07314b14ccfb32a8a0] | committer: Felix Paul Kühne
macosx/library: show recently played media and introduce section headers > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=510805b252b5185413056e07314b14ccfb32a8a0 --- .../package/macosx/VLC.xcodeproj/project.pbxproj | 6 ++ modules/gui/macosx/Makefile.am | 2 + ...LibraryCollectionViewSupplementaryElementView.h | 35 ++++++++++++ ...LibraryCollectionViewSupplementaryElementView.m | 57 +++++++++++++++++++ modules/gui/macosx/library/VLCLibraryDataSource.m | 55 +++++++++++++++---- modules/gui/macosx/library/VLCLibraryModel.h | 4 ++ modules/gui/macosx/library/VLCLibraryModel.m | 64 ++++++++++++++++++++-- modules/gui/macosx/library/VLCLibraryWindow.m | 9 +++ modules/gui/macosx/main/CompatibilityFixes.m | 6 ++ po/POTFILES.in | 2 + 10 files changed, 225 insertions(+), 15 deletions(-) diff --git a/extras/package/macosx/VLC.xcodeproj/project.pbxproj b/extras/package/macosx/VLC.xcodeproj/project.pbxproj index 6e7538ffa8..74fa01979c 100644 --- a/extras/package/macosx/VLC.xcodeproj/project.pbxproj +++ b/extras/package/macosx/VLC.xcodeproj/project.pbxproj @@ -149,6 +149,7 @@ 7DB7F20720CC07E600C2CAED /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DB7F20620CC07E600C2CAED /* SystemConfiguration.framework */; }; 7DB7F20920CC07FD00C2CAED /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DB7F20820CC07FD00C2CAED /* WebKit.framework */; }; 7DB7F20B20CC082800C2CAED /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DB7F20A20CC082800C2CAED /* QuartzCore.framework */; }; + 7DBB7639227F3FBC002649E1 /* VLCLibraryCollectionViewSupplementaryElementView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DBB7638227F3FBC002649E1 /* VLCLibraryCollectionViewSupplementaryElementView.m */; }; 7DC21A7422049A6600F98A02 /* VLCOpenInputMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DC21A7322049A6600F98A02 /* VLCOpenInputMetadata.m */; }; 7DD2F5C52081B73B007EE187 /* VLCRemoteControlService.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DD2F5C42081B73B007EE187 /* VLCRemoteControlService.m */; }; 7DE9C7DD220728420089108F /* VLCPlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE9C7DC220728420089108F /* VLCPlayerController.m */; }; @@ -523,6 +524,8 @@ 7DB7F20820CC07FD00C2CAED /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; 7DB7F20A20CC082800C2CAED /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 7DBB06631CC2314D004C74D2 /* caopengllayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = caopengllayer.m; path = ../../../modules/video_output/caopengllayer.m; sourceTree = "<group>"; }; + 7DBB7637227F3FBC002649E1 /* VLCLibraryCollectionViewSupplementaryElementView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryCollectionViewSupplementaryElementView.h; sourceTree = "<group>"; }; + 7DBB7638227F3FBC002649E1 /* VLCLibraryCollectionViewSupplementaryElementView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryCollectionViewSupplementaryElementView.m; sourceTree = "<group>"; }; 7DC21A7222049A6600F98A02 /* VLCOpenInputMetadata.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCOpenInputMetadata.h; sourceTree = "<group>"; }; 7DC21A7322049A6600F98A02 /* VLCOpenInputMetadata.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCOpenInputMetadata.m; sourceTree = "<group>"; }; 7DD2F5C32081B73B007EE187 /* VLCRemoteControlService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCRemoteControlService.h; sourceTree = "<group>"; }; @@ -971,6 +974,8 @@ children = ( 7D0F64032202047900FDB91F /* VLCLibraryCollectionViewItem.h */, 7D0F64042202047900FDB91F /* VLCLibraryCollectionViewItem.m */, + 7DBB7637227F3FBC002649E1 /* VLCLibraryCollectionViewSupplementaryElementView.h */, + 7DBB7638227F3FBC002649E1 /* VLCLibraryCollectionViewSupplementaryElementView.m */, 7D713D302201AE350042BEB7 /* VLCLibraryWindow.h */, 7D713D312201AE350042BEB7 /* VLCLibraryWindow.m */, 7DFBDCA62269E77400B700A5 /* VLCLibraryController.h */, @@ -1656,6 +1661,7 @@ 7DD2F5C52081B73B007EE187 /* VLCRemoteControlService.m in Sources */, 1C31139F1E508C6900D4DD76 /* VLCMainWindowControlsBar.m in Sources */, 1C3113A11E508C6900D4DD76 /* VLCConvertAndSaveWindowController.m in Sources */, + 7DBB7639227F3FBC002649E1 /* VLCLibraryCollectionViewSupplementaryElementView.m in Sources */, 1C3113A31E508C6900D4DD76 /* VLCCoreDialogProvider.m in Sources */, 6B2EFC631F281A0900F3C0EA /* VLCVolumeSliderCell.m in Sources */, 1C3113A71E508C6900D4DD76 /* VLCLogWindowController.m in Sources */, diff --git a/modules/gui/macosx/Makefile.am b/modules/gui/macosx/Makefile.am index 92af812533..84c887b340 100644 --- a/modules/gui/macosx/Makefile.am +++ b/modules/gui/macosx/Makefile.am @@ -52,6 +52,8 @@ libmacosx_plugin_la_SOURCES = \ gui/macosx/library/VLCInputItem.m \ gui/macosx/library/VLCLibraryCollectionViewItem.h \ gui/macosx/library/VLCLibraryCollectionViewItem.m \ + gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.h \ + gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.m \ gui/macosx/library/VLCLibraryController.h \ gui/macosx/library/VLCLibraryController.m \ gui/macosx/library/VLCLibraryDataSource.h \ diff --git a/modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.h b/modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.h new file mode 100644 index 0000000000..d693e90733 --- /dev/null +++ b/modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.h @@ -0,0 +1,35 @@ +/****************************************************************************** + * VLCLibraryCollectionViewSupplementaryElementView.h: MacOS X interface module + ****************************************************************************** + * Copyright (C) 2019 VLC authors and VideoLAN + * + * Authors: Felix Paul Kühne <fkuehne # videolan -dot- org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + ******************************************************************************/ + +#import <Cocoa/Cocoa.h> + +NS_ASSUME_NONNULL_BEGIN + +extern NSString *VLCLibrarySupplementaryElementViewIdentifier; + +@interface VLCLibraryCollectionViewSupplementaryElementView : NSTextField + ++ (CGSize)defaultHeaderSize; + +@end + +NS_ASSUME_NONNULL_END diff --git a/modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.m b/modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.m new file mode 100644 index 0000000000..1eda8d31d5 --- /dev/null +++ b/modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.m @@ -0,0 +1,57 @@ +/****************************************************************************** + * VLCLibraryCollectionViewSupplementaryElementView.m: MacOS X interface module + ****************************************************************************** + * Copyright (C) 2019 VLC authors and VideoLAN + * + * Authors: Felix Paul Kühne <fkuehne # videolan -dot- org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + ******************************************************************************/ + +#import "VLCLibraryCollectionViewSupplementaryElementView.h" +#import "extensions/NSFont+VLCAdditions.h" +#import "extensions/NSColor+VLCAdditions.h" + +NSString *VLCLibrarySupplementaryElementViewIdentifier = @"VLCLibrarySupplementaryElementViewIdentifier"; + +@implementation VLCLibraryCollectionViewSupplementaryElementView + ++ (CGSize)defaultHeaderSize +{ + return CGSizeMake(100., 40.); +} + +- (instancetype)initWithFrame:(NSRect)frameRect +{ + self = [super initWithFrame:frameRect]; + if (self) { + self.font = [NSFont VLClibrarySectionHeaderFont]; + if (@available(macOS 10_14, *)) { + self.textColor = [self.effectiveAppearance.name isEqualToString:NSAppearanceNameDarkAqua] ? [NSColor VLClibraryDarkTitleColor] : [NSColor VLClibraryLightTitleColor]; + } else { + self.textColor = [NSColor VLClibraryLightTitleColor]; + } + self.editable = NO; + self.selectable = NO; + } + return self; +} + +- (void)viewDidChangeEffectiveAppearance +{ + self.textColor = [self.effectiveAppearance.name isEqualToString:NSAppearanceNameDarkAqua] ? [NSColor VLClibraryDarkTitleColor] : [NSColor VLClibraryLightTitleColor]; +} + +@end diff --git a/modules/gui/macosx/library/VLCLibraryDataSource.m b/modules/gui/macosx/library/VLCLibraryDataSource.m index ae49c686da..8f6d04726f 100644 --- a/modules/gui/macosx/library/VLCLibraryDataSource.m +++ b/modules/gui/macosx/library/VLCLibraryDataSource.m @@ -23,13 +23,21 @@ #import "VLCLibraryDataSource.h" #import "library/VLCLibraryCollectionViewItem.h" +#import "library/VLCLibraryCollectionViewSupplementaryElementView.h" #import "library/VLCLibraryModel.h" +#import "main/CompatibilityFixes.h" +#import "extensions/NSString+Helpers.h" + @implementation VLCLibraryDataSource - (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + if (_libraryModel.numberOfRecentMedia && section == 0) { + return [_libraryModel numberOfRecentMedia]; + } + switch (_libraryModel.libraryMode) { case VLCLibraryModeAudio: return [_libraryModel numberOfAudioMedia]; @@ -37,6 +45,7 @@ case VLCLibraryModeVideo: return [_libraryModel numberOfVideoMedia]; + break; default: return 0; @@ -44,25 +53,34 @@ } } +- (NSInteger)numberOfSectionsInCollectionView:(NSCollectionView *)collectionView +{ + return _libraryModel.numberOfRecentMedia > 0 ? 2 : 1; +} + - (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath { VLCLibraryCollectionViewItem *viewItem = [collectionView makeItemWithIdentifier:VLCLibraryCellIdentifier forIndexPath:indexPath]; NSArray *mediaArray; - switch (_libraryModel.libraryMode) { - case VLCLibraryModeAudio: - mediaArray = [_libraryModel listOfAudioMedia]; - break; + if (indexPath.section == 0 && _libraryModel.numberOfRecentMedia > 0) { + mediaArray = [_libraryModel listOfRecentMedia]; + } else { + switch (_libraryModel.libraryMode) { + case VLCLibraryModeAudio: + mediaArray = [_libraryModel listOfAudioMedia]; + break; - case VLCLibraryModeVideo: - mediaArray = [_libraryModel listOfVideoMedia]; - break; + case VLCLibraryModeVideo: + mediaArray = [_libraryModel listOfVideoMedia]; + break; - default: - NSAssert(1, @"no representation for selected library mode"); - mediaArray = @[]; - break; + default: + NSAssert(1, @"no representation for selected library mode"); + mediaArray = @[]; + break; + } } viewItem.representedMediaItem = mediaArray[indexPath.item]; @@ -70,6 +88,21 @@ return viewItem; } +- (NSView *)collectionView:(NSCollectionView *)collectionView +viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind + atIndexPath:(NSIndexPath *)indexPath +{ + VLCLibraryCollectionViewSupplementaryElementView *view = [collectionView makeSupplementaryViewOfKind:kind + withIdentifier:VLCLibrarySupplementaryElementViewIdentifier + forIndexPath:indexPath]; + if (indexPath.section == 0 && _libraryModel.numberOfRecentMedia > 0) { + view.stringValue = _NS("Recent"); + } else { + view.stringValue = _NS("Library"); + } + return view; +} + - (void)collectionView:(NSCollectionView *)collectionView didSelectItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths { NSLog(@"library selection changed: %@", indexPaths); diff --git a/modules/gui/macosx/library/VLCLibraryModel.h b/modules/gui/macosx/library/VLCLibraryModel.h index 4bb13f9128..fabeb3bcb7 100644 --- a/modules/gui/macosx/library/VLCLibraryModel.h +++ b/modules/gui/macosx/library/VLCLibraryModel.h @@ -36,6 +36,7 @@ typedef NS_ENUM(NSInteger, VLCLibraryMode) { extern NSString *VLCLibraryModelAudioMediaListUpdated; extern NSString *VLCLibraryModelVideoMediaListUpdated; +extern NSString *VLCLibraryModelRecentMediaListUpdated; extern NSString *VLCLibraryModelMediaItemUpdated; @interface VLCLibraryModel : NSObject @@ -50,6 +51,9 @@ extern NSString *VLCLibraryModelMediaItemUpdated; @property (readonly) size_t numberOfVideoMedia; @property (readonly) NSArray <VLCMediaLibraryMediaItem *> *listOfVideoMedia; +@property (readonly) size_t numberOfRecentMedia; +@property (readonly) NSArray <VLCMediaLibraryMediaItem *> *listOfRecentMedia; + - (nullable VLCMediaLibraryMediaItem *)mediaItemAtIndexPath:(NSIndexPath *)index; @property (readonly) NSArray <VLCMediaLibraryEntryPoint *> *listOfMonitoredFolders; diff --git a/modules/gui/macosx/library/VLCLibraryModel.m b/modules/gui/macosx/library/VLCLibraryModel.m index 35c8c8fbb6..cd68a0b1e1 100644 --- a/modules/gui/macosx/library/VLCLibraryModel.m +++ b/modules/gui/macosx/library/VLCLibraryModel.m @@ -27,6 +27,7 @@ NSString *VLCLibraryModelAudioMediaListUpdated = @"VLCLibraryModelAudioMediaListUpdated"; NSString *VLCLibraryModelVideoMediaListUpdated = @"VLCLibraryModelVideoMediaListUpdated"; +NSString *VLCLibraryModelRecentMediaListUpdated = @"VLCLibraryModelRecentMediaListUpdated"; NSString *VLCLibraryModelMediaItemUpdated = @"VLCLibraryModelMediaItemUpdated"; @interface VLCLibraryModel () @@ -36,11 +37,13 @@ NSString *VLCLibraryModelMediaItemUpdated = @"VLCLibraryModelMediaItemUpdated"; NSArray *_cachedAudioMedia; NSArray *_cachedVideoMedia; + NSArray *_cachedRecentMedia; NSNotificationCenter *_defaultNotificationCenter; } - (void)updateCachedListOfAudioMedia; - (void)updateCachedListOfVideoMedia; +- (void)updateCachedListOfRecentMedia; - (void)mediaItemWasUpdated:(VLCMediaLibraryMediaItem *)mediaItem; @end @@ -56,14 +59,17 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event) VLCLibraryModel *libraryModel = (__bridge VLCLibraryModel *)p_data; switch (libraryModel.libraryMode) { case VLCLibraryModeAudio: + [libraryModel updateCachedListOfRecentMedia]; [libraryModel updateCachedListOfAudioMedia]; break; case VLCLibraryModeVideo: + [libraryModel updateCachedListOfRecentMedia]; [libraryModel updateCachedListOfVideoMedia]; break; default: + [libraryModel updateCachedListOfRecentMedia]; break; } @@ -120,7 +126,9 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event) - (size_t)numberOfAudioMedia { if (_cachedAudioMedia) { - [self updateCachedListOfAudioMedia]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateCachedListOfAudioMedia]; + }); } return _cachedAudioMedia.count; @@ -142,7 +150,9 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event) - (NSArray<VLCMediaLibraryMediaItem *> *)listOfAudioMedia { if (!_cachedAudioMedia) { - [self updateCachedListOfAudioMedia]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateCachedListOfAudioMedia]; + }); } return _cachedAudioMedia; @@ -151,7 +161,9 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event) - (size_t)numberOfVideoMedia { if (!_cachedVideoMedia) { - [self updateCachedListOfVideoMedia]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateCachedListOfVideoMedia]; + }); } return _cachedVideoMedia.count; @@ -175,6 +187,10 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event) - (nullable VLCMediaLibraryMediaItem *)mediaItemAtIndexPath:(NSIndexPath *)indexPath { + if (_cachedRecentMedia.count > 0 && indexPath.section == 0) { + return _cachedRecentMedia[indexPath.item]; + } + // FIXME: the scope needs be larger than just the video list if (!_cachedVideoMedia) { return nil; @@ -185,12 +201,52 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event) - (NSArray<VLCMediaLibraryMediaItem *> *)listOfVideoMedia { if (!_cachedVideoMedia) { - [self updateCachedListOfVideoMedia]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateCachedListOfVideoMedia]; + }); } return _cachedVideoMedia; } +- (void)updateCachedListOfRecentMedia +{ + vlc_ml_media_list_t *p_media_list = vlc_ml_list_history(_p_mediaLibrary, NULL); + if (p_media_list == NULL) { + return; + } + NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:p_media_list->i_nb_items]; + for (size_t x = 0; x < p_media_list->i_nb_items; x++) { + VLCMediaLibraryMediaItem *mediaItem = [[VLCMediaLibraryMediaItem alloc] initWithMediaItem:&p_media_list->p_items[x]]; + [mutableArray addObject:mediaItem]; + } + _cachedRecentMedia = [mutableArray copy]; + vlc_ml_media_list_release(p_media_list); + [_defaultNotificationCenter postNotificationName:VLCLibraryModelRecentMediaListUpdated object:self]; +} + +- (size_t)numberOfRecentMedia +{ + if (!_cachedRecentMedia) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateCachedListOfRecentMedia]; + }); + } + + return _cachedRecentMedia.count; +} + +- (NSArray<VLCMediaLibraryMediaItem *> *)listOfRecentMedia +{ + if (!_cachedRecentMedia) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self updateCachedListOfRecentMedia]; + }); + } + + return _cachedRecentMedia; +} + - (NSArray<VLCMediaLibraryEntryPoint *> *)listOfMonitoredFolders { vlc_ml_entry_point_list_t *pp_entrypoints; diff --git a/modules/gui/macosx/library/VLCLibraryWindow.m b/modules/gui/macosx/library/VLCLibraryWindow.m index e56e21d21a..f3d754e024 100644 --- a/modules/gui/macosx/library/VLCLibraryWindow.m +++ b/modules/gui/macosx/library/VLCLibraryWindow.m @@ -36,6 +36,7 @@ #import "library/VLCLibraryCollectionViewItem.h" #import "library/VLCLibraryModel.h" #import "library/VLCLibraryMenuController.h" +#import "library/VLCLibraryCollectionViewSupplementaryElementView.h" #import "media-source/VLCMediaSourceCollectionViewItem.h" #import "media-source/VLCMediaSourceDataSource.h" @@ -83,6 +84,10 @@ static const float f_playlist_row_height = 72.; name:VLCLibraryModelVideoMediaListUpdated object:nil]; [notificationCenter addObserver:self + selector:@selector(updateLibraryRepresentation:) + name:VLCLibraryModelRecentMediaListUpdated + object:nil]; + [notificationCenter addObserver:self selector:@selector(shuffleStateUpdated:) name:VLCPlaybackOrderChanged object:nil]; @@ -126,6 +131,10 @@ static const float f_playlist_row_height = 72.; _libraryCollectionView.dataSource = _libraryDataSource; _libraryCollectionView.delegate = _libraryDataSource; [_libraryCollectionView registerClass:[VLCLibraryCollectionViewItem class] forItemWithIdentifier:VLCLibraryCellIdentifier]; + [_libraryCollectionView registerClass:[VLCLibraryCollectionViewSupplementaryElementView class] + forSupplementaryViewOfKind:NSCollectionElementKindSectionHeader + withIdentifier:VLCLibrarySupplementaryElementViewIdentifier]; + [(NSCollectionViewFlowLayout *)_libraryCollectionView.collectionViewLayout setHeaderReferenceSize:[VLCLibraryCollectionViewSupplementaryElementView defaultHeaderSize]]; _mediaSourceDataSource = [[VLCMediaSourceDataSource alloc] init]; _mediaSourceDataSource.collectionView = _mediaSourceCollectionView; diff --git a/modules/gui/macosx/main/CompatibilityFixes.m b/modules/gui/macosx/main/CompatibilityFixes.m index fb84c1bcee..7ca12d1d95 100644 --- a/modules/gui/macosx/main/CompatibilityFixes.m +++ b/modules/gui/macosx/main/CompatibilityFixes.m @@ -48,3 +48,9 @@ void swapoutOverride(Class cls, SEL selector) NSString *const NSAppearanceNameDarkAqua = @"NSAppearanceNameDarkAqua"; #endif + +#ifndef MAC_OS_X_VERSION_10_13 + +NSString *const NSCollectionViewSupplementaryElementKind = @"NSCollectionViewSupplementaryElementKind"; + +#endif diff --git a/po/POTFILES.in b/po/POTFILES.in index aa78d72322..a665fbd8d4 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -470,6 +470,8 @@ modules/gui/macosx/library/VLCInputItem.h modules/gui/macosx/library/VLCInputItem.m modules/gui/macosx/library/VLCLibraryCollectionViewItem.h modules/gui/macosx/library/VLCLibraryCollectionViewItem.m +modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.h +modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.m modules/gui/macosx/library/VLCLibraryController.h modules/gui/macosx/library/VLCLibraryController.m modules/gui/macosx/library/VLCLibraryDataSource.h _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits