こんにちは、hipposです。
動的にメニューアイテムを追加するアプリ(clippy
http://hippos-lab.com/blog/node/274)を作成していますが、新たにメニュー項目を追加する時セパレータがうまく表示(remove)されないという現象に悩んでいます。例えば、
item A
item B
separetor
item Z
のようなメニューがあって、今、itemBの下にitemCを追加したとき意図しているのは単純に
item A
item B
item C
separetor
item Z
のような形式なのですが実際には
item A
item B
item C
item Z(グレー表示)
item Z
のように元々セパレータのあった位置のitemZのタイトルがグレー表示されてしまいます。(逆にitemBを削除した場合などはこういう問題は起こり
ません。)v10.5ではメニュー関連のAPIがずいぶん変更になっているみたいでこのあたりが関係していそうなんですが、何か情報をお持ちの方いらっ
しゃいましたらご教授願いたいと思います。(実際、同様のコードをv10.4で試してみたところこのような問題はでていません。)
【削除コード】
- (void)removeAllMenuItems:(NSMenu *)inMenu
{
NSArray *aItems = [inMenu itemArray];
NSMenuItem *aMenuItem;
int i;
for (i = ([aItems count] - 1); i >= 0; i--)
{
aMenuItem = [aItems objectAtIndex:i];
if ((![aMenuItem isSeparatorItem]) && ([aMenuItem hasSubmenu]))
{
[self removeAllMenuItems:[aMenuItem submenu]];
}
[inMenu removeItem:aMenuItem];
}
}
【追加コード】
[[NSApp mainMenu] addItem:[NSMenuItem separatorItem]];
NSMenuItem *menuItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]]
initWithTitle:NSLocalizedString(@"some_menu1",
"SomeMenu1") action:nil keyEquivalent:@""];
[menuItem setTag:tags];
[menuItem setTarget:self];
[menuItem setEnabled:NO];
[[NSApp mainMenu] addItem:menuItem];
[menuItem release];
[[NSApp mainMenu] addItem:[NSMenuItem separatorItem]];
menuItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]]
initWithTitle:NSLocalizedString(@"some_menu2",
"SomeMenu2") action:nil keyEquivalent:@""];
[menuItem setTag:tags];
[menuItem setTarget:self];
[[NSApp mainMenu] addItem:menuItem];
[menuItem release];
:
: