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;
@@ -146,6 +146,12 @@ long wxOSXTranslateCocoaKey( NSEvent* event )
NSString* s = [event charactersIgnoringModifiers]; NSString* s = [event charactersIgnoringModifiers];
// 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)
{
if ( eventType == wxEVT_CHAR && ([event modifierFlags] & NSControlKeyMask) && ( [s characterAtIndex:0] >= 'a' && [s characterAtIndex:0] <= 'z' ) )
{
retval = WXK_CONTROL_A + ([s characterAtIndex:0] - 'a');
}
else
{ {
switch ( [s characterAtIndex:0] ) switch ( [s characterAtIndex:0] )
{ {
@@ -198,6 +204,7 @@ long wxOSXTranslateCocoaKey( NSEvent* event )
} }
} }
} }
}
// Some keys don't seem to have constants. The code mimics the approach // Some keys don't seem to have constants. The code mimics the approach
// taken by WebKit. See: // taken by WebKit. See:
@@ -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