When a "paste" occurs, XWin receives a WM_RENDERFORMAT message :
(cf. winClipboardWindowProc())
step 1/ XWin try to get the selection in COMPOUND_TEXT format
(cf. winProcessXEventsTimeout() calls XConvertSelection("COMPOUND_TEXT "))
step 2/ If the owner of the selection (the X app) can't handle
COMPOUND_TEXT format, XWin try to get the selection in UTF8_STRING
format
(cf. winClipboardFlushXEvents(), on receive an SelectionNotify
event with "event.xselection.property == None", XWin calls
XConvertSelection("UTF8_STRING"))
step 3/ If the owner of the selection (the X app) can't handle
UTF8_STRING format, XWin try to get the selection in XA_STRING format
(cf. winClipboardFlushXEvents(), on receive an SelectionNotify
event with "event.xselection.property == None", XWin calls
XConvertSelection("XA_STRING"))
But there is a bug in XWin :
XWin calls winProcessXEventsTimeout() only twice. If the X app handles
only handles XA_STRING format, the "step 3" is never invoked !
As the result, XWin can't get "paste data" and log the message:
"winClipboardWindowProc - timed out waiting for WIN_XEVENTS_NOTIFY"
Solution 1 :
Call a third time the function winProcessXEventsTimeout()
(see paste_bug_solution1.patch file attached)
but this is not a very elegant solution ...
Solution 2 :
call winProcessXEventsTimeout() only one time
winProcessXEventsTimeout() must process all notification until
* time out expired
* getting the paste data
* error occurred
(see paste_bug_solution2.patch file attached)
note: the actual timeout is set to 1 second.