]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/window.cpp
RTTI and exceptions settings for WinCE are restored.
[wxWidgets.git] / src / mac / carbon / window.cpp
index 8b6475a926ecb1dac73221d473ea71b5abf7ff1e..b43b781adad964eca014bb1cbddfa06310d349cc 100644 (file)
@@ -76,8 +76,6 @@ extern wxList wxPendingDelete;
     IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowBase)
 #endif // __WXUNIVERSAL__/__WXMAC__
 
-#if !USE_SHARED_LIBRARY
-
 BEGIN_EVENT_TABLE(wxWindowMac, wxWindowBase)
     EVT_NC_PAINT(wxWindowMac::OnNcPaint)
     EVT_ERASE_BACKGROUND(wxWindowMac::OnEraseBackground)
@@ -89,8 +87,6 @@ BEGIN_EVENT_TABLE(wxWindowMac, wxWindowBase)
     EVT_MOUSE_EVENTS(wxWindowMac::OnMouseEvent)
 END_EVENT_TABLE()
 
-#endif
-
 #define wxMAC_DEBUG_REDRAW 0
 #ifndef wxMAC_DEBUG_REDRAW
 #define wxMAC_DEBUG_REDRAW 0
@@ -213,7 +209,7 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl
                         thisWindow->GetPeer()->GetRect( &controlBounds ) ;
                     }
                 }
