"STRING", data, length+1, &recvd, NULL);
while (status == ClipboardLocked);
if (status != ClipboardSuccess || recvd != length) {
printf ("Failed to receive all clipboard data0);
XtFree (data);
}
else
printf ("Retrieved
}
18.2 Copy by Name
As discussed earlier, there are cases where data should not be c-opied to the clipboard until it is requested. It is
possible to copy data by name, so that the owner of the data is notified through a callback function when the data is
needed by the clipboard. Since copying large amounts of data may be expensive, time−consuming, or even impossible
due to other constraints in an application, copying data by name may be the only option available. The technique is
especially advantageous if the data is never requested, since time and resources are saved.
The procedure for copying data by name is quite similar to the procedure for normal copying. The application first
calls XmClipboardStartCopy(), but unlike a normal copy operation, the callback and widget parameters
are specified. These values indicate that the data is to be copied by name. The callback parameter specifies the
routine that is called when the data is requested by another client. The widget parameter specifies the widget that
receives the messages requesting the data. Since the toolkit handles the messages, any valid widget ID can be used.
XmClipboardCopy() is then called with a buffer value of NULL. XmClipboardEndCopy() is called as
usual. When a client requests the data from the clipboard, ...