public inbox for cygwin-xfree@sourceware.org
help / color / mirror / Atom feed
From: Jon TURNEY <jon.turney@dronecode.org.uk>
To: cygwin-xfree@cygwin.com
Cc: roland.cassard@gmail.com
Subject: Re: "Paste" from clipboard can failed (XWin bug)
Date: Sat, 23 Oct 2010 17:11:00 -0000	[thread overview]
Message-ID: <4CC31737.20406@dronecode.org.uk> (raw)
In-Reply-To: <AANLkTi=nbNNaFLGrobwrvGUyaQE785v_BzH2TGV8Xe2D@mail.gmail.com>

On 30/09/2010 15:28, rolandc wrote:
>  From X application, I select some text. I switch on Windows
> application and I try to paste the text.
> I do "Ctrl-V" =>  nothing happens
> I do a second "Ctrl-V" =>  the text is pasted
>
> This problem depends on the X application

For testing purposes, do you have an example of an application which only 
offers XA_STRING?

> 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"
>

Thanks very much for investigating this problem.

> 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.

Thanks very much for the patch.  I agree that (2) is the more elegant solution.

I am actually a bit concerned about the size of the timeout, it's conceivable 
a remote X application could take longer than that to respond.

However, since we are trying to do this conversion synchronously in the 
clipboard thread's message pump, I'm not sure we want to block longer.


-- 
Jon TURNEY
Volunteer Cygwin/X X Server maintainer

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://x.cygwin.com/docs/
FAQ:                   http://x.cygwin.com/docs/faq/


  reply	other threads:[~2010-10-23 17:11 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-30 14:28 rolandc
2010-10-23 17:11 ` Jon TURNEY [this message]
2010-10-28  8:05   ` rolandc
2011-10-18 13:15   ` Enoksrd

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CC31737.20406@dronecode.org.uk \
    --to=jon.turney@dronecode.org.uk \
    --cc=cygwin-xfree@cygwin.com \
    --cc=roland.cassard@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).