xwinclip watches for updates to either clipboard and copies data between them when either one is updated.
xwinclip monitors the X PRIMARY and CLIBPOARD selections for changes in ownership, and makes the contents of the most recent one to change available to paste from the Windows clipboard.
It also monitors the contents of the Windows clipboard for changes, taking ownership of the PRIMARY and CLIPBOARD selections, and making the contents of the Windows clipboard available in them.
Note well: The XWin(1) X server has internal clipboard integration that is enabled by default. Do NOT run xwinclip unless XWin(1) has been started with the -noclipboard option.
The INCR (Incremental transfer) clipboard protocol for clipboard contents larger than the maximum size of an X request (approximately 256K) is only supported for X -> Windows clipboard transfers.
Some X clients, notably ones written in Tcl/Tk, do not re-assert ownership of the PRIMARY selection or update it's timestamp when it's contents change, which currently prevents xwinclip from correctly noticing that the PRIMARY selection's contents have changed.
Windows clipboard rendering is synchronous in the WM_RENDER*FORMAT message (that is, we must have placed the contents onto the clipboard by the time we return from processing this message), but we must wait for the X client which owns the selection to convert the selection to our requested format. This is currently achieved using a fixed timeout. After requesting conversion of the selection, if no events are received from the X client which owns the selection for one second, the conversion is assumed to have failed.
The XWin(1) server should indicate somehow (by placing an atom on the root window?) that it is running with it's internal clipboard integration enabled, and xwinclip should notice this and exit with an appropriate error.
Probably many other bugs.