-                
+
                 if ( cEvent.GetParameter<RgnHandle>(kEventParamRgnHandle, &updateRgn) != noErr )
                 {
                     updateRgn = (RgnHandle) visRegion.GetWXHRGN() ;
@@ -222,22 +218,12 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl
                 {
                     if ( thisWindow->GetPeer()->IsCompositing() == false )
                     {
-/*
-                        if ( thisWindow->GetPeer()->IsRootControl() == false )
-                        {
-                            GetControlBounds( thisWindow->GetPeer()->GetControlRef() , &controlBounds ) ;
-                        }
-                        else
-                        {
-                            thisWindow->GetPeer()->GetRect( &controlBounds ) ;
-                        }
-*/ 
                         allocatedRgn = NewRgn() ;
                         CopyRgn( updateRgn , allocatedRgn ) ;
                         OffsetRgn( allocatedRgn , -controlBounds.left , -controlBounds.top ) ;
                         // hide the given region by the new region that must be shifted
                         wxMacNativeToWindow( thisWindow , allocatedRgn ) ;
-                        updateRgn = allocatedRgn ;                            
+                        updateRgn = allocatedRgn ;
                     }
                     else
                     {
@@ -282,10 +268,10 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl
                     if ( cEvent.GetParameter<CGContextRef>(kEventParamCGContextRef, &cgContext) != noErr )
                     {
                         wxASSERT( thisWindow->GetPeer()->IsCompositing() == false ) ;
-                        
+
                         // this parameter is not provided on non-composited windows
                         created = true ;
-                        // rest of the code expects this to be already transformed and clipped for local 
+                        // rest of the code expects this to be already transformed and clipped for local
                         CGrafPtr port = GetWindowPort( (WindowRef) thisWindow->MacGetTopLevelWindowRef() ) ;
                         Rect bounds ;
                         GetPortBounds( port , &bounds ) ;
@@ -299,13 +285,13 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl
 
                         CGContextTranslateCTM( cgContext , 0 , bounds.bottom - bounds.top ) ;
                         CGContextScaleCTM( cgContext , 1 , -1 ) ;
-                        
+
                         CGContextTranslateCTM( cgContext , controlBounds.left , controlBounds.top ) ;
-                        
+
                         /*
                         CGContextSetRGBFillColor( cgContext , 1.0 , 1.0 , 1.0 , 1.0 ) ;
-                        CGContextFillRect(cgContext , CGRectMake( 0 , 0 , 
-                            controlBounds.right - controlBounds.left , 
+                        CGContextFillRect(cgContext , CGRectMake( 0 , 0 ,
+                            controlBounds.right - controlBounds.left ,
                             controlBounds.bottom - controlBounds.top ) );
                         */
 
@@ -357,9 +343,15 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl
                         thisWindow->GetCaret()->OnKillFocus();
                     }
         #endif // wxUSE_CARET
-                    wxFocusEvent event( wxEVT_KILL_FOCUS, thisWindow->GetId());
-                    event.SetEventObject(thisWindow);
-                    thisWindow->GetEventHandler()->ProcessEvent(event) ;
+                    static bool inKillFocusEvent = false ;
+                    if ( !inKillFocusEvent )
+                    {
+                        inKillFocusEvent = true ;
+                        wxFocusEvent event( wxEVT_KILL_FOCUS, thisWindow->GetId());
+                        event.SetEventObject(thisWindow);
+                        thisWindow->GetEventHandler()->ProcessEvent(event) ;
+                        inKillFocusEvent = false ;
+                    }
                 }
                 else
                 {
@@ -485,6 +477,7 @@ pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef
             break ;
         case kEventClassService :
             result = wxMacWindowServiceEventHandler( handler, event , data ) ;
+            break ;
         default :
             break ;
     }
@@ -576,6 +569,9 @@ void wxWindowMac::MacControlUserPaneDrawProc(wxInt16 part)
 {
     RgnHandle rgn = NewRgn() ;
     GetClip( rgn ) ;
+    int x = 0 , y = 0;
+    MacWindowToRootWindow( &x,&y ) ;
+    OffsetRgn( rgn , -x , -y ) ;
     wxMacWindowStateSaver sv( this ) ;
     SectRgn( rgn , (RgnHandle) MacGetVisibleRegion().GetWXHRGN() , rgn ) ;
     MacDoRedraw( rgn , 0 ) ;
@@ -638,35 +634,6 @@ wxMAC_DEFINE_PROC_GETTER( ControlActionUPP , wxMacLiveScrollbarActionProc ) ;
 // implementation
 // ===========================================================================
 
-#if KEY_wxList_DEPRECATED
-wxList wxWinMacControlList(wxKEY_INTEGER);
-
-wxWindow *wxFindControlFromMacControl(ControlRef inControl )
-{
-    wxNode *node = wxWinMacControlList.Find((long)inControl);
-    if (!node)
-        return NULL;
-    return (wxControl *)node->GetData();
-}
-
-void wxAssociateControlWithMacControl(ControlRef inControl, wxWindow *control)
-{
-    // adding NULL ControlRef is (first) surely a result of an error and
-    // (secondly) breaks native event processing
-    wxCHECK_RET( inControl != (ControlRef) NULL, wxT("attempt to add a NULL WindowRef to window list") );
-
-    if ( !wxWinMacControlList.Find((long)inControl) )
-        wxWinMacControlList.Append((long)inControl, control);
-}
-
-void wxRemoveMacControlAssociation(wxWindow *control)
-{
-    // remove all associations pointing to us
-    while ( wxWinMacControlList.DeleteObject(control) )
-        {}
-}
-#else
-
 WX_DECLARE_HASH_MAP(ControlRef, wxWindow*, wxPointerHash, wxPointerEqual, MacControlMap);
 
 static MacControlMap wxWinMacControlList;
@@ -709,7 +676,6 @@ void wxRemoveMacControlAssociation(wxWindow *control)
         }
     }
 }
-#endif // deprecated wxList
 
 // ----------------------------------------------------------------------------
  // constructors and such
@@ -736,17 +702,17 @@ void wxWindowMac::Init()
     m_peer = NULL ;
     m_frozenness = 0 ;
 #if WXWIN_COMPATIBILITY_2_4
-    m_backgroundTransparent = FALSE;
+    m_backgroundTransparent = false;
 #endif
 
     // as all windows are created with WS_VISIBLE style...
-    m_isShown = TRUE;
+    m_isShown = true;
 
     m_hScrollBar = NULL ;
     m_vScrollBar = NULL ;
     m_macBackgroundBrush = wxNullBrush ;
 
-    m_macIsUserPane = TRUE;
+    m_macIsUserPane = true;
 #if wxMAC_USE_CORE_GRAPHICS
     m_cgContextRef = NULL ;
 #endif
