]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/window.cpp
display rect fixed
[wxWidgets.git] / src / mac / window.cpp
index 7462e3ab8e027d8c0b5006e4524634139c3c5039..0708958546a2dbba84d78b2c6e89c35c4d8b4ee1 100644 (file)
@@ -124,6 +124,8 @@ void wxWindowMac::Init()
 
     m_hScrollBar = NULL ;
     m_vScrollBar = NULL ;
+
+    m_label = wxEmptyString;
 }
 
 // Destructor
@@ -254,7 +256,7 @@ bool wxWindowMac::Enable(bool enable)
     return TRUE;
 }
 
-void wxWindowMac::CaptureMouse()
+void wxWindowMac::DoCaptureMouse()
 {
     wxTheApp->s_captureWindow = this ;
 }
@@ -264,7 +266,7 @@ wxWindow* wxWindowBase::GetCapture()
     return wxTheApp->s_captureWindow ;
 }
 
-void wxWindowMac::ReleaseMouse()
+void wxWindowMac::DoReleaseMouse()
 {
     wxTheApp->s_captureWindow = NULL ;
 }
@@ -352,9 +354,9 @@ void wxWindowMac::DoScreenToClient(int *x, int *y) const
     
     MacRootWindowToWindow( x , y ) ;
     if ( x )
-                       x -= MacGetLeftBorderSize() ;
+            x -= MacGetLeftBorderSize() ;
     if ( y )
-                       y -= MacGetTopBorderSize() ;
+            y -= MacGetTopBorderSize() ;
 }
 
 void wxWindowMac::DoClientToScreen(int *x, int *y) const
@@ -362,10 +364,10 @@ void wxWindowMac::DoClientToScreen(int *x, int *y) const
     WindowRef window = (WindowRef) MacGetRootWindow() ;
     
     if ( x )
-                       x += MacGetLeftBorderSize() ;
+            x += MacGetLeftBorderSize() ;
     if ( y )
-                       y += MacGetTopBorderSize() ;
-                       
+            y += MacGetTopBorderSize() ;
+            
     MacWindowToRootWindow( x , y ) ;
     
     Point       localwhere = { 0,0 };
@@ -676,14 +678,14 @@ wxPoint wxWindowMac::GetClientAreaOrigin() const
     return wxPoint(MacGetLeftBorderSize(  ) , MacGetTopBorderSize(  ) );
 }
 
-void wxWindow::SetTitle(const wxString& title)
+void wxWindowMac::SetTitle(const wxString& title)
 {
-       m_label = title ;
+    m_label = title ;
 }
 
-wxString wxWindow::GetTitle() const
+wxString wxWindowMac::GetTitle() const
 {
-       return m_label ;
+    return m_label ;
 }
 
 bool wxWindowMac::Show(bool show)
@@ -1023,17 +1025,17 @@ void wxWindowMac::MacPaintBorders( int left , int top )
     if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) )
     {
 #if wxMAC_USE_THEME_BORDER
-                 Rect rect = { top , left , m_height + top , m_width + left } ;
-                 SInt32 border = 0 ;
-                 /*
-                 GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ;
-                 InsetRect( &rect , border , border );
+          Rect rect = { top , left , m_height + top , m_width + left } ;
+          SInt32 border = 0 ;
+          /*
+          GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ;
+          InsetRect( &rect , border , border );
       DrawThemeListBoxFrame(&rect,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
       */
         
         DrawThemePrimaryGroup(&rect  ,IsEnabled() ? kThemeStateActive : kThemeStateInactive) ;
 #else
-       bool sunken = HasFlag( wxSUNKEN_BORDER ) ;
+        bool sunken = HasFlag( wxSUNKEN_BORDER ) ;
         RGBForeColor( &face );
         MoveTo( left + 0 , top + m_height - 2 );
         LineTo( left + 0 , top + 0 );
@@ -1066,12 +1068,22 @@ void wxWindowMac::MacPaintBorders( int left , int top )
     }
     else if (HasFlag(wxSIMPLE_BORDER))
     {
-                   Rect rect = { top , left , m_height + top , m_width + left } ;
+            Rect rect = { top , left , m_height + top , m_width + left } ;
         RGBForeColor( &black ) ;
         FrameRect( &rect ) ;
     }
 }
 
+void wxWindowMac::RemoveChild( wxWindowBase *child )
+{
+    if ( child == m_hScrollBar )
+        m_hScrollBar = NULL ;
+    if ( child == m_vScrollBar )
+        m_vScrollBar = NULL ;
+      
+    wxWindowBase::RemoveChild( child ) ;
+}
+
 // New function that will replace some of the above.
 void wxWindowMac::SetScrollbar(int orient, int pos, int thumbVisible,
     int range, bool refresh)
