前回の補足から。"Application"メニューが選択された場合のメッセージフローは次のようになる。
"Application"が選択されると NSMenuの Delegate先である AppController の menuWillOpen: が呼出される。この中で LauncedApplications#updateApplicationMenu: を呼出し、メニューに表示するアプリケーション一覧を更新している。
アプリケーションが選択された場合のフローは次のようになる。
まず AppController#selectApplicationMenu: が呼ばれる。これはアプリケーション一覧を作成する時、NSMenuItemのターゲットに AppController、アクションに selectApplicationMenu: を設定している為。
続いて通常のキャプチャシーケンス(図の (2)(3))が流れる。
ApplicationHandler では後々選択されたアプリケーションの情報を使うので、selectApplicationMenu: の引数にこれを渡してやる。アプリケーション情報は NSWorkspaceで取得した情報とアイコン画像を元に作成したもの。
アプリケーション情報の例:
2008-07-03 23:37:21.691 SimpleCap[3572:10b] {
image = NSImage 0xc8084c0 Size={32, 32} Reps=(
NSIconRefBitmapImageRep 0xc808da0 Size={128, 128} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=128x128 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0xc808e00 Size={512, 512} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=512x512 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0xc808e40 Size={32, 32} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=32x32 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0xc808e80 Size={16, 16} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=16x16 Alpha=YES Planar=NO Format=0
);
name = "\U30bf\U30fc\U30df\U30ca\U30eb";
pid = 2771;
}
- - - -
お膳立てはできた。次は実際のキャプチャ処理に入っていこう。