From 060f538240bced58192118fe8132f6fe907e4094 Mon Sep 17 00:00:00 2001 From: relikd Date: Mon, 21 Jul 2025 00:35:21 +0200 Subject: [PATCH] ref: always recreate statusItem.menu --- baRSS/Status Bar Menu/BarStatusItem.h | 2 +- baRSS/Status Bar Menu/BarStatusItem.m | 28 +++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/baRSS/Status Bar Menu/BarStatusItem.h b/baRSS/Status Bar Menu/BarStatusItem.h index 7288c0f..ff56f6b 100644 --- a/baRSS/Status Bar Menu/BarStatusItem.h +++ b/baRSS/Status Bar Menu/BarStatusItem.h @@ -2,7 +2,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface BarStatusItem : NSObject +@interface BarStatusItem : NSObject @property (weak, readonly) NSMenu *mainMenu; - (void)setUnreadCountAbsolute:(NSUInteger)count; diff --git a/baRSS/Status Bar Menu/BarStatusItem.m b/baRSS/Status Bar Menu/BarStatusItem.m index f02a88f..3a5159a 100644 --- a/baRSS/Status Bar Menu/BarStatusItem.m +++ b/baRSS/Status Bar Menu/BarStatusItem.m @@ -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; }