]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/window.cpp
moved splines rendering code into wxDCBase
[wxWidgets.git] / src / mac / carbon / window.cpp
index 3dd198b36997c90f3570183a59f78acebbab0f21..f3ba668abef4a7379766f61d8f275921768906af 100644 (file)
@@ -23,6 +23,8 @@
 #include "wx/layout.h"
 #include "wx/dialog.h"
 #include "wx/listbox.h"
+#include "wx/scrolbar.h"
+#include "wx/statbox.h"
 #include "wx/button.h"
 #include "wx/settings.h"
 #include "wx/msgdlg.h"
@@ -30,8 +32,9 @@
 #include "wx/notebook.h"
 #include "wx/tabctrl.h"
 #include "wx/tooltip.h"
+#include "wx/statusbr.h"
 // TODO remove the line below, just for lookup-up convenience CS
-#include "wx/mac/window.h"
+#include "wx/window.h"
 
 #include "wx/menuitem.h"
 #include "wx/log.h"
@@ -62,7 +65,7 @@ BEGIN_EVENT_TABLE(wxWindow, wxEvtHandler)
   EVT_SYS_COLOUR_CHANGED(wxWindow::OnSysColourChanged)
   EVT_INIT_DIALOG(wxWindow::OnInitDialog)
   EVT_IDLE(wxWindow::OnIdle)
-//  EVT_SCROLL(wxWindow::OnScroll)
+  EVT_SET_FOCUS(wxWindow::OnSetFocus)
 END_EVENT_TABLE()
 
 #endif
@@ -192,7 +195,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
        m_width = WidthDefault( size.x );
        m_height = HeightDefault( size.y ) ;
 
-       if ( ! IsKindOf( CLASSINFO ( wxControl ) ) )
+       if ( ! IsKindOf( CLASSINFO ( wxControl ) ) && ! IsKindOf( CLASSINFO( wxStatusBar ) ) )
        {
        MacCreateScrollBars( style ) ;
        }
