NPAPI Chrome ブラウザ プラグインの一部として、Mac OS のステータス バーにメニュー付きのステータス アイコンを表示する作業を行っています。
Firebreath は C++ を使用していますが、Mac OS 開発用のライブラリのほとんどは Objective C を使用しています。この質問に対する回答のおかげで、そのハードルを克服できました。また、XIB ファイルを NIB にコンパイルするには、CMake の設定を調整する必要がありました。
試行錯誤の結果、ステータスバーオプションをステータスバーに表示することはできましたが、クリックしてもメニューが展開されません。メニューを表示するために何をする必要があるのか わかりません。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
このファイルはサンプル アプリから取得したもので、awakeFromNib は Objective C++ ラッパー クラスから手動で呼び出されています。ログと、ステータス バーに "StatusMenu" が表示されていることから、この関数が呼び出されていることがわかります。
MainMenu.xib のスクリーンショットも含めます。
MainMenu.xib:
私が最後に試したのは、NSStatusItem を IBOutlet として追加して、xib ファイル内の何かに接続できるかどうかを確認することですが、これが正しい方向であるかどうかはよくわかりません。
[ステータス メニュー] オプションをクリックしたときにメニューを表示するには、何をする必要がありますか?