]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/window_osx.cpp
Make the gui test still run on the buildbot when the non-gui tests fail.
[wxWidgets.git] / src / osx / window_osx.cpp
index f9016f4511fa96d737a7122085e95bbdc3806a13..89afdc7171e623a5862699ac4010435a387d8234 100644 (file)
@@ -93,6 +93,81 @@ END_EVENT_TABLE()
 // implementation
 // ===========================================================================
 
+// the grow box has to be implemented as an inactive window, so that nothing can direct
+// the focus to it
+
+class WXDLLIMPEXP_CORE wxBlindPlateWindow : public wxWindow
+{
+public:
+    wxBlindPlateWindow() { Init(); }
+    
+    // Old-style constructor (no default values for coordinates to avoid
+    // ambiguity with the new one)
+    wxBlindPlateWindow(wxWindow *parent,
+            int x, int y, int width, int height,
+            long style = wxTAB_TRAVERSAL | wxNO_BORDER,
+            const wxString& name = wxPanelNameStr)
+    {
+        Init();
+        
+        Create(parent, wxID_ANY, wxPoint(x, y), wxSize(width, height), style, name);
+    }
+    
+    // Constructor
+    wxBlindPlateWindow(wxWindow *parent,
+            wxWindowID winid = wxID_ANY,
+            const wxPoint& pos = wxDefaultPosition,
+            const wxSize& size = wxDefaultSize,
+            long style = wxTAB_TRAVERSAL | wxNO_BORDER,
+            const wxString& name = wxPanelNameStr)
+    {
+        Init();
+        
+        Create(parent, winid, pos, size, style, name);
+    }
+    
+    // Pseudo ctor
+    bool Create(wxWindow *parent,
+                wxWindowID winid = wxID_ANY,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = wxTAB_TRAVERSAL | wxNO_BORDER,
+                const wxString& name = wxPanelNameStr)
+    {
+        if ( !wxWindow::Create(parent, winid, pos, size, style, name) )
+            return false;
+        
+        // so that non-solid background renders correctly under GTK+:
+        SetThemeEnabled(true);
+    }
+    
+    virtual ~wxBlindPlateWindow();
+    
+    virtual bool AcceptsFocus() const
+    {
+        return false;
+    }
+    
+protected:
+    // common part of all ctors
+    void Init()
+    {
+    }
+        
+    DECLARE_DYNAMIC_CLASS_NO_COPY(wxBlindPlateWindow)
+    DECLARE_EVENT_TABLE()
+};
+
+wxBlindPlateWindow::~wxBlindPlateWindow()
+{
+}
+
+IMPLEMENT_DYNAMIC_CLASS(wxBlindPlateWindow, wxWindow)
+
+BEGIN_EVENT_TABLE(wxBlindPlateWindow, wxWindow)
+END_EVENT_TABLE()
+
+
 // ----------------------------------------------------------------------------
  // constructors and such
 // ----------------------------------------------------------------------------
@@ -338,36 +413,33 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant )
     m_peer->SetData<ControlSize>(kControlEntireControl, kControlSizeTag, &size ) ;
 #endif
 
-    wxFont font ;
-
-    wxOSXSystemFont systemFont = wxOSX_SYSTEM_FONT_NORMAL ;
-
+    
     switch ( variant )
     {
         case wxWINDOW_VARIANT_NORMAL :
-            systemFont = wxOSX_SYSTEM_FONT_NORMAL ;
+            static wxFont sysNormal(wxOSX_SYSTEM_FONT_NORMAL);
+            SetFont(sysNormal) ;
             break ;
 
         case wxWINDOW_VARIANT_SMALL :
-            systemFont = wxOSX_SYSTEM_FONT_SMALL ;
+            static wxFont sysSmall(wxOSX_SYSTEM_FONT_SMALL);
+            SetFont(sysSmall) ;
             break ;
 
         case wxWINDOW_VARIANT_MINI :
-            systemFont = wxOSX_SYSTEM_FONT_MINI ;
+            static wxFont sysMini(wxOSX_SYSTEM_FONT_MINI);
+            SetFont(sysMini) ;
             break ;
 
         case wxWINDOW_VARIANT_LARGE :
-            systemFont = wxOSX_SYSTEM_FONT_NORMAL ;
+            static wxFont sysLarge(wxOSX_SYSTEM_FONT_NORMAL);
+            SetFont(sysLarge) ;
             break ;
 
         default:
             wxFAIL_MSG(wxT("unexpected window variant"));
             break ;
     }
-
-    font.CreateSystemFont( systemFont ) ;
-
-    SetFont( font ) ;
 }
 
 void wxWindowMac::MacUpdateControlFont()
