The owner should not translate the selection into some arbitrary fallback target type (such as xa_string) and return the fallback target to the requestor in the SelectionNotify event, because this might confuse the requestor The conversion should simply fail The requestor then has the option of requesting another type The requestor can supply the target TARGETS to get a list of target types the owner supports
12.5 Cut Buffers
Cut buffers are provided as a simple but limited method of communication between applications Cut buffers are particularly good for editors, because they can act like a stack of buffers, recording the history of deletions
The selection mechanism is superior for many applications, since it allows communication regarding the type of the data transferred Selections are described in Section 12 4 It is also possible for an application to use both cut buffers and selections
The cut buffers are eight properties on the root window of screen 0 of a server The buffers are numbered 0 to 7 Cut buffers rely on a prior agreement between the two clients regarding the format of the data to be placed in the cut buffers The data that can be placed in a single cut buffer is limited to the maximum size of a single property, which is server-dependent
Because the cut buffers are properties, it is possible to be notified when they have been written into PropertyNotify events can assist applications in timing their communication These are selected with PropertyChangeMask
The functions that are used to read and write to cut buffers are XFetchBuffer(), XFetchBytes(), XStoreBuffer(), and XStoreBytes() The routines with Bytes m the name use cut buffer 0 only, while the others may use any of the eight XRotateBuffers ( ) moves the contents of the eight buffers any number of positions
The cut buffer properties are named by the predefined atoms XA_CUT_BUFFERO to XA_CUT_BUFFER7
The cut buffers can let applications implement a first-in, last-out stack of data A client using this cut buffer mechanism must initially ensure that all eight buffer properties exist, using XChangeProperty ( ) to append zero-length data to each A client storing data in the cut buffers (an owner) must first rotate the ring of buffers by +1, using XRotateWindow-Properties to rename XA_CUT_BUFFERO to XA_CUT_BUFFER1 to to XA_CUT_BUFFER7 to XA_CUT_BUFFERO It must then store the data into XA_CUT_BUFFERO, using XStoreBytes ( )
A client obtaining data from the cut buffers should use XFetchBytes ( ) to retrieve the contents of XA_CUT_BUFFERO
A client may, in response to a specific user request, rotate the cut buffers by -1, using XRotateWindowProperties to rename XA_CUT_BUFFER7 to XA_CUT_BUFFER6 and so on and XA_CUT_BUFFERO to XA_CUT_BUFFER7