/* make sure we have a drop that is a copy operation and one of
* the targets is FILE_NAME. if not, set the status to failure.
*/
n = 0;
if ((!file_name) || (DropData−>dropAction != XmDROP) ||
(DropData−>operation != XmDROP_COPY)) {
XtSetArg (args[n], XmNtransferStatus, XmTRANSFER_FAILURE); n++;
XtSetArg (args[n], XmNnumDropTransfers, 0); n++;
}
else {
/* set up transfer requests for drop site */
transferEntries[0].target = FILE_CONTENTS;
transferEntries[0].client_data = (XtPointer) text_edit;
transferEntries[1].target = FILE_NAME;
transferEntries[1].client_data = (XtPointer) file_label;
transferList = transferEntries;
XtSetArg (args[n], XmNdropTransfers, transferEntries); n++;
XtSetArg (args[n], XmNnumDropTransfers,
XtNumber (transferEntries)); n++;
XtSetArg (args[n], XmNtransferProc, TransferProc); n++;
}
XmDropTransferStart (dc, args, n);
}
/* HandleDropText() −− start the data transfer when data is dropped in
* the text entry area.
*/
void
HandleDropText(widget, client_data, call_data)
Widget widget;
XtPointer client_data;
XtPointer call_data;
{
Display *dpy;
Atom FILE_CONTENTS, FILE_NAME;
XmDropProcCallback DropData;
XmDropTransferEntryRec transferEntries[2];
XmDropTransferEntry transferList;
Arg args[10];
int n, i;
Widget dc;
Cardinal numExportTargets;
Atom *exportTargets;
Boolean file_contents = False;
void TransferProc();
/* intern the Atoms for data targets */
dpy = XtDisplay (toplevel);
FILE_CONTENTS = XmInternAtom (dpy, "FILE_CONTENTS", False);
FILE_NAME = XmInternAtom ...