@@ -401,6 +473,14 @@ bool wxWindowMac::SetForegroundColour(const wxColour& col )
 
 bool wxWindowMac::SetBackgroundColour(const wxColour& col )
 {
+    if (m_growBox)
+    {
+        if ( m_backgroundColour.Ok() )
+            m_growBox->SetBackgroundColour(m_backgroundColour);
+        else
+            m_growBox->SetBackgroundColour(*wxWHITE);
+    }
+
     if ( !wxWindowBase::SetBackgroundColour(col) && m_hasBgCol )
         return false ;
 
@@ -752,6 +832,9 @@ void wxWindowMac::DoSetToolTip(wxToolTip *tooltip)
 
     if ( m_tooltip )
         m_tooltip->SetWindow(this);
+        
+    if (m_peer)
+        m_peer->SetToolTip(tooltip);
 }
 
 #endif
@@ -897,22 +980,20 @@ wxSize wxWindowMac::DoGetBestSize() const
             r.width =
             r.height = 16 ;
 
-            if ( 0 )
-            {
-            }
 #if wxUSE_SCROLLBAR
-            else if ( IsKindOf( CLASSINFO( wxScrollBar ) ) )
+            if ( IsKindOf( CLASSINFO( wxScrollBar ) ) )
             {
                 r.height = 16 ;
             }
+            else
 #endif
 #if wxUSE_SPINBTN
-            else if ( IsKindOf( CLASSINFO( wxSpinButton ) ) )
+            if ( IsKindOf( CLASSINFO( wxSpinButton ) ) )
             {
                 r.height = 24 ;
             }
-#endif
             else
+#endif
             {
                 // return wxWindowBase::DoGetBestSize() ;
             }
@@ -1060,10 +1141,16 @@ bool wxWindowMac::Show(bool show)
     if ( m_peer )
         m_peer->SetVisibility( show ) ;
 
-    wxShowEvent eventShow(GetId(), show);
-    eventShow.SetEventObject(this);
+#ifdef __WXOSX_IPHONE__
+    // only when there's no native event support 
+    if ( !IsTopLevel() )
+#endif
+    {
+        wxShowEvent eventShow(GetId(), show);
+        eventShow.SetEventObject(this);
     
-    HandleWindowEvent(eventShow);
+        HandleWindowEvent(eventShow);
+    }
     
     return true;
 }
@@ -1082,6 +1169,7 @@ bool wxWindowMac::OSXShowWithEffect(bool show,
 void wxWindowMac::DoEnable(bool enable)
 {
     m_peer->Enable( enable ) ;
+    MacInvalidateBorders();
 }
 
 //
@@ -1526,16 +1614,12 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
         child = node->GetData();
         if (child == NULL)
             continue;
-#if wxUSE_SCROLLBAR
-        if (child == m_vScrollBar)
-            continue;
-        if (child == m_hScrollBar)
-            continue;
-        if (child == m_growBox)
-            continue;
-#endif
+
         if (child->IsTopLevel())
             continue;
+        
+        if ( !IsClientAreaChild(child) )
+            continue;
 
         child->GetPosition( &x, &y );
         child->GetSize( &w, &h );
@@ -1847,6 +1931,7 @@ bool wxWindowMac::MacDoRedraw( long time )
     {
         case wxBG_STYLE_ERASE:
         case wxBG_STYLE_SYSTEM:
+        case wxBG_STYLE_COLOUR:
             {
                 // for the toplevel window this really is the entire area for
                 // all the others only their client area, otherwise they might
@@ -1884,7 +1969,8 @@ bool wxWindowMac::MacDoRedraw( long time )
             wxFAIL_MSG( "unsupported background style" );
     }
 
-    MacPaintGrowBox();
+    // as this is a full window, shouldn't be necessary anymore
+    // MacPaintGrowBox();
 
     // calculate a client-origin version of the update rgn and set
     // m_updateRegion to that
@@ -2063,7 +2149,7 @@ void wxWindowMac::MacCreateScrollBars( long style )
 
         wxPoint gPoint(width - scrlsize, height - scrlsize);
         wxSize gSize(scrlsize, scrlsize);
-        m_growBox = new wxPanel((wxWindow *)this, wxID_ANY, gPoint, gSize, 0);
+        m_growBox = new wxBlindPlateWindow((wxWindow *)this, wxID_ANY, gPoint, gSize, 0);
     }
 
     // because the create does not take into account the client area origin
@@ -2462,6 +2548,7 @@ wxWidgetImpl::wxWidgetImpl( wxWindowMac* peer , bool isRootControl )
     Init();
     m_isRootControl = isRootControl;
     m_wxPeer = peer;
+    m_shouldSendEvents = true;
 }
 
 wxWidgetImpl::wxWidgetImpl()