You all know the menu bar (or better said NSStatusBar) in Mac OS X.
There are some items which I can move and other which not.
I would like to be able to drag the NSStatusItem of my app.
Any idea how to implement this?
You all know the menu bar (or better said NSStatusBar) in Mac OS X.
There are some items which I can move and other which not.
I would like to be able to drag the NSStatusItem of my app.
Any idea how to implement this?
NSStatusItems は Apple の内部「メニュー エクストラ」の近くに表示されますが、それらは明確に区別され、異なる動作をします。Apple がメニュー バーの右側の領域に表示できる項目を統一してくれるといいのですが、今のところ、このセクションは個別の「Apple 内部」(右側) と「アプリ提供 (NSStatusItem)」に分割されています。 " 左に。
コンピューターをスクリーン キャプチャ モード (cmd-shift-4) にし、スペース バーを押して「ウィンドウ全体をキャプチャする」に切り替えると、違いを視覚化できます。Apple のメニュー アイコンにカーソルを合わせると、それらがすべて 1 つのウィンドウに表示されていることがわかります。これは、簡単に管理およびドラッグできる能力を説明しています。他のアイテムにカーソルを合わせると、各 NSStatusItem が実際にはそれ自体の 1 つのウィンドウ内にあることがわかります (このウィンドウは、たまたまそれをインストールしたアプリケーションによって所有されています)。
ドラッグできなくても、NSStatusItem を使用することをお勧めします。これは Apple の欠点であり、ほとんどのユーザーは理解できるでしょう。より安定したアプリケーションを長期的に提供することのプラスのトレードオフを強調すると、通常、ドラッグ可能性を求める顧客 (またはマネージャー?) の意見が和らぎます。
NSMenuExtra
ではなくを使用しNSStatusItem
、メニュー項目をSystemUIServer
独自のアプリではなく、プロセス内で実行されるバンドルにする必要があります。これを機能させるには、MenuCracker が提供するようなコードも必要です。
NSMenuExtra
文書化されておらず、サポートされていないため、「ハック」と見なされます。
そもそも 2 つの API があると推測します。メニューの余分なクラッシュ (またはメモリ リーク) は、SystemUIServer プロセス全体がクラッシュするか、メモリ リークが発生することを意味します。これには、他のサード パーティ モジュールやシステム提供のモジュールも含まれます。一方、ステータス項目では、このような問題は自分のコードにのみ影響します。