]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/toplevel.cpp
compilation fix for !USE_PCH
[wxWidgets.git] / src / mac / carbon / toplevel.cpp
index 2da89cd414782bc5d4f015bccd974fe89508cbbd..b9dec80021dfd7dc6abc0e5d0b4231a7731594b9 100644 (file)
@@ -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
@@ -841,7 +860,9 @@ bool wxTopLevelWindowMac::Show(bool show)
 
     if (show)
     {
-      ::TransitionWindow((WindowRef)m_macWindow,kWindowZoomTransitionEffect,kWindowShowTransitionAction,nil);
+      // this is leading to incorrect window layering in some situations
+      // ::TransitionWindow((WindowRef)m_macWindow,kWindowZoomTransitionEffect,kWindowShowTransitionAction,nil);
+      ::ShowWindow( (WindowRef)m_macWindow ) ;
       ::SelectWindow( (WindowRef)m_macWindow ) ;
       // no need to generate events here, they will get them triggered by macos
       // actually they should be , but apparently they are not
@@ -852,7 +873,9 @@ bool wxTopLevelWindowMac::Show(bool show)
     }
     else
     {
-      ::TransitionWindow((WindowRef)m_macWindow,kWindowZoomTransitionEffect,kWindowHideTransitionAction,nil);
+      // this is leading to incorrect window layering in some situations
+      // ::TransitionWindow((WindowRef)m_macWindow,kWindowZoomTransitionEffect,kWindowHideTransitionAction,nil);
+      ::HideWindow( (WindowRef)m_macWindow ) ;
     }
 
     if ( !show )