2011年7月23日土曜日

Cocoa Spacesはどこへ行った?

答え:Dockに統合された

なんのことかという、自作の豆アプリ「Spin」がLionでまともに動かないのでいろいろ調べてみた、という話。

SpinではいわゆるSpacesを変更するのに@"com.apple.switchSpaces"という名前のNotificationをpostしている。これはまだ有効で、まあまともに機能している。

しかし「現在アクティブなSpacesのNo」を得るのに

CGSGetWorkspace

というプライベート関数を使っており、こっちはまともに機能しなくなっている。
Spacesでのデスクトップの数などはcom.apple.dock.plistに記録されていて、これは現在も有効、かと思ったらデスクトップを増やしても変更が反映されていないからもう使われていないのか。


さらにSpaces関連と思われる2つの.plistが新しくできている。

com.apple.spaces.plist



これはデスクトップ毎のuuid(・・・って何?ですな。ユニークな文字列の識別子らしい)を記録している。増やした分のSpacesもちゃんとあるので、デスクトップの数はこいつで取得すればいいようだ。


com.apple.desktop.plist

こっちはデスクトップ毎の壁紙を記録している。

というわけで現在困っているのがアクティブなデスクトップのNoをどうやって取得するのか。
StackOverflowでも早速同じ趣旨の質問が上がっていて、その回答がDockのclass-dumpで現在遊んでいるので、明日詳しく報告するよ、だった。

OSX Lion AppleScript : How to get current space # from mission control? - Stack Overflow

私もこの回答に習ってDockのclass-dumpをとってみた。WVSpaceとかWVSpaceSwitcherとか、それっぽいクラスがあるなあ。

不幸なことに、こうやって取得したヘッダファイルをどうやって使うのか、素人は全然わからないという。(^^;)

0 件のコメント:

コメントを投稿