ref: always recreate statusItem.menu

This commit is contained in:
relikd
2025-07-21 00:35:21 +02:00
parent 5eed090e9c
commit 060f538240
2 changed files with 15 additions and 15 deletions

View File

@@ -2,7 +2,7 @@
NS_ASSUME_NONNULL_BEGIN
@interface BarStatusItem : NSObject
@interface BarStatusItem : NSObject <NSMenuDelegate>
@property (weak, readonly) NSMenu *mainMenu;
- (void)setUnreadCountAbsolute:(NSUInteger)count;

View File

@@ -17,8 +17,6 @@
@implementation BarStatusItem
- (NSMenu *)mainMenu { return _statusItem.menu; }
- (instancetype)init {
self = [super init];
// Show icon & prefetch unread count
@@ -26,10 +24,7 @@
self.unreadCountTotal = 0;
self.statusItem.button.image = [NSImage imageNamed:RSSImageMenuBarIconActive];
self.statusItem.button.image.template = YES;
// Add empty menu (will be populated once opened)
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];
[self.statusItem.button action:@selector(openMainMenu) target:self];
// Some icon unread count notification callback methods
RegisterNotification(kNotificationNetworkStatusChanged, @selector(networkChanged:), self);
RegisterNotification(kNotificationTotalUnreadCountChanged, @selector(unreadCountChanged:), self);
@@ -144,18 +139,23 @@
#pragma mark - Main Menu Handling
- (void)mainMenuWillOpen {
- (void)openMainMenu {
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'.
[self.statusItem.menu addItem:[NSMenuItem separatorItem]];
[self.statusItem.menu addItemWithTitle:NSLocalizedString(@"Preferences", nil) action:@selector(openPreferences) keyEquivalent:@","];
[self.statusItem.menu addItemWithTitle:NSLocalizedString(@"Quit", nil) action:@selector(terminate:) keyEquivalent:@"q"];
[m addItem:[NSMenuItem separatorItem]];
[m addItemWithTitle:NSLocalizedString(@"Preferences", nil) action:@selector(openPreferences) keyEquivalent:@","];
[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 {
[self.statusItem.menu removeAllItems];
-(void)menuDidClose:(NSMenu *)menu {
self.barMenu = nil;
}