NPAPI Chrome 브라우저 플러그인의 일부로 Mac OS 상태 표시 줄에 메뉴가있는 상태 아이콘을 표시하려고합니다.FireBreath NPAPI 플러그인의 NSStatusItem에 NSMenu를 연결하여 StatusBar Item을 클릭 할 때 메뉴가 나타나게하는 방법은 무엇입니까?
Firebreath는 C++을 사용하고 Mac OS 개발 용 라이브러리의 대부분은 목표 C를 사용합니다. this question의 응답 덕분에 장애물을 극복했습니다. 또한 XIB 파일을 NIB로 컴파일하기 위해 CMake 설정을 조정해야했습니다.
시행 착오 끝에 상태 표시 줄 옵션을 상태 표시 줄에 표시 할 수 있었지만 클릭하면 메뉴가 확장되지 않습니다. 메뉴를 표시하려면 무엇을해야하는지 잘 모르겠습니다. 그것은 코코아 응용 프로그램에서 작동하지만 Firebreath 응용 프로그램에서는 작동하지 않습니다.
재단 및 코코아 라이브러리도 가져 왔습니다.
문제가 내 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은 목표 C++ 래퍼 클래스에서 수동으로 호출되고있다. 로그마다, 그리고 상태 표시 줄에 "StatusMenu"가 있다는 사실을 알기 때문에이 함수가 호출되었음을 알았습니다.
MainMenu.xib :
나는 또한 MainMenu.xib의 스크린 샷을 포함
내가 있는지 확인하기 위해 함께 IBOutlet으로 NSStatusItem을 추가하려고했습니다 마지막 것은 xib 파일의 내용에 연결할 수는 있지만 이것이 올바른 방향인지는 확실치 않습니다.
상태 메뉴 옵션을 클릭 할 때 표시 할 메뉴를 얻으려면 어떻게해야합니까?
"awakeFromNib"이 Objective C++에서 수동으로 호출된다고 말하면'NSBundle' 또는'NSNib'를 사용하고 있습니까? 그렇지 않다면 그렇게 할 필요가 있다고 생각합니다. 아마도 [Nib Object Life Cycle] (http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW18) 또는 [프로그래밍 방식으로 Nib 파일로드하기] (http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW24) 도움이 될 것입니다. –
안녕하세요 @ JoshCaswell, 샘플 응용 프로그램에서, 나는 그것이 응용 프로그램을로드 처리하는 다른 프로세스에 의해 호출되었다고 생각하지만, Firebreath 프레임 워크는 C + + 및 응용 프로그램을 시작하는 다른 메커니즘을 사용합니다. 나는 Objective C++ wrapper에서 awakeFromNib을 호출하고있다. NSBundle과 NSLib 및 그 링크를 살펴 보겠습니다. 팁 고마워; 나는 더 많은 것을 배울 때 나의 질문을 업데이트 할 것이다. – jmort253
NSApplication이 없기 때문에 NSApplication을 만들지 못할 수도 있습니다. 이들은 다른 누군가의 과정에서 살아가는 데있어서의 단점입니다. – taxilian