LoginSignup
13
10

More than 5 years have passed since last update.

Exposé, Mission ControlでのNSWindowの振る舞いを指定する

Last updated at Posted at 2013-12-15

desktop.jpg

setCollectionBehavior:メソッドを用いると、Exposé, Spaces, Mission Control, フルスクリーン時のウインドウの振る舞いをビット演算で指定できる。
一方でsetCanBeVisibleOnAllSpaces:というメソッドも存在したが、こちらは10.5で非推奨扱いとなっている。

NSWindowCollectionBehavior

NSWindowCollectionBehavior
NSWindowCollectionBehaviorDefault
NSWindowCollectionBehaviorCanJoinAllSpaces
NSWindowCollectionBehaviorMoveToActiveSpace

NSWindowCollectionBehaviorManaged
NSWindowCollectionBehaviorTransient
NSWindowCollectionBehaviorStationary

NSWindowCollectionBehaviorParticipatesInCycle
NSWindowCollectionBehaviorIgnoresCycle

NSWindowCollectionBehaviorFullScreenPrimary
NSWindowCollectionBehaviorFullScreenAuxiliary

NSWindowCollectionBehaviorFullScreenAllowsTiling
NSWindowCollectionBehaviorFullScreenDisallowsTiling

10.5以降

NSWindowCollectionBehaviorDefault

ウインドウがひとつのスペースに関連づけられる。ウインドウ(アプリ)を選択するとそのウインドウが関連づけられているスペースに移動する。
一般的なウインドウの標準の振る舞い。

NSWindowCollectionBehaviorCanJoinAllSpaces

ウインドウがすべてのスペースに関連づけられる。スペースを切り替えてもウインドウが表示される。
NSWindowCollectionBehaviorMoveToActiveSpace と同時に使用できない。

NSWindowCollectionBehaviorMoveToActiveSpace

ウインドウ(アプリ)を選択したとき、そのウインドウが関連づけられているスペースに移動しないようにする。代わりにウインドウが現在のスペースに移動してくる。
NSWindowCollectionBehaviorCanJoinAllSpaces と同時に使用できない。

10.6以降

NSWindowCollectionBehaviorManaged

ウインドウがExposéに対応する。
NSNormalWindowLevelではこれが標準。

NSWindowCollectionBehaviorTransient

Exposéのときにウインドウが隠される。モーダルウインドウやユーティリティウインドウ(パネル)でよくある振る舞い。
NSNormalWindowLevelではないときにこれが標準。

NSWindowCollectionBehaviorStationary

ウインドウはDockやデスクトップのように固定され、Exposéの影響を受けなくなる。タイトルバーを持っていればドラッグによる移動は可能。
Exposé時にも固定で表示される。

NSWindowCollectionBehaviorParticipatesInCycle

ウインドウは“ウインドウサイクル”の一部になる。具体的には、command+F1によるウインドウ巡回機能で選択対象になる。

NSWindowCollectionBehaviorIgnoresCycle

ウインドウは“ウインドウサイクル”の対象外になる。具体的には、command+F1によるウインドウ巡回機能で選択されなくなる。

10.7以降

NSWindowCollectionBehaviorFullScreenPrimary

フルスクリーン用のボタンがタイトルバー右端に付いて(古い OS X)、フルスクリーンになれるようになる。

NSWindowCollectionBehaviorFullScreenAuxiliary

フルスクリーンウインドウと同じスペースに表示できる。10.11 だとフルスクリーンが無効化されズームボタンがデフォルトになる。

10.11以降

NSWindowCollectionBehaviorFullScreenAllowsTiling

フルスクリーンの分割表示に対応する。

NSWindowCollectionBehaviorFullScreenDisallowsTiling

フルスクリーンするが分割表示に対応しない。

デスクトップに張り付くウインドウの例

[window setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces | NSWindowCollectionBehaviorStationary | NSWindowCollectionBehaviorTransient | NSWindowCollectionBehaviorIgnoresCycle];
[window setLevel:kCGDesktopWindowLevel];

これで、スペースの影響を受けず、Exposé (Mission Control)にも現れないウインドウを作ることができる。
なお、ウインドウレベルを kCGDesktopWindowLevel 等にしておかないと NSWindowCollectionBehaviorTransient を指定してもデスクトップ Exposé のときにウインドウが画面外に飛んでいってしまうようなので、ウインドウレベルを設定しておく必要がある。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10