MacRubyで書いたrubyのコードを参照しながら作業。とりあえず全部のworkspaceで透明ウィンドウを表示できるようにした。
MacRubyの時は
my_window.setCanBeVisibleOnAllSpaces(true)
としていたが、ObjCだとDeprecatedだといわれる。そういえばそんなことをxcatsan師匠も書いていたぞ。そのかわりsetCollectionBehaviorを使え、ということなのでデベロッパドキュメントで調べてみる。ここでやりたいことを実現するには
[window setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces];と書けばよかった。
setCollectionBehaviorはOSX10.5以降に追加されたメソッドで、「Window collection behaviors related to Exposé and Spaces.」だそうで、以下のようなenumが定義されている。
enum { NSWindowCollectionBehaviorDefault = 0, NSWindowCollectionBehaviorCanJoinAllSpaces = 1 << 0, NSWindowCollectionBehaviorMoveToActiveSpace = 1 << 1 }; enum { NSWindowCollectionBehaviorManaged = 1 << 2, NSWindowCollectionBehaviorTransient = 1 << 3, NSWindowCollectionBehaviorStationary = 1 << 4, }; enum { NSWindowCollectionBehaviorParticipatesInCycle = 1 << 5, NSWindowCollectionBehaviorIgnoresCycle = 1 << 6 }; typedef NSUInteger NSWindowCollectionBehavior;最初の3つがSpaces.appの関係のふるまい。
NSWindowCollectionBehaviorDefault
デフォルト。アプリケーションは一時にひとつのSpaceにしか表示できない。
NSWindowCollectionBehaviorCanJoinAllSpaces
アプリケーションは全てのSpaceに表示される。メニューも同じ。
NSWindowCollectionBehaviorMoveToActiveSpace
アプリケーションをアクティブにした時、Spaceを切り替えずに、現在アクティブなSpaceに表示する。これはSpaces.appの設定で、Spacesを切り替える、というオプションがあるのでそれ関係か。
次の3つがExposé関係のふるまい。(Spacesにも関係するけど)
NSWindowCollectionBehaviorManaged
Spacesの一覧表示、Exposéの表示にウィンドウが表示される。NSNormalWindowLevelで表示されているウィンドウのふつうの状態。
NSWindowCollectionBehaviorTransient
こっちはNSNormalWindowLeveではない時の普通の状態。試してないのでいったいどーなるのだか。解説によればSpacesの一覧では表示されるけどExposéでは表示されないようだ。
NSWindowCollectionBehaviorStationary
Spaces、Exposé両方でデスクトップのようにふるまう。
以下の2つは「Cycle Through Windows Window menu item」に関連するんですが、Cycle Through Windows Window menu itemって何?なのでよくわからず。
NSWindowCollectionBehaviorParticipatesInCycle
参加する。
NSWindowCollectionBehaviorIgnoresCycle
参加しない(^^;)。
というわけで今のところ、実験用プロジェクトではこう書いている。
[window setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces | NSWindowCollectionBehaviorStationary | NSWindowCollectionBehaviorIgnoresCycle];全部のSpacesに図々しく現れるわりに、Exposéとかからには隠れているいるという感じ。 本日はこんなところで終了してしまった。ちょっとずついろいろ確かめながら進む、という姿勢もxcatsan師匠から教わったひとつだな。
0 件のコメント:
コメントを投稿