中途半端に表示されたメニュー
今日一日粘ったのだが未だ解決できず。やりたいことは、Spotlightのように通常はウィンドウを持たずメニューバーにアイコンだけ表示していてホットキーを押されたときだけメニューを開くという動作なんです。ホットキーに関してはProgram Global Hotkeys in Cocoa Easily » Dustin Bachrach Blogという記事でわりと簡単にできたのですが、その後メニューバーを表示することがうまくできません。いろいろいじくり回してようやくそれらしくなってきたのですがやっぱり変。
-(void)awakeFromNib
{
EventHotKeyID hot_key_id;
hot_key_id.signature = 'clp1';
hot_key_id.id = 1;
EventTypeSpec eventType[] = {
{kEventClassKeyboard,kEventHotKeyPressed}
};
InstallApplicationEventHandler(&CpHotKeyHandler,1,eventType,NULL,NULL);
RegisterEventHotKey(
8,cmdKey+optionKey,hot_key_id,GetApplicationEventTarget(),0,&hot_key_ref);
}
OSStatus CpHotKeyHandler(
EventHandlerCallRef nextHandler,EventRef theEvent,void* userData)
{
EventHotKeyID htk;
GetEventParameter(
theEvent,kEventParamDirectObject,typeEventHotKeyID,NULL,sizeof(htk),NULL,& htk);
if (htk.id == 1)
{
NSStatusItem* sti = [[NSStatusBar cpStatusBar]
statusItemWithLength:NSVariableStatusItemLength];
[sti retain];
[sti popUpStatusItemMenu:[NSApp mainMenu]];
}
return noErr;
}こんな実装にするとOpt+Cmd+Cでアイコンメニュー横にメニューが表示されます。これでコンテクストメニューのようにマウス位置に追随して表示されてくれればそれはそれでよかったのですが、常にメニューバーのアイコンの上に(固定位置)に表示されます。これなら、普通にメニューを開いた状態になってくれたほうがウレシイかも。
ホットキー押下で、こうなってくれればいいのだけれど、

実際にはこうなってしまいます。ベストはホットキー押下でマウス位置に表示なんですけど...









Comments