Hatena::ブログ(Diary)

tsntsumi’s NOOTO RSSフィード Twitter

2012-05-06 Sun

アプリケーション名のメニューアイテムにイメージを表示する

アップルメニューの右隣、アプリケーションバンドル名が表示されているところにアイコンを表示してみたいと思った。

メニューバーアプリや、メニューエクストラはメニューバーの多くの領域を占めるが、その数が多くなってくると MacBookMacBook Pro では手狭になってくる。メニューの沢山あるアプリケーションなんかだと、勢いメニューバーアプリアイコンが見えなくなってしまうのだ。それを嫌ってメニューバーアプリやメニューエクストラは厳選して表示させるようにしていたのだが、それはそれでフラストレーションがたまるもの。

そんなとき、MinimumMenu というアプリケーションを知った。「File」や「Edit」などのメニュー項目を削除してバンドル名だけのメニュー項目を表示するアプリケーションだ。メニューバーアプリにアクセスしたい時にはこのアプリケーションに切り替えればよいわけだ。なんとソースコードも公開しているのが嬉しい。

せっかくメニューバーを広く使えるようにするアプリケーションなのに MinimumMenu という名前なのは長過ぎないかという気がするだろうが、それはそれ、実際には Minu という表示名になっている。しかしどうせなら、アイコンにすればもっと広く使えるのにと思ったのが、最初に書いた源なんだよね。

早速ソースコードダウンロードして、リソースの MainMenu.nib をいじって適当な PNG イメージを設定してみた。しかし、残念ながらアプリケーション名のメニュー項目が表示されなくなってしまった。それはそれで当初の目的を達成しているともいえるのだが…。いくらなんでもこれはないよね。

そこで試しにということで別のメニュー項目を追加して、そこにイメージを設定してみたら、これはちゃんとアイコンが表示される。

よく考えてみると、アプリケーション名のメニュー項目って、nib で別の文字列「NewApplication」になっていてもちゃんとバンドル名が表示される。ということは、フレームワークの中でこのメニュー項目をいじっているということだ。

そこで awakeFromNib メソッドの中で、次のようにイメージを設定してみた。

MSImage *menuItemImage = [NSImage imageNamed:@"Menubar"];
[[[NSApp mainMenu] itemAtIndex:0] setImage:menuItemImage];

しかしこれでは、メニューバーに「...」と表示されるだけで、アイコンは表示されない。まあ、一歩前進したともいえるが、行き詰まってしまったともいえる。

一体何が起こっているのやら。アプリケーション名のメニュー項目にはイメージは設定できないという制限なのかなあ。でも、そういうアプリケーションを見たような記憶もあるのだが…。

そこで発想を変えて、アプリケーション名のメニュー項目の右隣に、アプリケーションのメニューの内容をそっくり移したメニューを作って、そのメニュー項目にイメージを設定し、awakeFromNibアプリケーション名のメニュー項目を非表示にしてみた。

[[[NSApp mainMenu] itemAtIndex:0] setHidden:YES];

これで見た目はアプリケーション名がアイコンになっているように見える。でもなんか他に影響しそうな気がするなあ。

zariganitoshzariganitosh 2012/05/08 17:48 はじめまして!
なるほど、この記事を読んでいたらアイコン表示も簡単にできそうな気になって、早速やってみました。
awakeFromNibではなく、applicationDidFinishLaunchingで以下コードを実行してみました。

[[[[NSApp mainMenu] itemAtIndex:0] submenu] setTitle:@""];
NSImage *minu = [NSImage imageNamed:@"minu"];
[minu setSize:NSMakeSize(20,20)];
[[[NSApp mainMenu] itemAtIndex:0] setImage:minu];

自分の環境(OSX10.6.8)では動いたので、バージョン0.3として公開してみました。
https://github.com/zarigani/MinimumMenu

PS
画面の下の方に青い線が表示される現象については、まだ対応していません。

tsntsumitsntsumi 2012/05/08 21:29 コメントありがとうございます。
なるほど、submenu に setTitle:@"" するのでしたか。勉強になります!

最新版をダウンロードして試してみたところ、こちらの環境 OS X 10.7.3 で問題なく動いています。
素早い反応ありがとうございました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/tsntsumi/20120506/ImageOnApplicationNameMenuItem