@@ -761,7 +727,7 @@ wxWindowMac::~wxWindowMac()
 {
     SendDestroyEvent();
 
-    m_isBeingDeleted = TRUE;
+    m_isBeingDeleted = true;
 
     MacInvalidateBorders() ;
 
@@ -797,6 +763,7 @@ wxWindowMac::~wxWindowMac()
     {
         // in case the callback might be called during destruction
         wxRemoveMacControlAssociation( this) ;
+        ::RemoveEventHandler( (EventHandlerRef ) m_macControlEventHandler ) ;
         // we currently are not using this hook
         // ::SetControlColorProc( *m_peer , NULL ) ;
         m_peer->Dispose() ;
@@ -860,10 +827,10 @@ bool wxWindowMac::Create(wxWindowMac *parent, wxWindowID id,
            long style,
            const wxString& name)
 {
-    wxCHECK_MSG( parent, FALSE, wxT("can't create wxWindowMac without parent") );
+    wxCHECK_MSG( parent, false, wxT("can't create wxWindowMac without parent") );
 
     if ( !CreateBase(parent, id, pos, size, style, wxDefaultValidator, name) )
-        return FALSE;
+        return false;
 
     m_windowVariant = parent->GetWindowVariant() ;
 
@@ -901,10 +868,10 @@ bool wxWindowMac::Create(wxWindowMac *parent, wxWindowID id,
     wxWindowCreateEvent event(this);
     GetEventHandler()->AddPendingEvent(event);
 
-    return TRUE;
+    return true;
 }
 
-void wxWindowMac::MacChildAdded() 
+void wxWindowMac::MacChildAdded()
 {
     if ( m_vScrollBar )
     {
@@ -1172,7 +1139,7 @@ bool wxWindowMac::MacGetBoundsForControl(const wxPoint& pos,
                                        int& w, int& h , bool adjustOrigin ) const
 {
     bool isCompositing = MacGetTopLevelWindow()->MacUsesCompositing() ;
-    
+
     // the desired size, minus the border pixels gives the correct size of the control
 
     x = (int)pos.x;
@@ -1217,7 +1184,7 @@ void wxWindowMac::DoGetPosition(int *x, int *y) const
 {
     Rect bounds ;
     m_peer->GetRect( &bounds ) ;
-    
+
     int x1 = bounds.left ;
     int y1 = bounds.top ;
 
@@ -1378,7 +1345,7 @@ void wxWindowMac::MacGetContentAreaInset( int &left , int &top , int &right , in
         GetRegionBounds( rgn , &content ) ;
         m_peer->GetRect( &structure ) ;
         OffsetRect( &structure, -structure.left , -structure.top ) ;
-        
+
         left = content.left - structure.left ;
         top = content.top  - structure.top ;
         right = structure.right - content.right ;
@@ -1454,17 +1421,17 @@ void wxWindowMac::DoGetClientSize(int *x, int *y) const
 bool wxWindowMac::SetCursor(const wxCursor& cursor)
 {
     if (m_cursor == cursor)
-        return FALSE;
+        return false;
 
     if (wxNullCursor == cursor)
     {
         if ( ! wxWindowBase::SetCursor( *wxSTANDARD_CURSOR ) )
-            return FALSE ;
+            return false ;
     }
     else
     {
         if ( ! wxWindowBase::SetCursor( cursor ) )
-            return FALSE ;
+            return false ;
     }
 
     wxASSERT_MSG( m_cursor.Ok(),
@@ -1498,7 +1465,7 @@ bool wxWindowMac::SetCursor(const wxCursor& cursor)
         m_cursor.MacInstall() ;
     }
 
-    return TRUE ;
+    return true ;
 }
 
 #if wxUSE_MENUS
@@ -1536,7 +1503,7 @@ bool wxWindowMac::DoPopupMenu(wxMenu *menu, int x, int y)
 
     menu->SetInvokingWindow(NULL);
 
-  return TRUE;
+  return true;
 }
 #endif
 
@@ -1556,7 +1523,7 @@ void wxWindowMac::DoSetToolTip(wxToolTip *tooltip)
 
 #endif // wxUSE_TOOLTIPS
 
-void wxWindowMac::MacInvalidateBorders() 
+void wxWindowMac::MacInvalidateBorders()
 {
     if ( m_peer == NULL )
         return ;
@@ -1564,18 +1531,18 @@ void wxWindowMac::MacInvalidateBorders()
     bool vis = MacIsReallyShown() ;
     if ( !vis )
         return ;
-        
+
     int outerBorder = MacGetLeftBorderSize() ;
     if ( m_peer->NeedsFocusRect() && m_peer->HasFocus() )
         outerBorder += 4 ;
 
     if ( outerBorder == 0 )
         return ;
-        
-    // now we know that we have something to do at all    
+
+    // now we know that we have something to do at all
 
     // as the borders are drawn on the parent we have to properly invalidate all these areas
-    RgnHandle   updateInner = NewRgn() , 
+    RgnHandle   updateInner = NewRgn() ,
                 updateOuter = NewRgn() ;
 
     // this rectangle is in HIViewCoordinates under OSX and in Window Coordinates under Carbon
@@ -1717,7 +1684,7 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height)
     if ((m_maxWidth != -1) && (actualWidth > m_maxWidth))
         actualWidth = m_maxWidth;
     if ((m_maxHeight != -1) && (actualHeight > m_maxHeight))
-        actualHeight = m_maxHeight;    
+        actualHeight = m_maxHeight;
 
     bool doMove = false ;
     bool doResize = false ;
@@ -1733,10 +1700,10 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height)
 
     if ( doMove || doResize )
     {
-        // as the borders are drawn outside the native control, we adjust now    
+        // as the borders are drawn outside the native control, we adjust now
 
-        wxRect bounds( wxPoint( actualX + MacGetLeftBorderSize() ,actualY + MacGetTopBorderSize() ), 
-            wxSize( actualWidth - (MacGetLeftBorderSize() + MacGetRightBorderSize()) , 
+        wxRect bounds( wxPoint( actualX + MacGetLeftBorderSize() ,actualY + MacGetTopBorderSize() ),
+            wxSize( actualWidth - (MacGetLeftBorderSize() + MacGetRightBorderSize()) ,
                 actualHeight - (MacGetTopBorderSize() + MacGetBottomBorderSize()) ) ) ;
 
         Rect r ;
@@ -1748,10 +1715,10 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height)
         }
 
         MacInvalidateBorders() ;
-        
+
         m_cachedClippedRectValid = false ;
         m_peer->SetRect( &r ) ;
-        
+
         wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified
 
         MacInvalidateBorders() ;
@@ -1794,12 +1761,12 @@ wxSize wxWindowMac::DoGetBestSize() const
         {
             bestsize.bottom = 16 ;
         }
-#if wxUSE_SPINBTN 
+#if wxUSE_SPINBTN
         else if ( IsKindOf( CLASSINFO( wxSpinButton ) ) )
         {
             bestsize.bottom = 24 ;
         }
-#endif // wxUSE_SPINBTN 
+#endif // wxUSE_SPINBTN
         else
         {
             // return wxWindowBase::DoGetBestSize() ;
@@ -1841,15 +1808,15 @@ void wxWindowMac::DoSetSize(int x, int y, int width, int height, int sizeFlags)
         return;
     }
 
-    if ( x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
+    if ( x == wxDefaultCoord && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
         x = currentX;
-    if ( y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
+    if ( y == wxDefaultCoord && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
         y = currentY;
 
     AdjustForParentClientOrigin(x, y, sizeFlags);
 
-    wxSize size(-1, -1);
-    if ( width == -1 )
+    wxSize size = wxDefaultSize;
+    if ( width == wxDefaultCoord )
     {
         if ( sizeFlags & wxSIZE_AUTO_WIDTH )
         {
@@ -1863,11 +1830,11 @@ void wxWindowMac::DoSetSize(int x, int y, int width, int height, int sizeFlags)
         }
     }
 
-    if ( height == -1 )
+    if ( height == wxDefaultCoord )
     {
         if ( sizeFlags & wxSIZE_AUTO_HEIGHT )
         {
-            if ( size.x == -1 )
+            if ( size.x == wxDefaultCoord )
             {
                 size = DoGetBestSize();
             }
@@ -1904,7 +1871,7 @@ wxPoint wxWindowMac::GetClientAreaOrigin() const
 
 void wxWindowMac::DoSetClientSize(int clientwidth, int clientheight)
 {
-    if ( clientheight != -1 || clientheight != -1 )
+    if ( clientheight != wxDefaultCoord || clientheight != wxDefaultCoord )
     {
         int currentclientwidth , currentclientheight ;
         int currentwidth , currentheight ;
@@ -1912,7 +1879,7 @@ void wxWindowMac::DoSetClientSize(int clientwidth, int clientheight)
         GetClientSize( &currentclientwidth , &currentclientheight ) ;
         GetSize( &currentwidth , &currentheight ) ;
 
-        DoSetSize( -1 , -1 , currentwidth + clientwidth - currentclientwidth ,
+        DoSetSize( wxDefaultCoord , wxDefaultCoord , currentwidth + clientwidth - currentclientwidth ,
             currentheight + clientheight - currentclientheight , wxSIZE_USE_EXISTING ) ;
     }
 }
@@ -1937,7 +1904,7 @@ bool wxWindowMac::Show(bool show)
 {
     bool former = MacIsReallyShown() ;
     if ( !wxWindowBase::Show(show) )
-        return FALSE;
+        return false;
 
     // TODO use visibilityChanged Carbon Event for OSX
     if ( m_peer )
@@ -1946,7 +1913,7 @@ bool wxWindowMac::Show(bool show)
     }
     if ( former != MacIsReallyShown() )
         MacPropagateVisibilityChanged() ;
-    return TRUE;
+    return true;
 }
 
 bool wxWindowMac::Enable(bool enable)
@@ -1954,13 +1921,13 @@ bool wxWindowMac::Enable(bool enable)
     wxASSERT( m_peer->Ok() ) ;
     bool former = MacIsReallyEnabled() ;
     if ( !wxWindowBase::Enable(enable) )
-        return FALSE;
+        return false;
 
     m_peer->Enable( enable ) ;
 
     if ( former != MacIsReallyEnabled() )
         MacPropagateEnabledStateChanged() ;
-    return TRUE;
+    return true;
 }
 
 //
@@ -2040,7 +2007,7 @@ bool wxWindowMac::MacIsReallyShown()
     // only under OSX the visibility of the TLW is taken into account
     if ( m_isBeingDeleted )
         return false ;
-        
+
 #if TARGET_API_MAC_OSX
     if ( m_peer && m_peer->Ok() )
         return m_peer->IsVisible();
@@ -2179,6 +2146,8 @@ void wxWindowMac::WarpPointer (int x_pos, int y_pos)
 
 void wxWindowMac::OnEraseBackground(wxEraseEvent& event)
 {
+    if ( MacGetTopLevelWindow() == NULL )
+        return ;
 #if TARGET_API_MAC_OSX
     if ( MacGetTopLevelWindow()->MacUsesCompositing() && (m_macBackgroundBrush.Ok() == false || m_macBackgroundBrush.GetStyle() == wxTRANSPARENT ) )
     {
@@ -2283,7 +2252,7 @@ void wxWindowMac::MacPaintBorders( int leftOrigin , int rightOrigin )
 
         HIThemeFrameDrawInfo info ;
         memset( &info, 0 , sizeof( info ) ) ;
-        
+
         info.version = 0 ;
         info.kind = 0 ;
         info.state = IsEnabled() ? kThemeStateActive : kThemeStateInactive ;
@@ -2291,7 +2260,7 @@ void wxWindowMac::MacPaintBorders( int leftOrigin , int rightOrigin )
 
         CGContextRef cgContext = (CGContextRef) GetParent()->MacGetCGContextRef() ;
         wxASSERT( cgContext ) ;
-         
+
         if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) )
         {
             info.kind = kHIThemeFrameTextFieldSquare ;
@@ -2306,14 +2275,14 @@ void wxWindowMac::MacPaintBorders( int leftOrigin , int rightOrigin )
         {
             HIThemeDrawFocusRect( &cgrect , true , cgContext , kHIThemeOrientationNormal ) ;
         }
-        
+
         m_peer->GetRect( &rect ) ;
         if ( hasBothScrollbars )
         {
             int size = m_hScrollBar->GetWindowVariant() == wxWINDOW_VARIANT_NORMAL ? 16 : 12 ;
             CGRect cgrect = CGRectMake( rect.right - size , rect.bottom - size , size , size ) ;
             CGPoint cgpoint = CGPointMake( rect.right - size , rect.bottom - size ) ;
-            HIThemeGrowBoxDrawInfo info ; 
+            HIThemeGrowBoxDrawInfo info ;
             memset( &info, 0 , sizeof( info ) ) ;
             info.version = 0 ;
             info.state = IsEnabled() ? kThemeStateActive : kThemeStateInactive ;
@@ -2342,7 +2311,7 @@ void wxWindowMac::MacPaintBorders( int leftOrigin , int rightOrigin )
         {
             DrawThemeListBoxFrame(&rect,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
         }
-        
+
         if ( hasFocus )
         {
             DrawThemeFocusRect( &rect , true ) ;
@@ -2350,7 +2319,7 @@ void wxWindowMac::MacPaintBorders( int leftOrigin , int rightOrigin )
 
         if ( hasBothScrollbars )
         {
-            // GetThemeStandaloneGrowBoxBounds    
+            // GetThemeStandaloneGrowBoxBounds
                         //DrawThemeStandaloneNoGrowBox
         }
     }
@@ -2413,11 +2382,11 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
     if( dx == 0 && dy ==0 )
         return ;
 
-        int width , height ;
-        GetClientSize( &width , &height ) ;
+    int width , height ;
+    GetClientSize( &width , &height ) ;
 #if TARGET_API_MAC_OSX
-       if ( 1 /* m_peer->IsCompositing() */ )
-       {
+    if ( 1 /* m_peer->IsCompositing() */ )
+    {
         // note there currently is a bug in OSX which makes inefficient refreshes in case an entire control
         // area is scrolled, this does not occur if width and height are 2 pixels less,
         // TODO write optimal workaround
@@ -2454,7 +2423,7 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
         // is the better overall solution, as it does not slow down scrolling
         m_peer->SetNeedsDisplay() ;
 #else
-        // this would be the preferred version for fast drawing controls       
+        // this would be the preferred version for fast drawing controls
 
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3
             if( UMAGetSystemVersion() >= 0x1030 && m_peer->IsCompositing() )
@@ -2464,10 +2433,10 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
                 Update() ;
 
 #endif
-       }
-       else
+    }
+    else
 #endif
-       {
+    {
 
         wxPoint pos;
         pos.x = pos.y = 0;
@@ -2475,7 +2444,7 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
         Rect scrollrect;
         RgnHandle updateRgn = NewRgn() ;
 
-       {
+        {
             wxClientDC dc(this) ;
             wxMacPortSetter helper(&dc) ;
 
@@ -2494,7 +2463,7 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
             ScrollRect( &scrollrect , dx , dy , updateRgn ) ;
 
             // now scroll the former update region as well and add the new update region
-            
+
             WindowRef rootWindow = (WindowRef) MacGetTopLevelWindowRef() ;
             RgnHandle formerUpdateRgn = NewRgn() ;
             RgnHandle scrollRgn = NewRgn() ;
@@ -2717,7 +2686,7 @@ void wxWindowMac::ClearBackground()
 void wxWindowMac::Update()
 {
 #if TARGET_API_MAC_OSX
-       MacGetTopLevelWindow()->MacPerformUpdates() ;
+    MacGetTopLevelWindow()->MacPerformUpdates() ;
 #else
     ::Draw1Control( m_peer->GetControlRef() ) ;
 #endif
@@ -2734,19 +2703,19 @@ wxTopLevelWindowMac* wxWindowMac::MacGetTopLevelWindow() const
     return win ;
 }
 
-const wxRect& wxWindowMac::MacGetClippedClientRect() const 
+const wxRect& wxWindowMac::MacGetClippedClientRect() const
 {
     MacUpdateClippedRects() ;
     return m_cachedClippedClientRect ;
 }
 
-const wxRect& wxWindowMac::MacGetClippedRect() const 
+const wxRect& wxWindowMac::MacGetClippedRect() const
 {
     MacUpdateClippedRects() ;
     return m_cachedClippedRect ;
 }
 
-const wxRect&wxWindowMac:: MacGetClippedRectWithOuterStructure() const 
+const wxRect&wxWindowMac:: MacGetClippedRectWithOuterStructure() const
 {
     MacUpdateClippedRects() ;
     return m_cachedClippedRectWithOuterStructure ;
@@ -2781,7 +2750,7 @@ void wxWindowMac::MacUpdateClippedRects() const
 
     Rect r ;
     Rect rIncludingOuterStructures ;
-    
+
     m_peer->GetRect( &r ) ;
     r.left -= MacGetLeftBorderSize() ;
     r.top -= MacGetTopBorderSize() ;
@@ -2795,10 +2764,10 @@ void wxWindowMac::MacUpdateClippedRects() const
 
     rIncludingOuterStructures = r ;
     InsetRect( &rIncludingOuterStructures , -4 , -4 ) ;
-    
+
     wxRect cl = GetClientRect() ;
     Rect rClient = { cl.y , cl.x , cl.y + cl.height , cl.x + cl.width } ;
-    
+
     const wxWindow* child = this ;
     const wxWindow* parent = NULL ;
     while( !child->IsTopLevel() && ( parent = child->GetParent() ) != NULL )
@@ -2840,19 +2809,19 @@ void wxWindowMac::MacUpdateClippedRects() const
         }
         child = parent ;
     }
-    
+
     m_cachedClippedRect = wxRect( r.left , r.top , r.right - r.left , r.bottom - r.top ) ;
-    m_cachedClippedClientRect = wxRect( rClient.left , rClient.top , 
+    m_cachedClippedClientRect = wxRect( rClient.left , rClient.top ,
         rClient.right - rClient.left , rClient.bottom - rClient.top ) ;
-    m_cachedClippedRectWithOuterStructure = wxRect( 
-        rIncludingOuterStructures.left , rIncludingOuterStructures.top , 
-        rIncludingOuterStructures.right - rIncludingOuterStructures.left , 
+    m_cachedClippedRectWithOuterStructure = wxRect(
+        rIncludingOuterStructures.left , rIncludingOuterStructures.top ,
+        rIncludingOuterStructures.right - rIncludingOuterStructures.left ,
         rIncludingOuterStructures.bottom - rIncludingOuterStructures.top ) ;
-    
+
     m_cachedClippedRegionWithOuterStructure = wxRegion( m_cachedClippedRectWithOuterStructure ) ;
     m_cachedClippedRegion = wxRegion( m_cachedClippedRect ) ;
     m_cachedClippedClientRegion = wxRegion( m_cachedClippedClientRect ) ;
-    
+
     m_cachedClippedRectValid = true ;
 }
 
@@ -2868,7 +2837,7 @@ bool wxWindowMac::MacDoRedraw( WXHRGN updatergnr , long time )
 
     // wxLogDebug(wxT("update for %s bounds %d , %d , %d , %d"),wxString(GetClassInfo()->GetClassName()).c_str(), updatebounds.left , updatebounds.top , updatebounds.right , updatebounds.bottom ) ;
 
-    if ( !EmptyRgn(updatergn) )  
+    if ( !EmptyRgn(updatergn) )
     {
         RgnHandle newupdate = NewRgn() ;
         wxSize point = GetClientSize() ;
@@ -2887,7 +2856,7 @@ bool wxWindowMac::MacDoRedraw( WXHRGN updatergnr , long time )
                 dc->SetClippingRegion(wxRegion(updatergn));
             else
                 dc->SetClippingRegion(wxRegion(newupdate));
-                
+
             wxEraseEvent eevent( GetId(), dc );
             eevent.SetEventObject( this );
             GetEventHandler()->ProcessEvent( eevent );
@@ -3146,7 +3115,7 @@ long wxWindowMac::MacGetLeftBorderSize( ) const
         return 0 ;
 
     SInt32 border = 0 ;
-    
+
     if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) )
     {
         GetThemeMetric( kThemeMetricEditTextFrameOutset , &border ) ;
@@ -3249,4 +3218,17 @@ wxInt32 wxWindowMac::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENT
     return eventNotHandledErr ;
 }
 
+bool wxWindowMac::Reparent(wxWindowBase *newParentBase)
+{
+    wxWindowMac *newParent = (wxWindowMac *)newParentBase;
+
+    if ( !wxWindowBase::Reparent(newParent) )
+        return false;
+
+    //copied from MacPostControlCreate
+    ControlRef container = (ControlRef) GetParent()->GetHandle() ;
+    wxASSERT_MSG( container != NULL , wxT("No valid mac container control") ) ;
+    ::EmbedControl( m_peer->GetControlRef() , container ) ;
 
+    return true;
+}