作为 NPAPI Chrome 浏览器插件的一部分,我正在努力获取一个带有菜单的状态图标,以显示在 Mac OS 状态栏中。
Firebreath 使用 C++,而大多数用于 Mac OS 开发的库都使用 Objective C。感谢对这个问题的回答,我克服了这个障碍。我还必须调整我的 CMake 设置才能将 XIB 文件编译为 NIB。
经过反复试验,我能够让状态栏选项出现在状态栏中,但是当我单击它时,菜单不会展开。我不确定我需要做什么才能显示菜单。它适用于 Cocoa 应用程序,但不适用于 Firebreath 应用程序。
我也导入了 Foundation 和 Cocoa 库。
我怀疑问题出在我的 MainMenu.xib 文件或 AppDelegate.m 中。
AppDelegate.m:
#import "AppDelegate.h"
@implementation AppDelegate
-(void)awakeFromNib {
NSLog(@"calling awakeFromNib...");
NSStatusBar *bar = [NSStatusBar systemStatusBar];
statusItem = [[bar statusItemWithLength:NSVariableStatusItemLength ] retain];
// statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
//[statusItem retain];
NSMenuItem *menuItem;
menuItem = [[[NSMenuItem alloc] initWithTitle:@"Test" action:NULL keyEquivalent:@""] retain];
// [menuItem setView: myView];
statusMenu = [statusMenu initWithTitle:@"WTF"];
[statusMenu addItem:menuItem];
[menuItem retain];
[statusItem setTitle: NSLocalizedString(@"StatusMenu",@"")];
[statusItem setHighlightMode:YES];
[statusItem setMenu:statusMenu];
[statusItem setEnabled:YES];
[statusMenu retain];
// this was needed to get the icon to display
[statusItem retain];
//[window retain];
}
- (IBAction)settings:(id)sender {
NSLog(@"Invoking the settings from the menu...");
}
//@synthesize window;
@end
该文件是从示例应用程序中获取的,并且正在从 Objective C++ 包装类手动调用 awakeFromNib。根据日志,以及我在状态栏中看到“StatusMenu”的事实,我知道正在调用此函数。
我还包括 MainMenu.xib 的屏幕截图:
主菜单.xib:
我尝试的最后一件事是将 NSStatusItem 添加为 IBOutlet 以查看是否可以将其连接到 xib 文件中的某些内容,但我不确定这是正确的方向。
单击“状态菜单”选项时需要做什么才能显示菜单?