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 ))
|
if (win->HandleWindowEvent( keyEvent ))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
keyEvent.SetEventType(wxEVT_CHAR);
|
|
||||||
// Do the translation again, retaining the ASCII
|
// Do the translation again, retaining the ASCII
|
||||||
// code.
|
// code.
|
||||||
if (wxTranslateKeyEvent(keyEvent, win, window, event, true) &&
|
if ( wxTranslateKeyEvent(keyEvent, win, window, event, true) )
|
||||||
win->HandleWindowEvent( keyEvent ))
|
{
|
||||||
|
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;
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( (keyEvent.m_keyCode == WXK_TAB) &&
|
if ( (keyEvent.m_keyCode == WXK_TAB) &&
|
||||||
win->GetParent() && (win->GetParent()->HasFlag( wxTAB_TRAVERSAL)) )
|
win->GetParent() && (win->GetParent()->HasFlag( wxTAB_TRAVERSAL)) )
|
||||||
@@ -414,6 +432,23 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
|
|||||||
wxKeyEvent keyEvent(wxEVT_KEY_UP);
|
wxKeyEvent keyEvent(wxEVT_KEY_UP);
|
||||||
wxTranslateKeyEvent(keyEvent, win, window, event);
|
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 );
|
return win->HandleWindowEvent( keyEvent );
|
||||||
}
|
}
|
||||||
case ConfigureNotify:
|
case ConfigureNotify:
|
||||||
|
Reference in New Issue
Block a user