Skip to content
  • Jon Turney's avatar
    hw/xwin: Improve reliability of clipboard X->Windows pastes · b4a08e64
    Jon Turney authored
    
    
    Sometimes, particularly with large clipboard pastes to Windows, we could end up
    waiting for the timeout to expire, rather than pasting the data.
    
    Various changes to improve reliability:
    
    1. Use XFlush() not XSync() in winProcessXEventsTimeout().
    
    It makes no sense to ensure we have received replies to outstanding requests if
    we are going to wait for them using select()
    
    2. Add XFlush() to winClipboardProc()
    
    Make sure we have sent any requests before we wait using select()
    
    3. Don't use FD_ISSET() to check which fd is ready
    
    This looks like a Cygwin select() bug in that it sometimes returns 0 with an
    empty fd set before the timeout expires, but a fd appears to be ready.
    
    Add select() return value to debug output when we are warning that this has
    happened.
    
    4. Drain event queues before entering select()
    
    Unconditionally drain event queues before entering select().  This seems to be
    the recommended way of writing select() and X event processing loops.
    
    winClipboardFlushXEvents() checks using XPending(), and
    winClipboardFlushWindowsMessageQueue() checks using PeekMessage() so this is
    safe against blocking, but means that may not need to enter select() at all
    sometimes.
    
    Signed-off-by: default avatarJon TURNEY <jon.turney@dronecode.org.uk>
    Reviewed-by: default avatarColin Harrison <colin.harrison@virgin.net>
    b4a08e64