Re: considering modifier keys after gaining focus

2011-08-21 Thread Corinna Vinschen
On Aug 16 17:31, Oliver Schmidt wrote:
 Hi,
 
 I had the problem, that the state of the modifier keys was lost when
 a window is created (or raised).
 
 Example: in window A Ctrl + some key opens a window B, then in
 window B Ctrl + some other key triggers the next action. However
 after the opening of window B the Ctrl key has to be released and
 pressed again. If the user keeps the Ctrl key holding when the
 window B is opened, the next key press X will be interpreted as X
 and not as Ctrl+X.
 
 I send a patch to fix this problem with this email: I just extended
 the function winRestoreModeKeyStates in winkeybd.c to consider not
 only the mode switch key but also the modifiers Ctrl, Shift,
 Alt/AltGr by using the Windows function GetAsyncKeyState.
 
 This patch works fine for me.
 
 However one problem is unsolved: if the key combination for opening
 window B (in the above example) is an AltGr key combination, the
 GetAsyncKeyState will also report, that the Ctrl key is pressed,
 which is not true, since this is the well known Windows fake Ctrl_L
 :-(
 
 Any suggestions how to solve this?

At that time, doesn't GetAsyncKeyState (VK_RMENU) also return  0?
So, shouldn't something along these lines do the trick:

  BOOL ctrl = (GetAsyncKeyState (VK_CONTROL)  0);
  BOOL shift = (GetAsyncKeyState (VK_CONTROL)  0);
  BOOL alt = (GetAsyncKeyState (VK_CONTROL)  0);
  BOOL altlang = (GetAsyncKeyState (VK_CONTROL)  0);
  if (ctrl  altlang)
ctrl = FALSE;
  if (WIN_XOR (internalKeyStates  ControlMask, ctrl)
winSendKeyEvent (KEY_LCtrl, ctrl);
  if (WIN_XOR (internalKeyStates  ShiftMask, shift))
winSendKeyEvent (KEY_ShiftL, shift);
  if (WIN_XOR (internalKeyStates  Mod1Mask, alt))
winSendKeyEvent (KEY_Alt, alt);
  if (WIN_XOR (internalKeyStates  Mod5Mask, altlang))
winSendKeyEvent (KEY_AltLang, altlang);


Corinna

-- 
Corinna Vinschen  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader  cygwin AT cygwin DOT com
Red Hat

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



Re: considering modifier keys after gaining focus

2011-08-21 Thread Oliver Schmidt
Hi Corinna,

On 8/21/2011 10:43 AM, Corinna Vinschen wrote:
 However one problem is unsolved: if the key combination for opening
 window B (in the above example) is an AltGr key combination, the
 GetAsyncKeyState will also report, that the Ctrl key is pressed,
 which is not true, since this is the well known Windows fake Ctrl_L
 
 So, shouldn't something along these lines do the trick:
   if (ctrl  altlang)
 ctrl = FALSE;

thanks! I tried your suggestion and now it is nearly perfect ;-)

Only remaining drawback is now, that Ctrl+AltGr key kombinations still
don't work when invoking/raising top level windows, but everything else
is now working flawless: Ctrl, Shift+Ctrl, Alt, AltGr, Shift+Alt,
Shift+AltGr etc. ;-) I think one has to live with the restriction that
Ctrl+AltrGr doesn't work under Windows (BTW it works under Linux
xserver, wheres Alt+AltGr works neither under Linux nor Windows).

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/