Solaris 共通デスクトップ環境 プログラマーズ・ガイド

変換コールバックの使い方

変換コールバックは、ドロップが発生すると、ドロップ領域にデータを提供します。変換コールバックの最初のアクションは、callData の中の reason フィールドの確認です。reason が DtCR_CONVERT_DATA または DtCR_CONVERT_DELETE でない場合には、直ちに戻さなければなりません。そうでない場合には、データの変換を続けます。たとえば、ファイル名の変換を処理する場合には、内部のデータ構造体から該当するファイル名を検索して、ファイル・データ・オブジェクトにコピーします。ドラッグ・ソースが移動操作をサポートしている場合には、DELETE ターゲットの変換をサポートする必要があります。すなわち、reason が DtCR_CONVERT_DELETEconvertCallback が呼ばれた場合は、移動されたデータに対して適切な削除アクションを実行します。ファイル転送の場合には、ファイルを削除します。次に、ファイル名の変換と削除を処理する簡単な convertCallback を示します。

void
convertFileCallback(
 	Widget dragContext,
 	XtPointer clientData,
 	XtPointer callData) 
{
 	DtDndConvertCallbackStruct *convertInfo =	(DtDndConvertCallbackStruct*)
  allData;
 	char	 *fileName = (char *) clientData;
  	if (convertInfo->reason == DtCR_DND_CONVERT_DATA) 
   {
		convertInfo->dragData->data.files[0]=
 				XtNewString(fileName); 	
   }

else if (convertInfo->reason == DtCR_DND_CONVERT_DELETE)
   {
		deleteFile(fileName);
 	} else {
 	convertInfo->status = DtDND_FAILURE;
 	}

}