X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1542ea396a625766c59d683adbb1d613c1344d50..a8680e3e0e5066d35a8f4fd43294ba4bfcaf4ba7:/src/mac/toplevel.cpp diff --git a/src/mac/toplevel.cpp b/src/mac/toplevel.cpp index 2da89cd414..fc40bd694c 100644 --- a/src/mac/toplevel.cpp +++ b/src/mac/toplevel.cpp @@ -181,19 +181,19 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event wxWindow* focus = wxWindow::FindFocus() ; event.SetEventObject(focus); - if ( (modifiers ^ wxTheApp->s_lastModifiers ) & controlKey ) + if ( focus && (modifiers ^ wxTheApp->s_lastModifiers ) & controlKey ) { event.m_keyCode = WXK_CONTROL ; event.SetEventType( ( modifiers & controlKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ; focus->GetEventHandler()->ProcessEvent( event ) ; } - if ( (modifiers ^ wxTheApp->s_lastModifiers ) & shiftKey ) + if ( focus && (modifiers ^ wxTheApp->s_lastModifiers ) & shiftKey ) { event.m_keyCode = WXK_SHIFT ; event.SetEventType( ( modifiers & shiftKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ; focus->GetEventHandler()->ProcessEvent( event ) ; } - if ( (modifiers ^ wxTheApp->s_lastModifiers ) & optionKey ) + if ( focus && (modifiers ^ wxTheApp->s_lastModifiers ) & optionKey ) { event.m_keyCode = WXK_ALT ; event.SetEventType( ( modifiers & optionKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ; @@ -635,7 +635,20 @@ void wxTopLevelWindowMac::MacUpdate( long timestamp) RgnHandle diffRgn = NewRgn() ; if ( updateRgn && diffRgn ) { +#if 1 + // macos internal control redraws clean up areas we'd like to redraw ourselves + // therefore we pick the boundary rect and make sure we can redraw it + RgnHandle trueUpdateRgn = NewRgn() ; + Rect trueUpdateRgnBoundary ; + GetPortVisibleRegion( GetWindowPort( (WindowRef)m_macWindow ), trueUpdateRgn ); + GetRegionBounds( trueUpdateRgn , &trueUpdateRgnBoundary ) ; + RectRgn( (RgnHandle) updateRgn , &trueUpdateRgnBoundary ) ; + if ( trueUpdateRgn ) + DisposeRgn( trueUpdateRgn ) ; + SetPortVisibleRegion( GetWindowPort( (WindowRef)m_macWindow ), updateRgn ) ; +#else GetPortVisibleRegion( GetWindowPort( (WindowRef)m_macWindow ), updateRgn ); +#endif DiffRgn( updateRgn , (RgnHandle) m_macNoEraseUpdateRgn , diffRgn ) ; if ( !EmptyRgn( updateRgn ) ) { @@ -815,9 +828,15 @@ void wxTopLevelWindowMac::MacActivate( long timestamp , bool inIsActivating ) // so refresh the whole window on activation and deactivation. long osVersion = UMAGetSystemVersion(); if (osVersion >= 0x1000 && osVersion < 0x1020) + { Refresh(TRUE); + } else - MacSuperEnabled( inIsActivating ) ; + { + // for the moment we have to resolve some redrawing issues like this + // the OS is stealing some redrawing areas as soon as it draws a control + Refresh(TRUE); + } } #if !TARGET_CARBON