cannot access it. Since locking the clipboard is done on a per−window basis, the object that locks the clipboard should
have an associated window, which means that gadgets may not work. Gadgets happen to work in some cases because
of their window−based widget parents. However, some of the clipboard functions use XtWindow() rather than
XtWindowOfObject() to get the window of an object. These functions do not work for gadgets. When the
clipboard is locked, only requests from objects with the same window ID can access the clipboard. Each time an
object requests a lock on the clipboard, a counter is incremented so that matching unlock requests can be honored.
XmClipboardStartCopy() sets up internal storage for the copy to take place, XmClipboardCopy() sends
the data to the clipboard, and XmClipboardEndCopy() frees the internal supporting structures. When copying
data to the clipboard, including copies by name, all three functions must be used.
The from_clipbd() callback routine uses XmClipboardRetrieveCopy() to re-trieve data from the
clipboard. Only a single call is needed for the retrieval of short items, as in this example. However, a three−step
process similar to that for copying data to the clipboard is required for the incremental retrieval of large amounts of
data. We will cover these functions shortly.
18.1.1 Copying Data
The syntax of the functions that copy data to the clipboard is outlined below. Due to the intricacies involved in
providing data to the clipboard, these functions take ...