public inbox for cygwin-xfree@sourceware.org
help / color / mirror / Atom feed
From: Oliver Schmidt <oschmidt-mailinglists@gmx.de>
To: cygwin-xfree <cygwin-xfree@cygwin.com>
Subject: Re: considering modifier keys after gaining focus
Date: Thu, 12 Jan 2012 12:19:00 -0000	[thread overview]
Message-ID: <4F0ECFC5.7090903@gmx.de> (raw)
In-Reply-To: <4F0DC3DF.8000802@dronecode.org.uk>

Hi Jon,

On 1/11/2012 6:16 PM, Jon TURNEY wrote:
> I think it is useful to consider this history when reviewing a patch, 
> Are we going in circles?  Are we doing in the wrong direction? 

I appreciate your carefulness und thoroughness. It's of course always
better to understand what is going on, especially in a large code base
with a long history.


> Anyhow, in a brief look at some mailing list discussions from 2002 or so, it
> seems that:
> i) We must release modifier keys when focus leaves the X server, as modifier
> keys may be part of a Windows shell shortcut which moves the focus elsewhere,
> e.g. alt-tab) so the key-release isn't received by the X server.

Ah ok, so my guess was in the right direction ;-)


> ii) We must release non-modifier keys when focus leaves the X server, or they
> continue to auto-repeat in the X server (specifically a problem when a
> key-press closes a window (such as typing ctrl-d or exit into an Xterm), as
> the key-release goes to the next window to receive focus, which may not be an
> X window)

Interesting, I didn't know this. Thank you for figuring this out from
the malinglists archives.


> iv) What should we do about held non-modifier keys when focus enters the X server?
> 
> It looks like these should be pressed as well for strict correctness.  If we
> hold down a non-modifier key so it auto-repeats, and move the focus between X
> and native windows, the native windows receive repeats, but the the X windows
> do not.  I doubt many people care about this behaviour, though :-)

Yes, you are right: I can reproduce this phenomenon by holding down
Ctrl+N for opening windows and the key is not autorepeated (so only one
window is opened, whereas under Linux xserver many windows are opened).

In my daily usage I didn't discover this phenomenon. My patch only
addresses the problem, that the modifier keys are not right after
keyboard driven focus change, disrupting my workflow. So I agree that
there might not many people caring about this behaviour.


> Hm... on looking at this again, isn't that code you are adding checking the
> internal state of non-latching modifiers bogus?  If we release all keys on
> WM_KILLFOCUS, then the non-latching modifiers will always be clear when the
> WM_SETFOCUS occurs, so we will always generate the keypress for the modifier.

Yes, my patch also generates key release events for modifiers despite
the fact, that all modifier have been released after the xserver looses
the window focus. When writing the patch, I wasn't sure if this is
always the case, so I made the code a little bit more "robust" in the
sense that it tries to correct the modifier keys in any case (so it will
always work, even if something goes wrong in other code locations).

Best regards,
Oliver

--
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:[~2012-01-12 12:19 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-16 15:31 Oliver Schmidt
2011-08-21  8:44 ` Corinna Vinschen
2011-08-21 10:04   ` Oliver Schmidt
2012-01-08 15:23 ` Oliver Schmidt
2012-01-09 14:06   ` Jon TURNEY
2012-01-09 18:11     ` Oliver Schmidt
2012-01-10  9:47       ` Oliver Schmidt
2012-01-10 10:15         ` Oliver Schmidt
2012-01-11 17:16       ` Jon TURNEY
2012-01-12 12:19         ` Oliver Schmidt [this message]
2012-01-12 12:38           ` Oliver Schmidt

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=4F0ECFC5.7090903@gmx.de \
    --to=oschmidt-mailinglists@gmx.de \
    --cc=cygwin-xfree@cygwin.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).