[vlc-commits] macosx: Directly apply visibility change for status bar icon
David Fuhrmann
git at videolan.org
Sat Aug 20 23:46:01 CEST 2016
vlc | branch: master | David Fuhrmann <dfuhrmann at videolan.org> | Sat Aug 20 23:04:32 2016 +0200| [a7536bc7671f29cf37f6f408eef2c1d677277990] | committer: David Fuhrmann
macosx: Directly apply visibility change for status bar icon
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a7536bc7671f29cf37f6f408eef2c1d677277990
---
modules/gui/macosx/VLCMain.h | 2 +
modules/gui/macosx/VLCStatusBarIcon.m | 69 +++++++++++++++++++++++++----------
modules/gui/macosx/simple_prefs.m | 1 +
3 files changed, 52 insertions(+), 20 deletions(-)
diff --git a/modules/gui/macosx/VLCMain.h b/modules/gui/macosx/VLCMain.h
index cf49fbe..0123f1c 100644
--- a/modules/gui/macosx/VLCMain.h
+++ b/modules/gui/macosx/VLCMain.h
@@ -51,6 +51,8 @@
intf_thread_t *getIntf();
static NSString * VLCInputChangedNotification = @"VLCInputChangedNotification";
+static NSString * VLCConfigurationChangedNotification = @"VLCConfigurationChangedNotification";
+
/*****************************************************************************
* VLCMain interface
diff --git a/modules/gui/macosx/VLCStatusBarIcon.m b/modules/gui/macosx/VLCStatusBarIcon.m
index f2b6903..b597cdc 100644
--- a/modules/gui/macosx/VLCStatusBarIcon.m
+++ b/modules/gui/macosx/VLCStatusBarIcon.m
@@ -90,7 +90,7 @@
- (void)awakeFromNib
{
[super awakeFromNib];
- [self enableMenuIcon];
+ [self configurationChanged:nil];
// Set Accessibility Attributes for Image Buttons
[backwardsButton.cell accessibilitySetOverrideValue:_NS("Go to previous track")
@@ -122,6 +122,11 @@
selector:@selector(updateNowPlayingInfo)
name:VLCInputChangedNotification
object:nil];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(configurationChanged:)
+ name:VLCConfigurationChangedNotification
+ object:nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath
@@ -140,35 +145,59 @@
}
}
+- (void)configurationChanged:(id)obj
+{
+ if (var_InheritBool(getIntf(), "macosx-statusicon"))
+ [self enableMenuIcon];
+ else
+ [self disableStatusItem];
+}
+
/* Enables the Status Bar Item and initializes it's image
* and context menu
*/
- (void)enableMenuIcon
{
- if (!var_InheritBool(getIntf(), "macosx-statusicon"))
- return;
-
- // Init the status item
- self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
- [self.statusItem setHighlightMode:YES];
- [self.statusItem setEnabled:YES];
+ if (!self.statusItem) {
+ // Init the status item
+ self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
+ [self.statusItem setHighlightMode:YES];
+ [self.statusItem setEnabled:YES];
+
+ // Set the status item image
+ NSImage *menuIcon = [NSImage imageNamed:@"VLCStatusBarIcon"];
+ [menuIcon setTemplate:YES];
+ [self.statusItem setImage:menuIcon];
+
+ // Attach pull-down menu
+ [self.statusItem setMenu:_vlcStatusBarIconMenu];
+
+ if (OSX_SIERRA) {
+ [self.statusItem setBehavior:NSStatusItemBehaviorRemovalAllowed];
+ [self.statusItem setAutosaveName:@"statusBarItem"];
+ [self.statusItem addObserver:self forKeyPath:NSStringFromSelector(@selector(isVisible))
+ options:0 context:NULL];
+ }
+ }
- // Sync VLC setting with status bar visibility setting (10.12 runtime only)
- if ([self.statusItem respondsToSelector:@selector(isVisible)]) {
- [self.statusItem setBehavior:NSStatusItemBehaviorRemovalAllowed];
- [self.statusItem setAutosaveName:@"statusBarItem"];
+ if (OSX_SIERRA) {
+ // Sync VLC setting with status bar visibility setting (10.12 runtime only)
[self.statusItem setVisible:YES];
- [self.statusItem addObserver:self forKeyPath:NSStringFromSelector(@selector(isVisible))
- options:0 context:NULL];
}
+}
- // Set the status item image
- NSImage *menuIcon = [NSImage imageNamed:@"VLCStatusBarIcon"];
- [menuIcon setTemplate:YES];
- [self.statusItem setImage:menuIcon];
+- (void)disableStatusItem
+{
+ if (!self.statusItem)
+ return;
- // Attach pull-down menu
- [self.statusItem setMenu:_vlcStatusBarIconMenu];
+ // Lets keep alive the object in Sierra, and destroy it in older OS versions
+ if (OSX_SIERRA) {
+ self.statusItem.visible = NO;
+ } else {
+ [[NSStatusBar systemStatusBar] removeStatusItem:self.statusItem];
+ self.statusItem = nil;
+ }
}
- (void)dealloc
diff --git a/modules/gui/macosx/simple_prefs.m b/modules/gui/macosx/simple_prefs.m
index ba8627d..afddf2f 100644
--- a/modules/gui/macosx/simple_prefs.m
+++ b/modules/gui/macosx/simple_prefs.m
@@ -1083,6 +1083,7 @@ static inline void save_string_list(intf_thread_t * p_intf, id object, const cha
[[NSNotificationCenter defaultCenter] postNotificationName: @"VLCMediaKeySupportSettingChanged"
object: nil
userInfo: nil];
+ [[NSNotificationCenter defaultCenter] postNotificationName:VLCConfigurationChangedNotification object:nil];
}
- (void)showSettingsForCategory:(id)new_categoryView
More information about the vlc-commits
mailing list