Modifiers down should not generate wxEVT_CHAR event, and reset keyboardState when recieve modifiers up.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77836 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -384,12 +384,30 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
|
||||
if (win->HandleWindowEvent( keyEvent ))
|
||||
return true;
|
||||
|
||||
keyEvent.SetEventType(wxEVT_CHAR);
|
||||
// Do the translation again, retaining the ASCII
|
||||
// code.
|
||||
if (wxTranslateKeyEvent(keyEvent, win, window, event, true) &&
|
||||
win->HandleWindowEvent( keyEvent ))
|
||||
return true;
|
||||
if ( wxTranslateKeyEvent(keyEvent, win, window, event, true) )
|
||||
{
|
||||
switch ( keyEvent.m_keyCode )
|
||||
{
|
||||
// for modifiers, don't send wxEVT_CHAR event.
|
||||
// the definition of Modifiers, plese see the doc of
|
||||
// wxKeyModifier. we only take care of wxMOD_ALT, wxMOD_CONTROL
|
||||
// wxMOD_SHIFT under X11 platform. Other modifiers is handled
|
||||
// by window manager.
|
||||
case WXK_CONTROL:
|
||||
case WXK_SHIFT:
|
||||
case WXK_ALT:
|
||||
break;
|
||||
default:
|
||||
{
|
||||
// process wxEVT_CHAR here
|
||||
keyEvent.SetEventType(wxEVT_CHAR);
|
||||
if ( win->HandleWindowEvent( keyEvent ) )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( (keyEvent.m_keyCode == WXK_TAB) &&
|
||||
win->GetParent() && (win->GetParent()->HasFlag( wxTAB_TRAVERSAL)) )
|
||||
@@ -414,6 +432,23 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
|
||||
wxKeyEvent keyEvent(wxEVT_KEY_UP);
|
||||
wxTranslateKeyEvent(keyEvent, win, window, event);
|
||||
|
||||
// if recieve the modifiers key up. set the corresponding
|
||||
// keyboardState to false.
|
||||
switch ( keyEvent.m_keyCode )
|
||||
{
|
||||
case WXK_CONTROL:
|
||||
keyEvent.SetControlDown(false);
|
||||
break;
|
||||
case WXK_SHIFT:
|
||||
keyEvent.SetShiftDown(false);
|
||||
break;
|
||||
case WXK_ALT:
|
||||
keyEvent.SetAltDown(false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return win->HandleWindowEvent( keyEvent );
|
||||
}
|
||||
case ConfigureNotify:
|
||||
|
Reference in New Issue
Block a user