@@ -1350,15 +1362,25 @@ bool wxWindowMac::MacGetWindowFromPointSub( const wxPoint &point , wxWindowMac**
 bool wxWindowMac::MacGetWindowFromPoint( const wxPoint &screenpoint , wxWindowMac** outWin ) 
 {
     WindowRef window ;
+    
     Point pt = { screenpoint.y , screenpoint.x } ;
     if ( ::FindWindow( pt , &window ) == 3 )
     {
-        wxPoint point( screenpoint ) ;
+        
         wxWindowMac* win = wxFindWinFromMacWindow( window ) ;
         if ( win )
         {
-            point = win->ScreenToClient( point ) ;
-            point += win->GetClientAreaOrigin() ;
+            // No, this yields the CLIENT are, we need the whole frame. RR.
+            // point = win->ScreenToClient( point ) ;
+            
+            GrafPtr     port;  
+            ::GetPort( &port ) ;
+            ::SetPort( UMAGetWindowPort( window ) ) ;
+            ::GlobalToLocal( &pt ) ;
+            ::SetPort( port ) ;
+
+            wxPoint point( pt.h, pt.v ) ;
+            
             return win->MacGetWindowFromPointSub( point , outWin ) ;
         }
     }
@@ -1366,6 +1388,7 @@ bool wxWindowMac::MacGetWindowFromPoint( const wxPoint &screenpoint , wxWindowMa
 }
 
 extern int wxBusyCursorCount ;
+static wxWindow *gs_lastWhich = NULL;
 
 bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event)
 {
@@ -1397,6 +1420,7 @@ bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event)
 
     event.m_x = x ;
     event.m_y = y ;
+    event.SetEventObject( this ) ;
     
     if ( wxBusyCursorCount == 0 )
     {
@@ -1416,7 +1440,26 @@ bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event)
             || event.GetEventType() == wxEVT_LEAVE_WINDOW )
         wxToolTip::RelayEvent( this , event);
 #endif // wxUSE_TOOLTIPS
+
+    if (gs_lastWhich != this)
+    {
+        gs_lastWhich = this;
+        
+        // Double clicks must always occur on the same window
+        if (event.GetEventType() == wxEVT_LEFT_DCLICK)
+            event.SetEventType( wxEVT_LEFT_DOWN );
+        if (event.GetEventType() == wxEVT_RIGHT_DCLICK)
+            event.SetEventType( wxEVT_RIGHT_DOWN );
+            
+        // Same for mouse up events
+        if (event.GetEventType() == wxEVT_LEFT_UP)
+            return TRUE;
+        if (event.GetEventType() == wxEVT_RIGHT_UP)
+            return TRUE;
+    }
+
     GetEventHandler()->ProcessEvent( event ) ;
+
     return TRUE;
 }
 
@@ -1435,11 +1478,13 @@ void wxWindowMac::Update()
     if ( win )
     {
       win->MacUpdate( 0 ) ;
-           if ( QDIsPortBuffered( GetWindowPort( (WindowRef) win->MacGetWindowRef() ) ) )
-           {
-                               QDFlushPortBuffer( GetWindowPort( (WindowRef) win->MacGetWindowRef() ) , NULL ) ;
-           }
-         }
+#if TARGET_API_MAC_CARBON
+        if ( QDIsPortBuffered( GetWindowPort( (WindowRef) win->MacGetWindowRef() ) ) )
+        {
+                QDFlushPortBuffer( GetWindowPort( (WindowRef) win->MacGetWindowRef() ) , NULL ) ;
+        }
+#endif
+      }
 }
 
 wxTopLevelWindowMac* wxWindowMac::MacGetTopLevelWindow() const 
@@ -1769,23 +1814,23 @@ long wxWindowMac::MacGetLeftBorderSize( ) const
 
     if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
     {
-               SInt32 border = 3 ;
+        SInt32 border = 3 ;
 #if wxMAC_USE_THEME_BORDER
-#if TARGET_CARBON              
-                 GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ;
+#if TARGET_CARBON       
+          GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ;
 #endif
 #endif
-                 return border ;
+          return border ;
     }
     else if (  m_windowStyle &wxDOUBLE_BORDER)
     {
-                 SInt32 border = 3 ;
+          SInt32 border = 3 ;
 #if wxMAC_USE_THEME_BORDER
-#if TARGET_CARBON              
-                 GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ;
+#if TARGET_CARBON       
+          GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ;
 #endif
 #endif
-                 return border ;
+          return border ;
     }
     else if (m_windowStyle &wxSIMPLE_BORDER)
     {