exposing control key combinations as before, fixing unicodekey casing

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68868 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2011-08-23 15:18:27 +00:00
parent fd48fe892c
commit a8fc3508e7

View File

@@ -137,7 +137,7 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const
- (void)setImagePosition:(NSCellImagePosition)aPosition; - (void)setImagePosition:(NSCellImagePosition)aPosition;
@end @end
long wxOSXTranslateCocoaKey( NSEvent* event ) long wxOSXTranslateCocoaKey( NSEvent* event, int eventType )
{ {
long retval = 0; long retval = 0;
@@ -147,54 +147,61 @@ long wxOSXTranslateCocoaKey( NSEvent* event )
// backspace char reports as delete w/modifiers for some reason // backspace char reports as delete w/modifiers for some reason
if ([s length] == 1) if ([s length] == 1)
{ {
switch ( [s characterAtIndex:0] ) if ( eventType == wxEVT_CHAR && ([event modifierFlags] & NSControlKeyMask) && ( [s characterAtIndex:0] >= 'a' && [s characterAtIndex:0] <= 'z' ) )
{ {
// backspace key retval = WXK_CONTROL_A + ([s characterAtIndex:0] - 'a');
case 0x7F : }
case 8 : else
retval = WXK_BACK; {
break; switch ( [s characterAtIndex:0] )
case NSUpArrowFunctionKey : {
retval = WXK_UP; // backspace key
break; case 0x7F :
case NSDownArrowFunctionKey : case 8 :
retval = WXK_DOWN; retval = WXK_BACK;
break; break;
case NSLeftArrowFunctionKey : case NSUpArrowFunctionKey :
retval = WXK_LEFT; retval = WXK_UP;
break; break;
case NSRightArrowFunctionKey : case NSDownArrowFunctionKey :
retval = WXK_RIGHT; retval = WXK_DOWN;
break; break;
case NSInsertFunctionKey : case NSLeftArrowFunctionKey :
retval = WXK_INSERT; retval = WXK_LEFT;
break; break;
case NSDeleteFunctionKey : case NSRightArrowFunctionKey :
retval = WXK_DELETE; retval = WXK_RIGHT;
break; break;
case NSHomeFunctionKey : case NSInsertFunctionKey :
retval = WXK_HOME; retval = WXK_INSERT;
break; break;
// case NSBeginFunctionKey : case NSDeleteFunctionKey :
// retval = WXK_BEGIN; retval = WXK_DELETE;
// break; break;
case NSEndFunctionKey : case NSHomeFunctionKey :
retval = WXK_END; retval = WXK_HOME;
break; break;
case NSPageUpFunctionKey : // case NSBeginFunctionKey :
retval = WXK_PAGEUP; // retval = WXK_BEGIN;
break; // break;
case NSPageDownFunctionKey : case NSEndFunctionKey :
retval = WXK_PAGEDOWN; retval = WXK_END;
break; break;
case NSHelpFunctionKey : case NSPageUpFunctionKey :
retval = WXK_HELP; retval = WXK_PAGEUP;
break; break;
default: case NSPageDownFunctionKey :
int intchar = [s characterAtIndex: 0]; retval = WXK_PAGEDOWN;
if ( intchar >= NSF1FunctionKey && intchar <= NSF24FunctionKey ) break;
retval = WXK_F1 + (intchar - NSF1FunctionKey ); case NSHelpFunctionKey :
break; retval = WXK_HELP;
break;
default:
int intchar = [s characterAtIndex: 0];
if ( intchar >= NSF1FunctionKey && intchar <= NSF24FunctionKey )
retval = WXK_F1 + (intchar - NSF1FunctionKey );
break;
}
} }
} }
} }
@@ -310,7 +317,7 @@ void wxWidgetCocoaImpl::SetupKeyEvent(wxKeyEvent &wxevent , NSEvent * nsEvent, N
wxString chars; wxString chars;
if ( eventType != NSFlagsChanged ) if ( eventType != NSFlagsChanged )
{ {
NSString* nschars = [nsEvent charactersIgnoringModifiers]; NSString* nschars = [[nsEvent charactersIgnoringModifiers] uppercaseString];
if ( charString ) if ( charString )
{ {
// if charString is set, it did not come from key up / key down // if charString is set, it did not come from key up / key down
@@ -328,7 +335,7 @@ void wxWidgetCocoaImpl::SetupKeyEvent(wxKeyEvent &wxevent , NSEvent * nsEvent, N
if (wxevent.GetEventType() != wxEVT_CHAR) if (wxevent.GetEventType() != wxEVT_CHAR)
{ {
keyval = wxOSXTranslateCocoaKey(nsEvent) ; keyval = wxOSXTranslateCocoaKey(nsEvent, wxevent.GetEventType()) ;
switch (eventType) switch (eventType)
{ {
case NSKeyDown : case NSKeyDown :
@@ -349,8 +356,8 @@ void wxWidgetCocoaImpl::SetupKeyEvent(wxKeyEvent &wxevent , NSEvent * nsEvent, N
case WXK_ALT: case WXK_ALT:
wxevent.SetEventType( wxevent.m_altDown ? wxEVT_KEY_DOWN : wxEVT_KEY_UP); wxevent.SetEventType( wxevent.m_altDown ? wxEVT_KEY_DOWN : wxEVT_KEY_UP);
break; break;
case WXK_COMMAND: case WXK_RAW_CONTROL:
wxevent.SetEventType( wxevent.m_metaDown ? wxEVT_KEY_DOWN : wxEVT_KEY_UP); wxevent.SetEventType( wxevent.m_rawControlDown ? wxEVT_KEY_DOWN : wxEVT_KEY_UP);
break; break;
} }
break; break;
@@ -2128,11 +2135,13 @@ bool wxWidgetCocoaImpl::DoHandleKeyEvent(NSEvent *event)
{ {
if ( IsUserPane() && [event type] == NSKeyDown) if ( IsUserPane() && [event type] == NSKeyDown)
{ {
if ( wxevent.GetKeyCode() < WXK_SPACE || wxevent.GetKeyCode() == WXK_DELETE || wxevent.GetKeyCode() >= WXK_START ) long keycode = wxOSXTranslateCocoaKey( event, wxEVT_CHAR );
if ( (keycode > 0 && keycode < WXK_SPACE) || keycode == WXK_DELETE || keycode >= WXK_START )
{ {
// eventually we could setup a doCommandBySelector catcher and retransform this into the wx key chars // eventually we could setup a doCommandBySelector catcher and retransform this into the wx key chars
wxKeyEvent wxevent2(wxevent) ; wxKeyEvent wxevent2(wxevent) ;
wxevent2.SetEventType(wxEVT_CHAR); wxevent2.m_keyCode = keycode;
result = GetWXPeer()->OSXHandleKeyEvent(wxevent2); result = GetWXPeer()->OSXHandleKeyEvent(wxevent2);
} }
else else