X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ffc75ee4523ad45e3e3896be176ee2b1425db8cf..7760051f27b3f96f5dccd07c3509d27abefb0bc9:/src/mac/carbon/toplevel.cpp?ds=sidebyside diff --git a/src/mac/carbon/toplevel.cpp b/src/mac/carbon/toplevel.cpp index e176c02796..4af633107f 100644 --- a/src/mac/carbon/toplevel.cpp +++ b/src/mac/carbon/toplevel.cpp @@ -94,7 +94,7 @@ static const EventTypeSpec eventList[] = { kEventClassTextInput, kEventTextInputUnicodeForKeyEvent } , { kEventClassTextInput, kEventTextInputUpdateActiveInputArea } , - + { kEventClassWindow , kEventWindowShown } , { kEventClassWindow , kEventWindowActivated } , { kEventClassWindow , kEventWindowDeactivated } , @@ -122,7 +122,10 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event focus = (wxTopLevelWindowMac*) data ; unsigned char charCode ; - wxChar uniChar = 0 ; + wxChar uniChar[2] ; + uniChar[0] = 0; + uniChar[1] = 0; + UInt32 keyCode ; UInt32 modifiers ; Point point ; @@ -133,21 +136,23 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event if ( GetEventParameter( event, kEventParamKeyUnicodes, typeUnicodeText, NULL, 0 , &dataSize, NULL ) == noErr ) { UniChar buf[2] ; + int numChars = dataSize / sizeof( UniChar) + 1; UniChar* charBuf = buf ; - if ( dataSize > 4 ) - charBuf = new UniChar[ dataSize / sizeof( UniChar) ] ; + if ( numChars * 2 > 4 ) + charBuf = new UniChar[ numChars ] ; GetEventParameter( event, kEventParamKeyUnicodes, typeUnicodeText, NULL, dataSize , NULL , charBuf ) ; + charBuf[ numChars - 1 ] = 0; #if SIZEOF_WCHAR_T == 2 uniChar = charBuf[0] ; #else wxMBConvUTF16 converter ; - converter.MB2WC( &uniChar , (const char*)charBuf , 1 ) ; + converter.MB2WC( uniChar , (const char*)charBuf , 2 ) ; #endif - if ( dataSize > 4 ) + if ( numChars * 2 > 4 ) delete[] charBuf ; } #endif @@ -167,7 +172,7 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event WXEVENTHANDLERCALLREF formerHandler = wxTheApp->MacGetCurrentEventHandlerCallRef() ; wxTheApp->MacSetCurrentEvent( event , handler ) ; if ( /* focus && */ wxTheApp->MacSendKeyDownEvent( - focus , message , modifiers , when , point.h , point.v , uniChar ) ) + focus , message , modifiers , when , point.h , point.v , uniChar[0] ) ) { result = noErr ; } @@ -177,7 +182,7 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event case kEventRawKeyUp : if ( /* focus && */ wxTheApp->MacSendKeyUpEvent( - focus , message , modifiers , when , point.h , point.v , uniChar ) ) + focus , message , modifiers , when , point.h , point.v , uniChar[0] ) ) { result = noErr ; } @@ -195,7 +200,7 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event event.m_y = point.v; #if wxUSE_UNICODE - event.m_uniChar = uniChar ; + event.m_uniChar = uniChar[0] ; #endif event.SetTimestamp(when); @@ -448,7 +453,7 @@ pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , Ev Point screenMouseLocation = cEvent.GetParameter(kEventParamMouseLocation) ; Point windowMouseLocation = screenMouseLocation ; - WindowRef window ; + WindowRef window = NULL; short windowPart = ::FindWindow(screenMouseLocation, &window); wxWindow* currentMouseWindow = NULL ; @@ -1219,7 +1224,9 @@ void wxTopLevelWindowMac::MacCreateRealWindow( // the root control level handler MacInstallEventHandler( (WXWidget) m_peer->GetControlRef() ) ; -#if TARGET_API_MAC_OSX + // Causes the inner part of the window not to be metal + // if the style is used before window creation. +#if 0 // TARGET_API_MAC_OSX if ( m_macUsesCompositing && m_macWindow != NULL ) { if ( GetExtraStyle() & wxFRAME_EX_METAL ) @@ -1414,11 +1421,11 @@ bool wxTopLevelWindowMac::IsFullScreen() const return m_macFullScreenData != NULL ; } -void wxTopLevelWindowMac::SetExtraStyle(long exStyle) +void wxTopLevelWindowMac::SetExtraStyle(long exStyle) { if ( GetExtraStyle() == exStyle ) return ; - + wxTopLevelWindowBase::SetExtraStyle( exStyle ) ; #if TARGET_API_MAC_OSX @@ -1431,8 +1438,8 @@ void wxTopLevelWindowMac::SetExtraStyle(long exStyle) #endif } +// TODO: switch to structure bounds - // we are still using coordinates of the content view -// TODO: switch to structure bounds // void wxTopLevelWindowMac::MacGetContentAreaInset( int &left , int &top , int &right , int &bottom ) {