ref: always recreate statusItem.menu
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@interface BarStatusItem : NSObject
|
@interface BarStatusItem : NSObject <NSMenuDelegate>
|
||||||
@property (weak, readonly) NSMenu *mainMenu;
|
@property (weak, readonly) NSMenu *mainMenu;
|
||||||
|
|
||||||
- (void)setUnreadCountAbsolute:(NSUInteger)count;
|
- (void)setUnreadCountAbsolute:(NSUInteger)count;
|
||||||
|
|||||||
@@ -17,8 +17,6 @@
|
|||||||
|
|
||||||
@implementation BarStatusItem
|
@implementation BarStatusItem
|
||||||
|
|
||||||
- (NSMenu *)mainMenu { return _statusItem.menu; }
|
|
||||||
|
|
||||||
- (instancetype)init {
|
- (instancetype)init {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
// Show icon & prefetch unread count
|
// Show icon & prefetch unread count
|
||||||
@@ -26,10 +24,7 @@
|
|||||||
self.unreadCountTotal = 0;
|
self.unreadCountTotal = 0;
|
||||||
self.statusItem.button.image = [NSImage imageNamed:RSSImageMenuBarIconActive];
|
self.statusItem.button.image = [NSImage imageNamed:RSSImageMenuBarIconActive];
|
||||||
self.statusItem.button.image.template = YES;
|
self.statusItem.button.image.template = YES;
|
||||||
// Add empty menu (will be populated once opened)
|
[self.statusItem.button action:@selector(openMainMenu) target:self];
|
||||||
self.statusItem.menu = [[NSMenu alloc] initWithTitle:@"M"];
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mainMenuWillOpen) name:NSMenuDidBeginTrackingNotification object:self.statusItem.menu];
|
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mainMenuDidClose) name:NSMenuDidEndTrackingNotification object:self.statusItem.menu];
|
|
||||||
// Some icon unread count notification callback methods
|
// Some icon unread count notification callback methods
|
||||||
RegisterNotification(kNotificationNetworkStatusChanged, @selector(networkChanged:), self);
|
RegisterNotification(kNotificationNetworkStatusChanged, @selector(networkChanged:), self);
|
||||||
RegisterNotification(kNotificationTotalUnreadCountChanged, @selector(unreadCountChanged:), self);
|
RegisterNotification(kNotificationTotalUnreadCountChanged, @selector(unreadCountChanged:), self);
|
||||||
@@ -144,18 +139,23 @@
|
|||||||
|
|
||||||
#pragma mark - Main Menu Handling
|
#pragma mark - Main Menu Handling
|
||||||
|
|
||||||
- (void)mainMenuWillOpen {
|
- (void)openMainMenu {
|
||||||
self.barMenu = [[BarMenu alloc] initWithStatusItem:self];
|
self.barMenu = [[BarMenu alloc] initWithStatusItem:self];
|
||||||
[self insertMainMenuHeader:self.statusItem.menu];
|
|
||||||
[self.barMenu menuNeedsUpdate:self.statusItem.menu];
|
NSMenu *m = [[NSMenu alloc] initWithTitle:@"M"];
|
||||||
|
m.delegate = self;
|
||||||
|
[self insertMainMenuHeader:m];
|
||||||
|
[self.barMenu menuNeedsUpdate:m];
|
||||||
// Add main menu items 'Preferences' and 'Quit'.
|
// Add main menu items 'Preferences' and 'Quit'.
|
||||||
[self.statusItem.menu addItem:[NSMenuItem separatorItem]];
|
[m addItem:[NSMenuItem separatorItem]];
|
||||||
[self.statusItem.menu addItemWithTitle:NSLocalizedString(@"Preferences", nil) action:@selector(openPreferences) keyEquivalent:@","];
|
[m addItemWithTitle:NSLocalizedString(@"Preferences", nil) action:@selector(openPreferences) keyEquivalent:@","];
|
||||||
[self.statusItem.menu addItemWithTitle:NSLocalizedString(@"Quit", nil) action:@selector(terminate:) keyEquivalent:@"q"];
|
[m addItemWithTitle:NSLocalizedString(@"Quit", nil) action:@selector(terminate:) keyEquivalent:@"q"];
|
||||||
|
|
||||||
|
_mainMenu = m; // autoreleased once closed
|
||||||
|
[m popUpMenuPositioningItem:nil atLocation:NSZeroPoint inView:self.statusItem.button];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mainMenuDidClose {
|
-(void)menuDidClose:(NSMenu *)menu {
|
||||||
[self.statusItem.menu removeAllItems];
|
|
||||||
self.barMenu = nil;
|
self.barMenu = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user