Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (14)
......@@ -697,6 +697,23 @@
</connections>
</button>
</toolbarItem>
<toolbarItem implicitItemIdentifier="C0F3283F-472F-46A6-910B-44EE5602E3D2" label="Renderers" paletteLabel="Renderers" image="antenna.radiowaves.left.and.right" catalog="system" bordered="YES" sizingBehavior="auto" id="YEO-08-Qzi">
<nil key="toolTip"/>
<button key="view" wantsLayer="YES" verticalHuggingPriority="750" misplaced="YES" id="ffS-QP-Om3">
<rect key="frame" x="18" y="14" width="26" height="19"/>
<autoresizingMask key="autoresizingMask"/>
<constraints>
<constraint firstAttribute="width" constant="30" id="ann-oP-TCW"/>
</constraints>
<buttonCell key="cell" type="recessed" bezelStyle="recessed" image="antenna.radiowaves.left.and.right" catalog="system" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="CH2-Lq-KIb">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="systemBold" size="12"/>
</buttonCell>
<connections>
<action selector="rendererControlAction:" target="QvC-M9-y7g" id="M1O-u2-5FO"/>
</connections>
</button>
</toolbarItem>
<toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="89f-AL-zuU"/>
<toolbarItem implicitItemIdentifier="85037E27-D263-490C-B4B2-0EFE5B5837AA" label="Library View Type" paletteLabel="Library View Type" sizingBehavior="auto" id="kBa-MC-Mdq">
<nil key="toolTip"/>
......@@ -845,6 +862,8 @@
<outlet property="playlistTableView" destination="Fr1-af-8gb" id="yaB-Ab-jrx"/>
<outlet property="playlistView" destination="dus-WQ-AmE" id="fTF-HP-Chb"/>
<outlet property="playlistViewTitleTopConstraint" destination="5b2-gJ-uva" id="qoh-ro-EIN"/>
<outlet property="renderersButton" destination="ffS-QP-Om3" id="rOM-No-rd0"/>
<outlet property="renderersToolbarItem" destination="YEO-08-Qzi" id="mwx-8t-5o7"/>
<outlet property="repeatPlaylistButton" destination="8zF-Wo-H79" id="6bH-HF-arx"/>
<outlet property="shufflePlaylistButton" destination="jg5-33-vH0" id="FV2-36-3lG"/>
<outlet property="sortOrderToolbarItem" destination="Tbc-Ik-FaO" id="098-yp-97f"/>
......@@ -1876,6 +1895,7 @@
<image name="VLCVolumeOffTemplate" width="128" height="128"/>
<image name="VLCVolumeOnTemplate" width="128" height="128"/>
<image name="arrow.up.arrow.down" catalog="system" width="18" height="15"/>
<image name="antenna.radiowaves.left.and.right" catalog="system" width="16" height="14"/>
<image name="dropzone" width="112" height="112"/>
<image name="fullscreen-one-button" width="29" height="23"/>
<image name="fullscreen-one-button-pressed" width="29" height="23"/>
......
......@@ -122,6 +122,7 @@ extern const NSUserInterfaceItemIdentifier VLCLibraryWindowIdentifier;
@property (readwrite, weak) IBOutlet NSButton *artworkButton;
@property (readwrite, weak) IBOutlet NSToolbarItem *toggleNavSidebarToolbarItem;
@property (readwrite, weak) IBOutlet NSToolbarItem *trackingSeparatorToolbarItem;
@property (readwrite, weak) IBOutlet NSButton *renderersButton;
@property (readwrite, weak) IBOutlet NSToolbarItem *backwardsToolbarItem;
@property (readwrite, weak) IBOutlet NSToolbarItem *forwardsToolbarItem;
@property (readwrite, weak) IBOutlet NSToolbarItem *libraryViewModeToolbarItem;
......@@ -129,6 +130,7 @@ extern const NSUserInterfaceItemIdentifier VLCLibraryWindowIdentifier;
@property (readwrite, weak) IBOutlet NSToolbarItem *flexibleSpaceToolbarItem;
@property (readwrite, weak) IBOutlet NSToolbarItem *librarySearchToolbarItem;
@property (readwrite, weak) IBOutlet NSToolbarItem *togglePlaylistToolbarItem;
@property (readwrite, weak) IBOutlet NSToolbarItem *renderersToolbarItem;
@property (readwrite, weak) IBOutlet NSLayoutConstraint *splitViewBottomConstraintToBottomBar;
@property (nonatomic, readwrite, strong) IBOutlet NSView *emptyLibraryView;
......@@ -171,6 +173,7 @@ extern const NSUserInterfaceItemIdentifier VLCLibraryWindowIdentifier;
- (IBAction)backwardsNavigationAction:(id)sender;
- (IBAction)forwardsNavigationAction:(id)sender;
- (IBAction)gridVsListSegmentedControlAction:(id)sender;
- (IBAction)rendererControlAction:(id)sender;
@end
......
......@@ -32,6 +32,7 @@
#import "extensions/NSWindow+VLCAdditions.h"
#import "main/VLCMain.h"
#import "menus/VLCMainMenu.h"
#import "playlist/VLCPlayerController.h"
#import "playlist/VLCPlaylistController.h"
......@@ -63,6 +64,8 @@
#import "media-source/VLCMediaSourceBaseDataSource.h"
#import "media-source/VLCLibraryMediaSourceViewController.h"
#import "menus/renderers/VLCRendererMenuController.h"
#import "views/VLCBottomBarView.h"
#import "views/VLCCustomWindowButton.h"
#import "views/VLCDragDropView.h"
......@@ -210,6 +213,14 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
selector:@selector(playerStateChanged:)
name:VLCPlayerStateChanged
object:nil];
[notificationCenter addObserver:self
selector:@selector(renderersChanged:)
name:VLCRendererAddedNotification
object:nil];
[notificationCenter addObserver:self
selector:@selector(renderersChanged:)
name:VLCRendererRemovedNotification
object:nil];
if (@available(macOS 10.14, *)) {
[NSApplication.sharedApplication addObserver:self
......@@ -259,6 +270,11 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
[self repeatStateUpdated:nil];
[self shuffleStateUpdated:nil];
// Hide renderers toolbar item at first. Start discoveries and wait for notifications about
// renderers being added or removed to keep hidden or show depending on outcome
[self hideToolbarItem:_renderersToolbarItem];
[VLCMain.sharedInstance.mainMenu.rendererMenuController startRendererDiscoveries];
// HACK: The size of the segmented title buttons is not always correctly calculated
// especially when the text we are setting differs from what is set in the storyboard.
// Hiding and showing the toolbar again must trigger something that causes the width
......@@ -1038,4 +1054,27 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
}
}
#pragma mark -
#pragma mark respond to renderers
- (void)renderersChanged:(NSNotification *)notification
{
const NSUInteger rendererCount = VLCMain.sharedInstance.mainMenu.rendererMenuController.rendererItems.count;
const BOOL rendererToolbarItemVisible = [self.toolbar.items containsObject:_renderersToolbarItem];
if (rendererCount > 0 && !rendererToolbarItemVisible) {
[self insertToolbarItem:_renderersToolbarItem
inFrontOf:@[_sortOrderToolbarItem, _libraryViewModeToolbarItem, _forwardsToolbarItem, _backwardsToolbarItem]];
} else if (rendererCount == 0 && rendererToolbarItemVisible) {
[self hideToolbarItem:_renderersToolbarItem];
}
}
- (void)rendererControlAction:(id)sender
{
[NSMenu popUpContextMenu:VLCMain.sharedInstance.mainMenu.rendererMenu
withEvent:NSApp.currentEvent
forView:sender];
}
@end
......@@ -25,6 +25,8 @@
#import <vlc_common.h>
#import <vlc_interface.h>
@class VLCRendererMenuController;
@interface VLCMainMenu : NSObject
/* main menu */
......@@ -223,6 +225,8 @@
@property (readwrite, weak) IBOutlet NSPopUpButton *playlistSaveAccessoryPopup;
@property (readwrite, weak) IBOutlet NSTextField *playlistSaveAccessoryText;
@property (readonly, strong) VLCRendererMenuController *rendererMenuController;
- (void)releaseRepresentedObjects:(NSMenu *)the_menu;
- (IBAction)openAddonManager:(id)sender;
......
......@@ -101,10 +101,8 @@ typedef NS_ENUM(NSInteger, VLCObjectType) {
VLCAboutWindowController *_aboutWindowController;
VLCHelpWindowController *_helpWindowController;
VLCAddonsWindowController *_addonsController;
VLCRendererMenuController *_rendererMenuController;
VLCPlaylistController *_playlistController;
VLCPlayerController *_playerController;
NSTimer *_cancelRendererDiscoveryTimer;
VLCPlaylistSortingMenuController *_playlistSortingController;
VLCInformationWindowController *_infoWindowController;
......@@ -1891,7 +1889,6 @@ typedef NS_ENUM(NSInteger, VLCObjectType) {
- (void)menuWillOpen:(NSMenu *)menu
{
[_cancelRendererDiscoveryTimer invalidate];
[_rendererMenuController startRendererDiscoveries];
if (@available(macOS 10.16, *)) {
......@@ -1923,20 +1920,6 @@ typedef NS_ENUM(NSInteger, VLCObjectType) {
}
}
- (void)menuDidClose:(NSMenu *)menu
{
_cancelRendererDiscoveryTimer = [NSTimer scheduledTimerWithTimeInterval:20.
target:self
selector:@selector(cancelRendererDiscovery)
userInfo:nil
repeats:NO];
}
- (void)cancelRendererDiscovery
{
[_rendererMenuController stopRendererDiscoveries];
}
@end
@implementation VLCMainMenu (NSMenuValidation)
......
......@@ -24,6 +24,9 @@
#import "menus/renderers/VLCRendererItem.h"
extern NSString * const VLCRendererAddedNotification;
extern NSString * const VLCRendererRemovedNotification;
@protocol VLCRendererDiscoveryDelegate;
/**
......
......@@ -27,6 +27,9 @@
#import "main/VLCMain.h"
NSString * const VLCRendererAddedNotification = @"VLCRendererAddedNotification";
NSString * const VLCRendererRemovedNotification = @"VLCRendererRemovedNotification";
@interface VLCRendererDiscovery ()
{
intf_thread_t *p_intf;
......@@ -36,6 +39,7 @@
- (void)handleItemAdded:(vlc_renderer_item_t *)item;
- (void)handleItemRemoved:(const vlc_renderer_item_t *)item;
@end
// C callback event handler functions
......@@ -119,6 +123,9 @@ static void renderer_event_item_removed(vlc_renderer_discovery_t *rd,
[_rendererItems addObject:item];
if (_delegate)
[_delegate addedRendererItem:item from:self];
[NSNotificationCenter.defaultCenter postNotificationName:VLCRendererAddedNotification
object:item];
}
- (void)handleItemRemoved:(const vlc_renderer_item_t *)base_item
......@@ -134,6 +141,8 @@ static void renderer_event_item_removed(vlc_renderer_discovery_t *rd,
if (_delegate)
[_delegate removedRendererItem:result_item from:self];
[_rendererItems removeObject:result_item];
[NSNotificationCenter.defaultCenter postNotificationName:VLCRendererRemovedNotification
object:result_item];
} else {
msg_Err(p_intf, "VLCRendererDiscovery could not find item to remove!");
}
......
......@@ -29,6 +29,7 @@
@property (readwrite, weak) NSMenu *rendererMenu;
@property (readwrite, weak) NSMenuItem *rendererNoneItem;
@property (readonly, strong) NSArray<VLCRendererItem *> *rendererItems;
- (void)startRendererDiscoveries;
- (void)stopRendererDiscoveries;
......
......@@ -32,7 +32,6 @@
@interface VLCRendererMenuController ()
{
NSMutableDictionary *_rendererItems;
NSMutableArray *_rendererDiscoveries;
BOOL _isDiscoveryEnabled;
NSMenuItem *_selectedItem;
......@@ -48,7 +47,6 @@
{
self = [super init];
if (self) {
_rendererItems = [NSMutableDictionary dictionary];
_rendererDiscoveries = [NSMutableArray array];
_isDiscoveryEnabled = NO;
p_intf = getIntf();
......@@ -95,6 +93,11 @@
- (void)addRendererItem:(VLCRendererItem *)item
{
NSParameterAssert(item != nil);
NSMutableArray * const mutableRenderers = _rendererItems.mutableCopy;
[mutableRenderers addObject:item];
_rendererItems = mutableRenderers.copy;
// Check if the item is already selected
if (_selectedItem.representedObject != nil)
{
......@@ -133,14 +136,21 @@
- (void)removeRendererItem:(VLCRendererItem *)item
{
NSParameterAssert(item != nil);
// The main menu must only be updated from the main thread
dispatch_async(dispatch_get_main_queue(), ^{
NSInteger index = [_rendererMenu indexOfItemWithRepresentedObject:item];
NSMutableArray * const mutableRenderers = _rendererItems.mutableCopy;
[mutableRenderers removeObject:item];
_rendererItems = mutableRenderers.copy;
const NSInteger index = [_rendererMenu indexOfItemWithRepresentedObject:item];
if (index >= 0) {
NSMenuItem *menuItem = [_rendererMenu itemAtIndex:index];
NSMenuItem * const menuItem = [_rendererMenu itemAtIndex:index];
// Don't remove selected item
if (menuItem != _selectedItem)
if (menuItem != _selectedItem) {
[_rendererMenu removeItemAtIndex:index];
}
}
});
}
......