@@ -202,6 +205,9 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
 
 void wxWindow::SetFocus()
 {
+       if ( gFocusWindow == this )
+               return ;
+               
        if ( AcceptsFocus() )
        {
                if (gFocusWindow )
@@ -437,8 +443,8 @@ void wxWindow::DoGetClientSize(int *x, int *y) const
     *x = m_width ;
     *y = m_height ;
 
-       *x -= 2 * MacGetBorderSize(  ) ;
-       *y -= 2 * MacGetBorderSize(  ) ;
+       *x -= MacGetLeftBorderSize(  )  + MacGetRightBorderSize(  ) ;
+       *y -= MacGetTopBorderSize(  ) + MacGetBottomBorderSize( );
        
   if ( (m_vScrollBar && m_vScrollBar->IsShown()) || (m_hScrollBar  && m_hScrollBar->IsShown()) )
   {
@@ -507,6 +513,14 @@ void wxWindow::DoMoveWindow(int x, int y, int width, int height)
        DoSetSize( x,y, width, height ) ;
 }
 
+// set the size of the window: if the dimensions are positive, just use them,
+// but if any of them is equal to -1, it means that we must find the value for
+// it ourselves (unless sizeFlags contains wxSIZE_ALLOW_MINUS_ONE flag, in
+// which case -1 is a valid value for x and y)
+//
+// If sizeFlags contains wxSIZE_AUTO_WIDTH/HEIGHT flags (default), we calculate
+// the width/height to best suit our contents, otherwise we reuse the current
+// width/height
 void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 {
 
@@ -528,11 +542,49 @@ void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
       actualX = currentX;
   if (y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
       actualY = currentY;
-  if (width == -1)
+  
+  wxSize size( -1 , -1 ) ;
+  
+  if (width == -1 || height == -1 )
+  {
+       size = DoGetBestSize() ;
+  }
+  
+  if ( width == -1 )
+  {
+       if ( sizeFlags & wxSIZE_AUTO_WIDTH )
+    {
+      actualWidth = size.x ;   
+      if ( actualWidth == -1 )
+       actualWidth = 80 ;
+    }
+    else
+    {
       actualWidth = currentW ;
+    }
+  }
   if (height == -1)
+  {
+       if ( sizeFlags & wxSIZE_AUTO_HEIGHT )
+       {
+               actualHeight = size.y ;
+               if ( actualHeight == -1 )
+                       actualHeight = 26 ;
+       }
+       else 
+       {
       actualHeight = currentH ;
+    }
+  }
 
+    if ((m_minWidth != -1) && (actualWidth < m_minWidth)) 
+       actualWidth = m_minWidth;
+    if ((m_minHeight != -1) && (actualHeight < m_minHeight)) 
+       actualHeight = m_minHeight;
+    if ((m_maxWidth != -1) && (actualWidth > m_maxWidth)) 
+       actualWidth = m_maxWidth;
+    if ((m_maxHeight != -1) && (actualHeight > m_maxHeight)) 
+       actualHeight = m_maxHeight;
        if ( actualX == currentX && actualY == currentY && actualWidth == currentW && actualHeight == currentH)
        {
                MacRepositionScrollBars() ; // we might have a real position shift
@@ -562,13 +614,12 @@ void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
                else
                {
                        // erase former position
+                       wxMacDrawingHelper focus( this ) ;
+                       if ( focus.Ok() )
                        {
-                               wxMacDrawingClientHelper focus( this ) ;
-                               if ( focus.Ok() )
-                               {
-                               Rect clientrect = { 0 , 0 , m_height , m_width } ;
-                           InvalWindowRect( GetMacRootWindow() , &clientrect ) ;
-                               }
+                               Rect clientrect = { 0 , 0 , m_height , m_width } ;
+                               ClipRect( &clientrect ) ;
+                       InvalWindowRect( GetMacRootWindow() , &clientrect ) ;
                        }
                }
                m_x = actualX ;
@@ -583,7 +634,8 @@ void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
                        if ( doResize )
                                ::SizeWindow(m_macWindowData->m_macWindow, m_width, m_height  , true); 
                        
-                       // the OS takes care of invalidating and erasing        
+                       // the OS takes care of invalidating and erasing the new area
+                       // we have erased the old one   
                        
                        if ( IsKindOf( CLASSINFO( wxFrame ) ) )
                        {
@@ -595,14 +647,17 @@ void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
                else
                {
                        // erase new position
+                       
                        {
-                               wxMacDrawingClientHelper focus( this ) ;
+                               wxMacDrawingHelper focus( this ) ;
                                if ( focus.Ok() )
                                {
                                        Rect clientrect = { 0 , 0 , m_height , m_width } ;
+                                       ClipRect( &clientrect ) ;
                                InvalWindowRect( GetMacRootWindow() , &clientrect ) ;
                                }
                        }
+                       
                        if ( doMove )
                                wxWindow::MacSuperChangedPosition() ; // like this only children will be notified
                }
@@ -627,7 +682,7 @@ void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 
 wxPoint wxWindow::GetClientAreaOrigin() const
 {
-    return wxPoint(MacGetBorderSize(  ) , MacGetBorderSize(  ) );
+    return wxPoint(MacGetLeftBorderSize(  ) , MacGetTopBorderSize(  ) );
 }
 
 // Makes an adjustment to the window position (for example, a frame that has
@@ -706,6 +761,18 @@ void wxWindow::MacSuperShown( bool show )
        }
 }
 
+bool wxWindow::MacIsReallyShown() const 
+{
+       bool status = m_isShown ;
+       wxWindow * win = this ;
+       while ( status && win->m_parent != NULL )
+       {
+               win = win->m_parent ;
+               status = win->m_isShown ;
+       }
+       return status ;
+}
+
 int wxWindow::GetCharHeight() const
 {
        wxClientDC dc ( (wxWindow*)this ) ;
@@ -725,7 +792,7 @@ void wxWindow::GetTextExtent(const wxString& string, int *x, int *y,
     if ( !fontToUse )
         fontToUse = &m_font;
         
-    wxClientDC dc( this ) ;
+    wxClientDC dc( (wxWindow*) this ) ;
     long lx,ly,ld,le ;
     dc.GetTextExtent( string , &lx , &ly , &ld, &le, fontToUse ) ;
     if ( externalLeading )
@@ -999,8 +1066,8 @@ void  wxWindow::MacCreateRealWindow( const wxString& title,
 
        // translate the window attributes in the appropriate window class and attributes
 
-       WindowClass wclass  ;
-       WindowAttributes attr  ;
+       WindowClass wclass = 0;
+       WindowAttributes attr = kWindowNoAttributes ;
        
        if ( HasFlag(wxTINY_CAPTION_HORIZ) ||  HasFlag(wxTINY_CAPTION_VERT) )
        {
@@ -1010,35 +1077,22 @@ void  wxWindow::MacCreateRealWindow( const wxString& title,
                        attr |= kWindowSideTitlebarAttribute ;
                }
        }
-       else if ( HasFlag( wxTHICK_FRAME ) )
+       else if ( HasFlag( wxCAPTION ) )
        {
                if ( HasFlag( wxDIALOG_MODAL ) )
                {
                        wclass = kMovableModalWindowClass ;
                }
-               else if ( HasFlag( wxDIALOG_MODELESS ) )
+               else 
                {
                        wclass = kDocumentWindowClass ;
                }
-               else
-               {
-                       if ( HasFlag( wxCAPTION ) )
-                       {
-                               wclass = kDocumentWindowClass ;
-                       }
-                       else
-                       {
-                               wclass = kModalWindowClass ;
-                       }
-               }
        }
        else
        {
                wclass = kModalWindowClass ;
        }
        
-       attr = kWindowNoAttributes ;
-       
        if ( HasFlag( wxMINIMIZE_BOX ) || HasFlag( wxMAXIMIZE_BOX ) )
        {
                attr |= kWindowFullZoomAttribute ;
@@ -1246,6 +1300,20 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
        InvalWindowRgn( GetMacRootWindow() ,  updateRgn ) ;
        DisposeRgn( updateRgn ) ;
        }
+       
+       for (wxNode *node = GetChildren().First(); node; node = node->Next())
+       {
+               wxWindow *child = (wxWindow*)node->Data();
+               if (child == m_vScrollBar) continue;
+               if (child == m_hScrollBar) continue;
+               if (child->IsTopLevel()) continue;
+               int x,y;
+               child->GetPosition( &x, &y );
+               int w,h;
+               child->GetSize( &w, &h );
+               child->SetSize( x+dx, y+dy, w, h );
+       }
+       
 }
 
 void wxWindow::MacOnScroll(wxScrollEvent &event )
@@ -1257,36 +1325,26 @@ void wxWindow::MacOnScroll(wxScrollEvent &event )
            wevent.SetOrientation(event.GetOrientation());
            wevent.m_eventObject = this;
        
-           switch ( event.m_eventType )
-           {
-           case wxEVT_SCROLL_TOP:
+       if (event.m_eventType == wxEVT_SCROLL_TOP) {
                wevent.m_eventType = wxEVT_SCROLLWIN_TOP;
-               break;
-       
-           case wxEVT_SCROLL_BOTTOM:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_BOTTOM) {
                wevent.m_eventType = wxEVT_SCROLLWIN_BOTTOM;
-               break;
-       
-           case wxEVT_SCROLL_LINEUP:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_LINEUP) {
                wevent.m_eventType = wxEVT_SCROLLWIN_LINEUP;
-               break;
-       
-           case wxEVT_SCROLL_LINEDOWN:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_LINEDOWN) {
                wevent.m_eventType = wxEVT_SCROLLWIN_LINEDOWN;
-               break;
-       
-           case wxEVT_SCROLL_PAGEUP:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_PAGEUP) {
                wevent.m_eventType = wxEVT_SCROLLWIN_PAGEUP;
-               break;
-       
-           case wxEVT_SCROLL_PAGEDOWN:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_PAGEDOWN) {
                wevent.m_eventType = wxEVT_SCROLLWIN_PAGEDOWN;
-               break;
-       
-           case wxEVT_SCROLL_THUMBTRACK:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_THUMBTRACK) {
                wevent.m_eventType = wxEVT_SCROLLWIN_THUMBTRACK;
-               break;
-       
            }
                
            GetEventHandler()->ProcessEvent(wevent);
@@ -1341,6 +1399,30 @@ wxObject* wxWindow::GetChild(int number) const
 }
 #endif // WXWIN_COMPATIBILITY
 
+void wxWindow::OnSetFocus(wxFocusEvent& event)
+{
+    // panel wants to track the window which was the last to have focus in it,
+    // so we want to set ourselves as the window which last had focus
+    //
+    // notice that it's also important to do it upwards the tree becaus
+    // otherwise when the top level panel gets focus, it won't set it back to
+    // us, but to some other sibling
+    wxWindow *win = this;
+    while ( win )
+    {
+        wxWindow *parent = win->GetParent();
+        wxPanel *panel = wxDynamicCast(parent, wxPanel);
+        if ( panel )
+        {
+            panel->SetLastFocus(win);
+        }
+
+        win = parent;
+    }
+
+    event.Skip();
+}
+
 void wxWindow::Clear()
 {
        if ( m_macWindowData )
@@ -1413,8 +1495,8 @@ void wxWindow::DoSetClientSize(int width, int height)
                if ( height != -1 && m_vScrollBar )
                        height += MAC_SCROLLBAR_SIZE ;
 
-               width += 2 * MacGetBorderSize(  ) ;
-               height += 2 * MacGetBorderSize(  ) ;
+               width += MacGetLeftBorderSize(  ) + MacGetRightBorderSize( ) ;
+               height += MacGetTopBorderSize(  ) + MacGetBottomBorderSize( ) ;
 
                DoSetSize( -1 , -1 , width , height ) ;
        }
@@ -1439,7 +1521,8 @@ bool wxWindow::MacGetWindowFromPointSub( const wxPoint &point , wxWindow** outWi
        for (wxNode *node = GetChildren().First(); node; node = node->Next())
        {
                wxWindow *child = (wxWindow*)node->Data();
-               if ( child->GetMacRootWindow() == window )
+               // added the m_isShown test --dmazzoni
+               if ( child->GetMacRootWindow() == window && child->m_isShown )
                {
                        if (child->MacGetWindowFromPointSub(newPoint , outWin ))
                                return TRUE;
@@ -1458,9 +1541,12 @@ bool wxWindow::MacGetWindowFromPoint( const wxPoint &screenpoint , wxWindow** ou
        {
                        wxPoint point( screenpoint ) ;
                        wxWindow* win = wxFindWinFromMacWindow( window ) ;
+                       if ( win )
+                       {
                        win->ScreenToClient( point ) ;
                        return win->MacGetWindowFromPointSub( point , outWin ) ;
        }
+       }
        return FALSE ;
 }
 
@@ -1501,6 +1587,13 @@ bool wxWindow::MacDispatchMouseEvent(wxMouseEvent& event)
        {
                m_cursor.MacInstall() ;
        }
+       
+       if ( event.GetEventType() == wxEVT_LEFT_DOWN )
+       {
+       // set focus to this window
+        if (AcceptsFocus() && FindFocus()!=this)
+               SetFocus();
+    }
 
 #if wxUSE_TOOLTIPS
     if ( event.GetEventType() == wxEVT_MOTION 
@@ -1650,7 +1743,7 @@ void wxWindow::MacMouseMoved( EventRecord *ev , short part)
 }
 void wxWindow::MacActivate( EventRecord *ev , bool inIsActivating )
 {
-       wxActivateEvent event(wxEVT_ACTIVATE, inIsActivating);
+       wxActivateEvent event(wxEVT_ACTIVATE, inIsActivating , m_windowId);
        event.m_timeStamp = ev->when ;
        event.SetEventObject(this);
        
@@ -1741,6 +1834,7 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time)
                        RgnHandle newupdate = NewRgn() ;
                        wxSize point = GetClientSize() ;
                        wxPoint origin = GetClientAreaOrigin() ;
+
                        SetRectRgn( newupdate , origin.x , origin.y , origin.x + point.x , origin.y+point.y ) ;
                        SectRgn( newupdate , m_macUpdateRgn , newupdate ) ;
                        OffsetRgn( newupdate , -origin.x , -origin.y ) ;
@@ -1754,13 +1848,10 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time)
                event.SetEventObject(this);
                GetEventHandler()->ProcessEvent(event);
        }
-       {
-       }
-
        
        
        RgnHandle childupdate = NewRgn() ;
-
+                       
        for (wxNode *node = GetChildren().First(); node; node = node->Next())
        {
                wxWindow *child = (wxWindow*)node->Data();
@@ -1905,8 +1996,8 @@ void wxWindow::MacRepositionScrollBars()
        int width = m_width ; 
        int height = m_height ;
 
-       width -= 2 * MacGetBorderSize() ;
-       height -= 2 * MacGetBorderSize() ;
+       width -= MacGetLeftBorderSize() + MacGetRightBorderSize();
+       height -= MacGetTopBorderSize() + MacGetBottomBorderSize();
        
        wxPoint vPoint(width-MAC_SCROLLBAR_SIZE, 0) ;
        wxSize vSize(MAC_SCROLLBAR_SIZE, height - adjust) ;
@@ -2001,56 +2092,6 @@ void wxWindow::MacSuperChangedPosition()
                node = node->Next();
        }
 }
-/*
-
-bool wxWindow::MacSetupFocusPort(  ) 
-{
-       Point localOrigin ;
-       Rect clipRect ;
-       WindowRef window ;
-       wxWindow *rootwin ;
-       GrafPtr port ;
-       
-       MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ;
-       return  MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ; 
-}
-
-bool wxWindow::MacSetupFocusClientPort(  ) 
-{
-       Point localOrigin ;
-       Rect clipRect ;
-       WindowRef window ;
-       wxWindow *rootwin ;
-       GrafPtr port ;
-       
-       MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ;
-       return  MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ; 
-}
-
-bool wxWindow::MacSetupDrawingPort(  ) 
-{
-       Point localOrigin ;
-       Rect clipRect ;
-       WindowRef window ;
-       wxWindow *rootwin ;
-       GrafPtr port ;
-       
-       MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ;
-       return  MacSetPortDrawingParams( localOrigin, clipRect, window , rootwin ) ; 
-}
-
-bool wxWindow::MacSetupDrawingClientPort(  ) 
-{
-       Point localOrigin ;
-       Rect clipRect ;
-       WindowRef window ;
-       wxWindow *rootwin ;
-       GrafPtr port ;
-       
-       MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ;
-       return  MacSetPortDrawingParams( localOrigin, clipRect, window , rootwin ) ; 
-}
-*/
 
 bool wxWindow::MacSetPortFocusParams( const Point & localOrigin, const Rect & clipRect, WindowRef window , wxWindow* win ) 
 {
@@ -2181,7 +2222,7 @@ void wxWindow::MacGetPortClientParams(Point* localOrigin, Rect* clipRect, Window
        SectRect(clipRect, &myClip, clipRect);
 }
 
-long wxWindow::MacGetBorderSize( ) const
+long wxWindow::MacGetLeftBorderSize( ) const
 {
        if( m_macWindowData )
                return 0 ;
@@ -2201,41 +2242,72 @@ long wxWindow::MacGetBorderSize( ) const
        return 0 ;
 }
 
-long wxWindow::MacRemoveBordersFromStyle( long style ) 
+long wxWindow::MacGetRightBorderSize( ) const
 {
-       return style & ~( wxDOUBLE_BORDER | wxSUNKEN_BORDER | wxRAISED_BORDER | wxBORDER | wxSTATIC_BORDER ) ;
+       if( m_macWindowData )
+               return 0 ;
+
+    if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+    {
+               return 3 ;
+    }
+    else if (  m_windowStyle &wxDOUBLE_BORDER)
+    {
+               return 3 ;
+    }
+    else if (m_windowStyle &wxSIMPLE_BORDER)
+    {
+       return 3 ;
+    }
+       return 0 ;
 }
-/*
-wxMacFocusHelper::wxMacFocusHelper( wxWindow * theWindow ) 
+
+long wxWindow::MacGetTopBorderSize( ) const
 {
-       m_ok = false ;
-       Point localOrigin ;
-       Rect clipRect ;
-       WindowRef window ;
-       wxWindow *rootwin ;
-       m_currentPort = NULL ;
-       GetPort( &m_formerPort ) ;
-       if ( theWindow )
-       {
-       
-               theWindow->MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ;
-               m_currentPort = UMAGetWindowPort( window ) ;
-               theWindow->MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ; 
-               m_ok = true ;
-       }
+       if( m_macWindowData )
+               return 0 ;
+
+    if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+    {
+               return 2 ;
+    }
+    else if (  m_windowStyle &wxDOUBLE_BORDER)
+    {
+               return 2 ;
+    }
+    else if (m_windowStyle &wxSIMPLE_BORDER)
+    {
+       return 1 ;
+    }
+       return 0 ;
 }
-       
-wxMacFocusHelper::~wxMacFocusHelper() 
+
+long wxWindow::MacGetBottomBorderSize( ) const
 {
-       if ( m_ok )
-       {
-               SetPort( m_currentPort ) ;
-               SetOrigin( 0 , 0 ) ;
-       }
-       if ( m_formerPort != m_currentPort )
-               SetPort( m_formerPort ) ;
+       if( m_macWindowData )
+               return 0 ;
+
+    if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+    {
+               return 3 ;
+    }
+    else if (  m_windowStyle &wxDOUBLE_BORDER)
+    {
+               return 3 ;
+    }
+    else if (m_windowStyle &wxSIMPLE_BORDER)
+    {
+       return 3 ;
+    }
+       return 0 ;
 }
-*/
+
+long wxWindow::MacRemoveBordersFromStyle( long style ) 
+{
+       return style & ~( wxDOUBLE_BORDER | wxSUNKEN_BORDER | wxRAISED_BORDER | wxBORDER | wxSTATIC_BORDER ) ;
+}
+
+
 wxMacDrawingHelper::wxMacDrawingHelper( wxWindow * theWindow ) 
 {
        m_ok = false ;
@@ -2268,43 +2340,12 @@ wxMacDrawingHelper::~wxMacDrawingHelper()
                Rect portRect ;
                GetPortBounds( m_currentPort , &portRect ) ;
                ClipRect( &portRect ) ;
+               wxDC::MacInvalidateSetup() ;    
        }
                
        if ( m_formerPort != m_currentPort )
                SetPort( m_formerPort ) ;
 }
-/*
-wxMacFocusClientHelper::wxMacFocusClientHelper( wxWindow * theWindow ) 
-{
-       m_ok = false ;
-       Point localOrigin ;
-       Rect clipRect ;
-       WindowRef window ;
-       wxWindow *rootwin ;
-       m_currentPort = NULL ;
-       
-       GetPort( &m_formerPort ) ;
-
-       if ( theWindow )
-       {
-               theWindow->MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ;
-               m_currentPort = UMAGetWindowPort( window ) ;
-               theWindow->MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ; 
-               m_ok = true ;
-       }
-}
-       
-wxMacFocusClientHelper::~wxMacFocusClientHelper() 
-{
-       if ( m_ok )
-       {
-               SetPort( m_currentPort ) ;
-               SetOrigin( 0 , 0 ) ;
-       }
-       if ( m_formerPort != m_currentPort )
-               SetPort( m_formerPort ) ;
-}
-*/
 
 wxMacDrawingClientHelper::wxMacDrawingClientHelper( wxWindow * theWindow ) 
 {
@@ -2344,3 +2385,21 @@ wxMacDrawingClientHelper::~wxMacDrawingClientHelper()
        if ( m_formerPort != m_currentPort )
                SetPort( m_formerPort ) ;
 }
+
+// Find the wxWindow at the current mouse position, returning the mouse
+// position.
+wxWindow* wxFindWindowAtPointer(wxPoint& pt)
+{
+    pt = wxGetMousePosition();
+    wxWindow* found = wxFindWindowAtPoint(pt);
+    return found;
+}
+
+// Get the current mouse position.
+wxPoint wxGetMousePosition()
+{
+    int x, y;
+    wxGetMousePosition(& x, & y);
+    return wxPoint(x, y);
+}
+