ページ

2009年2月20日金曜日

ドラッグ&ドロップ(5)ドロップ先を増やす

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

ファインダだけでなく他のアプリへもドラッグ&ドロップできるようにしよう。

ペーストボード(NSPasteboard)へ他のデータタイプも登録する。

NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];

[pboard declareTypes:[NSArray arrayWithObjects:NSFilesPromisePboardType, NSFilenamesPboardType, NSTIFFPboardType, nil] owner:self];

[pboard setPropertyList:[NSArray arrayWithObject:[filename pathExtension]]
forType:NSFilesPromisePboardType];

[pboard setData:[image TIFFRepresentation] forType:NSTIFFPboardType];
[pboard setPropertyList:[NSArray arrayWithObject:filename]
forType:NSFilenamesPboardType];


これで大抵のアプリへドラッグ&ドロップできるようになった。

なお Mail.app はファインダと同じくNSFilesPromisePboardTypeを使っていて添付ファイル用のフォルダへコピーすることを期待しているようだ。ドロップ時に呼出される namesOfPromisedFilesDroppedAtDestination: の引数を見ると、コピー先のURL指定はこんな感じだった。
 file://localhost/private/var/folders/0d/0dNdrhYNHnqjC2KaQLPHu++++TI/-Tmp-/com.apple.mail.drag-T0x710f70.tmp.4L3Dui/


ファインダ向けのコードそのまま(ファイルを指定フォルダへコピーする)でうまく動いた。