転送コールバックは、ドロップが発生したときに、ドラッグ・ソースからデータを受け入れます。転送コールバックの最初のアクションは、callData の中の reason フィールドの確認です。reason が DtCR_DND_TRANSFER_DATA ではない場合には、直ちに戻さなければなりません。そうでない場合には、型と reason の中で指定された操作に基づいて、データ転送を続けます。たとえば、ファイルのコピーを処理している場合には、データ構造体からファイル名を検索し、ファイルを開き、その内容をコピーします。ドロップ領域が複数のデータ型をサポートしている場合には、各データ型の転送を適切にサポートする必要があります。
次に、テキストとファイル名のデータ型のコピーをサポートするドロップ領域を描画するための簡単な転送コールバックを示します。
void TransferCallback( Widget widget, XtPointer clientData, XtPointer callData) { DtDndTransferCallbackStruct *transferInfo = (DtDndTransferCallbackStruct*) callData; int ii; DtDndcontext * dropData = transferInfo->dropData; return; switch dropData->protocol { case DtDND_FILENAME_TRANSFER: for (ii=0; ii < dropData->numItems; ii++) { drawTheString(dropData->data, strings[ii]); } break; case DtDND_TEXT_TRANSFER: for (ii=0; ii<dropData->numItems; ii++){ drawTheFile(dropData->data.files[ii]); } break; default: transferInfo->status = DtDND_FAILURE; } }