Re: Updating NSMenu while it's open
Re: Updating NSMenu while it's open
- Subject: Re: Updating NSMenu while it's open
- From: Dave DeLong <email@hidden>
- Date: Tue, 24 Apr 2012 14:12:04 -0700
Yes. As I answered before, you have to get things scheduled in the right runloop mode. But once you do, it's quite easy:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSStatusItem *item = [[[NSStatusBar systemStatusBar] statusItemWithLength:24] retain];
[item setImage:[NSImage imageNamed:NSImageNameApplicationIcon]];
[item setEnabled:YES];
NSMenu *m = [[NSMenu alloc] init];
[item setMenu:m];
NSTimer *t = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateMenu:) userInfo:m repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] addTimer:t forMode:NSEventTrackingRunLoopMode];
}
- (void)updateMenu:(NSTimer *)t {
NSMenu *m = [t userInfo];
NSString *s = [[NSDate date] description];
NSMenuItem *i = [[NSMenuItem alloc] initWithTitle:s action:nil keyEquivalent:@""];
[m addItem:i];
[m update];
}
Run that, open the poorly-iconed status item, and don't touch your mouse.
Yes, this code is terrible and leaks and all that. It's just to illustrate the point.
Dave
On Apr 20, 2012, at 11:32 AM, vinayak pai wrote:
> Yes. I am facing the same problem. I am updating the menu in
> performSelectorOnMainThread. If the menu is kept open without any
> event then there is menu refreshing issue ie. sometimes some items
> will be shown twice. When I move the mouse over items then it will
> update. But, when the menu is open and mouse is still then the menu
> won't update. Is there a way to update the menu while it's open
> without any mouse movement like System WiFi menu?
>
> Best regards,
> VinPai
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden